diff options
Diffstat (limited to 'Carpet/CarpetIOHDF5/src/Input.cc')
-rw-r--r-- | Carpet/CarpetIOHDF5/src/Input.cc | 55 |
1 files changed, 40 insertions, 15 deletions
diff --git a/Carpet/CarpetIOHDF5/src/Input.cc b/Carpet/CarpetIOHDF5/src/Input.cc index 5da4f0dfc..1f4134a2b 100644 --- a/Carpet/CarpetIOHDF5/src/Input.cc +++ b/Carpet/CarpetIOHDF5/src/Input.cc @@ -53,8 +53,12 @@ typedef struct { vector<CCTK_REAL> mgleveltimes; // [num_mglevels*num_reflevels] } fileset_t; +// list of checkpoint/filereader files static list<fileset_t> filesets; +// number of reflevels in the checkpoint +static int num_reflevels = -1; + static list<fileset_t>::iterator OpenFileSet (const cGH* const cctkGH, const string setname, @@ -81,6 +85,39 @@ int CarpetIOHDF5_RecoverParameters (void) ////////////////////////////////////////////////////////////////////////////// +// Overwrite the "CarpetRegrid::refinement_levels" +// with the number of levels given in the checkpoint file +// +// Note that this has to be done after parameter recovery in order to have +// any effect of steering "CarpetRegrid::refinement_levels". +////////////////////////////////////////////////////////////////////////////// +int CarpetIOHDF5_SetNumRefinementLevels (void) +{ + DECLARE_CCTK_PARAMETERS; + + if (num_reflevels > 0) { + if (not CCTK_Equals (verbose, "none")) { + char *buffer = CCTK_ParameterValString ("refinement_levels", + "CarpetRegrid"); + assert (buffer); + CCTK_VInfo (CCTK_THORNSTRING, "Using %i reflevels from checkpoint file. " + "Ignoring value '%s' in parameter file.", + num_reflevels, buffer); + free (buffer); + } + + char buffer[32]; + snprintf (buffer, sizeof (buffer), "%d", num_reflevels); + int const retval = CCTK_ParameterSet ("refinement_levels", "CarpetRegrid", + buffer); + assert (retval == 0); + } + + return (0); +} + + +////////////////////////////////////////////////////////////////////////////// // close all open checkpoint/filereader files after recovering grid variables ////////////////////////////////////////////////////////////////////////////// int CarpetIOHDF5_CloseFiles (void) @@ -162,8 +199,8 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) CCTK_SetMainLoopIndex (fileset->main_loop_index); cctkGH->cctk_iteration = fileset->cctk_iteration; - cctkGH->cctk_time = - fileset->mgleveltimes.at(mglevel*fileset->num_reflevels + reflevel); + int const idx = mglevel*fileset->num_reflevels + reflevel; + cctkGH->cctk_time = fileset->mgleveltimes.at(idx); } if (not CCTK_Equals (verbose, "none")) { @@ -419,19 +456,7 @@ static list<fileset_t>::iterator OpenFileSet (const cGH* const cctkGH, IOUtil_SetAllParameters (parameters); delete[] parameters; - // use refinement levels parameter from checkpointing file ? - if (use_reflevels_from_checkpoint) { - char buffer[32]; - - snprintf (buffer, sizeof (buffer), "%d", fileset.num_reflevels); - CCTK_ParameterSet ("refinement_levels", "CarpetRegrid", buffer); - - if (not CCTK_Equals (verbose, "none")) { - CCTK_VInfo (CCTK_THORNSTRING, "Using %i reflevels read from " - "checkpoint file. Ignoring value in parameter file.", - fileset.num_reflevels); - } - } + num_reflevels = fileset.num_reflevels; } // allocate and initialise the list of input files for this set |