From 147d19c0e5ddd51439796e5d2eaaf47b0c97e31c Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Wed, 10 Mar 2010 07:30:46 +0000 Subject: [PATCH] Introduced stack for subElemMatrices. --- AMDiS/src/ElInfo.cc | 2 ++ AMDiS/src/ElInfo.h | 2 ++ AMDiS/src/ElInfo2d.cc | 29 ++++++++++++++++++----------- AMDiS/src/ProblemVec.cc | 2 ++ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/AMDiS/src/ElInfo.cc b/AMDiS/src/ElInfo.cc index 346d9db2..95970a06 100644 --- a/AMDiS/src/ElInfo.cc +++ b/AMDiS/src/ElInfo.cc @@ -14,6 +14,8 @@ namespace AMDiS { + std::map<unsigned long, mtl::dense2D<double> > ElInfo::subElemMatrices; + ElInfo::ElInfo(Mesh *aMesh) : mesh(aMesh), element(NULL), diff --git a/AMDiS/src/ElInfo.h b/AMDiS/src/ElInfo.h index 2b75dcfd..a60d70b1 100644 --- a/AMDiS/src/ElInfo.h +++ b/AMDiS/src/ElInfo.h @@ -544,6 +544,8 @@ namespace AMDiS { mtl::dense2D<double> subElemCoordsMat_so; public: + static std::map<unsigned long, mtl::dense2D<double> > subElemMatrices; + /** \brief * child_vertex[el_type][child][i] = father's local vertex index of new * vertex i. 4 stands for the newly generated vertex . diff --git a/AMDiS/src/ElInfo2d.cc b/AMDiS/src/ElInfo2d.cc index 44ebec46..9fc6000d 100644 --- a/AMDiS/src/ElInfo2d.cc +++ b/AMDiS/src/ElInfo2d.cc @@ -697,18 +697,25 @@ namespace AMDiS { switch (degree) { case 1: { - mat = mat_d1; - dense2D<double> tmpMat(num_rows(mat), num_rows(mat)); - - for (int i = 0; i < refinementPathLength; i++) { - if (refinementPath & (1 << i)) { - tmpMat = mat_d1_right * mat; - mat = tmpMat; - } else { - tmpMat = mat_d1_left * mat; - mat = tmpMat; + if (subElemMatrices.count(refinementPath) > 0) { + mat = subElemMatrices[refinementPath]; + return; } - } + + mat = mat_d1; + dense2D<double> tmpMat(num_rows(mat), num_rows(mat)); + + for (int i = 0; i < refinementPathLength; i++) { + if (refinementPath & (1 << i)) { + tmpMat = mat_d1_right * mat; + mat = tmpMat; + } else { + tmpMat = mat_d1_left * mat; + mat = tmpMat; + } + } + + subElemMatrices[refinementPath] = mat; } break; default: diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc index 9816d17f..db21cd06 100644 --- a/AMDiS/src/ProblemVec.cc +++ b/AMDiS/src/ProblemVec.cc @@ -627,6 +627,8 @@ namespace AMDiS { // printOpenmpTraverseInfo(this, true); + // std::cout << "ElInfo = " << ElInfo::subElemMatrices.size() << std::endl; + clock_t first = clock(); #ifdef _OPENMP double wtime = omp_get_wtime(); -- GitLab