aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Storage.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Carpet/Carpet/src/Storage.cc')
-rw-r--r--Carpet/Carpet/src/Storage.cc232
1 files changed, 72 insertions, 160 deletions
diff --git a/Carpet/Carpet/src/Storage.cc b/Carpet/Carpet/src/Storage.cc
index a741ff5e7..ae54bf0b0 100644
--- a/Carpet/Carpet/src/Storage.cc
+++ b/Carpet/Carpet/src/Storage.cc
@@ -8,7 +8,7 @@
#include "carpet.hh"
-static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.1 2001/07/04 12:29:47 schnetter Exp $";
+static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.2 2001/07/09 09:00:11 schnetter Exp $";
@@ -41,8 +41,8 @@ namespace Carpet {
// There is a difference between the Cactus time levels and the
// Carpet time levels. If there are n time levels, then the
// Cactus time levels are numbered 0 ... n-1, with the current
- // time level being n-1. In Carpet, the time levels are numbered
- // -(n-1) ... 0, where the current time level is always 0.
+ // time level being 0. In Carpet, the time levels are numbered
+ // -(n-1) ... 0, where the current time level is also 0.
const int n0 = CCTK_FirstVarIndexI(group);
assert (n0>=0);
const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
@@ -50,74 +50,23 @@ namespace Carpet {
const int tmin = 1 - num_tl;
const int tmax = 0;
- switch (CCTK_GroupTypeI(group)) {
-
- case CCTK_SCALAR:
- assert (scdata[group].data.size()==0
- || scdata[group].data[0].size()==0
- || scdata[group].data[0][0].size()==0
- || scdata[group].data[0][0][0] == 0);
- for (int var=0; var<(int)scdata[group].data.size(); ++var) {
- for (int rl=0; rl<(int)scdata[group].data[var].size(); ++rl) {
- for (int tl=0; tl<(int)scdata[group].data[var][rl].size(); ++tl) {
- const int n = n0 + var;
- switch (CCTK_VarTypeI(n)) {
-#define TYPECASE(N,T) \
- case N: \
- scdata[group].data[var][rl][tl] = new T; \
- break;
-#include "typecase"
-#undef TYPECASE
- default:
- UnsupportedVarType(n);
- } // switch
- } // for
- } // for
- } // for
- break;
-
- case CCTK_ARRAY:
- assert (arrdata[group].data.size()==0
- || arrdata[group].data[0] == 0);
- for (int var=0; var<(int)arrdata[group].data.size(); ++var) {
- const int n = n0 + var;
- switch (CCTK_VarTypeI(n)) {
+ assert (arrdata[group].data.size()==0
+ || arrdata[group].data[0] == 0);
+ for (int var=0; var<(int)arrdata[group].data.size(); ++var) {
+ const int n = n0 + var;
+ switch (CCTK_VarTypeI(n)) {
#define TYPECASE(N,T) \
- case N: \
- arrdata[group].data[var] = new gf<T,dim> \
- (CCTK_VarName(n), *arrdata[group].tt, *arrdata[group].dd, \
- tmin, tmax); \
- break;
-#include "typecase"
-#undef TYPECASE
- default:
- UnsupportedVarType(n);
- } // switch
- } // for
- break;
-
- case CCTK_GF:
- assert (gfdata[group].data.size()==0
- || gfdata[group].data[0] == 0);
- for (int var=0; var<(int)gfdata[group].data.size(); ++var) {
- const int n = n0 + var;
- switch (CCTK_VarTypeI(n)) {
-#define TYPECASE(N,T) \
- case N: \
- gfdata[group].data[var] = new gf<T,dim> \
- (CCTK_VarName(n), *tt, *(dh<dim>*)dd, tmin, tmax); \
- break;
+ case N: \
+ arrdata[group].data[var] = new gf<T,dim> \
+ (CCTK_VarName(n), *arrdata[group].tt, *arrdata[group].dd, \
+ tmin, tmax); \
+ break;
#include "typecase"
#undef TYPECASE
- default:
- UnsupportedVarType(n);
- } // switch
- } // for
- break;
-
- default:
- abort();
- }
+ default:
+ UnsupportedVarType(n);
+ } // switch
+ } // for
// Reinitialise Cactus variables
set_component (cgh, component);
@@ -147,82 +96,22 @@ namespace Carpet {
const int n0 = CCTK_FirstVarIndexI(group);
- switch (CCTK_GroupTypeI(group)) {
-
- case CCTK_SCALAR:
- if (scdata[group].data.size()==0
- || scdata[group].data[0].size()==0
- || scdata[group].data[0][0].size()==0
- || scdata[group].data[0][0][0] == 0) {
- // group already has no storage
- break;
- }
- for (int var=0; var<(int)scdata[group].data.size(); ++var) {
- const int n = n0 + var;
- for (int rl=0; rl<(int)scdata[group].data[var].size(); ++rl) {
- for (int tl=0; tl<(int)scdata[group].data[var][rl].size(); ++tl) {
- switch (CCTK_VarTypeI(n)) {
-#define TYPECASE(N,T) \
- case N: \
- delete (T*)scdata[group].data[var][rl][tl]; \
- break;
-#include "typecase"
-#undef TYPECASE
- default:
- UnsupportedVarType(n);
- }
- scdata[group].data[var][rl][tl] = 0;
- }
- }
- }
- break;
-
- case CCTK_ARRAY:
- if (arrdata[group].data.size()==0 || arrdata[group].data[0] == 0) {
- // group already has no storage
- break;
- }
- for (int var=0; var<(int)arrdata[group].data.size(); ++var) {
- const int n = CCTK_FirstVarIndexI(group) + var;
- switch (CCTK_VarTypeI(n)) {
+ assert (arrdata[group].data.size());
+ assert (arrdata[group].data[0]);
+ for (int var=0; var<(int)arrdata[group].data.size(); ++var) {
+ const int n = n0 + var;
+ switch (CCTK_VarTypeI(n)) {
#define TYPECASE(N,T) \
- case N: \
- delete (gf<T,dim>*)arrdata[group].data[var]; \
- break;
-#include "typecase"
-#undef TYPECASE
- default:
- UnsupportedVarType(n);
- } // switch
- arrdata[group].data[var] = 0;
- } // for
- break;
-
- case CCTK_GF:
- if (gfdata[group].data.size()==0
- || gfdata[group].data[0] == 0) {
- // group already has no storage
+ case N: \
+ delete (gf<T,dim>*)arrdata[group].data[var]; \
break;
- }
- for (int var=0; var<(int)gfdata[group].data.size(); ++var) {
- const int n = CCTK_FirstVarIndexI(group) + var;
- switch (CCTK_VarTypeI(n)) {
-#define TYPECASE(N,T) \
- case N: \
- delete (gf<T,dim>*)gfdata[group].data[var]; \
- break;
#include "typecase"
#undef TYPECASE
- default:
- UnsupportedVarType(n);
- } // switch
- gfdata[group].data[var] = 0;
- } // for
- break;
-
- default:
- abort();
- }
+ default:
+ UnsupportedVarType(n);
+ } // switch
+ arrdata[group].data[var] = 0;
+ } // for
// Reinitialise Cactus variables
set_component (cgh, component);
@@ -244,32 +133,55 @@ namespace Carpet {
assert (n>=0 && n<CCTK_NumVars());
const int var = 0;
- switch (CCTK_GroupTypeFromVarI(n)) {
-
- case CCTK_SCALAR: {
- assert (group<(int)scdata.size());
- assert (var<(int)scdata[group].data.size());
- assert (reflevel<(int)scdata[group].data[var].size());
- const int tl=0;
- assert (tl<(int)scdata[group].data[var][reflevel].size());
- return scdata[group].data[var][reflevel][tl] != 0;
+ assert (group<(int)arrdata.size());
+ assert (var<(int)arrdata[group].data.size());
+ return arrdata[group].data[var] != 0;
+ }
+
+
+
+ const int* ArrayGroupSizeB (cGH* cgh, int dir, int group,
+ const char* groupname)
+ {
+ static const int zero = 0;
+
+ if (component == -1) {
+ // global routine
+ return &zero;
}
+
+ if (groupname) {
+ group = CCTK_GroupIndex(groupname);
+ }
+ assert (group>=0 && group<CCTK_NumGroups());
+
+ const int gpdim = arrdata[group].info.dim;
+
+ assert (dir>=0 && dir<gpdim);
+
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
+
+ const int var = CCTK_FirstVarIndexI(group);
+ assert (var>=0 && var<CCTK_NumVars());
- case CCTK_ARRAY: {
assert (group<(int)arrdata.size());
- assert (var<(int)arrdata[group].data.size());
- return arrdata[group].data[var] != 0;
- }
+ return &arrdata[group].info.lsh[dir];
- case CCTK_GF: {
- assert (group<(int)gfdata.size());
- assert (var<(int)gfdata[group].data.size());
- return gfdata[group].data[var] != 0;
- }
+ } else {
+
+ // no storage
+ return &zero;
- default:
- abort();
}
}
+
+
+ int GroupDynamicData (cGH* cgh, int group, cGroupDynamicData* data)
+ {
+ assert (group>=0 && group<CCTK_NumGroups());
+ *data = arrdata[group].info;
+ return 0;
+ }
+
} // namespace Carpet