From 6e0046b8f3ffff5cd8abf4ca7de423199ba4fe18 Mon Sep 17 00:00:00 2001 From: eschnett Date: Fri, 8 Mar 2013 20:30:38 +0000 Subject: Replace Cactus complex number type with C/C++ complex numbers Map CCTK_COMPLEX to "double complex" in C, and "complex" in C++. (It is already mapped to "double complex" in Fortran.) Update type definitions. Re-implement Cactus complex number math functions by calling the respective C functions. Update thorn that access real and imaginary parts of complex numbers to use standard-conforming methods instead. git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/CartGrid3D/trunk@268 c78560ca-4b45-4335-b268-5f3340f3cb52 --- src/Symmetry.c | 91 ++++++++++++++++++++++------------------------------------ 1 file changed, 35 insertions(+), 56 deletions(-) diff --git a/src/Symmetry.c b/src/Symmetry.c index 1cf8544..ec57769 100644 --- a/src/Symmetry.c +++ b/src/Symmetry.c @@ -316,9 +316,9 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) { \ for (ii = 0; ii < gdata.nghostzones[dir/2]; ii++) \ { \ - _var[INDEX_3D (ash, i, j, k)] NUMBER_PART \ + _var[INDEX_3D (ash, i, j, k)] \ = (itype)(GFSym[vindex][dir] \ - * _var[INDEX_3D (ash, iii, jjj, kkk)] NUMBER_PART); \ + * _var[INDEX_3D (ash, iii, jjj, kkk)]); \ } \ } \ } \ @@ -332,9 +332,9 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) { \ for (ii = lsh[dir/2]-gdata.nghostzones[dir/2]; ii < lsh[dir/2]; ii++) \ { \ - _var[INDEX_3D (ash, i, j, k)] NUMBER_PART \ + _var[INDEX_3D (ash, i, j, k)] \ = (itype)(GFSym[vindex][dir] \ - * _var[INDEX_3D (ash, iii, jjj, kkk)] NUMBER_PART); \ + * _var[INDEX_3D (ash, iii, jjj, kkk)]); \ } \ } \ } \ @@ -443,8 +443,8 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) } /* Function to apply above macros. */ -#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 *ash, const cGroup group_static_data, const cGroupDynamicData gdata, int **GFSym) { int i,j,k; SYMMETRY_BOUNDARY(cctk_type, integral_type); } +#define SYMMETRY_FUNCTION(cctk_type,integral_type) \ + static void cctk_type ## _SymBC(const cGH *GH, const int vindex, const int *doSym, const int *offset, const int *lsh, const int *ash, 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. @@ -452,60 +452,43 @@ void CCTK_FCALL CCTK_FNAME (CartSymVN) * directly in the switch statement in ApplySymmetry. */ -#define NUMBER_PART .Re -SYMMETRY_FUNCTION(CCTK_COMPLEX,CCTK_REAL,R) +SYMMETRY_FUNCTION(CCTK_COMPLEX,CCTK_REAL) #ifdef HAVE_CCTK_COMPLEX8 -SYMMETRY_FUNCTION(CCTK_COMPLEX8,CCTK_REAL4,R) +SYMMETRY_FUNCTION(CCTK_COMPLEX8,CCTK_REAL4) #endif #ifdef HAVE_CCTK_COMPLEX16 -SYMMETRY_FUNCTION(CCTK_COMPLEX16,CCTK_REAL8,R) +SYMMETRY_FUNCTION(CCTK_COMPLEX16,CCTK_REAL8) #endif #ifdef HAVE_CCTK_COMPLEX32 -SYMMETRY_FUNCTION(CCTK_COMPLEX32,CCTK_REAL16,R) +SYMMETRY_FUNCTION(CCTK_COMPLEX32,CCTK_REAL16) #endif -#undef NUMBER_PART -#define NUMBER_PART .Im -SYMMETRY_FUNCTION(CCTK_COMPLEX,CCTK_REAL,I) -#ifdef HAVE_CCTK_COMPLEX8 -SYMMETRY_FUNCTION(CCTK_COMPLEX8,CCTK_REAL4,I) -#endif -#ifdef HAVE_CCTK_COMPLEX16 -SYMMETRY_FUNCTION(CCTK_COMPLEX16,CCTK_REAL8,I) -#endif -#ifdef HAVE_CCTK_COMPLEX32 -SYMMETRY_FUNCTION(CCTK_COMPLEX32,CCTK_REAL16,I) -#endif -#undef NUMBER_PART - -#define NUMBER_PART -SYMMETRY_FUNCTION(CCTK_BYTE,CCTK_BYTE,R) -SYMMETRY_FUNCTION(CCTK_INT,CCTK_INT,R) +SYMMETRY_FUNCTION(CCTK_BYTE,CCTK_BYTE) +SYMMETRY_FUNCTION(CCTK_INT,CCTK_INT) #ifdef HAVE_CCTK_INT1 -SYMMETRY_FUNCTION(CCTK_INT1,CCTK_INT1,R) +SYMMETRY_FUNCTION(CCTK_INT1,CCTK_INT1) #endif #ifdef HAVE_CCTK_INT2 -SYMMETRY_FUNCTION(CCTK_INT2,CCTK_INT2,R) +SYMMETRY_FUNCTION(CCTK_INT2,CCTK_INT2) #endif #ifdef HAVE_CCTK_INT4 -SYMMETRY_FUNCTION(CCTK_INT4,CCTK_INT4,R) +SYMMETRY_FUNCTION(CCTK_INT4,CCTK_INT4) #endif #ifdef HAVE_CCTK_INT8 -SYMMETRY_FUNCTION(CCTK_INT8,CCTK_INT8,R) +SYMMETRY_FUNCTION(CCTK_INT8,CCTK_INT8) #endif -SYMMETRY_FUNCTION(CCTK_REAL,CCTK_REAL,R) +SYMMETRY_FUNCTION(CCTK_REAL,CCTK_REAL) #ifdef HAVE_CCTK_REAL4 -SYMMETRY_FUNCTION(CCTK_REAL4,CCTK_REAL4,R) +SYMMETRY_FUNCTION(CCTK_REAL4,CCTK_REAL4) #endif #ifdef HAVE_CCTK_REAL8 -SYMMETRY_FUNCTION(CCTK_REAL8,CCTK_REAL8,R) +SYMMETRY_FUNCTION(CCTK_REAL8,CCTK_REAL8) #endif #ifdef HAVE_CCTK_REAL16 -SYMMETRY_FUNCTION(CCTK_REAL16,CCTK_REAL16,R) +SYMMETRY_FUNCTION(CCTK_REAL16,CCTK_REAL16) #endif -#undef NUMBER_PART -#define CALL_SYMBC(cctk_type,SUFFIX) cctk_type ## _SymBC ## SUFFIX(GH, vindex, doSym, offset, lsh, ash, group_static_data, gdata, GFSym) +#define CALL_SYMBC(cctk_type) cctk_type ## _SymBC(GH, vindex, doSym, offset, lsh, ash, group_static_data, gdata, GFSym) /*@@ @routine ApplySymmetry @@ -643,63 +626,59 @@ static int ApplySymmetry (const cGH *GH, int gindex, int first_vindex, switch (group_static_data.vartype) { case CCTK_VARIABLE_BYTE: - CALL_SYMBC(CCTK_BYTE,R); break; + CALL_SYMBC(CCTK_BYTE); break; case CCTK_VARIABLE_INT: - CALL_SYMBC(CCTK_INT,R); break; + CALL_SYMBC(CCTK_INT); break; case CCTK_VARIABLE_REAL: - CALL_SYMBC(CCTK_REAL,R); break; + CALL_SYMBC(CCTK_REAL); break; case CCTK_VARIABLE_COMPLEX: - CALL_SYMBC(CCTK_COMPLEX,R); - CALL_SYMBC(CCTK_COMPLEX,I); break; + CALL_SYMBC(CCTK_COMPLEX); break; #ifdef HAVE_CCTK_INT1 case CCTK_VARIABLE_INT1: - CALL_SYMBC(CCTK_INT1,R); break; + CALL_SYMBC(CCTK_INT1); break; #endif #ifdef HAVE_CCTK_INT2 case CCTK_VARIABLE_INT2: - CALL_SYMBC(CCTK_INT2,R); break; + CALL_SYMBC(CCTK_INT2); break; #endif #ifdef HAVE_CCTK_INT4 case CCTK_VARIABLE_INT4: - CALL_SYMBC(CCTK_INT4,R); break; + CALL_SYMBC(CCTK_INT4); break; #endif #ifdef HAVE_CCTK_INT8 case CCTK_VARIABLE_INT8: - CALL_SYMBC(CCTK_INT8,R); break; + CALL_SYMBC(CCTK_INT8); break; #endif #ifdef HAVE_CCTK_REAL4 case CCTK_VARIABLE_REAL4: - CALL_SYMBC(CCTK_REAL4,R); break; + CALL_SYMBC(CCTK_REAL4); break; case CCTK_VARIABLE_COMPLEX8: - CALL_SYMBC(CCTK_COMPLEX8,R); - CALL_SYMBC(CCTK_COMPLEX8,I); break; + CALL_SYMBC(CCTK_COMPLEX8); break; #endif #ifdef HAVE_CCTK_REAL8 case CCTK_VARIABLE_REAL8: - CALL_SYMBC(CCTK_REAL8,R); break; + CALL_SYMBC(CCTK_REAL8); break; case CCTK_VARIABLE_COMPLEX16: - CALL_SYMBC(CCTK_COMPLEX16,R); - CALL_SYMBC(CCTK_COMPLEX16,I); break; + CALL_SYMBC(CCTK_COMPLEX16); break; #endif #ifdef HAVE_CCTK_REAL16 case CCTK_VARIABLE_REAL16: - CALL_SYMBC(CCTK_REAL16,R); break; + CALL_SYMBC(CCTK_REAL16); break; case CCTK_VARIABLE_COMPLEX32: - CALL_SYMBC(CCTK_COMPLEX32,R); - CALL_SYMBC(CCTK_COMPLEX32,I); break; + CALL_SYMBC(CCTK_COMPLEX32); break; #endif default: -- cgit v1.2.3