aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschnetter <schnetter@c3c03602-0f4f-0410-b3fa-d2c81c8a7dc5>2007-03-02 23:25:12 +0000
committerschnetter <schnetter@c3c03602-0f4f-0410-b3fa-d2c81c8a7dc5>2007-03-02 23:25:12 +0000
commit0215b5a212c8c7dc8ec0341bc120234376474aec (patch)
treef9674214fee730fb83ba39bdd6e049113d1f6170
parent81eb9a349bda102b65baf225ba5eb370d221509b (diff)
Don't use == to look for poison, use memcmp instead.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/RotatingSymmetry90/trunk@43 c3c03602-0f4f-0410-b3fa-d2c81c8a7dc5
-rw-r--r--param.ccl6
-rw-r--r--src/rotatingsymmetry90.c64
2 files changed, 45 insertions, 25 deletions
diff --git a/param.ccl b/param.ccl
index 33137ca..8136257 100644
--- a/param.ccl
+++ b/param.ccl
@@ -11,7 +11,7 @@ BOOLEAN poison_boundaries "Fill the symmetry boundary with a poison value before
{
} "no"
-CCTK_REAL poison_value "Poison value (must not occur naturally)"
+CCTK_INT poison_value "Integer value (0..255) used to poison new timelevels (with memset)" STEERABLE=always
{
- *:* :: ""
-} -424242.0
+ 0:255 :: "Must fit into a byte. Use 0 for zero, 255 for nan, and e.g. 113 for a large value."
+} 255
diff --git a/src/rotatingsymmetry90.c b/src/rotatingsymmetry90.c
index 2590749..42776d8 100644
--- a/src/rotatingsymmetry90.c
+++ b/src/rotatingsymmetry90.c
@@ -459,16 +459,18 @@ int BndRot90VI (cGH const * restrict const cctkGH,
case CCTK_VARIABLE_INT:
/* do nothing */
break;
- case CCTK_VARIABLE_REAL:
+ case CCTK_VARIABLE_REAL: {
+ CCTK_REAL * restrict const varptr = varptrs[var];
for (k=imin[0]; k<imax[2]; ++k) {
for (j=imin[1]; j<imax[1]; ++j) {
for (i=imin[2]; i<imax[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i, j, k);
- ((CCTK_REAL * restrict) varptrs[var]) [ind] = poison_value;
+ memset (&varptr[ind], poison_value, sizeof varptr[ind]);
}
}
}
break;
+ }
case CCTK_VARIABLE_COMPLEX:
/* do nothing */
break;
@@ -575,20 +577,35 @@ int BndRot90VI (cGH const * restrict const cctkGH,
case CCTK_VARIABLE_INT:
/* do nothing */
break;
- case CCTK_VARIABLE_REAL:
+ case CCTK_VARIABLE_REAL: {
+ int poison_found = 0;
+ CCTK_REAL const * restrict const varptr = varptrs[var];
+ CCTK_REAL poison;
+ memset (&poison, poison_value, sizeof poison);
for (k=imin[0]; k<imax[2]; ++k) {
for (j=imin[1]; j<imax[1]; ++j) {
for (i=imin[2]; i<imax[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i, j, k);
- CCTK_REAL const val =
- ((CCTK_REAL const * restrict) varptrs[var]) [ind];
- if (val == poison_value) {
- CCTK_WARN (CCTK_WARN_ABORT, "Poison found in symmetry regions -- there is an error in this thorn");
+ if (memcmp (&varptr[ind], &poison, sizeof poison) == 0) {
+ printf (" ijk=[%d,%d,%d]\n", i, j, k);
+ poison_found = 1;
}
}
}
}
+ if (poison_found) {
+ printf ("Poison found:\n");
+ printf (" levfac=[%d,%d,%d]\n", cctk_levfac[0], cctk_levfac[1], cctk_levfac[2]);
+ printf (" origin_space=[%g,%g,%g]\n", cctk_origin_space[0], cctk_origin_space[1], cctk_origin_space[2]);
+ printf (" delta_space=[%g,%g,%g]\n", cctk_delta_space[0], cctk_delta_space[1], cctk_delta_space[2]);
+ printf (" lbnd=[%d,%d,%d]\n", cctk_lbnd[0], cctk_lbnd[1], cctk_lbnd[2]);
+ printf (" lsh=[%d,%d,%d]\n", cctk_lsh[0], cctk_lsh[1], cctk_lsh[2]);
+ printf (" gsh=[%d,%d,%d]\n", cctk_gsh[0], cctk_gsh[1], cctk_gsh[2]);
+ printf (" bbox=[%d,%d,%d,%d,%d,%d]\n", cctk_bbox[0], cctk_bbox[1], cctk_bbox[2], cctk_bbox[3], cctk_bbox[4], cctk_bbox[5]);
+ CCTK_WARN (CCTK_WARN_ABORT, "Poison found in symmetry regions -- there is an error in this thorn");
+ }
break;
+ }
case CCTK_VARIABLE_COMPLEX:
/* do nothing */
break;
@@ -619,41 +636,44 @@ int BndRot90VI (cGH const * restrict const cctkGH,
}
assert (group.dim == DIM);
switch (group.vartype) {
- case CCTK_VARIABLE_INT:
+ case CCTK_VARIABLE_INT: {
+ CCTK_INT * restrict const varptr = varptrs[var];
for (k=imin[2]; k<imax[2]; ++k) {
for (j=imin[1]; j<imax[1]; ++j) {
for (i=imin[0]; i<imax[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i, j, k);
- ((CCTK_INT * restrict) varptrs[var]) [ind] *= -1;
+ varptr[ind] *= -1;
}
}
}
break;
- case CCTK_VARIABLE_REAL:
+ }
+ case CCTK_VARIABLE_REAL: {
+ CCTK_REAL * restrict const varptr = varptrs[var];
for (k=imin[2]; k<imax[2]; ++k) {
for (j=imin[1]; j<imax[1]; ++j) {
for (i=imin[0]; i<imax[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i, j, k);
- ((CCTK_REAL * restrict) varptrs[var]) [ind] *= -1;
+ varptr[ind] *= -1;
}
}
}
break;
- case CCTK_VARIABLE_COMPLEX:
- {
- CCTK_COMPLEX const czero = CCTK_Cmplx (0.0, 0.0);
- for (k=imin[2]; k<imax[2]; ++k) {
- for (j=imin[1]; j<imax[1]; ++j) {
- for (i=imin[0]; i<imax[0]; ++i) {
- const int ind = CCTK_GFINDEX3D(cctkGH, i, j, k);
- CCTK_COMPLEX * restrict const ptr =
- & ((CCTK_COMPLEX * restrict) varptrs[var]) [ind];
- * ptr = CCTK_CmplxSub (czero, * ptr);
- }
+ }
+ case CCTK_VARIABLE_COMPLEX: {
+ CCTK_COMPLEX const czero = CCTK_Cmplx (0.0, 0.0);
+ CCTK_COMPLEX * restrict const varptr = varptrs[var];
+ for (k=imin[2]; k<imax[2]; ++k) {
+ for (j=imin[1]; j<imax[1]; ++j) {
+ for (i=imin[0]; i<imax[0]; ++i) {
+ const int ind = CCTK_GFINDEX3D(cctkGH, i, j, k);
+ CCTK_COMPLEX * restrict const ptr = & varptr[ind];
+ * ptr = CCTK_CmplxSub (czero, * ptr);
}
}
}
break;
+ }
default:
assert (0);
} /* switch grouptype */