From 28dd7898ceda9f839338d516b71f07de7c0b4d9e Mon Sep 17 00:00:00 2001 From: Roland Haas Date: Wed, 5 Sep 2012 20:05:23 -0400 Subject: Carpet: add parameter to ignore variables during Requirements check all variables and groups listed in carpet::ignore_these_variables are ignored by the requirements check, ie they are always assumed to be valid and never set. --- Carpet/Carpet/param.ccl | 5 +++++ Carpet/Carpet/src/Requirements.cc | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl index 259012844..64cb3fb7c 100644 --- a/Carpet/Carpet/param.ccl +++ b/Carpet/Carpet/param.ccl @@ -607,3 +607,8 @@ BOOLEAN requirements_verbose "Output details when checking requirements" STEERAB BOOLEAN requirement_inconsistencies_are_fatal "Abort when encountering inconsistencies in requirements" STEERABLE=always { } "no" + +STRING ignore_these_variables "Assume that these variables are always valid everywhere" STEERABLE=recover +{ + "([A-Za-z0-9_]+[:][:][A-Za-z0-9_]+([[:space:]]+|$))*" :: "space separated list of variables of groups" +} "" diff --git a/Carpet/Carpet/src/Requirements.cc b/Carpet/Carpet/src/Requirements.cc index b2a79fc67..068610e66 100644 --- a/Carpet/Carpet/src/Requirements.cc +++ b/Carpet/Carpet/src/Requirements.cc @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -234,6 +235,11 @@ namespace Carpet { all_clauses_t all_clauses; + + // ignore requirements in these variables. Used for internally updated + // variables. Putting a variable in this set asserts that it is always + // valid. + std::set ignore_these_varindices; // Keep track of which time levels contain good data; modify this @@ -372,6 +378,13 @@ namespace Carpet { all_state_t all_state; + static void add_ignored_variable(int id, const char * opstring, void * callback_arg) + { + std::set& ignore_these_variables = + *static_cast*>(callback_arg); + + ignore_these_variables.insert(id); + } void Setup(int const maps) { @@ -382,6 +395,9 @@ namespace Carpet { "Requirements: Setup maps=%d", maps); } all_state.setup(maps); + CCTK_TraverseString(ignore_these_variables, add_ignored_variable, + (void*)&ignore_these_varindices, + CCTK_GROUP_OR_VAR); } if (requirement_inconsistencies_are_fatal and there_was_an_error) { CCTK_WARN(CCTK_WARN_ABORT, @@ -821,6 +837,9 @@ namespace Carpet { ++ivar) { int const vi = *ivar; + + if (ignore_these_varindices.count(vi)) + continue; // Loop over all (refinement levels, maps, time levels) reflevels_t const& rls = vars.AT(vi); @@ -983,6 +1002,9 @@ namespace Carpet { int const v0 = CCTK_FirstVarIndexI(gi); int const nv = CCTK_NumVarsInGroupI(gi); for (int vi=v0; vi