aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrhaas <rhaas@732e31d2-b375-409b-9bd3-699c3b2c9da5>2009-11-18 01:57:47 +0000
committerrhaas <rhaas@732e31d2-b375-409b-9bd3-699c3b2c9da5>2009-11-18 01:57:47 +0000
commit30f957f231bc891dadcd28bb30d660db98372272 (patch)
tree1b0922d3029e27eea96ec718b51615354f9c122e
parentc93da26c550147a572395d6d349227b9b386e362 (diff)
add tests using interger GFs, add test with stride==2
git-svn-id: http://svn.cactuscode.org/arrangements/CactusNumerical/SlabTest/trunk@11 732e31d2-b375-409b-9bd3-699c3b2c9da5
-rw-r--r--interface.ccl5
-rw-r--r--schedule.ccl2
-rw-r--r--src/slabtest.c100
3 files changed, 81 insertions, 26 deletions
diff --git a/interface.ccl b/interface.ccl
index 4660510..ebd35b1 100644
--- a/interface.ccl
+++ b/interface.ccl
@@ -14,6 +14,11 @@ CCTK_REAL gfs TYPE=gf
gfx gfy gfz
} "grid functions"
+CCTK_INT igfs TYPE=gf
+{
+ igfx igfy igfz
+} "integer grid functions"
+
CCTK_REAL a1s TYPE=array DIM=1 SIZE=10
{
a1x a1y a1z
diff --git a/schedule.ccl b/schedule.ccl
index 7b92a2e..bb2d75e 100644
--- a/schedule.ccl
+++ b/schedule.ccl
@@ -6,5 +6,5 @@ STORAGE: success
SCHEDULE SlabTest_Test AT initial
{
LANG: C
- STORAGE: gfs a1s a2s a3s
+ STORAGE: gfs a1s a2s a3s igfs
} "Test Slab transfer routines"
diff --git a/src/slabtest.c b/src/slabtest.c
index e120fcb..a06cbab 100644
--- a/src/slabtest.c
+++ b/src/slabtest.c
@@ -25,12 +25,17 @@ runtest (CCTK_ARGUMENTS,
int i, j, k;
int mismatch;
+
+# define nvars 2
+ const CCTK_INT vartypes[nvars] = {CCTK_VARIABLE_REAL, CCTK_VARIABLE_INT};
+ const void *srcdataptrs[nvars] = {gfx, igfx};
+ void *dstdataptrs[nvars] = {gfy, igfy};
int ierr;
- ierr = Slab_Transfer
+ ierr = Slab_MultiTransfer
(cctkGH, cctk_dim, info, -1,
- CCTK_VARIABLE_REAL, gfx, CCTK_VARIABLE_REAL, gfy);
+ nvars, vartypes, srcdataptrs, vartypes, dstdataptrs);
assert (!ierr);
mismatch = 0;
@@ -40,11 +45,18 @@ runtest (CCTK_ARGUMENTS,
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
if (gfy[ind] != gfz[ind]) {
printf
- ("Mismatch at [%d,%d,%d]: should be %g, is %g\n",
+ ("Real valued mismatch at [%d,%d,%d]: should be %g, is %g\n",
cctk_lbnd[0] + i, cctk_lbnd[1] + j, cctk_lbnd[2] + k,
(double) gfz[ind], (double) gfy[ind]);
mismatch = 1;
}
+ if (igfy[ind] != igfz[ind]) {
+ printf
+ ("Integer valued mismatch at [%d,%d,%d]: should be %d, is %d\n",
+ cctk_lbnd[0] + i, cctk_lbnd[1] + j, cctk_lbnd[2] + k,
+ (int) igfz[ind], (int) igfy[ind]);
+ mismatch = 1;
+ }
}
}
}
@@ -88,9 +100,9 @@ void SlabTest_Test (CCTK_ARGUMENTS)
for (j=0; j<cctk_lsh[1]; ++j) {
for (i=0; i<cctk_lsh[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
- gfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
- gfy[ind] = - (i + 3 * j + 5 * k);
- gfz[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
+ gfz[ind] = igfz[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
}
}
}
@@ -117,9 +129,9 @@ void SlabTest_Test (CCTK_ARGUMENTS)
for (j=0; j<cctk_lsh[1]; ++j) {
for (i=0; i<cctk_lsh[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
- gfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
- gfy[ind] = - (i + 3 * j + 5 * k);
- gfz[ind] = 10000 * (cctk_gsh[0] - 1 - cctk_lbnd[0] - i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
+ gfz[ind] = igfz[ind] = 10000 * (cctk_gsh[0] - 1 - cctk_lbnd[0] - i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
}
}
}
@@ -146,9 +158,9 @@ void SlabTest_Test (CCTK_ARGUMENTS)
for (j=0; j<cctk_lsh[1]; ++j) {
for (i=0; i<cctk_lsh[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
- gfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
- gfy[ind] = - (i + 3 * j + 5 * k);
- gfz[ind] = 10000 * (cctk_gsh[0] - 1 - cctk_lbnd[0] - i) + 100 * (cctk_gsh[1] - 1 - cctk_lbnd[1] - j) + (cctk_gsh[2] - 1 - cctk_lbnd[2] - k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
+ gfz[ind] = igfz[ind] = 10000 * (cctk_gsh[0] - 1 - cctk_lbnd[0] - i) + 100 * (cctk_gsh[1] - 1 - cctk_lbnd[1] - j) + (cctk_gsh[2] - 1 - cctk_lbnd[2] - k);
}
}
}
@@ -175,14 +187,15 @@ void SlabTest_Test (CCTK_ARGUMENTS)
for (j=0; j<cctk_lsh[1]; ++j) {
for (i=0; i<cctk_lsh[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
- gfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
- gfy[ind] = - (i + 3 * j + 5 * k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
if (cctk_lbnd[0] + i >= 2 && cctk_lbnd[0] + i < 5
&& cctk_lbnd[1] + j >= 3 && cctk_lbnd[1] + j < 5
&& cctk_lbnd[2] + k >= 4 && cctk_lbnd[2] + k < 6) {
- gfz[ind] = 10000 * (cctk_lbnd[0] + i + 2) + 100 * (cctk_lbnd[1] + j + 1) + (cctk_lbnd[2] + k - 1);
+ gfz[ind] = igfz[ind] = 10000 * (cctk_lbnd[0] + i + 2) + 100 * (cctk_lbnd[1] + j + 1) + (cctk_lbnd[2] + k - 1);
} else {
gfz[ind] = gfy[ind];
+ igfz[ind] = igfy[ind];
}
}
}
@@ -218,14 +231,15 @@ void SlabTest_Test (CCTK_ARGUMENTS)
for (j=0; j<cctk_lsh[1]; ++j) {
for (i=0; i<cctk_lsh[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
- gfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
- gfy[ind] = - (i + 3 * j + 5 * k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
if (cctk_lbnd[0] + i >= 2 && cctk_lbnd[0] + i < 4
&& cctk_lbnd[1] + j >= 3 && cctk_lbnd[1] + j < 6
&& cctk_lbnd[2] + k >= 4 && cctk_lbnd[2] + k < 6) {
- gfz[ind] = 10000 * (cctk_lbnd[2] + k + 1) + 100 * (cctk_lbnd[1] + j + 2) + (cctk_lbnd[0] + i - 1);
+ gfz[ind] = igfz[ind] = 10000 * (cctk_lbnd[2] + k + 1) + 100 * (cctk_lbnd[1] + j + 2) + (cctk_lbnd[0] + i - 1);
} else {
gfz[ind] = gfy[ind];
+ igfz[ind] = igfy[ind];
}
}
}
@@ -263,14 +277,15 @@ void SlabTest_Test (CCTK_ARGUMENTS)
for (j=0; j<cctk_lsh[1]; ++j) {
for (i=0; i<cctk_lsh[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
- gfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
- gfy[ind] = - (i + 3 * j + 5 * k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
if (cctk_lbnd[0] + i >= 2 && cctk_lbnd[0] + i < 5
&& cctk_lbnd[1] + j >= 3 && cctk_lbnd[1] + j < 5
&& cctk_lbnd[2] + k >= 4 && cctk_lbnd[2] + k < 6) {
- gfz[ind] = 10000 * (cctk_lbnd[2] + k + 1) + 100 * (cctk_lbnd[0] + i + 3) + (cctk_lbnd[1] + j - 2);
+ gfz[ind] = igfz[ind] = 10000 * (cctk_lbnd[2] + k + 1) + 100 * (cctk_lbnd[0] + i + 3) + (cctk_lbnd[1] + j - 2);
} else {
gfz[ind] = gfy[ind];
+ igfz[ind] = igfy[ind];
}
}
}
@@ -308,14 +323,15 @@ void SlabTest_Test (CCTK_ARGUMENTS)
for (j=0; j<cctk_lsh[1]; ++j) {
for (i=0; i<cctk_lsh[0]; ++i) {
const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
- gfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
- gfy[ind] = - (i + 3 * j + 5 * k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
if (cctk_lbnd[0] + i >= 2 && cctk_lbnd[0] + i < 4
&& cctk_lbnd[1] + j >= 3 && cctk_lbnd[1] + j < 6
&& cctk_lbnd[2] + k >= 4 && cctk_lbnd[2] + k < 6) {
- gfz[ind] = 10000 * (cctk_lbnd[2] + k + 1) + 100 * (cctk_lbnd[1] + j + 2) + (4 - cctk_lbnd[0] - i);
+ gfz[ind] = igfz[ind] = 10000 * (cctk_lbnd[2] + k + 1) + 100 * (cctk_lbnd[1] + j + 2) + (4 - cctk_lbnd[0] - i);
} else {
gfz[ind] = gfy[ind];
+ igfz[ind] = igfy[ind];
}
}
}
@@ -347,7 +363,41 @@ void SlabTest_Test (CCTK_ARGUMENTS)
- /* TODO: strides, into array, out of array */
+ CCTK_INFO (" Skip every second cell along y direction");
+
+ for (k=0; k<cctk_lsh[2]; ++k) {
+ for (j=0; j<cctk_lsh[1]; ++j) {
+ for (i=0; i<cctk_lsh[0]; ++i) {
+ const int ind = CCTK_GFINDEX3D(cctkGH, i,j,k);
+ gfx[ind] = igfx[ind] = 10000 * (cctk_lbnd[0] + i) + 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ gfy[ind] = igfy[ind] = - (i + 3 * j + 5 * k);
+ if (cctk_lbnd[1] + j < cctk_gsh[1] / 2) {
+ gfz[ind] = igfz[ind] = 10000 * (cctk_lbnd[0] + i) + 2 * 100 * (cctk_lbnd[1] + j) + (cctk_lbnd[2] + k);
+ } else {
+ gfz[ind] = gfy[ind];
+ igfz[ind] = igfy[ind];
+ }
+ }
+ }
+ }
+
+ assert (cctk_dim <= 3);
+ for (d=0; d<cctk_dim; ++d) {
+ info[d].src.off = 0;
+ info[d].src.len = d == 1 ? cctk_gsh[d] / 2 : cctk_gsh[d];
+ info[d].src.str = d == 1 ? 2 : 1;
+ info[d].dst.off = 0;
+ info[d].dst.len = d == 1 ? cctk_gsh[d] / 2 : cctk_gsh[d];
+ info[d].dst.str = 1;
+ info[d].xpose = d;
+ info[d].flip = 0;
+ }
+
+ runtest (CCTK_PASS_CTOC, info);
+
+
+
+ /* TODO: more strides, into array, out of array */