diff options
author | schnetter <> | 2004-03-23 13:10:00 +0000 |
---|---|---|
committer | schnetter <> | 2004-03-23 13:10:00 +0000 |
commit | 03e0e2566b50c81d5da64baef88dc1661b6d0d55 (patch) | |
tree | dd9a2ffdc4354e1b9a393806616e09437af3c688 /Carpet/Carpet/src/Evolve.cc | |
parent | 47975cf61813e50f4aa50699066a1985689cf73d (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.cc | 74 |
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 |