aboutsummaryrefslogtreecommitdiff
path: root/Source/Evolve/WarpXEvolve.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Evolve/WarpXEvolve.cpp')
-rw-r--r--Source/Evolve/WarpXEvolve.cpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/Source/Evolve/WarpXEvolve.cpp b/Source/Evolve/WarpXEvolve.cpp
index 049806059..78c4713da 100644
--- a/Source/Evolve/WarpXEvolve.cpp
+++ b/Source/Evolve/WarpXEvolve.cpp
@@ -33,6 +33,8 @@
#include "Utils/WarpXProfilerWrapper.H"
#include "Utils/WarpXUtil.H"
+#include <ablastr/utils/SignalHandling.H>
+
#include <AMReX.H>
#include <AMReX_Array.H>
#include <AMReX_BLassert.H>
@@ -53,6 +55,7 @@
#include <vector>
using namespace amrex;
+using ablastr::utils::SignalHandling;
void
WarpX::Evolve (int numsteps)
@@ -79,6 +82,8 @@ WarpX::Evolve (int numsteps)
WARPX_PROFILE("WarpX::Evolve::step");
Real evolve_time_beg_step = amrex::second();
+ CheckSignals();
+
multi_diags->NewIteration();
// Start loop on time steps
@@ -342,6 +347,8 @@ WarpX::Evolve (int numsteps)
Real evolve_time_end_step = amrex::second();
evolve_time += evolve_time_end_step - evolve_time_beg_step;
+ HandleSignals();
+
if (verbose) {
amrex::Print()<< "STEP " << step+1 << " ends." << " TIME = " << cur_time
<< " DT = " << dt[0] << "\n";
@@ -350,7 +357,7 @@ WarpX::Evolve (int numsteps)
<< " s; Avg. per step = " << evolve_time/(step-step_begin+1) << " s\n";
}
- if (cur_time >= stop_time - 1.e-3*dt[0]) {
+ if (cur_time >= stop_time - 1.e-3*dt[0] || SignalHandling::TestAndResetActionRequestFlag(SignalHandling::SIGNAL_REQUESTS_BREAK)) {
break;
}
@@ -949,3 +956,21 @@ WarpX::applyMirrors(Real time){
}
}
}
+
+void
+WarpX::CheckSignals()
+{
+ SignalHandling::CheckSignals();
+}
+
+void
+WarpX::HandleSignals()
+{
+ SignalHandling::WaitSignals();
+
+ // SIGNAL_REQUESTS_BREAK is handled directly in WarpX::Evolve
+
+ if (SignalHandling::TestAndResetActionRequestFlag(SignalHandling::SIGNAL_REQUESTS_CHECKPOINT)) {
+ multi_diags->FilterComputePackFlushLastTimestep( istep[0] );
+ }
+}