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