aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Requirements
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/Requirements
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/Requirements')
-rw-r--r--Carpet/Requirements/interface.ccl5
-rw-r--r--Carpet/Requirements/src/Requirements.cc40
-rw-r--r--Carpet/Requirements/src/Requirements.hh6
3 files changed, 35 insertions, 16 deletions
diff --git a/Carpet/Requirements/interface.ccl b/Carpet/Requirements/interface.ccl
index 226c6a256..6bb7a0c03 100644
--- a/Carpet/Requirements/interface.ccl
+++ b/Carpet/Requirements/interface.ccl
@@ -57,6 +57,11 @@ CCTK_INT FUNCTION \
(CCTK_POINTER_TO_CONST IN cctkGH)
REQUIRES FUNCTION GetTimeLevel
+CCTK_INT FUNCTION \
+ GetTimeLevelOffset \
+ (CCTK_POINTER_TO_CONST IN cctkGH)
+REQUIRES FUNCTION GetTimeLevelOffset
+
CCTK_INT FUNCTION \
Boundary_SelectedGVs \
(CCTK_POINTER_TO_CONST IN cctkGH, \
diff --git a/Carpet/Requirements/src/Requirements.cc b/Carpet/Requirements/src/Requirements.cc
index 8acf77d63..db84e3701 100644
--- a/Carpet/Requirements/src/Requirements.cc
+++ b/Carpet/Requirements/src/Requirements.cc
@@ -287,9 +287,11 @@ namespace Requirements {
void regrid_free();
void cycle(int reflevel);
void before_routine(cFunctionData const* function_data,
- int reflevel, int map, int timelevel) const;
+ int reflevel, int map,
+ int timelevel, int timelevel_offset) const;
void after_routine(cFunctionData const* function_data,
- int reflevel, int map, int timelevel);
+ int reflevel, int map,
+ int timelevel, int timelevel_offset);
void sync(cFunctionData const* function_data,
vector<int> const& groups, int reflevel, int timelevel);
void restrict1(vector<int> const& groups, int reflevel);
@@ -749,11 +751,13 @@ namespace Requirements {
void BeforeRoutine(cFunctionData const* const function_data,
- int const reflevel, int const map, int const timelevel)
+ int const reflevel, int const map,
+ int const timelevel, int const timelevel_offset)
{
DECLARE_CCTK_PARAMETERS;
if (check_requirements) {
- all_state.before_routine(function_data, reflevel, map, timelevel);
+ all_state.before_routine(function_data,
+ reflevel, map, timelevel, timelevel_offset);
}
if (inconsistencies_are_fatal and there_was_an_error) {
CCTK_WARN(CCTK_WARN_ABORT,
@@ -765,7 +769,8 @@ namespace Requirements {
// function is executed
void all_state_t::before_routine(cFunctionData const* const function_data,
int const reflevel, int const map,
- int const timelevel)
+ int const timelevel,
+ int const timelevel_offset)
const
{
// Loop over all clauses
@@ -814,9 +819,9 @@ namespace Requirements {
timelevel == 0 || timelevels == 1 ? 0 : timelevel;
const int maxtl =
timelevel == 0 || timelevels == 1 ? timelevels-1 : timelevel;
- const int tl_of = timelevels > 1 ? timelevel : 0;
+ const int tloff = timelevel_offset;
for (int tl=mintl; tl<=maxtl; ++tl) {
- if (timelevel==-1 or clause.active_on_timelevel(tl-tl_of)) {
+ if (timelevel==-1 or clause.active_on_timelevel(tl-tloff)) {
gridpoint_t const& gp = tls.AT(tl);
gp.check_state(clause, function_data, vi, rl, m, tl);
}
@@ -832,11 +837,13 @@ namespace Requirements {
void AfterRoutine(cFunctionData const* const function_data,
- int const reflevel, int const map, int const timelevel)
+ int const reflevel, int const map,
+ int const timelevel, int const timelevel_offset)
{
DECLARE_CCTK_PARAMETERS;
if (check_requirements) {
- all_state.after_routine(function_data, reflevel, map, timelevel);
+ all_state.after_routine(function_data, reflevel, map,
+ timelevel, timelevel_offset);
}
if (inconsistencies_are_fatal and there_was_an_error) {
CCTK_WARN(CCTK_WARN_ABORT,
@@ -848,7 +855,8 @@ namespace Requirements {
// executed to reflect the fact that some variables are now valid
void all_state_t::after_routine(cFunctionData const* const function_data,
int const reflevel, int const map,
- int const timelevel)
+ int const timelevel,
+ int const timelevel_offset)
{
// Loop over all clauses
clauses_t const& clauses = all_clauses.get_clauses(function_data);
@@ -893,9 +901,9 @@ namespace Requirements {
timelevel == 0 || timelevels == 1 ? 0 : timelevel;
const int maxtl =
timelevel == 0 || timelevels == 1 ? timelevels-1 : timelevel;
- const int tl_of = timelevels > 1 ? timelevel : 0;
+ const int tloff = timelevel_offset;
for (int tl=mintl; tl<=maxtl; ++tl) {
- if (timelevel==-1 or clause.active_on_timelevel(tl-tl_of)) {
+ if (timelevel==-1 or clause.active_on_timelevel(tl-tloff)) {
gridpoint_t& gp = tls.AT(tl);
// TODO: If this variable is both read and written
// (i.e. if this is a projection), then only the
@@ -1161,6 +1169,7 @@ namespace Requirements {
int const reflevel = GetRefinementLevel(cctkGH);
int const map = GetMap(cctkGH);
int const timelevel = GetTimeLevel(cctkGH);
+ int const timelevel_offset = GetTimeLevelOffset(cctkGH);
// TODO: design an interface to all_state.before_routine that operates
// on indices and clauses directly
for (int v=0; v<nvars; ++v) {
@@ -1175,7 +1184,8 @@ namespace Requirements {
temp_function_data.n_ReadsClauses = 1;
temp_function_data.ReadsClauses = (char const**)&reads;
all_clauses.get_clauses(&temp_function_data);
- BeforeRoutine(&temp_function_data, reflevel, map, timelevel);
+ BeforeRoutine(&temp_function_data,
+ reflevel, map, timelevel, timelevel_offset);
all_clauses.remove_clauses(&temp_function_data);
free(fullname);
free(reads);
@@ -1201,6 +1211,7 @@ namespace Requirements {
int const reflevel = GetRefinementLevel(cctkGH);
int const map = GetMap(cctkGH);
int const timelevel = GetTimeLevel(cctkGH);
+ int const timelevel_offset = GetTimeLevelOffset(cctkGH);
// TODO: design an interface to all_state.before_routine that operates
// on indices and claues directly
for (int v=0; v<nvars; ++v) {
@@ -1215,7 +1226,8 @@ namespace Requirements {
temp_function_data.n_ReadsClauses = 0;
temp_function_data.ReadsClauses = NULL;
all_clauses.get_clauses(&temp_function_data);
- AfterRoutine(&temp_function_data, reflevel, map, timelevel);
+ AfterRoutine(&temp_function_data,
+ reflevel, map, timelevel, timelevel_offset);
all_clauses.remove_clauses(&temp_function_data);
free(fullname);
free(writes);
diff --git a/Carpet/Requirements/src/Requirements.hh b/Carpet/Requirements/src/Requirements.hh
index a88b1cc01..8dbecc3b9 100644
--- a/Carpet/Requirements/src/Requirements.hh
+++ b/Carpet/Requirements/src/Requirements.hh
@@ -34,10 +34,12 @@ namespace Requirements {
// TODO: Either combine these "before" and "after" routines, or
// split the other routines as well
void BeforeRoutine(cFunctionData const* function_data,
- int reflevel, int map, int timelevel);
+ int reflevel, int map,
+ int timelevel, int timelevel_offset);
// After calling a routine: update according to writes clauses
void AfterRoutine(cFunctionData const* function_data,
- int reflevel, int map, int timelevel);
+ int reflevel, int map,
+ int timelevel, int timelevel_offset);
// Synchronise and prolongate
// TODO: This does not handle variables that are not prolongated
// TODO: This does not handle buffer zones