aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Evolve.cc
diff options
context:
space:
mode:
authorschnetter <>2004-03-23 13:10:00 +0000
committerschnetter <>2004-03-23 13:10:00 +0000
commit03e0e2566b50c81d5da64baef88dc1661b6d0d55 (patch)
treedd9a2ffdc4354e1b9a393806616e09437af3c688 /Carpet/Carpet/src/Evolve.cc
parent47975cf61813e50f4aa50699066a1985689cf73d (diff)
Fix evolution scheme for multiple convergence levels
darcs-hash:20040323131005-07bb3-a6dc57eeeafb405615f2b0fc31ca63eeff7e31b4.gz
Diffstat (limited to 'Carpet/Carpet/src/Evolve.cc')
-rw-r--r--Carpet/Carpet/src/Evolve.cc74
1 files changed, 42 insertions, 32 deletions
diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc
index 56b7502f2..bdc5274be 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.39 2004/03/23 13:32:04 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.40 2004/03/23 14:10:05 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Evolve_cc);
}
@@ -156,15 +156,14 @@ namespace Carpet {
- bool have_done_global_mode;
- bool have_done_anything;
-
- have_done_global_mode = false;
- have_done_anything = false;
-
- for (int rl=0; rl<reflevels; ++rl) {
- for (int ml=mglevels-1; ml>=0; --ml) {
- const int do_every = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ for (int ml=mglevels-1; ml>=0; --ml) {
+
+ bool have_done_global_mode = false;
+ bool have_done_anything = false;
+
+ 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);
@@ -172,7 +171,7 @@ namespace Carpet {
do_global_mode = ! have_done_global_mode;
do_meta_mode = do_global_mode && mglevel==mglevels-1;
assert (! (have_done_global_mode && do_global_mode));
- have_done_global_mode = have_done_global_mode || do_global_mode;
+ have_done_global_mode |= do_global_mode;
have_done_anything = true;
// Advance times
@@ -180,7 +179,7 @@ namespace Carpet {
vtt[m]->advance_time (reflevel, mglevel);
}
cgh->cctk_time = (global_time
- - delta_time * mglevelfact / maxreflevelfact
+ - delta_time / maxreflevelfact
+ delta_time * mglevelfact / reflevelfact);
CycleTimeLevels (cgh);
@@ -205,37 +204,44 @@ namespace Carpet {
leave_level_mode (cgh);
leave_global_mode (cgh);
} // if do_every
- } // for ml
- } // for rl
-
- if (have_done_anything) assert (have_done_global_mode);
+ } // for rl
+
+ if (have_done_anything) assert (have_done_global_mode);
+
+ } // for ml
- for (int rl=reflevels-1; rl>=0; --rl) {
- for (int ml=mglevels-1; ml>=0; --ml) {
- const int do_every = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ for (int ml=mglevels-1; ml>=0; --ml) {
+ for (int rl=reflevels-1; rl>=0; --rl) {
+ const int do_every
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
if (cgh->cctk_iteration % do_every == 0) {
enter_global_mode (cgh, ml);
enter_level_mode (cgh, rl);
+ Waypoint ("Evolution/Restrict at iteration %d time %g",
+ cgh->cctk_iteration, (double)cgh->cctk_time);
+
// Restrict
Restrict (cgh);
leave_level_mode (cgh);
leave_global_mode (cgh);
} // if do_every
- } // for ml
- } // for rl
-
+ } // for rl
+ } // for ml
- have_done_global_mode = false;
- have_done_anything = false;
- for (int rl=0; rl<reflevels; ++rl) {
- for (int ml=mglevels-1; ml>=0; --ml) {
- const int do_every = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ for (int ml=mglevels-1; ml>=0; --ml) {
+
+ bool have_done_global_mode = false;
+ bool have_done_anything = false;
+
+ for (int rl=0; rl<reflevels; ++rl) {
+ const int do_every
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
if (cgh->cctk_iteration % do_every == 0) {
enter_global_mode (cgh, ml);
enter_level_mode (cgh, rl);
@@ -243,7 +249,8 @@ namespace Carpet {
int finest_active_reflevel = -1;
{
for (int rl=0; rl<reflevels; ++rl) {
- const int do_every = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
+ const int do_every
+ = ipow(mgfact, ml) * (maxreflevelfact / ipow(reffact, rl));
if (cgh->cctk_iteration % do_every == 0) {
finest_active_reflevel = rl;
}
@@ -253,7 +260,7 @@ namespace Carpet {
do_global_mode = rl == finest_active_reflevel;
do_meta_mode = do_global_mode && mglevel==mglevels-1;
assert (! (have_done_global_mode && do_global_mode));
- have_done_global_mode = have_done_global_mode || do_global_mode;
+ have_done_global_mode |= do_global_mode;
have_done_anything = true;
Waypoint ("Evolution II at iteration %d time %g%s%s",
@@ -290,10 +297,13 @@ namespace Carpet {
leave_level_mode (cgh);
leave_global_mode (cgh);
} // if do_every
- } // for ml
- } // for rl
+ } // for rl
+
+ if (have_done_anything) assert (have_done_global_mode);
+
+ } // for ml
+
- if (have_done_anything) assert (have_done_global_mode);
} // main loop