From d826d9a2ffdbf30b8babe8ba5e39074fc1a659da Mon Sep 17 00:00:00 2001 From: Roland Haas Date: Thu, 28 Jun 2012 14:31:29 -0700 Subject: Carpet: call POSTREGRID on all finer levels of a regridded level Carpet assumes that a regridding operation always changes level N and all finer levels so we should call POSTREGRID on all finer levels --- Carpet/Carpet/src/Evolve.cc | 10 ++++------ Carpet/Carpet/src/Initialise.cc | 31 ++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc index 32a2293ac..72526b8a8 100644 --- a/Carpet/Carpet/src/Evolve.cc +++ b/Carpet/Carpet/src/Evolve.cc @@ -305,12 +305,10 @@ namespace Carpet { bool const did_recompose = Recompose (cctkGH, rl, true); did_any_recompose = did_any_recompose or did_recompose; - // Do not omit the global mode call when the finest level - // does not change: - // if (did_recompose or (did_remove_level and rl == reflevels - 1)) { - if (did_recompose or - ((did_remove_level or did_any_recompose) and - rl == reflevels - 1)) + // Carpet assumes that a regridding operation always changes "level N + // and all finer levels" so we should call POSTREGRID on all finer levels + if (did_any_recompose or + (did_remove_level and rl == reflevels - 1)) { BEGIN_MGLEVEL_LOOP (cctkGH) { ENTER_LEVEL_MODE (cctkGH, rl) { diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc index 7b316e874..44d4eb8b1 100644 --- a/Carpet/Carpet/src/Initialise.cc +++ b/Carpet/Carpet/src/Initialise.cc @@ -913,9 +913,13 @@ namespace Carpet { // Regrid Checkpoint ("Regrid"); + int const oldreflevels = reflevels; bool const did_regrid = Regrid (cctkGH, true, prolongate_initial_data); + bool const did_remove_level = reflevels < oldreflevels; + assert (not did_remove_level or did_regrid); if (did_regrid) { + bool did_any_recompose = false; BEGIN_META_MODE (cctkGH) { bool have_done_global_mode = false; @@ -926,11 +930,14 @@ namespace Carpet { for (int rl=0; rl