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