From e1dee840cd5a7e9b70d69006b6f47a1bab6c249d Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Sun, 2 Feb 2025 22:12:57 +0100
Subject: [PATCH] Add checkpoint/resume mechanism for partitioner library

---
 src/utils/checkpointing/Checkpoint.cpp            | 11 +++++++++--
 .../checkpointing/PartitionerOptionsHFType.hpp    | 15 +++++++++++++++
 src/utils/checkpointing/Resume.cpp                |  8 ++++++++
 3 files changed, 32 insertions(+), 2 deletions(-)
 create mode 100644 src/utils/checkpointing/PartitionerOptionsHFType.hpp

diff --git a/src/utils/checkpointing/Checkpoint.cpp b/src/utils/checkpointing/Checkpoint.cpp
index ed56dcb83..ebef0dddd 100644
--- a/src/utils/checkpointing/Checkpoint.cpp
+++ b/src/utils/checkpointing/Checkpoint.cpp
@@ -4,8 +4,6 @@
 
 #ifdef PUGS_HAS_HDF5
 
-#include <algebra/EigenvalueSolverOptions.hpp>
-#include <algebra/LinearSolverOptions.hpp>
 #include <dev/ParallelChecker.hpp>
 #include <language/ast/ASTExecutionStack.hpp>
 #include <language/utils/ASTCheckpointsInfo.hpp>
@@ -25,6 +23,7 @@
 #include <utils/checkpointing/EigenvalueSolverOptionsHFType.hpp>
 #include <utils/checkpointing/LinearSolverOptionsHFType.hpp>
 #include <utils/checkpointing/ParallelCheckerHFType.hpp>
+#include <utils/checkpointing/PartitionerOptionsHFType.hpp>
 #include <utils/checkpointing/ResumingManager.hpp>
 
 #include <iostream>
@@ -131,6 +130,14 @@ checkpoint()
 
       eigenvalue_solver_options_default_group.createAttribute("library", default_options.library());
     }
+    {
+      HighFive::Group partitioner_options_default_group =
+        checkpoint.createGroup("singleton/partitioner_options_default");
+
+      const PartitionerOptions& default_options = PartitionerOptions::default_options;
+
+      partitioner_options_default_group.createAttribute("library", default_options.library());
+    }
     {
       const auto& primal_to_dual_connectivity_info_map =
         DualConnectivityManager::instance().primalToDualConnectivityInfoMap();
diff --git a/src/utils/checkpointing/PartitionerOptionsHFType.hpp b/src/utils/checkpointing/PartitionerOptionsHFType.hpp
new file mode 100644
index 000000000..e022bb661
--- /dev/null
+++ b/src/utils/checkpointing/PartitionerOptionsHFType.hpp
@@ -0,0 +1,15 @@
+#ifndef PARTITIONER_OPTIONS_HF_TYPE_HPP
+#define PARTITIONER_OPTIONS_HF_TYPE_HPP
+
+#include <utils/HighFivePugsUtils.hpp>
+#include <utils/PartitionerOptions.hpp>
+#include <utils/PugsMacros.hpp>
+
+HighFive::EnumType<PartitionerLibrary> PUGS_INLINE
+create_enum_PTOptions_library_type()
+{
+  return {{"ParMETIS", PartitionerLibrary::parmetis}, {"PTScotch", PartitionerLibrary::ptscotch}};
+}
+HIGHFIVE_REGISTER_TYPE(PartitionerLibrary, create_enum_PTOptions_library_type)
+
+#endif   // PARTITIONER_OPTIONS_HF_TYPE_HPP
diff --git a/src/utils/checkpointing/Resume.cpp b/src/utils/checkpointing/Resume.cpp
index effd6b808..f342a2466 100644
--- a/src/utils/checkpointing/Resume.cpp
+++ b/src/utils/checkpointing/Resume.cpp
@@ -18,6 +18,7 @@
 #include <utils/checkpointing/EigenvalueSolverOptionsHFType.hpp>
 #include <utils/checkpointing/LinearSolverOptionsHFType.hpp>
 #include <utils/checkpointing/ParallelCheckerHFType.hpp>
+#include <utils/checkpointing/PartitionerOptionsHFType.hpp>
 #include <utils/checkpointing/ResumingData.hpp>
 #include <utils/checkpointing/ResumingManager.hpp>
 
@@ -91,6 +92,13 @@ resume()
 
       default_options.library() = eigenvalue_solver_options_default_group.getAttribute("library").read<ESLibrary>();
     }
+    {
+      HighFive::Group partitioner_options_default_group = checkpoint.getGroup("singleton/partitioner_options_default");
+
+      PartitionerOptions& default_options = PartitionerOptions::default_options;
+
+      default_options.library() = partitioner_options_default_group.getAttribute("library").read<PartitionerLibrary>();
+    }
 
     checkpointing::ResumingData::instance().readData(checkpoint, p_symbol_table);
 
-- 
GitLab