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.cc115
1 files changed, 115 insertions, 0 deletions
diff --git a/Carpet/Carpet/src/Cycle.cc b/Carpet/Carpet/src/Cycle.cc
new file mode 100644
index 000000000..69a195563
--- /dev/null
+++ b/Carpet/Carpet/src/Cycle.cc
@@ -0,0 +1,115 @@
+#include <assert.h>
+#include <stdlib.h>
+
+#include "cctk.h"
+
+#include "ggf.hh"
+#include "gh.hh"
+
+#include "carpet.hh"
+
+extern "C" {
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Cycle.cc,v 1.19 2004/05/21 18:16:23 schnetter Exp $";
+ CCTK_FILEVERSION(Carpet_Carpet_Cycle_cc);
+}
+
+
+
+namespace Carpet {
+
+ using namespace std;
+
+
+
+ void CycleTimeLevels (const cGH* cgh)
+ {
+ Checkpoint ("CycleTimeLevels");
+ assert (is_level_mode());
+
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ 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<(int)arrdata.at(group).size(); ++m) {
+ assert (m<(int)arrdata.at(group).size());
+ assert (var<(int)arrdata.at(group).at(m).data.size());
+ for (int c=0; c<arrdata.at(group).at(m).hh->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(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.at(group).at(0).data.size());
+ for (int c=0; c<arrdata.at(group).at(0).hh->components(0); ++c) {
+ arrdata.at(group).at(0).data.at(var)->cycle (0, c, mglevel);
+ }
+ }
+ }
+ break;
+
+ default:
+ assert (0);
+ } // switch grouptype
+ } // if storage
+ } // for group
+ }
+
+
+
+ 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 num_vars = CCTK_NumVarsInGroupI(group);
+ if (num_vars>0) {
+ const int var0 = CCTK_FirstVarIndexI(group);
+ assert (var0>=0);
+
+ switch (CCTK_GroupTypeI(group)) {
+
+ case CCTK_GF:
+ for (int m=0; m<(int)arrdata.at(group).size(); ++m) {
+ for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ assert (var<(int)arrdata.at(group).at(m).data.size());
+ for (int c=0; c<arrdata.at(group).at(m).hh->components(reflevel); ++c) {
+ arrdata.at(group).at(m).data.at(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.at(group).at(0).data.size());
+ for (int c=0; c<arrdata.at(group).at(0).hh->components(0); ++c) {
+ arrdata.at(group).at(0).data.at(var)->flip (0, c, mglevel);
+ }
+ }
+ }
+ break;
+
+ default:
+ assert (0);
+ } // switch grouptype
+
+ } // if num_vars>0
+ } // if storage
+ } // for group
+ }
+
+} // namespace Carpet