From bf7d6cfcf5b2eb8bdaa0f271e80c437492bad405 Mon Sep 17 00:00:00 2001 From: tradke Date: Thu, 11 May 2006 15:24:57 +0000 Subject: Slight modification of the just committed patch http://www.cactuscode.org/pipermail/patches/2006-March/000154.html: Pass the number type as a macro argument, rather than defining it as a macro itself. This shortens the code somewhat, no functionality has changed. git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/CartGrid3D/trunk@228 c78560ca-4b45-4335-b268-5f3340f3cb52 --- src/Symmetry.c | 127 ++++++++++++++++++++++----------------------------------- 1 file changed, 48 insertions(+), 79 deletions(-) diff --git a/src/Symmetry.c b/src/Symmetry.c index 27451ba..cde790f 100644 --- a/src/Symmetry.c +++ b/src/Symmetry.c @@ -302,8 +302,13 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) @vtype @vio in @endvar + @var itype + @vdesc integral CCTK datatype of the variable (used for typecasting) + @vtype + @vio in + @endvar @@*/ -#define APPLY_LOWER(dir, ii, jj, kk, jjend, kkend, iii, jjj, kkk) \ +#define APPLY_LOWER(dir, ii, jj, kk, jjend, kkend, iii, jjj, kkk, itype) \ { \ for (kk = 0; kk < kkend; kk++) \ { \ @@ -312,14 +317,14 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) for (ii = 0; ii < gdata.nghostzones[dir/2]; ii++) \ { \ _var[INDEX_3D (lsh, i, j, k)] NUMBER_PART \ - = (NUMBER_TYPE)(GFSym[vindex][dir] \ + = (itype)(GFSym[vindex][dir] \ * _var[INDEX_3D (lsh, iii, jjj, kkk)] NUMBER_PART); \ } \ } \ } \ } -#define APPLY_UPPER(dir, ii, jj, kk, jjend, kkend, iii, jjj, kkk) \ +#define APPLY_UPPER(dir, ii, jj, kk, jjend, kkend, iii, jjj, kkk, itype) \ { \ for (kk = 0; kk < kkend; kk++) \ { \ @@ -328,7 +333,7 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) for (ii = lsh[dir/2]-gdata.nghostzones[dir/2]; ii < lsh[dir/2]; ii++) \ { \ _var[INDEX_3D (lsh, i, j, k)] NUMBER_PART \ - = (NUMBER_TYPE)(GFSym[vindex][dir] \ + = (itype)(GFSym[vindex][dir] \ * _var[INDEX_3D (lsh, iii, jjj, kkk)] NUMBER_PART); \ } \ } \ @@ -336,7 +341,7 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) } -#define SYMMETRY_BOUNDARY(cctk_type) \ +#define SYMMETRY_BOUNDARY(cctk_type, itype) \ { \ cctk_type *_var = GH->data[vindex][0]; \ \ @@ -346,56 +351,56 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) /* apply symmetry to the z faces */ \ if (doSym[4] == GFSYM_REFLECTION) \ { \ - APPLY_LOWER (4, k, j, i, lssh[1], lssh[0], i, j, offset[4]-k); \ + APPLY_LOWER (4, k, j, i, lssh[1], lssh[0], i, j, offset[4]-k, itype); \ } \ if (doSym[5] == GFSYM_REFLECTION) \ { \ - APPLY_UPPER (5, k, j, i, lssh[1], lssh[0], i, j, offset[5]-k); \ + APPLY_UPPER (5, k, j, i, lssh[1], lssh[0], i, j, offset[5]-k, itype); \ } \ if (doSym[4] == GFSYM_ROTATION_X) \ { \ - APPLY_LOWER (4, k, j, i, lssh[1], lssh[0], i, lssh[1]-j-1, offset[4]-k); \ + APPLY_LOWER (4, k, j, i, lssh[1], lssh[0], i, lssh[1]-j-1, offset[4]-k, itype);\ } \ if (doSym[5] == GFSYM_ROTATION_X) \ { \ - APPLY_UPPER (5, k, j, i, lssh[1], lssh[0], i, lssh[1]-j-1, offset[5]-k); \ + APPLY_UPPER (5, k, j, i, lssh[1], lssh[0], i, lssh[1]-j-1, offset[5]-k, itype);\ } \ if (doSym[4] == GFSYM_ROTATION_Y) \ { \ - APPLY_LOWER (4, k, j, i, lssh[1], lssh[0], lssh[0]-i-1, j, offset[4]-k); \ + APPLY_LOWER (4, k, j, i, lssh[1], lssh[0], lssh[0]-i-1, j, offset[4]-k, itype);\ } \ if (doSym[5] == GFSYM_ROTATION_Y) \ { \ - APPLY_UPPER (5, k, j, i, lssh[1], lssh[0], lssh[0]-i-1, j, offset[5]-k); \ + APPLY_UPPER (5, k, j, i, lssh[1], lssh[0], lssh[0]-i-1, j, offset[5]-k, itype);\ } \ /* FALL THROUGH */ \ case 2: \ /* apply symmetry to the y faces */ \ if (doSym[2] == GFSYM_REFLECTION) \ { \ - APPLY_LOWER (2, j, k, i, lssh[2], lssh[0], i, offset[2]-j, k); \ + APPLY_LOWER (2, j, k, i, lssh[2], lssh[0], i, offset[2]-j, k, itype); \ } \ if (doSym[3] == GFSYM_REFLECTION) \ { \ - APPLY_UPPER (3, j, k, i, lssh[2], lssh[0], i, offset[3]-j, k); \ + APPLY_UPPER (3, j, k, i, lssh[2], lssh[0], i, offset[3]-j, k, itype); \ } \ if (doSym[2] == GFSYM_ROTATION_Z) \ { \ - APPLY_LOWER (2, j, k, i, lssh[2], lssh[0], lssh[0]-i-1, offset[2]-j, k); \ + APPLY_LOWER (2, j, k, i, lssh[2], lssh[0], lssh[0]-i-1, offset[2]-j, k, itype);\ } \ if (doSym[3] == GFSYM_ROTATION_Z) \ { \ - APPLY_UPPER (3, j, k, i, lssh[2], lssh[0], lssh[0]-i-1, offset[3]-j, k); \ + APPLY_UPPER (3, j, k, i, lssh[2], lssh[0], lssh[0]-i-1, offset[3]-j, k, itype);\ } \ if (group_static_data.dim > 2) \ { \ if (doSym[2] == GFSYM_ROTATION_X) \ { \ - APPLY_LOWER (2, j, k, i, lssh[2], lssh[0], i, offset[2]-j, lssh[2]-k-1);\ + APPLY_LOWER (2, j, k, i, lssh[2], lssh[0], i, offset[2]-j, lssh[2]-k-1, itype);\ } \ if (doSym[3] == GFSYM_ROTATION_X) \ { \ - APPLY_UPPER (3, j, k, i, lssh[2], lssh[0], i, offset[3]-j, lssh[2]-k-1);\ + APPLY_UPPER (3, j, k, i, lssh[2], lssh[0], i, offset[3]-j, lssh[2]-k-1, itype);\ } \ } \ /* FALL THROUGH */ \ @@ -403,32 +408,32 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) /* apply symmetry to the x faces */ \ if (doSym[0] == GFSYM_REFLECTION) \ { \ - APPLY_LOWER (0, i, j, k, lssh[1], lssh[2], offset[0]-i, j, k); \ + APPLY_LOWER (0, i, j, k, lssh[1], lssh[2], offset[0]-i, j, k, itype); \ } \ if (doSym[1] == GFSYM_REFLECTION) \ { \ - APPLY_UPPER (1, i, j, k, lssh[1], lssh[2], offset[1]-i, j, k); \ + APPLY_UPPER (1, i, j, k, lssh[1], lssh[2], offset[1]-i, j, k, itype); \ } \ if (group_static_data.dim > 1) \ { \ if (doSym[0] == GFSYM_ROTATION_Z) \ { \ - APPLY_LOWER (0, i, j, k, lssh[1], lssh[2], offset[0]-i, lssh[1]-j-1, k);\ + APPLY_LOWER (0, i, j, k, lssh[1], lssh[2], offset[0]-i, lssh[1]-j-1, k, itype);\ } \ if (doSym[1] == GFSYM_ROTATION_Z) \ { \ - APPLY_UPPER (1, i, j, k, lssh[1], lssh[2], offset[1]-i, lssh[1]-j-1, k);\ + APPLY_UPPER (1, i, j, k, lssh[1], lssh[2], offset[1]-i, lssh[1]-j-1, k, itype);\ } \ } \ if (group_static_data.dim > 2) \ { \ if (doSym[0] == GFSYM_ROTATION_Y) \ { \ - APPLY_LOWER (0, i, j, k, lssh[1], lssh[2], offset[0]-i, j, lssh[2]-k-1);\ + APPLY_LOWER (0, i, j, k, lssh[1], lssh[2], offset[0]-i, j, lssh[2]-k-1, itype);\ } \ if (doSym[1] == GFSYM_ROTATION_Y) \ { \ - APPLY_UPPER (1, i, j, k, lssh[1], lssh[2], offset[1]-i, j, lssh[2]-k-1);\ + APPLY_UPPER (1, i, j, k, lssh[1], lssh[2], offset[1]-i, j, lssh[2]-k-1, itype);\ } \ } \ /* FALL THROUGH */ \ @@ -438,8 +443,8 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) } /* Function to apply above macros. */ -#define SYMMETRY_FUNCTION(cctk_type,SUFFIX) \ - static void cctk_type ## _SymBC ## SUFFIX(const cGH *GH, const int vindex, const int *doSym, const int *offset, const int *lsh, const int *lssh, const cGroup group_static_data, const cGroupDynamicData gdata, int **GFSym) { int i,j,k; SYMMETRY_BOUNDARY(cctk_type); } +#define SYMMETRY_FUNCTION(cctk_type,integral_type,SUFFIX) \ + static void cctk_type ## _SymBC ## SUFFIX(const cGH *GH, const int vindex, const int *doSym, const int *offset, const int *lsh, const int *lssh, const cGroup group_static_data, const cGroupDynamicData gdata, int **GFSym) { int i,j,k; SYMMETRY_BOUNDARY(cctk_type, integral_type); } /* Create functions to apply macros. * This is much easier for the optiser to deal with. @@ -448,91 +453,55 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) */ #define NUMBER_PART .Re -#define NUMBER_TYPE CCTK_REAL -SYMMETRY_FUNCTION(CCTK_COMPLEX,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_COMPLEX,CCTK_REAL,R) #ifdef HAVE_CCTK_COMPLEX8 -#define NUMBER_TYPE CCTK_REAL4 -SYMMETRY_FUNCTION(CCTK_COMPLEX8,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_COMPLEX8,CCTK_REAL4,R) #endif #ifdef HAVE_CCTK_COMPLEX16 -#define NUMBER_TYPE CCTK_REAL8 -SYMMETRY_FUNCTION(CCTK_COMPLEX16,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_COMPLEX16,CCTK_REAL8,R) #endif #ifdef HAVE_CCTK_COMPLEX32 -#define NUMBER_TYPE CCTK_REAL16 -SYMMETRY_FUNCTION(CCTK_COMPLEX32,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_COMPLEX32,CCTK_REAL16,R) #endif #undef NUMBER_PART #define NUMBER_PART .Im -#define NUMBER_TYPE CCTK_REAL -SYMMETRY_FUNCTION(CCTK_COMPLEX,I) -#undef NUMBER_TYPE -#define NUMBER_TYPE CCTK_REAL4 +SYMMETRY_FUNCTION(CCTK_COMPLEX,CCTK_REAL,I) #ifdef HAVE_CCTK_COMPLEX8 -SYMMETRY_FUNCTION(CCTK_COMPLEX8,I) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_COMPLEX8,CCTK_REAL4,I) #endif #ifdef HAVE_CCTK_COMPLEX16 -#define NUMBER_TYPE CCTK_REAL8 -SYMMETRY_FUNCTION(CCTK_COMPLEX16,I) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_COMPLEX16,CCTK_REAL8,I) #endif #ifdef HAVE_CCTK_COMPLEX32 -#define NUMBER_TYPE CCTK_REAL16 -SYMMETRY_FUNCTION(CCTK_COMPLEX32,I) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_COMPLEX32,CCTK_REAL16,I) #endif #undef NUMBER_PART #define NUMBER_PART -#define NUMBER_TYPE CCTK_BYTE -SYMMETRY_FUNCTION(CCTK_BYTE,R) -#undef NUMBER_TYPE -#define NUMBER_TYPE CCTK_INT -SYMMETRY_FUNCTION(CCTK_INT,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_BYTE,CCTK_BYTE,R) +SYMMETRY_FUNCTION(CCTK_INT,CCTK_INT,R) #ifdef HAVE_CCTK_INT1 -#define NUMBER_TYPE CCTK_INT1 -SYMMETRY_FUNCTION(CCTK_INT1,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_INT1,CCTK_INT1,R) #endif #ifdef HAVE_CCTK_INT2 -#define NUMBER_TYPE CCTK_INT2 -SYMMETRY_FUNCTION(CCTK_INT2,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_INT2,CCTK_INT2,R) #endif #ifdef HAVE_CCTK_INT4 -#define NUMBER_TYPE CCTK_INT4 -SYMMETRY_FUNCTION(CCTK_INT4,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_INT4,CCTK_INT4,R) #endif #ifdef HAVE_CCTK_INT8 -#define NUMBER_TYPE CCTK_INT8 -SYMMETRY_FUNCTION(CCTK_INT8,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_INT8,CCTK_INT8,R) #endif -#define NUMBER_TYPE CCTK_REAL -SYMMETRY_FUNCTION(CCTK_REAL,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_REAL,CCTK_REAL,R) #ifdef HAVE_CCTK_REAL4 -#define NUMBER_TYPE CCTK_REAL4 -SYMMETRY_FUNCTION(CCTK_REAL4,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_REAL4,CCTK_REAL4,R) #endif #ifdef HAVE_CCTK_REAL8 -#define NUMBER_TYPE CCTK_REAL8 -SYMMETRY_FUNCTION(CCTK_REAL8,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_REAL8,CCTK_REAL8,R) #endif #ifdef HAVE_CCTK_REAL16 -#define NUMBER_TYPE CCTK_REAL16 -SYMMETRY_FUNCTION(CCTK_REAL16,R) -#undef NUMBER_TYPE +SYMMETRY_FUNCTION(CCTK_REAL16,CCTK_REAL16,R) #endif #undef NUMBER_PART -- cgit v1.2.3