From bc08df460473e83129b972eed6472bc99b14de5e Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Wed, 25 Sep 2013 12:15:04 -0400 Subject: Carpet: Introduce parameter max_time_levels This parameter defines the maximum number of time levels that a variable can have when being used for time prolongation. This allows using more time levels than prolongation_order_time+1. --- Carpet/Carpet/param.ccl | 6 ++++++ Carpet/Carpet/src/Initialise.cc | 6 +++--- Carpet/Carpet/src/SetupGH.cc | 15 ++++++++++++++- Carpet/Carpet/src/helpers.cc | 4 ++-- Carpet/Carpet/src/variables.cc | 9 ++++++--- Carpet/Carpet/src/variables.hh | 9 ++++++--- 6 files changed, 37 insertions(+), 12 deletions(-) diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl index 90ad98b81..90aca4e83 100644 --- a/Carpet/Carpet/param.ccl +++ b/Carpet/Carpet/param.ccl @@ -131,6 +131,12 @@ CCTK_INT max_refinement_levels "Maximum number of refinement levels (including t 1:* :: "must be positive" } 1 +CCTK_INT max_time_levels "Maximum number of time levels (including the current time level)" +{ + -1 :: "Set automatically to prolonation_order_time+1" + 1:* :: "Set this explicitly" +} -1 + CCTK_INT refinement_factor "Refinement factor" { 1:* :: "must be positive" diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc index 388f35c9b..0b5a1b873 100644 --- a/Carpet/Carpet/src/Initialise.cc +++ b/Carpet/Carpet/src/Initialise.cc @@ -719,8 +719,8 @@ namespace Carpet { int const num_tl = regridinitial - ? (init_each_timelevel ? prolongation_order_time+1 : 1) - : prolongation_order_time+1; + ? (init_each_timelevel ? maxtimelevels : 1) + : maxtimelevels; bool const old_do_allow_past_timelevels = do_allow_past_timelevels; @@ -822,7 +822,7 @@ namespace Carpet { (do_global_mode ? " (global)" : ""), (do_meta_mode ? " (meta)" : "")); - int const num_tl = prolongation_order_time + 1; + int const num_tl = maxtimelevels; bool const old_do_allow_past_timelevels = do_allow_past_timelevels; do_allow_past_timelevels = false; diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc index dfbf05fa1..c77a3ab2c 100644 --- a/Carpet/Carpet/src/SetupGH.cc +++ b/Carpet/Carpet/src/SetupGH.cc @@ -541,7 +541,7 @@ namespace Carpet { cctkGH->cctk_mode = CCTK_MODE_META; #endif - timelevels = prolongation_order_time + 1; + timelevels = maxtimelevels; timelevel = 0; timelevel_offset = 0; @@ -635,6 +635,19 @@ namespace Carpet { { DECLARE_CCTK_PARAMETERS; + // Set maximum number of time levels + if (max_time_levels < 0) { + // Set automatically (backward compatibility) + maxtimelevels = prolongation_order_time + 1; + } else { + maxtimelevels = max_time_levels; + } + if (maxtimelevels < prolongation_order_time + 1) { + CCTK_VError (__LINE__, __FILE__, CCTK_THORNSTRING, + "There are enough time levels for this time prolongation order: max_time_levels=%d, prolongation_order_time=%d", + int(max_time_levels), int(prolongation_order_time)); + } + // Set maximum number of refinement levels maxreflevels = max_refinement_levels; diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc index a34fd974c..a13b8bc9e 100644 --- a/Carpet/Carpet/src/helpers.cc +++ b/Carpet/Carpet/src/helpers.cc @@ -156,8 +156,8 @@ namespace Carpet { assert (rl == 0); assert (c == CCTK_MyProc (NULL)); } - int const maxtimelevels = CCTK_MaxTimeLevelsGI (groupindex); - assert (tl >= 0 and tl < maxtimelevels); + int const maxtls = CCTK_MaxTimeLevelsGI (groupindex); + assert (tl >= 0 and tl < maxtls); int const activetimelevels = groupdata.AT(groupindex).activetimelevels.AT(mglevel).AT(rl); diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc index a75323ed9..625a915d5 100644 --- a/Carpet/Carpet/src/variables.cc +++ b/Carpet/Carpet/src/variables.cc @@ -14,6 +14,12 @@ namespace Carpet { // Maximum number of refinement levels int maxreflevels; + // Maximum number of time levels + int maxtimelevels; + + // Timelevels + int timelevels; + // Refinement levels int reflevels; @@ -42,9 +48,6 @@ namespace Carpet { // Maps int maps; - // Timelevels - int timelevels; - // Current position on the grid hierarchy diff --git a/Carpet/Carpet/src/variables.hh b/Carpet/Carpet/src/variables.hh index 235874ada..7ae178108 100644 --- a/Carpet/Carpet/src/variables.hh +++ b/Carpet/Carpet/src/variables.hh @@ -47,6 +47,12 @@ namespace Carpet { // Maximum number of refinement levels extern int maxreflevels; + // Maximum number of time levels + extern int maxtimelevels; + + // Timelevels + extern int timelevels; + // Refinement levels extern int reflevels; @@ -76,9 +82,6 @@ namespace Carpet { // Maps extern int maps; - // Timelevels - extern int timelevels; - // Current position on the grid hierarchy -- cgit v1.2.3