diff options
author | rhaas <rhaas@732e31d2-b375-409b-9bd3-699c3b2c9da5> | 2009-11-18 01:57:47 +0000 |
---|---|---|
committer | rhaas <rhaas@732e31d2-b375-409b-9bd3-699c3b2c9da5> | 2009-11-18 01:57:47 +0000 |
commit | 30f957f231bc891dadcd28bb30d660db98372272 (patch) | |
tree | 1b0922d3029e27eea96ec718b51615354f9c122e /src | |
parent | c93da26c550147a572395d6d349227b9b386e362 (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
Diffstat (limited to 'src')
-rw-r--r-- | src/slabtest.c | 100 |
1 files changed, 75 insertions, 25 deletions
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 */ |