aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2013-09-25 12:15:04 -0400
committerErik Schnetter <schnetter@gmail.com>2013-09-25 12:15:04 -0400
commitbc08df460473e83129b972eed6472bc99b14de5e (patch)
treee28e26b27352c2f2cb9c2e0c0ee79024c73593f5
parentd37f25ab50b6155026196665c502864e9696dd5b (diff)
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.
-rw-r--r--Carpet/Carpet/param.ccl6
-rw-r--r--Carpet/Carpet/src/Initialise.cc6
-rw-r--r--Carpet/Carpet/src/SetupGH.cc15
-rw-r--r--Carpet/Carpet/src/helpers.cc4
-rw-r--r--Carpet/Carpet/src/variables.cc9
-rw-r--r--Carpet/Carpet/src/variables.hh9
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