aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Evolve.cc
diff options
context:
space:
mode:
authorschnetter <>2004-06-27 09:19:00 +0000
committerschnetter <>2004-06-27 09:19:00 +0000
commit88b31aa56390b66da0f7d996b703eb4c80f8ec27 (patch)
tree81a3adb4cef0b4c94ba30256bf5f2260629e20b0 /Carpet/Carpet/src/Evolve.cc
parent2d43e07cefaa56937fb903609e6786d8e44834ba (diff)
Execute POSTREGRID bin only if the grid hierarchy actually changed.
Execute POSTREGRID bin only if the grid hierarchy actually changed. It is still executed for all refinement levels. This time, make it actually do that. darcs-hash:20040627091938-07bb3-908a1738723265a218f59f9f1e98b139ae403e11.gz
Diffstat (limited to 'Carpet/Carpet/src/Evolve.cc')
-rw-r--r--Carpet/Carpet/src/Evolve.cc71
1 files changed, 48 insertions, 23 deletions
diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc
index 1000a857b..f8113ea4d 100644
--- a/Carpet/Carpet/src/Evolve.cc
+++ b/Carpet/Carpet/src/Evolve.cc
@@ -31,7 +31,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.49 2004/06/27 10:02:42 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.50 2004/06/27 11:19:38 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Evolve_cc);
}
@@ -146,28 +146,53 @@ namespace Carpet {
// Regrid
- for (int rl=0; rl<reflevels; ++rl) {
- const int do_every = maxreflevelfact / ipow(reffact, rl);
- if ((cgh->cctk_iteration-1) % do_every == 0) {
- {
- const int ml=0;
- enter_global_mode (cgh, ml);
- enter_level_mode (cgh, rl);
-
- Checkpoint ("Regrid");
- const bool did_change = Regrid (cgh);
-
- if (did_change) {
- // Postregrid
- Checkpoint ("Scheduling POSTREGRID");
- CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
- }
-
- leave_level_mode (cgh);
- leave_global_mode (cgh);
- } // ml
- } // if do_every
- } // for rl
+ {
+ bool did_regrid = false;
+ {
+ const int ml=0;
+ for (int rl=0; rl<reflevels; ++rl) {
+ const int do_every = maxreflevelfact / ipow(reffact, rl);
+ if ((cgh->cctk_iteration-1) % do_every == 0) {
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ Checkpoint ("Regrid");
+ did_regrid |= Regrid (cgh);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // if do_every
+ } // for rl
+ } // ml
+
+ if (did_regrid) {
+ for (int ml=mglevels-1; ml>=0; --ml) {
+ for (int rl=0; rl<reflevels; ++rl) {
+ const int do_every
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ if ((cgh->cctk_iteration-1) % do_every == 0) {
+ enter_global_mode (cgh, ml);
+ enter_level_mode (cgh, rl);
+
+ do_global_mode = true;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ Waypoint ("Postregrid at iteration %d time %g%s%s",
+ cgh->cctk_iteration, (double)cgh->cctk_time,
+ (do_global_mode ? " (global)" : ""),
+ (do_meta_mode ? " (meta)" : ""));
+
+ // Postregrid
+ Checkpoint ("Scheduling POSTREGRID");
+ CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ leave_global_mode (cgh);
+ } // if do_every
+ } // for rl
+ } // for ml
+ } // if did_regrid
+ }