aboutsummaryrefslogtreecommitdiff
path: root/Carpet
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
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')
-rw-r--r--Carpet/Carpet/src/Evolve.cc71
-rw-r--r--Carpet/Carpet/src/Initialise.cc44
2 files changed, 76 insertions, 39 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
+ }
diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc
index 103430b2b..9a1dafa4b 100644
--- a/Carpet/Carpet/src/Initialise.cc
+++ b/Carpet/Carpet/src/Initialise.cc
@@ -12,7 +12,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.47 2004/06/27 10:02:42 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Initialise.cc,v 1.48 2004/06/27 11:19:38 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Initialise_cc);
}
@@ -98,7 +98,7 @@ namespace Carpet {
leave_level_mode (cgh);
} END_MGLEVEL_LOOP;
-
+
{
const int ml=0;
enter_global_mode (cgh, ml);
@@ -106,17 +106,23 @@ namespace Carpet {
// Regrid
Checkpoint ("Regrid");
- const bool did_change = Regrid (cgh, true);
-
- if (did_change) {
- // Postregrid
- Checkpoint ("Scheduling POSTREGRID");
- CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
- }
+ Regrid (cgh, true);
leave_level_mode (cgh);
leave_global_mode (cgh);
} // ml
+
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ // Postregrid
+ Checkpoint ("Scheduling POSTREGRID");
+ CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
} // for rl
@@ -222,18 +228,24 @@ namespace Carpet {
// Regrid
Checkpoint ("Regrid");
- const bool did_change = Regrid (cgh);
-
- if (did_change) {
- // Postregrid
- Checkpoint ("Scheduling POSTREGRID");
- CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
- }
+ Regrid (cgh);
leave_level_mode (cgh);
leave_global_mode (cgh);
} // ml
+ BEGIN_MGLEVEL_LOOP(cgh) {
+ enter_level_mode (cgh, rl);
+ do_global_mode = reflevel==0;
+ do_meta_mode = do_global_mode && mglevel==mglevels-1;
+
+ // Postregrid
+ Checkpoint ("Scheduling POSTREGRID");
+ CCTK_ScheduleTraverse ("CCTK_POSTREGRID", cgh, CallFunction);
+
+ leave_level_mode (cgh);
+ } END_MGLEVEL_LOOP;
+
} // for rl