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