From 4eabc83ae742019027a74615f5b6d720d621d348 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Wed, 22 May 2024 08:32:47 +0200 Subject: [PATCH] Add checkpoint/resume for LinearSolverOptions default values --- src/utils/checkpointing/Checkpoint.cpp | 17 +++++++++ .../LinearSolverOptionsHFType.hpp | 37 +++++++++++++++++++ src/utils/checkpointing/Resume.cpp | 18 +++++++++ 3 files changed, 72 insertions(+) create mode 100644 src/utils/checkpointing/LinearSolverOptionsHFType.hpp diff --git a/src/utils/checkpointing/Checkpoint.cpp b/src/utils/checkpointing/Checkpoint.cpp index 2598fa1c2..245871c0d 100644 --- a/src/utils/checkpointing/Checkpoint.cpp +++ b/src/utils/checkpointing/Checkpoint.cpp @@ -20,6 +20,7 @@ #ifdef PUGS_HAS_HDF5 +#include <algebra/LinearSolverOptions.hpp> #include <language/utils/ASTNodeDataTypeTraits.hpp> #include <language/utils/CheckpointResumeRepository.hpp> #include <language/utils/DataHandler.hpp> @@ -27,6 +28,8 @@ #include <utils/GlobalVariableManager.hpp> #include <utils/RandomEngine.hpp> +#include <utils/checkpointing/LinearSolverOptionsHFType.hpp> + void checkpoint() { @@ -80,6 +83,20 @@ checkpoint() execution_info_group.createAttribute("cumulative_total_cpu_time", ExecutionStatManager::getInstance().getCumulativeTotalCPUTime()); } + { + HighFive::Group linear_solver_options_default_group = + checkpoint.createGroup("singleton/linear_solver_options_default"); + + const LinearSolverOptions& default_options = LinearSolverOptions::default_options; + + linear_solver_options_default_group.createAttribute("epsilon", default_options.epsilon()); + linear_solver_options_default_group.createAttribute("maximum_iteration", default_options.maximumIteration()); + linear_solver_options_default_group.createAttribute("verbose", default_options.verbose()); + + linear_solver_options_default_group.createAttribute("library", default_options.library()); + linear_solver_options_default_group.createAttribute("method", default_options.method()); + linear_solver_options_default_group.createAttribute("precond", default_options.precond()); + } { std::cout << rang::fgB::magenta << "Checkpoint DualConnectivityManager NIY" << rang::fg::reset << '\n'; std::cout << rang::fgB::magenta << "Checkpoint DualMeshManager NIY" << rang::fg::reset << '\n'; diff --git a/src/utils/checkpointing/LinearSolverOptionsHFType.hpp b/src/utils/checkpointing/LinearSolverOptionsHFType.hpp new file mode 100644 index 000000000..ce95f2a90 --- /dev/null +++ b/src/utils/checkpointing/LinearSolverOptionsHFType.hpp @@ -0,0 +1,37 @@ +#ifndef LINEAR_SOLVER_OPTIONS_H_F_TYPE_HPP +#define LINEAR_SOLVER_OPTIONS_H_F_TYPE_HPP + +#include <algebra/LinearSolverOptions.hpp> +#include <utils/checkpointing/CheckpointUtils.hpp> + +HighFive::EnumType<LSLibrary> PUGS_INLINE +create_enum_LSOptions_library_type() +{ + return {{"builtin", LSLibrary::builtin}, {"petsc", LSLibrary::petsc}}; +} +HIGHFIVE_REGISTER_TYPE(LSLibrary, create_enum_LSOptions_library_type) + +HighFive::EnumType<LSMethod> PUGS_INLINE +create_enum_LSOptions_method_type() +{ + return {{"cg", LSMethod::cg}, + {"bicgstab", LSMethod::bicgstab}, + {"bicgstab2", LSMethod::bicgstab2}, + {"gmres", LSMethod::gmres}, + {"lu", LSMethod::lu}, + {"cholesky", LSMethod::cholesky}}; +} +HIGHFIVE_REGISTER_TYPE(LSMethod, create_enum_LSOptions_method_type) + +HighFive::EnumType<LSPrecond> PUGS_INLINE +create_enum_LSOptions_precond_type() +{ + return {{"none", LSPrecond::none}, + {"diagonal", LSPrecond::diagonal}, + {"incomplete_cholesky", LSPrecond::incomplete_cholesky}, + {"incomplete_LU", LSPrecond::incomplete_LU}, + {"amg", LSPrecond::amg}}; +} +HIGHFIVE_REGISTER_TYPE(LSPrecond, create_enum_LSOptions_precond_type) + +#endif // LINEAR_SOLVER_OPTIONS_H_F_TYPE_HPP diff --git a/src/utils/checkpointing/Resume.cpp b/src/utils/checkpointing/Resume.cpp index 70c610ebe..27f8e3db1 100644 --- a/src/utils/checkpointing/Resume.cpp +++ b/src/utils/checkpointing/Resume.cpp @@ -17,6 +17,7 @@ #ifdef PUGS_HAS_HDF5 +#include <algebra/LinearSolverOptions.hpp> #include <mesh/Connectivity.hpp> #include <utils/ExecutionStatManager.hpp> #include <utils/RandomEngine.hpp> @@ -24,6 +25,8 @@ #include <utils/checkpointing/ResumingData.hpp> #include <utils/checkpointing/ResumingManager.hpp> +#include <utils/checkpointing/LinearSolverOptionsHFType.hpp> + #include <language/utils/CheckpointResumeRepository.hpp> #include <map> @@ -66,6 +69,21 @@ resume() ExecutionStatManager::getInstance().setPreviousCumulativeElapseTime(cumulative_elapse_time); ExecutionStatManager::getInstance().setPreviousCumulativeTotalCPUTime(cumulative_total_cpu_time); } + { + HighFive::Group linear_solver_options_default_group = + checkpoint.getGroup("singleton/linear_solver_options_default"); + + LinearSolverOptions& default_options = LinearSolverOptions::default_options; + + default_options.epsilon() = linear_solver_options_default_group.getAttribute("epsilon").read<double>(); + default_options.maximumIteration() = + linear_solver_options_default_group.getAttribute("maximum_iteration").read<size_t>(); + default_options.verbose() = linear_solver_options_default_group.getAttribute("verbose").read<bool>(); + + default_options.library() = linear_solver_options_default_group.getAttribute("library").read<LSLibrary>(); + default_options.method() = linear_solver_options_default_group.getAttribute("method").read<LSMethod>(); + default_options.precond() = linear_solver_options_default_group.getAttribute("precond").read<LSPrecond>(); + } { std::cout << rang::fgB::magenta << "Resume DualConnectivityManager NIY" << rang::fg::reset << '\n'; std::cout << rang::fgB::magenta << "Resume DualMeshManager NIY" << rang::fg::reset << '\n'; -- GitLab