From db6ea0af9df251c399d23aa6d7d8370448421cfe Mon Sep 17 00:00:00 2001 From: eschnett Date: Fri, 8 Mar 2013 20:31:39 +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/CactusPUGH/PUGHSlab/trunk@160 10716dce-81a3-4424-a2c8-48026a0d3035 --- src/DatatypeConversion.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/DatatypeConversion.c b/src/DatatypeConversion.c index 156e631..1073205 100644 --- a/src/DatatypeConversion.c +++ b/src/DatatypeConversion.c @@ -23,7 +23,7 @@ CCTK_FILEVERSION(CactusPUGH_PUGHSlab_DatatypeConversion_c) /* macro to generate a predefined conversion function along with its prototype */ -#define CONVERSION_FUNCTION(source_type, dest_type, dest_elemtype, conversion)\ +#define CONVERSION_FUNCTION(source_type, dest_type, conversion) \ static CCTK_INT Convert##source_type##to##dest_type (CCTK_INT nelems, \ CCTK_INT src_stride, \ CCTK_INT dst_stride, \ @@ -49,7 +49,7 @@ static CCTK_INT Convert##source_type##to##dest_type (CCTK_INT nelems, \ (void) (dst_type + 0); \ for (_i = 0; _i < nelems; _i++, _src += src_stride, _dst += dst_stride) \ { \ - conversion (*_src, *_dst, dest_elemtype); \ + conversion (*_src, *_dst, dest_type); \ } \ \ return (nelems); \ @@ -63,49 +63,44 @@ static CCTK_INT Convert##source_type##to##dest_type (CCTK_INT nelems, \ /* predefined conversion functions for integers */ #if defined(CCTK_INT1) && defined(CCTK_INT2) -CONVERSION_FUNCTION (INT2, INT1, INT1, CONVERT) +CONVERSION_FUNCTION (INT2, INT1, CONVERT) #endif #if defined(CCTK_INT1) && defined(CCTK_INT4) -CONVERSION_FUNCTION (INT4, INT1, INT1, CONVERT) +CONVERSION_FUNCTION (INT4, INT1, CONVERT) #endif #if defined(CCTK_INT2) && defined(CCTK_INT4) -CONVERSION_FUNCTION (INT4, INT2, INT2, CONVERT) +CONVERSION_FUNCTION (INT4, INT2, CONVERT) #endif #if defined(CCTK_INT1) && defined(CCTK_INT8) -CONVERSION_FUNCTION (INT8, INT1, INT1, CONVERT) +CONVERSION_FUNCTION (INT8, INT1, CONVERT) #endif #if defined(CCTK_INT2) && defined(CCTK_INT8) -CONVERSION_FUNCTION (INT8, INT2, INT2, CONVERT) +CONVERSION_FUNCTION (INT8, INT2, CONVERT) #endif #if defined(CCTK_INT4) && defined(CCTK_INT8) -CONVERSION_FUNCTION (INT8, INT4, INT4, CONVERT) +CONVERSION_FUNCTION (INT8, INT4, CONVERT) #endif /* predefined conversion functions for reals */ #if defined(CCTK_REAL4) && defined(CCTK_REAL8) -CONVERSION_FUNCTION (REAL8, REAL4, REAL4, CONVERT) +CONVERSION_FUNCTION (REAL8, REAL4, CONVERT) #endif #if defined(CCTK_REAL4) && defined(CCTK_REAL16) -CONVERSION_FUNCTION (REAL16, REAL4, REAL4, CONVERT) +CONVERSION_FUNCTION (REAL16, REAL4, CONVERT) #endif #if defined(CCTK_REAL8) && defined(CCTK_REAL16) -CONVERSION_FUNCTION (REAL16, REAL8, REAL8, CONVERT) +CONVERSION_FUNCTION (REAL16, REAL8, CONVERT) #endif -/* the conversion of complex datatypes */ -#undef CONVERT -#define CONVERT(src, dst, dst_type) (dst).Re = (CCTK_##dst_type) (src).Re; \ - (dst).Im = (CCTK_##dst_type) (src).Im - /* predefined conversion functions for complex */ #if defined(CCTK_REAL4) && defined(CCTK_REAL8) -CONVERSION_FUNCTION (COMPLEX16, COMPLEX8, REAL4, CONVERT) +CONVERSION_FUNCTION (COMPLEX16, COMPLEX8, CONVERT) #endif #if defined(CCTK_REAL4) && defined(CCTK_REAL16) -CONVERSION_FUNCTION (COMPLEX32, COMPLEX16, REAL8, CONVERT) +CONVERSION_FUNCTION (COMPLEX32, COMPLEX16, CONVERT) #endif #if defined(CCTK_REAL8) && defined(CCTK_REAL16) -CONVERSION_FUNCTION (COMPLEX32, COMPLEX8, REAL4, CONVERT) +CONVERSION_FUNCTION (COMPLEX32, COMPLEX8, CONVERT) #endif -- cgit v1.2.3