aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortradke <tradke@c78560ca-4b45-4335-b268-5f3340f3cb52>2006-05-11 15:24:57 +0000
committertradke <tradke@c78560ca-4b45-4335-b268-5f3340f3cb52>2006-05-11 15:24:57 +0000
commitbf7d6cfcf5b2eb8bdaa0f271e80c437492bad405 (patch)
tree282897170d123035254be1a9e735bf51ae009fb6
parentb19b451b9761d537e103b83720d2ad040b8d42b2 (diff)
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
-rw-r--r--src/Symmetry.c127
1 files 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 <cctk_type>
@vio in
@endvar
+ @var itype
+ @vdesc integral CCTK datatype of the variable (used for typecasting)
+ @vtype <cctk_type>
+ @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