diff --git a/AMDiS/src/parallel/ElementObjectDatabase.cc b/AMDiS/src/parallel/ElementObjectDatabase.cc index 1554531a4afb81af6a2efcf71aad6c200b245bee..7f6cc65c7af950bb71c3ad5bfeb94318c9f494fd 100644 --- a/AMDiS/src/parallel/ElementObjectDatabase.cc +++ b/AMDiS/src/parallel/ElementObjectDatabase.cc @@ -399,11 +399,7 @@ namespace AMDiS { if (it2->elIndex > vertexInRank[it->first][elementInRank].elIndex) vertexInRank[it->first][elementInRank] = *it2; - for (int level = 0; level < nLevel; level++) { - int levelId = levelData.getLevelId(level, elementInRank); - vertexOwner[it->first][level] = - std::max(vertexOwner[it->first][level], levelId); - } + vertexOwner[it->first] = std::max(vertexOwner[it->first], elementInRank); ranksInLevel[0].insert(elementInRank); for (int level = 1; level < nLevel; level++) @@ -434,11 +430,7 @@ namespace AMDiS { if (it2->elIndex > edgeInRank[it->first][elementInRank].elIndex) edgeInRank[it->first][elementInRank] = *it2; - for (int level = 0; level < nLevel; level++) { - int levelId = levelData.getLevelId(level, elementInRank); - edgeOwner[it->first][level] = - std::max(edgeOwner[it->first][level], levelId); - } + edgeOwner[it->first] = std::max(edgeOwner[it->first], elementInRank); ranksInLevel[0].insert(elementInRank); for (int level = 1; level < nLevel; level++) @@ -469,11 +461,7 @@ namespace AMDiS { if (it2->elIndex > faceInRank[it->first][elementInRank].elIndex) faceInRank[it->first][elementInRank] = *it2; - for (int level = 0; level < nLevel; level++) { - int levelId = levelData.getLevelId(level, elementInRank); - faceOwner[it->first][level] = - std::max(faceOwner[it->first][level], levelId); - } + faceOwner[it->first] = std::max(faceOwner[it->first], elementInRank); ranksInLevel[0].insert(elementInRank); for (int level = 1; level < nLevel; level++) diff --git a/AMDiS/src/parallel/ElementObjectDatabase.h b/AMDiS/src/parallel/ElementObjectDatabase.h index 96164cb1ec37146b824891a327f34e2ebf88f3b2..051e57bc3cb3988f2b9452bcae2928818e113cdc 100644 --- a/AMDiS/src/parallel/ElementObjectDatabase.h +++ b/AMDiS/src/parallel/ElementObjectDatabase.h @@ -259,17 +259,17 @@ namespace AMDiS { /// Returns the rank owner of the current iterator position. - int getIterateOwner(int level) + int getIterateOwner() { switch (iterGeoPos) { case VERTEX: - return vertexOwner[vertexIter->first][level]; + return vertexOwner[vertexIter->first]; break; case EDGE: - return edgeOwner[edgeIter->first][level]; + return edgeOwner[edgeIter->first]; break; case FACE: - return faceOwner[faceIter->first][level]; + return faceOwner[faceIter->first]; break; default: ERROR_EXIT("Should not happen!\n"); @@ -301,21 +301,21 @@ namespace AMDiS { } /// Returns the rank owner of a vertex DOF. - int getOwner(DegreeOfFreedom vertex, int level) + int getOwner(DegreeOfFreedom vertex) { - return vertexOwner[vertex][level]; + return vertexOwner[vertex]; } /// Returns the rank owner of an edge. - int getOwner(DofEdge edge, int level) + int getOwner(DofEdge edge) { - return edgeOwner[edge][level]; + return edgeOwner[edge]; } /// Returns the rank owner of an face. int getOwner(DofFace face, int level) { - return faceOwner[face][level]; + return faceOwner[face]; } @@ -562,17 +562,14 @@ namespace AMDiS { /// Maps to an element object the corresponding face. map<ElementObjectData, DofFace> faceLocalMap; - /// Maps from level to rank number - typedef map<int, int> LevelRank; - /// Defines for all vertex DOFs the rank that ownes this vertex DOF. - map<DegreeOfFreedom, LevelRank> vertexOwner; + map<DegreeOfFreedom, int> vertexOwner; /// Defines for all edges the rank that ownes this edge. - map<DofEdge, LevelRank> edgeOwner; + map<DofEdge, int> edgeOwner; /// Defines for all faces the rank that ownes this face. - map<DofFace, LevelRank> faceOwner; + map<DofFace, int> faceOwner; map<DegreeOfFreedom, int> vertexMaxLevel; diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc index ea6040ea03267eed17dbbbe324883bc9ce4a936f..46df2f1ba7ca4d79271921d7689569f1860ceb77 100644 --- a/AMDiS/src/parallel/MeshDistributor.cc +++ b/AMDiS/src/parallel/MeshDistributor.cc @@ -847,6 +847,8 @@ namespace AMDiS { levelData.init(neighbours); + MSG("INIT MESH LEVEL %d\n", levelData.getLevelNumber()); + bool multiLevelTest = false; Parameters::get("parallel->multi level test", multiLevelTest); if (multiLevelTest) { @@ -1590,7 +1592,7 @@ namespace AMDiS { if (!(objData.count(mpiRank) && objData.size() > 1)) continue; - int owner = elObjDb.getIterateOwner(0); + int owner = elObjDb.getIterateOwner(); ElementObjectData& rankBoundEl = objData[mpiRank]; AtomicBoundary bound; diff --git a/AMDiS/src/parallel/MeshLevelData.cc b/AMDiS/src/parallel/MeshLevelData.cc index e0170a9de5616983e5ca8a6f5f0646eb376da735..cea8577b1dca347f86d99265c757edd46f3e1aed 100644 --- a/AMDiS/src/parallel/MeshLevelData.cc +++ b/AMDiS/src/parallel/MeshLevelData.cc @@ -19,6 +19,13 @@ namespace AMDiS { using namespace std; + MeshLevelData::MeshLevelData() + { + std::set<int> neighbours; + init(neighbours); + } + + void MeshLevelData::init(std::set<int> &neighbourRanks) { levelRanks.resize(1); diff --git a/AMDiS/src/parallel/MeshLevelData.h b/AMDiS/src/parallel/MeshLevelData.h index 0bb461756e455a665ffed8030c1be4b57d4e2fa0..babd55106095def445c4d49faaa209c81e4249c1 100644 --- a/AMDiS/src/parallel/MeshLevelData.h +++ b/AMDiS/src/parallel/MeshLevelData.h @@ -37,9 +37,7 @@ namespace AMDiS { class MeshLevelData { public: - MeshLevelData() - : nLevel(0) - {} + MeshLevelData(); void init(std::set<int> &neighbourRanks); diff --git a/AMDiS/src/parallel/SubDomainSolver.cc b/AMDiS/src/parallel/SubDomainSolver.cc index 9d0f7a879b3a8a87f19ebbc518b3208d3c021382..366ccb4ba0163e19c34550d2e3ef711d86106716 100644 --- a/AMDiS/src/parallel/SubDomainSolver.cc +++ b/AMDiS/src/parallel/SubDomainSolver.cc @@ -266,7 +266,11 @@ namespace AMDiS { { FUNCNAME("SubDomainSolver::solveGlobal()"); - ERROR_EXIT("BLUB!\n"); + int ml = 0; + Parameters::get("parallel->multi level test", ml); + + if (ml > 0) + ERROR_EXIT("BLUB!\n"); Vec tmp; VecCreateSeq(PETSC_COMM_SELF, interiorMap->getRankDofs(level), &tmp);