From 91289a352c8c5a3a0394e070fabb70c766abdfd8 Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Thu, 24 May 2012 13:21:28 +0000 Subject: [PATCH] Fixed partitioning issue with empty partitiones. --- AMDiS/src/parallel/MeshDistributor.cc | 4 ++++ AMDiS/src/parallel/ZoltanPartitioner.cc | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc index 7823e1f1..fdc0e96b 100644 --- a/AMDiS/src/parallel/MeshDistributor.cc +++ b/AMDiS/src/parallel/MeshDistributor.cc @@ -1283,6 +1283,10 @@ namespace AMDiS { return; } + TEST_EXIT_DBG(!(partitioner->getSendElements().size() == mesh->getMacroElements().size() && + partitioner->getRecvElements().size() == 0)) + ("Partition is empty, should not happen!\n"); + // === Create map that maps macro element indices to pointers to the === // === macro elements. === diff --git a/AMDiS/src/parallel/ZoltanPartitioner.cc b/AMDiS/src/parallel/ZoltanPartitioner.cc index 77ba7f9b..cce8a3a3 100644 --- a/AMDiS/src/parallel/ZoltanPartitioner.cc +++ b/AMDiS/src/parallel/ZoltanPartitioner.cc @@ -97,6 +97,13 @@ namespace AMDiS { recvElements.clear(); sendElements.clear(); + int createEmptyPartition = + (mesh->getMacroElements().size() == nExportEls && nImportEls == 0); + mpi::globalMax(createEmptyPartition); + + if (createEmptyPartition > 0) + err = ZOLTAN_FATAL; + if (err == ZOLTAN_OK && changes != 0) { if (nImportEls > 0) { for (int i = 0; i < nImportEls; i++) { -- GitLab