From 09c0f98e51c67202621db417489aea258dada8b3 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Tue, 17 Oct 2023 23:45:30 +0200
Subject: [PATCH] Fix connectivity id checking

---
 src/mesh/Connectivity.cpp           |  4 +---
 src/mesh/ConnectivityDispatcher.cpp | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp
index c55ccd899..bd1e0d85b 100644
--- a/src/mesh/Connectivity.cpp
+++ b/src/mesh/Connectivity.cpp
@@ -9,9 +9,7 @@
 
 template <size_t Dimension>
 Connectivity<Dimension>::Connectivity() : m_id{GlobalVariableManager::instance().getAndIncrementConnectivityId()}
-{
-  Assert(parallel::allReduceMin(m_id) == m_id, "Parallel connectivity with different ids");
-}
+{}
 
 template <size_t Dimension>
 void
diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index 797ac6cff..dde1f930d 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -685,6 +685,13 @@ template <int Dimension>
 ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType& connectivity)
   : m_connectivity(connectivity)
 {
+  {
+    Array connectivity_id_list = parallel::allGather(connectivity.id());
+    if (min(connectivity_id_list) != max(connectivity_id_list)) {
+      throw UnexpectedError("connectivity ids diverged in parallel");
+    }
+  }
+
   this->_buildNewOwner<ItemType::cell>();
   if constexpr (Dimension > 1) {
     this->_buildNewOwner<ItemType::face>();
@@ -745,6 +752,13 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
   this->_buildItemReferenceList<ItemType::node>();
 
   m_dispatched_connectivity = ConnectivityType::build(m_new_descriptor);
+
+  {
+    Array connectivity_id_list = parallel::allGather(m_dispatched_connectivity->id());
+    if (min(connectivity_id_list) != max(connectivity_id_list)) {
+      throw UnexpectedError("connectivity ids diverged in parallel");
+    }
+  }
 }
 
 template ConnectivityDispatcher<1>::ConnectivityDispatcher(const ConnectivityType&);
-- 
GitLab