diff options
author | schnetter <> | 2001-04-06 08:37:00 +0000 |
---|---|---|
committer | schnetter <> | 2001-04-06 08:37:00 +0000 |
commit | 002f866212960aabd2cd6d96420c282c563d4259 (patch) | |
tree | 5e32f32e114d8f651a1ecd174a9fefcdeae9d068 /Carpet | |
parent | 3439cae5dec6c62b1ecba57059dd359ad2a4cc3f (diff) |
carpet.hh carpet.cc: Added more poisoning of grid functions. All grid
carpet.hh carpet.cc: Added more poisoning of grid functions. All grid
functions with have their storage allocated are now also poisoned.
gh.hh: Reformatted comment.
options/*: Added new set of options plus a description.
darcs-hash:20010406083735-07bb3-90a9c2b40c7cdd2bc815cad334e3e73291b894cf.gz
Diffstat (limited to 'Carpet')
-rw-r--r-- | Carpet/Carpet/options/carpet-lilypond-lf95 | 19 | ||||
-rw-r--r-- | Carpet/Carpet/src/carpet.cc | 233 | ||||
-rw-r--r-- | Carpet/Carpet/src/carpet.hh | 8 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/gh.hh | 6 |
4 files changed, 176 insertions, 90 deletions
diff --git a/Carpet/Carpet/options/carpet-lilypond-lf95 b/Carpet/Carpet/options/carpet-lilypond-lf95 index 7ce0f298f..c13e0dd41 100644 --- a/Carpet/Carpet/options/carpet-lilypond-lf95 +++ b/Carpet/Carpet/options/carpet-lilypond-lf95 @@ -1,13 +1,13 @@ -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-lf95,v 1.6 2002/10/16 17:33:52 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/options/carpet-lilypond-lf95,v 1.1 2001/04/06 10:37:35 schnetter Exp $ LAHEY = /usr/local/lf9560 -CPP = cpp -traditional -DCARPET_REAL +CPP = cpp -traditional -DTMPL_EXPLICIT -DCARPET_REAL F77 = lf95 F90 = lf95 CFLAGS = -g3 -CXXFLAGS = -g3 -DCARPET_REAL -ftemplate-depth-30 +CXXFLAGS = -g3 -DTMPL_EXPLICIT -DCARPET_REAL -ftemplate-depth-30 F77FLAGS = --pca F90FLAGS = --pca LDFLAGS = -g3 @@ -18,22 +18,19 @@ CXX_DEBUG_FLAGS = F77_DEBUG_FLAGS = -g --chk F90_DEBUG_FLAGS = -g --chk -C_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro -CXX_OPTIMISE_FLAGS = -O2 -funroll-loops -march=pentiumpro +C_OPTIMISE_FLAGS = -O3 -funroll-loops -march=pentiumpro +CXX_OPTIMISE_FLAGS = -O3 -funroll-loops -march=pentiumpro F90_OPTIMISE_FLAGS = -O --tpp F77_OPTIMISE_FLAGS = -O --tpp -C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations -CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations +C_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations -Winline +CXX_WARN_FLAGS = -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wstrict-prototypes -Wmissing-declarations -Winline F90_WARN_FLAGS = --warn F77_WARN_FLAGS = --warn SYS_INC_DIRS = /home/eschnett/proj/FlexIO -LIBDIRS = /home/eschnett/proj/FlexIO /usr/local/lf9560/lib +LIBDIRS = /home/eschnett/proj/FlexIO LIBS = AMR h5io hdfio hlio ieeeio hdf5 mfhdf df jpeg z crypt fj9i6 fj9f6 fj9e6 fccx86_6a m HDF5 = yes MPI = MPICH - -# PTHREADS -PTHREADS = yes diff --git a/Carpet/Carpet/src/carpet.cc b/Carpet/Carpet/src/carpet.cc index e17b24c80..ba30f9150 100644 --- a/Carpet/Carpet/src/carpet.cc +++ b/Carpet/Carpet/src/carpet.cc @@ -35,7 +35,7 @@ #include "carpet.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.21 2001/03/30 00:21:24 eschnett Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Attic/carpet.cc,v 1.22 2001/04/06 10:37:35 schnetter Exp $"; @@ -49,9 +49,11 @@ namespace Carpet { // where=0: all time levels but next time level // where=1: only next time level - // but never if there is only one time level + // but never if there is only one time level + // where=2: all time levels static void Poison (cGH* cgh, int where); + static void PoisonGroup (cGH* cgh, int group, int where); static void PoisonCheck (cGH* cgh, int where); static void CalculateChecksums (cGH* cgh, int where); @@ -110,7 +112,7 @@ namespace Carpet { vector<gfdesc> gfdata; // [group] // Checksums - vector<vector<vector<vector<int> > > > checksums; // [var][rl][tl][c] + vector<vector<vector<vector<ckdesc> > > > checksums; // [n][rl][tl][c] @@ -588,7 +590,7 @@ namespace Carpet { { DECLARE_CCTK_PARAMETERS; - assert (component == -1); + if (hh->components(reflevel) > 1) assert (component == -1); Checkpoint ("%*sSyncGroup %s", 2*reflevel, "", groupname); @@ -604,7 +606,7 @@ namespace Carpet { const int n0 = CCTK_FirstVarIndexI(group); const int num_tl = CCTK_NumTimeLevelsFromVarI(n0); - const int tl = activetimelevel; + const int tl = min(activetimelevel, num_tl-1); switch (CCTK_GroupTypeI(group)) { @@ -685,7 +687,8 @@ namespace Carpet { switch (CCTK_GroupTypeI(group)) { case CCTK_SCALAR: - if (scdata[group].data.size()==0 || scdata[group].data[0].size()==0 + 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 storage @@ -759,6 +762,9 @@ namespace Carpet { abort(); } + set_component (cgh, component); + PoisonGroup (cgh, group, 2); + // The return values seems to be whether storage was enabled // previously, and not whether storage is enabled now. return retval; @@ -774,18 +780,20 @@ namespace Carpet { const int group = CCTK_GroupIndex(groupname); assert (group>=0 && group<CCTK_NumGroups()); + 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 + 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 = CCTK_FirstVarIndexI(group) + var; + const int n = n0 + var; for (int rl=0; rl<(int)scdata[group].data[var].size(); ++rl) { for (int ti=0; ti<(int)scdata[group].data[var][rl].size(); ++ti) { switch (CCTK_VarTypeI(n)) { @@ -851,6 +859,8 @@ namespace Carpet { abort(); } + set_component (cgh, component); + // The return value seems to be 1 (success) no matter whether // storage has actually been disabled. return 1; @@ -1178,56 +1188,97 @@ namespace Carpet { { DECLARE_CCTK_PARAMETERS; + assert (where>=0 && where<=2); + if (! poison_new_timelevels) return; Checkpoint ("%*sPoison", 2*reflevel, ""); for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_QueryGroupStorageI(cgh, group)) { - for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { - - const int n = CCTK_FirstVarIndexI(group) + var; - const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n)); - assert (sz>0); - - const int num_tl = CCTK_NumTimeLevelsFromVarI(n); - const int min_tl = where ? max(num_tl-1,1) : 0; - const int max_tl = where ? num_tl-1 : num_tl-2; - for (int tl=min_tl; tl<=max_tl; ++tl) { - - switch (CCTK_GroupTypeFromVarI(n)) { - case CCTK_SCALAR: { - assert (group<(int)scdata.size()); - assert (var<(int)scdata[group].data.size()); - memset (cgh->data[n][tl], poison_value, sz); - break; - } - case CCTK_ARRAY: - case CCTK_GF: { - BEGIN_COMPONENT_LOOP(cgh) { - if (hh->is_local(reflevel,component)) { - int np = 1; - for (int d=0; d<dim; ++d) { - np *= *CCTK_ArrayGroupSizeI(cgh, d, group); - } - memset (cgh->data[n][tl], poison_value, np*sz); - } - } END_COMPONENT_LOOP(cgh); - break; - } - default: - abort(); - } - - } // for tl - - } // for var + PoisonGroup (cgh, group, where); } // if has storage } // for group } + void PoisonGroup (cGH* cgh, const int group, const int where) + { + DECLARE_CCTK_PARAMETERS; + + assert (group>=0 && group<CCTK_NumGroups()); + assert (where>=0 && where<=2); + + if (! poison_new_timelevels) return; + + Checkpoint ("%*sPoisonGroup %s", 2*reflevel, "", CCTK_GroupName(group)); + + if (! CCTK_QueryGroupStorageI(cgh, group)) { + CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, + "Cannot poison group \"%s\" because it has no storage", + CCTK_GroupName(group)); + return; + } + + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + + const int n = CCTK_FirstVarIndexI(group) + var; + const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n)); + assert (sz>0); + + const int num_tl = CCTK_NumTimeLevelsFromVarI(n); + int min_tl, max_tl; + switch (where) { + case 0: + min_tl = 0; + max_tl = num_tl-2; + break; + case 1: + min_tl = max(num_tl-1,1); + max_tl = num_tl-1; + break; + case 2: + min_tl = 0; + max_tl = num_tl-1; + break; + default: + abort(); + } + + for (int tl=min_tl; tl<=max_tl; ++tl) { + + switch (CCTK_GroupTypeFromVarI(n)) { + case CCTK_SCALAR: { + assert (group<(int)scdata.size()); + assert (var<(int)scdata[group].data.size()); + memset (cgh->data[n][tl], poison_value, sz); + break; + } + case CCTK_ARRAY: + case CCTK_GF: { + BEGIN_COMPONENT_LOOP(cgh) { + if (hh->is_local(reflevel,component)) { + int np = 1; + for (int d=0; d<dim; ++d) { + np *= *CCTK_ArrayGroupSizeI(cgh, d, group); + } + memset (cgh->data[n][tl], poison_value, np*sz); + } + } END_COMPONENT_LOOP(cgh); + break; + } + default: + abort(); + } + + } // for tl + + } // for var + } + + + void PoisonCheck (cGH* cgh, const int where) { DECLARE_CCTK_PARAMETERS; @@ -1319,7 +1370,7 @@ namespace Carpet { if (numpoison>10) { char* fullname = CCTK_FullName(n); CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "The variable \"%s\" contains poison at alltogether %d locations", + "The variable \"%s\" contains poison at %d locations; not all were printed.", fullname, numpoison); free (fullname); } @@ -1351,6 +1402,40 @@ namespace Carpet { checksums.resize(CCTK_NumVars()); for (int group=0; group<CCTK_NumGroups(); ++group) { + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + const int n = CCTK_FirstVarIndexI(group) + var; + const int num_tl = CCTK_NumTimeLevelsFromVarI(n); + const int min_tl = where ? max(num_tl-1,1) : 0; + const int max_tl = where ? num_tl-1 : num_tl-2; + checksums[n].resize(maxreflevels); + checksums[n][reflevel].resize(num_tl); + for (int tl=min_tl; tl<=max_tl; ++tl) { + switch (CCTK_GroupTypeFromVarI(n)) { + + case CCTK_SCALAR: { + checksums[n][reflevel][tl].resize(1); + const int c=0; + checksums[n][reflevel][tl][c].valid = false; + break; + } + + case CCTK_ARRAY: + case CCTK_GF: { + checksums[n][reflevel][tl].resize(hh->components(reflevel)); + BEGIN_COMPONENT_LOOP(cgh) { + checksums[n][reflevel][tl][component].valid = false; + } END_COMPONENT_LOOP(cgh); + break; + } + + default: + abort(); + } + } + } + } + + for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_QueryGroupStorageI(cgh, group)) { for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { @@ -1360,26 +1445,23 @@ namespace Carpet { const int num_tl = CCTK_NumTimeLevelsFromVarI(n); const int min_tl = where ? max(num_tl-1,1) : 0; const int max_tl = where ? num_tl-1 : num_tl-2; - checksums[n].resize(maxreflevels); - checksums[n][reflevel].resize(num_tl); for (int tl=min_tl; tl<=max_tl; ++tl) { switch (CCTK_GroupTypeFromVarI(n)) { case CCTK_SCALAR: { - checksums[n][reflevel][tl].resize(1); const int c=0; int chk = 0; const void* data = cgh->data[n][tl]; for (int i=0; i<sz/(int)sizeof(chk); ++i) { chk += ((const int*)data)[i]; } - checksums[n][reflevel][tl][c] = chk; + checksums[n][reflevel][tl][c].sum = chk; + checksums[n][reflevel][tl][c].valid = true; break; } case CCTK_ARRAY: case CCTK_GF: { - checksums[n][reflevel][tl].resize(hh->components(reflevel)); BEGIN_COMPONENT_LOOP(cgh) { if (hh->is_local(reflevel,component)) { int np = 1; @@ -1391,7 +1473,8 @@ namespace Carpet { for (int i=0; i<np*sz/(int)sizeof(chk); ++i) { chk += ((const int*)data)[i]; } - checksums[n][reflevel][tl][component] = chk; + checksums[n][reflevel][tl][component].sum = chk; + checksums[n][reflevel][tl][component].valid = true; } } END_COMPONENT_LOOP(cgh); break; @@ -1440,13 +1523,16 @@ namespace Carpet { case CCTK_SCALAR: { assert ((int)checksums[n][reflevel][tl].size()==1); const int c=0; - int chk = 0; - const void* data = cgh->data[n][tl]; - for (int i=0; i<sz/(int)sizeof(chk); ++i) { - chk += ((const int*)data)[i]; + if (checksums[n][reflevel][tl][c].valid) { + int chk = 0; + const void* data = cgh->data[n][tl]; + for (int i=0; i<sz/(int)sizeof(chk); ++i) { + chk += ((const int*)data)[i]; + } + unexpected_change + = (unexpected_change + || chk != checksums[n][reflevel][tl][c].sum); } - unexpected_change = (unexpected_change - || chk != checksums[n][reflevel][tl][c]); break; } @@ -1455,21 +1541,20 @@ namespace Carpet { assert ((int)checksums[n][reflevel][tl].size() ==hh->components(reflevel)); BEGIN_COMPONENT_LOOP(cgh) { - if (hh->is_local(reflevel,component)) { - int np = 1; - for (int d=0; d<dim; ++d) { - np *= *CCTK_ArrayGroupSizeI(cgh, d, group); - } - const void* data = cgh->data[n][tl]; - int chk = 0; - for (int i=0; i<np*sz/(int)sizeof(chk); ++i) { - chk += ((const int*)data)[i]; - } - unexpected_change - = (unexpected_change - || chk != checksums[n][reflevel][tl][component]); - if (chk != checksums[n][reflevel][tl][component]) { - cout << "n tl rl c " << n << " " << tl << " " << reflevel << " " << component << endl; + if (checksums[n][reflevel][tl][component].valid) { + if (hh->is_local(reflevel,component)) { + int np = 1; + for (int d=0; d<dim; ++d) { + np *= *CCTK_ArrayGroupSizeI(cgh, d, group); + } + const void* data = cgh->data[n][tl]; + int chk = 0; + for (int i=0; i<np*sz/(int)sizeof(chk); ++i) { + chk += ((const int*)data)[i]; + } + unexpected_change + = (unexpected_change + || chk != checksums[n][reflevel][tl][component].sum); } } } END_COMPONENT_LOOP(cgh); diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh index 4ca400828..8b90ee00a 100644 --- a/Carpet/Carpet/src/carpet.hh +++ b/Carpet/Carpet/src/carpet.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.6 2001/03/30 00:21:24 eschnett Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet.hh,v 1.7 2001/04/06 10:37:36 schnetter Exp $ #include <vector> @@ -76,7 +76,11 @@ namespace Carpet { extern vector<gfdesc> gfdata; // [group] // Checksums - extern vector<vector<vector<vector<int> > > > checksums; // [n][rl][tl][c] + struct ckdesc { + bool valid; + int sum; + }; + extern vector<vector<vector<vector<ckdesc> > > > checksums; // [n][rl][tl][c] diff --git a/Carpet/CarpetLib/src/gh.hh b/Carpet/CarpetLib/src/gh.hh index 9d9d7939b..48f166e2b 100644 --- a/Carpet/CarpetLib/src/gh.hh +++ b/Carpet/CarpetLib/src/gh.hh @@ -1,13 +1,13 @@ /*************************************************************************** gh.hh - Grid Hierarchy - bounding boxes for each multigrid level of each - component of each refinement level + bounding boxes for each multigrid level of each + component of each refinement level ------------------- begin : Sun Jun 11 2000 copyright : (C) 2000 by Erik Schnetter email : schnetter@astro.psu.edu - $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.hh,v 1.4 2001/03/27 22:26:31 eschnett Exp $ + $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/gh.hh,v 1.5 2001/04/06 10:37:36 schnetter Exp $ ***************************************************************************/ |