aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2013-04-03 17:51:26 -0400
committerErik Schnetter <schnetter@gmail.com>2013-04-03 17:52:58 -0400
commit8962dacf32642a82eee8f61d07f4122cc1ddbbb1 (patch)
treeda90bf0bf599e38d5bedd4e2b9890b91cbddbc32 /Carpet/Carpet
parente99efd951ab3138230abd50966bf28b764b03c22 (diff)
Carpet, Requirements: Pass timelevel_offset
Introduce global variable timelevel_offset in Carpet. Pass timelevel_offset from Carpet to Requirements. Use timelevel_offset when determining which timelevels are accessed.
Diffstat (limited to 'Carpet/Carpet')
-rw-r--r--Carpet/Carpet/interface.ccl7
-rw-r--r--Carpet/Carpet/src/CallFunction.cc6
-rw-r--r--Carpet/Carpet/src/SetupGH.cc5
-rw-r--r--Carpet/Carpet/src/helpers.cc7
-rw-r--r--Carpet/Carpet/src/modes.hh3
-rw-r--r--Carpet/Carpet/src/variables.cc2
-rw-r--r--Carpet/Carpet/src/variables.hh2
7 files changed, 26 insertions, 6 deletions
diff --git a/Carpet/Carpet/interface.ccl b/Carpet/Carpet/interface.ccl
index 6b5143e91..577cbb059 100644
--- a/Carpet/Carpet/interface.ccl
+++ b/Carpet/Carpet/interface.ccl
@@ -316,6 +316,13 @@ PROVIDES FUNCTION GetTimeLevel \
WITH Carpet_GetTimeLevel \
LANGUAGE C
+CCTK_INT FUNCTION \
+ GetTimeLevelOffset \
+ (CCTK_POINTER_TO_CONST IN cctkGH)
+PROVIDES FUNCTION GetTimeLevelOffset \
+ WITH Carpet_GetTimeLevelOffset \
+ LANGUAGE C
+
# Get pointer to grid variable for a specific map and refinement level
diff --git a/Carpet/Carpet/src/CallFunction.cc b/Carpet/Carpet/src/CallFunction.cc
index deefa523c..345436fc2 100644
--- a/Carpet/Carpet/src/CallFunction.cc
+++ b/Carpet/Carpet/src/CallFunction.cc
@@ -360,7 +360,8 @@ namespace Carpet {
user_timer.start();
#ifdef REQUIREMENTS_HH
- Requirements::BeforeRoutine(attribute, reflevel, map, timelevel);
+ Requirements::BeforeRoutine
+ (attribute, reflevel, map, timelevel, timelevel_offset);
#endif
timer.start();
if (CCTK_IsFunctionAliased("Accelerator_PreCallFunction")) {
@@ -379,7 +380,8 @@ namespace Carpet {
}
timer.stop();
#ifdef REQUIREMENTS_HH
- Requirements::AfterRoutine(attribute, reflevel, map, timelevel);
+ Requirements::AfterRoutine
+ (attribute, reflevel, map, timelevel, timelevel_offset);
#endif
user_timer.stop();
diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc
index 896194651..138e0f63a 100644
--- a/Carpet/Carpet/src/SetupGH.cc
+++ b/Carpet/Carpet/src/SetupGH.cc
@@ -549,8 +549,9 @@ namespace Carpet {
cctkGH->cctk_mode = CCTK_MODE_META;
#endif
- timelevels = prolongation_order_time + 1;
- timelevel = 0;
+ timelevels = prolongation_order_time + 1;
+ timelevel = 0;
+ timelevel_offset = 0;
// Say hello
diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc
index a52eb5acd..6938fd658 100644
--- a/Carpet/Carpet/src/helpers.cc
+++ b/Carpet/Carpet/src/helpers.cc
@@ -101,6 +101,13 @@ namespace Carpet {
return timelevel;
}
+ // Get current map level
+ extern "C"
+ CCTK_INT Carpet_GetTimeLevelOffset (CCTK_POINTER_TO_CONST const cctkGH)
+ {
+ return timelevel_offset;
+ }
+
// Enable or disable prolongating
diff --git a/Carpet/Carpet/src/modes.hh b/Carpet/Carpet/src/modes.hh
index 3d6c0c76b..23a20ed5d 100644
--- a/Carpet/Carpet/src/modes.hh
+++ b/Carpet/Carpet/src/modes.hh
@@ -254,8 +254,10 @@ namespace Carpet {
assert (do_allow_past_timelevels); \
do_allow_past_timelevels = false; \
assert (timelevel == 0); \
+ assert (timelevel_offset == 0); \
assert (not adaptive_stepsize); \
for (timelevel = timelevels - 1; timelevel >= 0; -- timelevel) { \
+ timelevel_offset = timelevel; \
cctkGH->cctk_time = tt->get_time (mglevel, reflevel, timelevel); \
{
#define END_TIMELEVEL_LOOP \
@@ -264,6 +266,7 @@ namespace Carpet {
assert (timelevel_loop_); \
timelevel_loop_ = false; \
timelevel = 0; \
+ timelevel_offset = 0; \
/* cctkGH->cctk_time = tt->get_time (mglevel, reflevel, timelevel); */ \
do_allow_past_timelevels = true; \
} while (false)
diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc
index d7fef9e80..7351e4073 100644
--- a/Carpet/Carpet/src/variables.cc
+++ b/Carpet/Carpet/src/variables.cc
@@ -57,7 +57,7 @@ namespace Carpet {
int map;
int component;
int local_component;
- int timelevel;
+ int timelevel, timelevel_offset;
// Current refinement factors
int timereflevelfact;
diff --git a/Carpet/Carpet/src/variables.hh b/Carpet/Carpet/src/variables.hh
index 60f934dd3..c8eecaaf1 100644
--- a/Carpet/Carpet/src/variables.hh
+++ b/Carpet/Carpet/src/variables.hh
@@ -88,7 +88,7 @@ namespace Carpet {
extern int map;
extern int component;
extern int local_component; // -1 for non-local
- extern int timelevel;
+ extern int timelevel, timelevel_offset;
// Current refinement factors
extern int timereflevelfact;