From ff39e0980d78ce2df041c94dd9cb72c4c0de7173 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 3 Oct 2018 15:25:26 +0200
Subject: [PATCH] Compute and print new node owners

---
 src/mesh/GmshReader.cpp | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index 931285274..3cbbddfdf 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -177,10 +177,28 @@ void GmshReader::_dispatch()
   Partitioner P;
   Array<int> cell_new_owner = broadcast(P.partition(mesh_graph), reader_rank);
 
+  Array<int> node_new_owner(mesh.numberOfNodes());
+  if (commRank() == reader_rank) {
+    const auto& node_to_cell_matrix = mesh.connectivity().nodeToCellMatrix();
+    parallel_for(mesh.numberOfNodes(), PASTIS_LAMBDA(const NodeId& r) {
+        const auto& node_cells = node_to_cell_matrix[r];
+        int new_owner = cell_new_owner[node_cells[0]];
+        for (size_t j=1; j<node_cells.size(); ++j) {
+          const int cell_owner = cell_new_owner[node_cells[j]];
+          if (new_owner < cell_owner) {
+            new_owner = cell_owner;
+          }
+        }
+        node_new_owner[r] = new_owner;
+      });
+  }
+
+  node_new_owner = broadcast(node_new_owner, reader_rank);
+
   for (int i_rank=0; i_rank<commSize(); ++i_rank) {
     if (commRank() == i_rank) {
       size_t cpt=0;
-      std::cout << i_rank << " -> ";
+      std::cout << i_rank << " cells -> ";
       for (size_t i=0; i<cell_new_owner.size(); ++i) {
         if (commRank() == cell_new_owner[i]) {
           std::cout << i << ' ';
@@ -192,6 +210,21 @@ void GmshReader::_dispatch()
     barrier();
   }
 
+  for (int i_rank=0; i_rank<commSize(); ++i_rank) {
+    if (commRank() == i_rank) {
+      size_t cpt=0;
+      std::cout << i_rank << " nodes -> ";
+      for (size_t i=0; i<node_new_owner.size(); ++i) {
+        if (commRank() == node_new_owner[i]) {
+          std::cout << i << ' ';
+          cpt++;
+        }
+      }
+      std::cout << " [" << cpt << "]\n" << std::flush;
+    }
+    barrier();
+  }
+
   Messenger::destroy();
   std::exit(0);
 }
-- 
GitLab