aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/CarpetParamCheck.cc
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@cct.lsu.edu>2007-07-06 12:25:00 +0000
committerErik Schnetter <schnetter@cct.lsu.edu>2007-07-06 12:25:00 +0000
commit723317dad1becf1faba4e168374ffd7dd7bff871 (patch)
treebc73e334b4ecc248651c157104368fa7fe441efd /Carpet/Carpet/src/CarpetParamCheck.cc
parentecad893b0060389fbfa99a7268f5de93efbdb315 (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.cc79
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