aboutsummaryrefslogtreecommitdiff
path: root/Carpet/Carpet/src/Checksum.cc
diff options
context:
space:
mode:
authorschnetter <>2003-08-10 19:59:00 +0000
committerschnetter <>2003-08-10 19:59:00 +0000
commitb8ed9935ab73be68264d06f930a2a9f633e43ad8 (patch)
treec054927b2519398c8fa0c1f59804905846f4f3ec /Carpet/Carpet/src/Checksum.cc
parentab069047323b363e2696b57161a930fefa81bb97 (diff)
Make checksumming and poisoning work again.
Make checksumming and poisoning work again. Modify Scott's three timelevel scheme to work again. darcs-hash:20030810195951-07bb3-b9e99cfe4858b00978f925172c062abd4524a1ba.gz
Diffstat (limited to 'Carpet/Carpet/src/Checksum.cc')
-rw-r--r--Carpet/Carpet/src/Checksum.cc188
1 files changed, 94 insertions, 94 deletions
diff --git a/Carpet/Carpet/src/Checksum.cc b/Carpet/Carpet/src/Checksum.cc
index a8e03ed5c..70dbc46fc 100644
--- a/Carpet/Carpet/src/Checksum.cc
+++ b/Carpet/Carpet/src/Checksum.cc
@@ -9,7 +9,7 @@
#include "carpet.hh"
extern "C" {
- static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Checksum.cc,v 1.11 2003/07/14 15:45:37 schnetter Exp $";
+ static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Checksum.cc,v 1.12 2003/08/10 21:59:51 schnetter Exp $";
CCTK_FILEVERSION(Carpet_Carpet_Checksum_cc);
}
@@ -29,64 +29,58 @@ namespace Carpet {
Checkpoint ("%*sCalculateChecksums", 2*reflevel, "");
- checksums.resize(CCTK_NumVars());
- for (int group=0; group<CCTK_NumGroups(); ++group) {
- const int grouptype = CCTK_GroupTypeI(group);
- if (grouptype == CCTK_GF || reflevel==0) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ checksums.resize(maxreflevels);
+ checksums[reflevel].resize(hh->components(reflevel));
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ checksums[reflevel][component].resize(CCTK_NumGroups());
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
+ if (CCTK_QueryGroupStorageI(cgh, group)) {
- const int n = CCTK_FirstVarIndexI(group) + var;
- const int num_tl = CCTK_NumTimeLevelsFromVarI(n);
- assert (num_tl>0);
- const int min_tl = mintl(where, num_tl);
- const int max_tl = maxtl(where, num_tl);
+ const int nvar = CCTK_NumVarsInGroupI(group);
- checksums[n].resize(maxreflevels);
- checksums[n][reflevel].resize(num_tl);
- for (int tl=min_tl; tl<=max_tl; ++tl) {
- checksums[n][reflevel][tl].resize(hh->components(reflevel));
- BEGIN_COMPONENT_LOOP(cgh, grouptype) {
- checksums[n][reflevel][tl][component].valid = false;
- } END_COMPONENT_LOOP;
- }
- }
- }
- }
-
- for (int group=0; group<CCTK_NumGroups(); ++group) {
- const int grouptype = CCTK_GroupTypeI(group);
- if (grouptype == CCTK_GF || reflevel==0) {
- if (CCTK_QueryGroupStorageI(cgh, group)) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+ checksums[reflevel][component][group].resize(nvar);
+
+ if (reflevel<arrdata[group].hh->reflevels()
+ && component<arrdata[group].hh->components(reflevel)
+ && arrdata[group].hh->is_local(reflevel, component)) {
- const int n = CCTK_FirstVarIndexI(group) + var;
- const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n));
+ const int n0 = CCTK_FirstVarIndexI(group);
+ const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n0));
assert (sz>0);
- const int num_tl = CCTK_NumTimeLevelsFromVarI(n);
+
+ vect<int,dim> size(1);
+ const int gpdim = arrdata[group].info.dim;
+ for (int d=0; d<gpdim; ++d) {
+ size[d] = arrdata[group].info.lsh[d];
+ }
+ const int np = prod(size);
+
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
assert (num_tl>0);
const int min_tl = mintl(where, num_tl);
const int max_tl = maxtl(where, num_tl);
- for (int tl=min_tl; tl<=max_tl; ++tl) {
- BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) {
- const int gpdim = arrdata[group].info.dim;
- int np = 1;
- for (int d=0; d<gpdim; ++d) {
- np *= *CCTK_ArrayGroupSizeI(cgh, d, group);
- }
+ for (int var=0; var<nvar; ++var) {
+ checksums[reflevel][component][group][var].resize(num_tl);
+ for (int tl=min_tl; tl<=max_tl; ++tl) {
+
+ const int n = n0 + var;
const void* data = cgh->data[n][tl];
- int chk = 0;
+ unsigned int chk = 0;
for (int i=0; i<np*sz/(int)sizeof chk; ++i) {
- chk += ((const int*)data)[i];
+ chk += ((const unsigned int*)data)[i];
}
- checksums[n][reflevel][tl][component].sum = chk;
- checksums[n][reflevel][tl][component].valid = true;
- } END_LOCAL_COMPONENT_LOOP;
- } // for tl
- } // for var
- } // if has storage
- } // if reflevel
- } // for group
+
+ checksums[reflevel][component][group][var][tl].sum = chk;
+ checksums[reflevel][component][group][var][tl].valid = true;
+
+ } // for tl
+ } // for var
+ } // if local
+ } // if storage
+ } // for group
+ } END_LOCAL_COMPONENT_LOOP;
+
}
@@ -99,62 +93,68 @@ namespace Carpet {
Checkpoint ("%*sCheckChecksums", 2*reflevel, "");
- assert ((int)checksums.size()==CCTK_NumVars());
- for (int group=0; group<CCTK_NumGroups(); ++group) {
- const int grouptype = CCTK_GroupTypeI(group);
- if (grouptype == CCTK_GF || reflevel==0) {
+ assert ((int)checksums.size()==maxreflevels);
+ assert ((int)checksums[reflevel].size()==hh->components(reflevel));
+ BEGIN_LOCAL_COMPONENT_LOOP(cgh, CCTK_GF) {
+ assert ((int)checksums[reflevel][component].size()==CCTK_NumGroups());
+ for (int group=0; group<CCTK_NumGroups(); ++group) {
if (CCTK_QueryGroupStorageI(cgh, group)) {
- for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) {
+
+ const int nvar = CCTK_NumVarsInGroupI(group);
+
+ assert ((int)checksums[reflevel][component][group].size()==nvar);
+
+ if (reflevel<arrdata[group].hh->reflevels()
+ && component<arrdata[group].hh->components(reflevel)
+ && arrdata[group].hh->is_local(reflevel, component)) {
- const int n = CCTK_FirstVarIndexI(group) + var;
- const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n));
+ const int n0 = CCTK_FirstVarIndexI(group);
+ const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n0));
assert (sz>0);
- const int num_tl = CCTK_NumTimeLevelsFromVarI(n);
+
+ vect<int,dim> size(1);
+ const int gpdim = arrdata[group].info.dim;
+ for (int d=0; d<gpdim; ++d) {
+ size[d] = arrdata[group].info.lsh[d];
+ }
+ const int np = prod(size);
+
+ const int num_tl = CCTK_NumTimeLevelsFromVarI(n0);
assert (num_tl>0);
const int min_tl = mintl(where, num_tl);
const int max_tl = maxtl(where, num_tl);
- assert ((int)checksums[n].size()==maxreflevels);
- assert ((int)checksums[n][reflevel].size()==num_tl);
-
- for (int tl=min_tl; tl<=max_tl; ++tl) {
-
- bool unexpected_change = false;
-
- assert ((int)checksums[n][reflevel][tl].size()
- == hh->components(reflevel));
- BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) {
- if (checksums[n][reflevel][tl][component].valid) {
- const int gpdim = arrdata[group].info.dim;
- int np = 1;
- for (int d=0; d<gpdim; ++d) {
- np *= *CCTK_ArrayGroupSizeI(cgh, d, group);
- }
+ for (int var=0; var<nvar; ++var) {
+ assert ((int)checksums[reflevel][component][group][var].size()==num_tl);
+ for (int tl=min_tl; tl<=max_tl; ++tl) {
+
+ assert (checksums[reflevel][component][group][var][tl].valid);
+ if (checksums[reflevel][component][group][var][tl].valid) {
+
+ const int n = n0 + var;
const void* data = cgh->data[n][tl];
- int chk = 0;
+ unsigned int chk = 0;
for (int i=0; i<np*sz/(int)sizeof chk; ++i) {
- chk += ((const int*)data)[i];
+ chk += ((const unsigned int*)data)[i];
}
- unexpected_change
- = (unexpected_change
- || chk != checksums[n][reflevel][tl][component].sum);
- }
- } END_LOCAL_COMPONENT_LOOP;
-
- if (unexpected_change) {
- char* fullname = CCTK_FullName(n);
- CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
- "Timelevel %d of the variable \"%s\" has changed unexpectedly.",
- tl, fullname);
- free (fullname);
- }
-
- } // for tl
-
- } // for var
- } // if has storage
- } // if reflevel
- } // for group
+ const bool unexpected_change =
+ chk != checksums[reflevel][component][group][var][tl].sum;
+
+ if (unexpected_change) {
+ char* fullname = CCTK_FullName(n);
+ CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Timelevel %d, component %d, refinement level %d of the variable \"%s\" has changed unexpectedly",
+ tl, component, reflevel, fullname);
+ free (fullname);
+ }
+
+ } // if valid
+ } // for tl
+ } // for var
+ } // if local
+ } // if storage
+ } // for group
+ } END_LOCAL_COMPONENT_LOOP;
}
} // namespace Carpet