From 33b3de4e6b757cebbfe4689f808f02f4b83e4d13 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 11 Oct 2023 22:20:22 +0200
Subject: [PATCH] Use links to avoid duplication of item numbers storage

---
 src/dev/ParallelChecker.hpp | 38 +++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)

diff --git a/src/dev/ParallelChecker.hpp b/src/dev/ParallelChecker.hpp
index fa204d134..b19689a63 100644
--- a/src/dev/ParallelChecker.hpp
+++ b/src/dev/ParallelChecker.hpp
@@ -195,6 +195,25 @@ class ParallelChecker
     return table;
   }
 
+  size_t
+  _getConnectivityId(const std::shared_ptr<const IConnectivity>& i_connectivity) const
+  {
+    switch (i_connectivity->dimension()) {
+    case 1: {
+      return dynamic_cast<const Connectivity<1>&>(*i_connectivity).id();
+    }
+    case 2: {
+      return dynamic_cast<const Connectivity<2>&>(*i_connectivity).id();
+    }
+    case 3: {
+      return dynamic_cast<const Connectivity<3>&>(*i_connectivity).id();
+    }
+    default: {
+      throw UnexpectedError("unexpected connectivity dimension");
+    }
+    }
+  }
+
   template <ItemType item_type>
   Array<const int>
   _getItemNumber(const std::shared_ptr<const IConnectivity>& i_connectivity) const
@@ -243,9 +262,20 @@ class ParallelChecker
 
   template <ItemType item_type>
   void
-  _writeItemNumbers(const std::shared_ptr<const IConnectivity> i_connectivity, HighFive::Group group) const
+  _writeItemNumbers(const std::shared_ptr<const IConnectivity> i_connectivity,
+                    HighFive::File file,
+                    HighFive::Group group) const
   {
-    this->_writeArray(group, "numbers", this->_getItemNumber<item_type>(i_connectivity));
+    std::string item_number_path = "/connectivities/" + std::to_string(this->_getConnectivityId(i_connectivity)) + '/' +
+                                   std::string{itemName(item_type)};
+
+    if (not file.exist(item_number_path)) {
+      HighFive::Group item_number_group = file.createGroup(item_number_path);
+      this->_writeArray(item_number_group, "numbers", this->_getItemNumber<item_type>(i_connectivity));
+    }
+
+    HighFive::DataSet item_numbers = file.getDataSet(item_number_path + "/numbers");
+    group.createHardLink("numbers", item_numbers);
   }
 
   template <typename DataType, ItemType item_type>
@@ -358,7 +388,7 @@ class ParallelChecker
 
       this->_writeArray(group, name, item_value.arrayView());
 
-      this->_writeItemNumbers<item_type>(i_connectivity, group);
+      this->_writeItemNumbers<item_type>(i_connectivity, file, group);
 
       ++m_tag;
 
@@ -395,7 +425,7 @@ class ParallelChecker
 
       this->_writeTable(group, name, item_array.tableView());
 
-      this->_writeItemNumbers<item_type>(i_connectivity, group);
+      this->_writeItemNumbers<item_type>(i_connectivity, file, group);
 
       ++m_tag;
 
-- 
GitLab