aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Cycle.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Carpet/Carpet/src/Cycle.cc')
-rw-r--r--Carpet/Carpet/src/Cycle.cc132
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