From af1fa0f8303e09f0a0946698c5cae201f75c3c69 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Fri, 5 Apr 2019 12:56:41 +0200
Subject: [PATCH] Continue clean-up

Mainly replace _get-like functions by _build-like calls. This removes many
unnecessary references.
---
 src/mesh/ConnectivityDispatcher.cpp | 104 +++++++++++-----------------
 src/mesh/ConnectivityDispatcher.hpp |  14 ++--
 2 files changed, 46 insertions(+), 72 deletions(-)

diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index 8406ca9e2..48565b810 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -53,7 +53,6 @@ _buildItemToExchangeLists()
 {
   this->_buildItemListToSend<item_type>();
   this->_buildNumberOfItemToExchange<item_type>();
-
   if constexpr (item_type == ItemType::cell) {
     this->_buildCellNumberIdMap();
   }
@@ -195,13 +194,13 @@ _gatherFrom(const SubItemValuePerItem<DataType, ItemOfItem, ConnectivityPtr>& da
     data_to_send_by_proc[i_rank] = convert_to_array(data_by_item_vector);
   }
 
-  const auto& number_of_item_per_item_by_proc =
-      this->_dispatchedInfo<ItemOfItem>().m_recv_number_of_item_per_item_by_proc;
+  const auto& number_of_sub_item_per_item_to_recv_by_proc =
+      this->_dispatchedInfo<ItemOfItem>().m_number_of_sub_item_per_item_to_recv_by_proc;
 
   std::vector<Array<MutableDataType>> recv_data_to_gather_by_proc(parallel::size());
   for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
     recv_data_to_gather_by_proc[i_rank]
-        = Array<MutableDataType>(sum(number_of_item_per_item_by_proc[i_rank]));
+        = Array<MutableDataType>(sum(number_of_sub_item_per_item_to_recv_by_proc[i_rank]));
   }
 
   parallel::exchange(data_to_send_by_proc, recv_data_to_gather_by_proc);
@@ -212,7 +211,7 @@ _gatherFrom(const SubItemValuePerItem<DataType, ItemOfItem, ConnectivityPtr>& da
   for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
     int l=0;
     for (size_t i=0; i<item_list_to_recv_size_by_proc[i_rank]; ++i) {
-      Array<MutableDataType> data_vector(number_of_item_per_item_by_proc[i_rank][i]);
+      Array<MutableDataType> data_vector(number_of_sub_item_per_item_to_recv_by_proc[i_rank][i]);
       for (size_t k=0; k<data_vector.size(); ++k) {
         data_vector[k] = recv_data_to_gather_by_proc[i_rank][l++];
       }
@@ -241,16 +240,18 @@ _buildCellNumberIdMap()
 template <int Dimension>
 template <typename ItemOfItemT>
 void
-ConnectivityDispatcher<Dimension>::
-_buildSubItemNumberToIdMap(const std::vector<Array<const int>>& recv_cell_sub_item_number_by_proc)
+ConnectivityDispatcher<Dimension>::_buildSubItemNumberToIdMap()
 {
   static_assert(ItemOfItemT::item_type == ItemType::cell, "Dispatcher requires to be built using cell as master entities");
 
+  const auto& cell_sub_item_number_to_recv_by_proc
+      = this->_dispatchedInfo<ItemOfItemT>().m_sub_item_of_item_numbers_to_recv_by_proc;
+
   auto& sub_item_number_id_map = this->_dispatchedInfo<ItemOfItemT::sub_item_type>().m_number_to_id_map;
   for (size_t i_rank=0; i_rank<parallel::size(); ++i_rank) {
     int sub_item_id=0;
-    for (size_t i=0; i<recv_cell_sub_item_number_by_proc[i_rank].size(); ++i) {
-      int sub_item_number = recv_cell_sub_item_number_by_proc[i_rank][i];
+    for (size_t i=0; i<cell_sub_item_number_to_recv_by_proc[i_rank].size(); ++i) {
+      int sub_item_number = cell_sub_item_number_to_recv_by_proc[i_rank][i];
       auto [iterator, inserted] = sub_item_number_id_map.insert(std::make_pair(sub_item_number, sub_item_id));
       if (inserted) sub_item_id++;
     }
@@ -259,8 +260,8 @@ _buildSubItemNumberToIdMap(const std::vector<Array<const int>>& recv_cell_sub_it
 
 template <int Dimension>
 template <typename SubItemOfItemT>
-std::vector<Array<const int>>
-ConnectivityDispatcher<Dimension>::_getRecvNumberOfSubItemPerItemByProc()
+void
+ConnectivityDispatcher<Dimension>::_buildNumberOfSubItemPerItemToRecvByProc()
 {
   const auto& item_to_sub_item_matrix
       = m_connectivity.template getItemToItemMatrix<SubItemOfItemT::item_type,
@@ -272,14 +273,15 @@ ConnectivityDispatcher<Dimension>::_getRecvNumberOfSubItemPerItemByProc()
   parallel_for(number_of_sub_item_per_item.size(), PASTIS_LAMBDA(const ItemId& j){
       number_of_sub_item_per_item[j] = item_to_sub_item_matrix[j].size();
     });
-  return this->exchange(number_of_sub_item_per_item);
+
+  this->_dispatchedInfo<SubItemOfItemT>().m_number_of_sub_item_per_item_to_recv_by_proc =
+      this->exchange(number_of_sub_item_per_item);
 }
 
 template <int Dimension>
 template <typename SubItemOfItemT>
-std::vector<Array<const int>>
-ConnectivityDispatcher<Dimension>::
-_getRecvItemSubItemNumberingByProc(const std::vector<Array<const int>>& recv_number_of_sub_item_per_item_by_proc)
+void
+ConnectivityDispatcher<Dimension>::_buildSubItemNumbersToRecvByProc()
 {
   std::vector<Array<const int>> item_sub_item_numbering_to_send_by_proc =
       [&] () {
@@ -312,10 +314,13 @@ _getRecvItemSubItemNumberingByProc(const std::vector<Array<const int>>& recv_num
         return item_sub_item_numbering_to_send_by_proc;
       } ();
 
+  const auto& number_of_sub_item_per_item_to_recv_by_proc =
+      this->_dispatchedInfo<SubItemOfItemT>().m_number_of_sub_item_per_item_to_recv_by_proc;
+
   std::vector<Array<int>> recv_item_sub_item_numbering_by_proc(parallel::size());
   for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
     recv_item_sub_item_numbering_by_proc[i_rank]
-        = Array<int>(sum(recv_number_of_sub_item_per_item_by_proc[i_rank]));
+        = Array<int>(sum(number_of_sub_item_per_item_to_recv_by_proc[i_rank]));
   }
   parallel::exchange(item_sub_item_numbering_to_send_by_proc, recv_item_sub_item_numbering_by_proc);
 
@@ -323,14 +328,15 @@ _getRecvItemSubItemNumberingByProc(const std::vector<Array<const int>>& recv_num
   for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
     const_recv_item_sub_item_numbering_by_proc[i_rank] = recv_item_sub_item_numbering_by_proc[i_rank];
   }
-  return const_recv_item_sub_item_numbering_by_proc;
+
+  this->_dispatchedInfo<SubItemOfItemT>().m_sub_item_of_item_numbers_to_recv_by_proc
+      = const_recv_item_sub_item_numbering_by_proc;
 }
 
 template <int Dimension>
 template <typename ItemOfItemT>
 void
-ConnectivityDispatcher<Dimension>::
-_buildItemToItemDescriptor()
+ConnectivityDispatcher<Dimension>::_buildItemToSubItemDescriptor()
 {
   constexpr ItemType item_type = ItemOfItemT::item_type;
   constexpr ItemType sub_item_type = ItemOfItemT::sub_item_type;
@@ -338,20 +344,20 @@ _buildItemToItemDescriptor()
   const auto& item_list_to_recv_size_by_proc =
       this->_dispatchedInfo<item_type>().m_list_to_recv_size_by_proc;
 
-  const auto& recv_number_of_item_per_item_by_proc =
-      this->_dispatchedInfo<ItemOfItemT>().m_recv_number_of_item_per_item_by_proc;
+  const auto& number_of_sub_item_per_item_to_recv_by_proc =
+      this->_dispatchedInfo<ItemOfItemT>().m_number_of_sub_item_per_item_to_recv_by_proc;
 
   const auto& sub_item_number_id_map =
       this->_dispatchedInfo<sub_item_type>().m_number_to_id_map;
 
   const auto& recv_item_of_item_numbers_by_proc =
-      this->_dispatchedInfo<ItemOfItemT>().m_recv_item_of_item_numbers_by_proc;
+      this->_dispatchedInfo<ItemOfItemT>().m_sub_item_of_item_numbers_to_recv_by_proc;
 
   for (size_t i_rank=0; i_rank < parallel::size(); ++i_rank) {
     int l=0;
     for (size_t i=0; i<item_list_to_recv_size_by_proc[i_rank]; ++i) {
       std::vector<unsigned int> sub_item_vector;
-      for (int k=0; k<recv_number_of_item_per_item_by_proc[i_rank][i]; ++k) {
+      for (int k=0; k<number_of_sub_item_per_item_to_recv_by_proc[i_rank][i]; ++k) {
         const auto& searched_sub_item_id =
             sub_item_number_id_map.find(recv_item_of_item_numbers_by_proc[i_rank][l++]);
         Assert(searched_sub_item_id != sub_item_number_id_map.end());
@@ -411,44 +417,22 @@ void
 ConnectivityDispatcher<Dimension>::_dispatchFaces()
 {
   if constexpr (Dimension>1) {
-    this->_dispatchedInfo<FaceOfCell>().m_recv_number_of_item_per_item_by_proc =
-        _getRecvNumberOfSubItemPerItemByProc<FaceOfCell>();
-
-    {
-      const auto& recv_number_of_face_per_cell_by_proc =
-          this->_dispatchedInfo<FaceOfCell>().m_recv_number_of_item_per_item_by_proc;
-
-      std::vector<Array<const int>>& recv_cell_face_numbering_by_proc
-          = this->_dispatchedInfo<FaceOfCell>().m_recv_item_of_item_numbers_by_proc;
-
-      recv_cell_face_numbering_by_proc =
-          this->_getRecvItemSubItemNumberingByProc<FaceOfCell>(recv_number_of_face_per_cell_by_proc);
-
-      this->_buildSubItemNumberToIdMap<FaceOfCell>(recv_cell_face_numbering_by_proc);
-    }
-
+    this->_buildNumberOfSubItemPerItemToRecvByProc<FaceOfCell>();
+    this->_buildSubItemNumbersToRecvByProc<FaceOfCell>();
+    this->_buildSubItemNumberToIdMap<FaceOfCell>();
     this->_buildItemToExchangeLists<ItemType::face>();
 
     this->_gatherFrom(m_connectivity.template number<ItemType::face>(), m_new_descriptor.face_number_vector);
 
-    this->_buildItemToItemDescriptor<FaceOfCell>();
+    this->_buildItemToSubItemDescriptor<FaceOfCell>();
 
     this->_gatherFrom(m_connectivity.cellFaceIsReversed(), m_new_descriptor.cell_face_is_reversed_vector);
 
     this->_gatherFrom(this->_dispatchedInfo<ItemType::face>().m_new_owner, m_new_descriptor.face_owner_vector);
 
-    {
-      auto& recv_number_of_node_per_face_by_proc =
-          this->_dispatchedInfo<NodeOfFace>().m_recv_number_of_item_per_item_by_proc;
-
-      recv_number_of_node_per_face_by_proc =
-          _getRecvNumberOfSubItemPerItemByProc<NodeOfFace>();
-
-      this->_dispatchedInfo<NodeOfFace>().m_recv_item_of_item_numbers_by_proc
-          = this->_getRecvItemSubItemNumberingByProc<NodeOfFace>(recv_number_of_node_per_face_by_proc);
-
-      this->_buildItemToItemDescriptor<NodeOfFace>();
-    }
+    this->_buildNumberOfSubItemPerItemToRecvByProc<NodeOfFace>();
+    this->_buildSubItemNumbersToRecvByProc<NodeOfFace>();
+    this->_buildItemToSubItemDescriptor<NodeOfFace>();
 
     // Getting references
     Array<const size_t> number_of_ref_face_list_per_proc
@@ -624,21 +608,13 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
 
   this->_buildItemToExchangeLists<ItemType::cell>();
 
-  auto& recv_number_of_node_per_cell_by_proc=
-      this->_dispatchedInfo<NodeOfCell>().m_recv_number_of_item_per_item_by_proc;
-
-  recv_number_of_node_per_cell_by_proc
-      = this->_getRecvNumberOfSubItemPerItemByProc<NodeOfCell>();
-
-  auto& recv_cell_node_numbering_by_proc =
-      this->_dispatchedInfo<NodeOfCell>().m_recv_item_of_item_numbers_by_proc;
+  this->_buildNumberOfSubItemPerItemToRecvByProc<NodeOfCell>();
 
-  recv_cell_node_numbering_by_proc
-      = this->_getRecvItemSubItemNumberingByProc<NodeOfCell>(recv_number_of_node_per_cell_by_proc);
+  this->_buildSubItemNumbersToRecvByProc<NodeOfCell>();
 
   this->_gatherFrom(m_connectivity.template number<ItemType::cell>(), m_new_descriptor.cell_number_vector);
 
-  this->_buildSubItemNumberToIdMap<NodeOfCell>(recv_cell_node_numbering_by_proc);
+  this->_buildSubItemNumberToIdMap<NodeOfCell>();
 
   this->_buildItemToExchangeLists<ItemType::node>();
 
@@ -649,7 +625,7 @@ ConnectivityDispatcher<Dimension>::ConnectivityDispatcher(const ConnectivityType
   this->_gatherFrom(m_connectivity.template number<ItemType::node>(), m_new_descriptor.node_number_vector);
   this->_gatherFrom(this->_dispatchedInfo<ItemType::node>().m_new_owner, m_new_descriptor.node_owner_vector);
 
-  this->_buildItemToItemDescriptor<NodeOfCell>();
+  this->_buildItemToSubItemDescriptor<NodeOfCell>();
 
   this->_dispatchFaces();
 
diff --git a/src/mesh/ConnectivityDispatcher.hpp b/src/mesh/ConnectivityDispatcher.hpp
index a893c8151..c70b1c69e 100644
--- a/src/mesh/ConnectivityDispatcher.hpp
+++ b/src/mesh/ConnectivityDispatcher.hpp
@@ -68,8 +68,8 @@ class ConnectivityDispatcher
   template <typename ItemToItem>
   struct DispatchedItemOfItemInfo
   {
-    std::vector<Array<const int>> m_recv_number_of_item_per_item_by_proc;
-    std::vector<Array<const int>> m_recv_item_of_item_numbers_by_proc;
+    std::vector<Array<const int>> m_number_of_sub_item_per_item_to_recv_by_proc;
+    std::vector<Array<const int>> m_sub_item_of_item_numbers_to_recv_by_proc;
   };
 
   DispatchedItemOfItemInfo<NodeOfCell> m_dispatched_node_of_cell_info;
@@ -163,7 +163,7 @@ class ConnectivityDispatcher
   void _buildCellNumberIdMap();
 
   template <typename ItemOfItemT>
-  void _buildSubItemNumberToIdMap(const std::vector<Array<const int>>& recv_cell_node_number_by_proc);
+  void _buildSubItemNumberToIdMap();
 
   template <ItemType item_type>
   void _buildItemToExchangeLists();
@@ -172,7 +172,7 @@ class ConnectivityDispatcher
   void _buildNumberOfItemToExchange();
 
   template <typename ItemOfItemT>
-  void _buildItemToItemDescriptor();
+  void _buildItemToSubItemDescriptor();
 
   void _dispatchFaces();
 
@@ -185,12 +185,10 @@ class ConnectivityDispatcher
                    std::vector<Array<std::remove_const_t<DataType>>>& gathered_vector);
 
   template <typename SubItemOfItemT>
-  std::vector<Array<const int>>
-  _getRecvNumberOfSubItemPerItemByProc();
+  void _buildNumberOfSubItemPerItemToRecvByProc();
 
   template <typename SubItemOfItemT>
-  std::vector<Array<const int>>
-  _getRecvItemSubItemNumberingByProc(const std::vector<Array<const int>>& recv_number_of_sub_item_per_item_by_proc);
+  void _buildSubItemNumbersToRecvByProc();
 
   template <ItemType item_type>
   void _buildRecvItemIdCorrespondanceByProc();
-- 
GitLab