diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2007-07-06 12:25:00 +0000 |
---|---|---|
committer | Erik Schnetter <schnetter@cct.lsu.edu> | 2007-07-06 12:25:00 +0000 |
commit | 723317dad1becf1faba4e168374ffd7dd7bff871 (patch) | |
tree | bc73e334b4ecc248651c157104368fa7fe441efd /Carpet/Carpet/src/CarpetParamCheck.cc | |
parent | ecad893b0060389fbfa99a7268f5de93efbdb315 (diff) |
Carpet: Use thorn InitBase to manage initial data setup
Thorn InitBase specifies how initial data should be calculated. There
can be three possibilities:
init_some_levels: Set up at least one time level; other time levels
are scratch space
init_single_level: Set up exactly one time level; other time levels
are not acessed
init_all_levels: Set up all active time levels
Carpet checks this parameter and ensures that this setting is
consistent with Carpet's parameters
init_each_timelevel
init_fill_timelevels
init_3_timelevels
The new parameter init_fill_timelevels copies the current time level
into all past time levels, very similar to what
MoL::initial_data_is_crap does.
darcs-hash:20070706122545-dae7b-57ccca2954b1bd7ad98771e689c6c5b569c238cc.gz
Diffstat (limited to 'Carpet/Carpet/src/CarpetParamCheck.cc')
-rw-r--r-- | Carpet/Carpet/src/CarpetParamCheck.cc | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/Carpet/Carpet/src/CarpetParamCheck.cc b/Carpet/Carpet/src/CarpetParamCheck.cc index 085f91e1f..ab71c74b2 100644 --- a/Carpet/Carpet/src/CarpetParamCheck.cc +++ b/Carpet/Carpet/src/CarpetParamCheck.cc @@ -33,6 +33,85 @@ namespace Carpet { if (adaptive_stepsize and max_refinement_levels > 1) { CCTK_PARAMWARN ("Adaptive time step sizes do not work with mesh refinement yet. Please use only a single level, and set max_refinement_levels=1."); } + + + + // InitBase + + enum setup_method_t { + init_some_levels, + init_single_level, + init_all_levels, + }; + setup_method_t setup_method; + + if (CCTK_EQUALS (initial_data_setup_method, "init_some_levels")) { + setup_method = init_some_levels; + } + else if (CCTK_EQUALS (initial_data_setup_method, "init_single_level")) { + setup_method = init_single_level; + } + else if (CCTK_EQUALS (initial_data_setup_method, "init_all_levels")) { + setup_method = init_some_levels; + } + else + { + CCTK_PARAMWARN ("Unknown value of parameter InitBase::initial_data_setup_method"); + } + + // Carpet + + enum init_method_t { + each_timelevel, // Initialise each time level + fill_timelevels, // Copy the current to all past timelevels + three_timelevels, // Carpet's 3 timelevel scheme + all_timelevels, // Initial data thorn initialises all timelevels + }; + init_method_t init_method; + + if (init_each_timelevel) { + if (init_fill_timelevels) { + CCTK_PARAMWARN ("Cannot set parameters init_each_timelevel and init_fill_timelevels at the same time"); + } + if (init_3_timelevels) { + CCTK_PARAMWARN ("Cannot set parameters init_each_timelevel and init_3_timelevels at the same time"); + } + init_method = each_timelevel; + } + else if (init_fill_timelevels) { + if (init_3_timelevels) { + CCTK_PARAMWARN ("Cannot set parameters init_fill_timelevels and init_3_timelevels at the same time"); + } + init_method = fill_timelevels; + } + else if (init_3_timelevels) { + init_method = three_timelevels; + } + else { + init_method = all_timelevels; + } + + switch (init_method) { + case each_timelevel: + if (setup_method != init_single_level) { + CCTK_PARAMWARN ("When you set Carpet::init_each_timelevel=yes, then you must also use InitBase::initial_data_setup_method=\"single_level\""); + } + break; + case fill_timelevels: + // Everything is allowed + break; + case three_timelevels: + // Everything is allowed + break; + case all_timelevels: + if (setup_method != init_all_levels) { + CCTK_PARAMWARN ("When you set neither Carpet::init_each_timelevel=yes nor Carpet::init_fill_timelevels=yes nor Carpet::init_3_timelevel=yes, then you must also use InitBase::initial_data_setup_method=\"all_levels\""); + } + break; + default: + assert (0); + } + } } // namespace Carpet |