diff options
author | Erik Schnetter <schnetter@gmail.com> | 2013-04-03 17:51:26 -0400 |
---|---|---|
committer | Erik Schnetter <schnetter@gmail.com> | 2013-04-03 17:52:58 -0400 |
commit | 8962dacf32642a82eee8f61d07f4122cc1ddbbb1 (patch) | |
tree | da90bf0bf599e38d5bedd4e2b9890b91cbddbc32 /Carpet/Requirements | |
parent | e99efd951ab3138230abd50966bf28b764b03c22 (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.ccl | 5 | ||||
-rw-r--r-- | Carpet/Requirements/src/Requirements.cc | 40 | ||||
-rw-r--r-- | Carpet/Requirements/src/Requirements.hh | 6 |
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 |