diff options
author | Roland Haas <roland.haas@physics.gatech.edu> | 2012-05-05 15:12:59 -0700 |
---|---|---|
committer | Barry Wardell <barry.wardell@gmail.com> | 2012-09-11 18:23:31 +0100 |
commit | 3af3dfa78c78075b962b639fcd93cb2714a0f825 (patch) | |
tree | 101b6af505c9875f99677fd89bc399d86fd21130 | |
parent | b59d64eb33a00920432e881a5b896e18ccc6a0b6 (diff) |
CarpetIOHDF5: add option checkpoint_every_divisor
to checkpoint when cctk_iteration % checkpoint_every_divisor == 0 rather
than at whenever checkpoint_every iterations have passed since the last
checkpoint
-rw-r--r-- | Carpet/CarpetIOHDF5/param.ccl | 6 | ||||
-rw-r--r-- | Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc | 6 |
2 files changed, 11 insertions, 1 deletions
diff --git a/Carpet/CarpetIOHDF5/param.ccl b/Carpet/CarpetIOHDF5/param.ccl index 83e8f8935..75a774516 100644 --- a/Carpet/CarpetIOHDF5/param.ccl +++ b/Carpet/CarpetIOHDF5/param.ccl @@ -437,6 +437,12 @@ BOOLEAN checkpoint_next "Checkpoint at next iteration ?" STEERABLE = ALWAYS { } "no" +INT checkpoint_every_divisor "Checkpoint if (iteration % out_every) == 0" STEERABLE = ALWAYS +{ + 1:* :: "Every so many iterations" + -1:0 :: "Disable periodic checkpointing" +} -1 + BOOLEAN use_reflevels_from_checkpoint "Use 'CarpetRegrid::refinement_levels' from the checkpoint file rather than from the parameter file ?" STEERABLE = RECOVER { } "no" diff --git a/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc b/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc index c3053c332..909764b46 100644 --- a/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc +++ b/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc @@ -168,13 +168,17 @@ void CarpetIOHDF5_EvolutionCheckpoint (CCTK_ARGUMENTS) bool const checkpoint_by_iteration = checkpoint_every > 0 and iteration >= last_checkpoint_iteration + checkpoint_every; + bool const checkpoint_by_iteration_divisor = + checkpoint_every_divisor > 0 and + iteration % checkpoint_every_divisor == 0; bool const checkpoint_by_walltime = checkpoint_every_walltime_hours > 0 and walltime >= last_checkpoint_walltime + checkpoint_every_walltime_hours; int do_checkpoint = checkpoint and - (checkpoint_by_iteration or checkpoint_by_walltime or checkpoint_next); + (checkpoint_by_iteration or checkpoint_by_iteration_divisor or + checkpoint_by_walltime or checkpoint_next); if (checkpoint_every_walltime_hours > 0) { // broadcast the decision since comparing wall times may differ on // different processors |