From 2ee0f634ca63d8ea9064cbc5e58430230b55e9bc Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 22 Jul 2020 19:02:53 +0200
Subject: [PATCH] Begin to use item id to item id maps to build diamond mesh

---
 src/mesh/DiamondDualConnectivityBuilder.cpp | 32 +++++++++++++++------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/src/mesh/DiamondDualConnectivityBuilder.cpp b/src/mesh/DiamondDualConnectivityBuilder.cpp
index 32c9a140b..666eda055 100644
--- a/src/mesh/DiamondDualConnectivityBuilder.cpp
+++ b/src/mesh/DiamondDualConnectivityBuilder.cpp
@@ -22,22 +22,38 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor(const Connec
   const size_t primal_number_of_faces = primal_connectivity.numberOfFaces();
   const size_t primal_number_of_cells = primal_connectivity.numberOfCells();
 
+  const auto& primal_node_number = primal_connectivity.nodeNumber();
+  const auto& primal_cell_number = primal_connectivity.cellNumber();
+
   const size_t diamond_number_of_nodes = primal_number_of_cells + primal_number_of_nodes;
 
-  diamond_descriptor.node_number_vector.resize(diamond_number_of_nodes);
+  {
+    m_primal_node_to_dual_node_map = NodeIdToNodeIdMap{primal_number_of_nodes};
 
-  const auto& primal_node_number = primal_connectivity.nodeNumber();
+    NodeId diamond_node_id = 0;
+    for (NodeId primal_node_id = 0; primal_node_id < primal_connectivity.numberOfNodes(); ++primal_node_id) {
+      m_primal_node_to_dual_node_map[primal_node_id] = std::make_pair(primal_node_id, diamond_node_id++);
+    }
 
-  for (NodeId primal_node_id = 0; primal_node_id < primal_connectivity.numberOfNodes(); ++primal_node_id) {
-    diamond_descriptor.node_number_vector[primal_node_id] = primal_node_number[primal_node_id];
+    m_primal_cell_to_dual_node_map = CellIdToNodeIdMap{primal_number_of_cells};
+    for (CellId primal_cell_id = 0; primal_cell_id < primal_connectivity.numberOfCells(); ++primal_cell_id) {
+      m_primal_cell_to_dual_node_map[primal_cell_id] = std::make_pair(primal_cell_id, diamond_node_id++);
+    }
   }
 
-  const auto& primal_cell_number = primal_connectivity.cellNumber();
+  diamond_descriptor.node_number_vector.resize(diamond_number_of_nodes);
+
+  for (size_t i = 0; i < m_primal_node_to_dual_node_map.size(); ++i) {
+    const auto [primal_node_id, diamond_dual_node_id] = m_primal_node_to_dual_node_map[i];
+
+    diamond_descriptor.node_number_vector[diamond_dual_node_id] = primal_node_number[primal_node_id];
+  }
 
   const size_t cell_number_shift = max(primal_node_number) + 1;
+  for (size_t i = 0; i < m_primal_cell_to_dual_node_map.size(); ++i) {
+    const auto [primal_cell_id, diamond_dual_node_id] = m_primal_cell_to_dual_node_map[i];
 
-  for (CellId primal_cell_id = 0; primal_cell_id < primal_number_of_cells; ++primal_cell_id) {
-    diamond_descriptor.node_number_vector[primal_number_of_nodes + primal_cell_id] =
+    diamond_descriptor.node_number_vector[diamond_dual_node_id] =
       primal_cell_number[primal_cell_id] + cell_number_shift;
   }
 
@@ -166,8 +182,6 @@ DiamondDualConnectivityBuilder::_buildDiamondConnectivityDescriptor<1>(const Con
 
   const size_t diamond_number_of_nodes = 2 * primal_number_of_nodes - primal_number_of_cells;
 
-  diamond_descriptor.node_number_vector.resize(diamond_number_of_nodes);
-
   const size_t diamond_number_of_cells = primal_number_of_faces;
   const size_t number_of_kept_nodes    = 2 * (diamond_number_of_nodes - diamond_number_of_cells);
 
-- 
GitLab