From 39fb4a3fc9db76f9d76379acf987530d8aed6597 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Mon, 4 Mar 2019 12:42:40 +0100
Subject: [PATCH] Fix in Connectivity: face is reversed in cell info

'face of cell is reversed' info was not computed during dispatching, thus
ConnectivityDescriptor was not correct
---
 src/mesh/GmshReader.cpp | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index 6f3d10539..24dc24a4e 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -803,6 +803,41 @@ void GmshReader::_dispatch()
       }
     }
 
+    std::vector<Array<bool>> cell_face_is_reversed_to_send_by_proc(parallel::size());
+    {
+      const auto& cell_face_is_reversed = mesh.connectivity().cellFaceIsReversed();
+      for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
+        std::vector<bool> face_is_reversed_by_cell_vector;
+        for (size_t j=0; j<cell_list_to_send_by_proc[i_rank].size(); ++j) {
+          const CellId& cell_id = cell_list_to_send_by_proc[i_rank][j];
+          const auto& face_is_reversed = cell_face_is_reversed.itemValues(cell_id);
+          for (size_t L=0; L<face_is_reversed.size(); ++L) {
+            face_is_reversed_by_cell_vector.push_back(face_is_reversed[L]);
+          }
+        }
+        cell_face_is_reversed_to_send_by_proc[i_rank] = convert_to_array(face_is_reversed_by_cell_vector);
+      }
+    }
+
+    std::vector<Array<bool>> recv_cell_face_is_reversed_by_proc(parallel::size());
+    for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
+      recv_cell_face_is_reversed_by_proc[i_rank]
+          = Array<bool>(sum(recv_number_of_face_per_cell_by_proc[i_rank]));
+    }
+
+    parallel::exchange(cell_face_is_reversed_to_send_by_proc, recv_cell_face_is_reversed_by_proc);
+
+    for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
+      int l=0;
+      for (size_t i=0; i<recv_cell_number_by_proc[i_rank].size(); ++i) {
+        std::vector<bool> face_is_reversed_vector;
+        for (int k=0; k<recv_number_of_face_per_cell_by_proc[i_rank][i]; ++k) {
+          face_is_reversed_vector.push_back(recv_cell_face_is_reversed_by_proc[i_rank][l++]);
+        }
+        new_descriptor.cell_face_is_reversed_vector.emplace_back(face_is_reversed_vector);
+      }
+    }
+
     std::vector<Array<const FaceId>> send_face_id_by_proc(parallel::size());
     for (size_t i_rank=0; i_rank<parallel::size(); ++i_rank) {
       Array<bool> tag(mesh.numberOfFaces());
-- 
GitLab