diff options
Diffstat (limited to 'Carpet/Carpet/src/Cycle.cc')
-rw-r--r-- | Carpet/Carpet/src/Cycle.cc | 132 |
1 files changed, 88 insertions, 44 deletions
diff --git a/Carpet/Carpet/src/Cycle.cc b/Carpet/Carpet/src/Cycle.cc index 932aab288..4d14d5a60 100644 --- a/Carpet/Carpet/src/Cycle.cc +++ b/Carpet/Carpet/src/Cycle.cc @@ -9,7 +9,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.15 2003/11/05 16:18:37 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.16 2004/01/25 14:57:27 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Cycle_cc); } @@ -23,22 +23,44 @@ namespace Carpet { void CycleTimeLevels (const cGH* cgh) { - Checkpoint ("%*sCycleTimeLevels", 2*reflevel, ""); + Checkpoint ("CycleTimeLevels"); + assert (is_level_mode()); for (int group=0; group<CCTK_NumGroups(); ++group) { - if (reflevel<arrdata[group].hh->reflevels() - && CCTK_QueryGroupStorageI(cgh, group)) { - for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { - - assert (group<(int)arrdata.size()); - assert (var<(int)arrdata[group].data.size()); - for (int c=0; c<arrdata[group].hh->components(reflevel); ++c) { - arrdata[group].data[var]->cycle (reflevel, c, mglevel); - } - - } - } - } + assert (group<(int)arrdata.size()); + if (CCTK_QueryGroupStorageI(cgh, group)) { + switch (CCTK_GroupTypeI(group)) { + + case CCTK_GF: + assert (reflevel>=0 && reflevel<reflevels); + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + for (int m=0; m<maps; ++m) { + assert (m<(int)arrdata[group].size()); + assert (var<(int)arrdata[group][m].data.size()); + for (int c=0; c<arrdata[group][m].hh->components(reflevel); ++c) { + arrdata[group][m].data[var]->cycle (reflevel, c, mglevel); + } + } + } + break; + + case CCTK_SCALAR: + case CCTK_ARRAY: + if (do_global_mode) { + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + assert (var<(int)arrdata[group][0].data.size()); + for (int c=0; c<arrdata[group][0].hh->components(0); ++c) { + arrdata[group][0].data[var]->cycle (0, c, mglevel); + } + } + } + break; + + default: + assert (0); + } // switch grouptype + } // if storage + } // for group } @@ -46,38 +68,60 @@ namespace Carpet { void FlipTimeLevels (const cGH* cgh) { Checkpoint ("FlipTimeLevels"); + assert (is_level_mode()); for (int group=0; group<CCTK_NumGroups(); ++group) { + assert (group<(int)arrdata.size()); if (CCTK_QueryGroupStorageI(cgh, group)) { - - const int var0 = CCTK_FirstVarIndexI(group); - assert (var0>=0); - const int num_tl = CCTK_NumTimeLevelsFromVarI(var0); - switch (num_tl) { - case 1: - // Do nothing - break; - case 3: - // Flip - for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { - - assert (group<(int)arrdata.size()); - assert (var<(int)arrdata[group].data.size()); - for (int rl=0; rl<arrdata[group].hh->reflevels(); ++rl) { - for (int c=0; c<arrdata[group].hh->components(rl); ++c) { - arrdata[group].data[var]->flip (rl, c, mglevel); - } - } - - } - break; - default: - // Error - assert (0); - } // switch - - } - } + const int num_vars = CCTK_NumVarsInGroupI(group); + if (num_vars>0) { + const int var0 = CCTK_FirstVarIndexI(group); + assert (var0>=0); + const int num_tl = CCTK_NumTimeLevelsFromVarI(var0); + switch (num_tl) { + case 1: + // Do nothing + break; + case 3: + // Flip + switch (CCTK_GroupTypeI(group)) { + + case CCTK_GF: + for (int m=0; m<(int)arrdata[group].size(); ++m) { + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + assert (var<(int)arrdata[group][m].data.size()); + for (int c=0; c<arrdata[group][m].hh->components(reflevel); ++c) { + arrdata[group][m].data[var]->flip (reflevel, c, mglevel); + } + } + } + break; + + case CCTK_SCALAR: + case CCTK_ARRAY: + if (do_global_mode) { + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + assert (var<(int)arrdata[group][0].data.size()); + for (int c=0; c<arrdata[group][0].hh->components(0); ++c) { + arrdata[group][0].data[var]->flip (0, c, mglevel); + } + } + } + break; + + default: + assert (0); + } // switch grouptype + break; + + default: + // Error + assert (0); + } // switch num_tl + + } // if num_vars>0 + } // if storage + } // for group } } // namespace Carpet |