diff options
Diffstat (limited to 'Source/WarpX.cpp')
-rw-r--r-- | Source/WarpX.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Source/WarpX.cpp b/Source/WarpX.cpp index 3d11074df..e2f88e751 100644 --- a/Source/WarpX.cpp +++ b/Source/WarpX.cpp @@ -38,6 +38,8 @@ #include "Utils/WarpXProfilerWrapper.H" #include "Utils/WarpXUtil.H" +#include <ablastr/utils/SignalHandling.H> + #ifdef AMREX_USE_SENSEI_INSITU # include <AMReX_AmrMeshInSituBridge.H> #endif @@ -233,6 +235,8 @@ WarpX::WarpX () InitEB(); + ablastr::utils::SignalHandling::InitSignalHandling(); + // Geometry on all levels has been defined already. // No valid BoxArray and DistributionMapping have been defined. // But the arrays for them have been resized. @@ -560,6 +564,50 @@ WarpX::ReadParameters () } } + using ablastr::utils::SignalHandling; + std::vector<std::string> signals_in; + pp_warpx.queryarr("break_signals", signals_in); + +#if defined(__linux__) || defined(__APPLE__) + for (const std::string &str : signals_in) { + int sig = SignalHandling::parseSignalNameToNumber(str); + SignalHandling::signal_conf_requests[SignalHandling::SIGNAL_REQUESTS_BREAK][sig] = true; + } + signals_in.clear(); +#else + WARPX_ALWAYS_ASSERT_WITH_MESSAGE(signals_in.empty(), + "Signal handling requested in input, but is not supported on this platform"); +#endif + + bool have_checkpoint_diagnostic = false; + + ParmParse pp("diagnostics"); + std::vector<std::string> diags_names; + pp.queryarr("diags_names", diags_names); + + for (const auto &diag : diags_names) { + ParmParse dd(diag); + std::string format; + dd.query("format", format); + if (format == "checkpoint") { + have_checkpoint_diagnostic = true; + break; + } + } + + pp_warpx.queryarr("checkpoint_signals", signals_in); +#if defined(__linux__) || defined(__APPLE__) + for (const std::string &str : signals_in) { + int sig = SignalHandling::parseSignalNameToNumber(str); + SignalHandling::signal_conf_requests[SignalHandling::SIGNAL_REQUESTS_CHECKPOINT][sig] = true; + WARPX_ALWAYS_ASSERT_WITH_MESSAGE(have_checkpoint_diagnostic, + "Signal handling was requested to checkpoint, but no checkpoint diagnostic is configured"); + } +#else + WARPX_ALWAYS_ASSERT_WITH_MESSAGE(signals_in.empty(), + "Signal handling requested in input, but is not supported on this platform"); +#endif + // set random seed std::string random_seed = "default"; pp_warpx.query("random_seed", random_seed); |