From d164bfdc4be5be69b9a8adf332ab572936175834 Mon Sep 17 00:00:00 2001 From: yye00 Date: Tue, 25 Jan 2005 02:05:57 +0000 Subject: matching the new -correct- complex reduction definitions git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGHReduce/trunk@63 d60812e6-3970-4df4-986e-c251b06effeb --- src/ReduceGA.c | 291 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 289 insertions(+), 2 deletions(-) diff --git a/src/ReduceGA.c b/src/ReduceGA.c index 1472e8b..b114d67 100644 --- a/src/ReduceGA.c +++ b/src/ReduceGA.c @@ -135,6 +135,9 @@ static int ReduceGridArrays (const cGH *GH, int num_points=0; int total_num_points = 1; int perform_division = 1; + int perform_2_root = 1; + int perform_3_root = 1; + int perform_4_root = 1; int perform_all_reduce = 1; pGA *GA; const void *data; @@ -146,7 +149,19 @@ static int ReduceGridArrays (const cGH *GH, CCTK_POINTER * input_arrays; CCTK_INT * input_array_type_codes; CCTK_INT * input_array_gz; - + + /* temporary complex variables*/ + CCTK_COMPLEX cmplx_tmp; + #ifdef CCTK_COMPLEX8 + CCTK_COMPLEX8 cmplx_tmp8; + #endif + #ifdef CCTK_COMPLEX16 + CCTK_COMPLEX16 cmplx_tmp16; + #endif + #ifdef CCTK_COMPLEX32 + CCTK_COMPLEX32 cmplx_tmp32; + #endif + #ifdef CCTK_MPI int nprocs = 0, myproc =0, global_operation = 0; const pGH *pughGH = NULL; @@ -259,7 +274,12 @@ static int ReduceGridArrays (const cGH *GH, ierr = Util_TableGetInt(param_table_handle, &perform_division, "perform_division"); ierr = Util_TableGetInt(param_table_handle, &num_points, "num_points"); - + + /* Get flags to perform root operations */ + ierr = Util_TableGetInt(param_table_handle, &perform_2_root, "perform_2_root"); + ierr = Util_TableGetInt(param_table_handle, &perform_3_root, "perform_3_root"); + ierr = Util_TableGetInt(param_table_handle, &perform_4_root, "perform_4_root"); + #ifdef CCTK_MPI pughGH = PUGH_pGH (GH); ierr = Util_TableGetInt(param_table_handle, &proc, "proc"); @@ -819,5 +839,272 @@ static int ReduceGridArrays (const cGH *GH, } } + if (perform_2_root == 0) + { + for (i = 0; i< M_output_values; i++) + { + switch (output_value_type_codes[i]) + { + /* out values type switches*/ + case CCTK_VARIABLE_CHAR: + *( (CCTK_CHAR *) output_values[i]) = sqrt(*( (CCTK_CHAR *) output_values[i])); + break; + case CCTK_VARIABLE_INT: + *( (CCTK_INT *) output_values[i]) = sqrt( *( (CCTK_INT *) output_values[i])); + break; + #ifdef CCTK_INT1 + case CCTK_VARIABLE_INT1: + *( (CCTK_INT1 *) output_values[i]) = sqrt(*( (CCTK_INT1 *) output_values[i])); + break; + #endif + #ifdef CCTK_INT2 + case CCTK_VARIABLE_INT2: + *( (CCTK_INT2 *) output_values[i]) = sqrt(*( (CCTK_INT2 *) output_values[i])); + break; + #endif + #ifdef CCTK_INT4 + case CCTK_VARIABLE_INT4: + *( (CCTK_INT4 *) output_values[i]) = sqrt( *( (CCTK_INT4 *) output_values[i])); + break; + #endif + #ifdef CCTK_INT8 + case CCTK_VARIABLE_INT8: + *( (CCTK_INT8 *) output_values[i]) = sqrt(*( (CCTK_INT8 *) output_values[i])); + break; + #endif + case CCTK_VARIABLE_REAL: + *( (CCTK_REAL *) output_values[i]) = sqrt(*( (CCTK_REAL *) output_values[i])); + break; + #ifdef CCTK_REAL4 + case CCTK_VARIABLE_REAL4: + *( (CCTK_REAL4 *) output_values[i]) = sqrt(*( (CCTK_REAL4 *) output_values[i])); + break; + #endif + #ifdef CCTK_REAL8 + case CCTK_VARIABLE_REAL8: + *( (CCTK_REAL8 *) output_values[i]) = sqrt(*( (CCTK_REAL8 *) output_values[i])); + break; + #endif + #ifdef CCTK_REAL16 + case CCTK_VARIABLE_REAL16: + *( (CCTK_REAL16 *) output_values[i]) = sqrt(*( (CCTK_REAL16 *) output_values[i])); + break; + #endif + case CCTK_VARIABLE_COMPLEX: + cmplx_tmp.Re = (*( (CCTK_COMPLEX *) output_values[i])).Re; + cmplx_tmp.Im = (*( (CCTK_COMPLEX *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/2.0); + (*( (CCTK_COMPLEX *) output_values[i])).Re = cmplx_tmp.Re; + (*( (CCTK_COMPLEX *) output_values[i])).Im = cmplx_tmp.Im; + break; + #ifdef CCTK_COMPLEX8 + case CCTK_VARIABLE_COMPLEX8: + cmplx_tmp8.Re = (*( (CCTK_COMPLEX8 *) output_values[i])).Re; + cmplx_tmp8.Im = (*( (CCTK_COMPLEX8 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/2.0); + (*( (CCTK_COMPLEX8 *) output_values[i])).Re = cmplx_tmp8.Re; + (*( (CCTK_COMPLEX8 *) output_values[i])).Im = cmplx_tmp8.Im; + break; + #endif + #ifdef CCTK_COMPLEX16 + case CCTK_VARIABLE_COMPLEX16: + cmplx_tmp16.Re = (*( (CCTK_COMPLEX16 *) output_values[i])).Re; + cmplx_tmp16.Im = (*( (CCTK_COMPLEX16 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/2.0); + (*( (CCTK_COMPLEX16 *) output_values[i])).Re = cmplx_tmp16.Re; + (*( (CCTK_COMPLEX16 *) output_values[i])).Im = cmplx_tmp16.Im; + break; + #endif + #ifdef CCTK_COMPLEX32 + case CCTK_VARIABLE_COMPLEX32: + cmplx_tmp32.Re = (*( (CCTK_COMPLEX32 *) output_values[i])).Re; + cmplx_tmp32.Im = (*( (CCTK_COMPLEX32 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/2.0); + (*( (CCTK_COMPLEX32 *) output_values[i])).Re = cmplx_tmp32.Re; + (*( (CCTK_COMPLEX32 *) output_values[i])).Im = cmplx_tmp32.Im; + break; + #endif + } + } + } + + if (perform_3_root == 0) + { + for (i = 0; i< M_output_values; i++) + { + switch (output_value_type_codes[i]) + { + /* out values type switches*/ + case CCTK_VARIABLE_CHAR: + *( (CCTK_CHAR *) output_values[i]) = pow(*( (CCTK_CHAR *) output_values[i]), 1.0/3.0); + break; + case CCTK_VARIABLE_INT: + *( (CCTK_INT *) output_values[i]) = pow(*( (CCTK_INT *) output_values[i]), 1.0/3.0); + break; + #ifdef CCTK_INT1 + case CCTK_VARIABLE_INT1: + *( (CCTK_INT1 *) output_values[i]) = pow(*( (CCTK_INT1 *) output_values[i]), 1.0/3.0); + break; + #endif + #ifdef CCTK_INT2 + case CCTK_VARIABLE_INT2: + *( (CCTK_INT2 *) output_values[i]) = pow(*( (CCTK_INT2 *) output_values[i]), 1.0/3.0); + break; + #endif + #ifdef CCTK_INT4 + case CCTK_VARIABLE_INT4: + *( (CCTK_INT4 *) output_values[i]) = pow( *( (CCTK_INT4 *) output_values[i]), 1.0/3.0); + break; + #endif + #ifdef CCTK_INT8 + case CCTK_VARIABLE_INT8: + *( (CCTK_INT8 *) output_values[i]) = pow(*( (CCTK_INT8 *) output_values[i]), 1.0/3.0); + break; + #endif + case CCTK_VARIABLE_REAL: + *( (CCTK_REAL *) output_values[i]) = pow(*( (CCTK_REAL *) output_values[i]), 1.0/3.0); + break; + #ifdef CCTK_REAL4 + case CCTK_VARIABLE_REAL4: + *( (CCTK_REAL4 *) output_values[i]) = pow(*( (CCTK_REAL4 *) output_values[i]), 1.0/3.0); + break; + #endif + #ifdef CCTK_REAL8 + case CCTK_VARIABLE_REAL8: + *( (CCTK_REAL8 *) output_values[i]) = pow(*( (CCTK_REAL8 *) output_values[i]), 1.0/3.0); + break; + #endif + #ifdef CCTK_REAL16 + case CCTK_VARIABLE_REAL16: + *( (CCTK_REAL16 *) output_values[i]) = pow(*( (CCTK_REAL16 *) output_values[i]), 1.0/3.0); + break; + #endif + case CCTK_VARIABLE_COMPLEX: + cmplx_tmp.Re = (*( (CCTK_COMPLEX *) output_values[i])).Re; + cmplx_tmp.Im = (*( (CCTK_COMPLEX *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/3.0); + (*( (CCTK_COMPLEX *) output_values[i])).Re = cmplx_tmp.Re; + (*( (CCTK_COMPLEX *) output_values[i])).Im = cmplx_tmp.Im; + break; + #ifdef CCTK_COMPLEX8 + case CCTK_VARIABLE_COMPLEX8: + cmplx_tmp8.Re = (*( (CCTK_COMPLEX8 *) output_values[i])).Re; + cmplx_tmp8.Im = (*( (CCTK_COMPLEX8 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/3.0); + (*( (CCTK_COMPLEX8 *) output_values[i])).Re = cmplx_tmp8.Re; + (*( (CCTK_COMPLEX8 *) output_values[i])).Im = cmplx_tmp8.Im; + break; + #endif + #ifdef CCTK_COMPLEX16 + case CCTK_VARIABLE_COMPLEX16: + cmplx_tmp16.Re = (*( (CCTK_COMPLEX16 *) output_values[i])).Re; + cmplx_tmp16.Im = (*( (CCTK_COMPLEX16 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/3.0); + (*( (CCTK_COMPLEX16 *) output_values[i])).Re = cmplx_tmp16.Re; + (*( (CCTK_COMPLEX16 *) output_values[i])).Im = cmplx_tmp16.Im; + break; + #endif + #ifdef CCTK_COMPLEX32 + case CCTK_VARIABLE_COMPLEX32: + cmplx_tmp32.Re = (*( (CCTK_COMPLEX32 *) output_values[i])).Re; + cmplx_tmp32.Im = (*( (CCTK_COMPLEX32 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/3.0); + (*( (CCTK_COMPLEX32 *) output_values[i])).Re = cmplx_tmp32.Re; + (*( (CCTK_COMPLEX32 *) output_values[i])).Im = cmplx_tmp32.Im; + break; + #endif + } + } + } + + if (perform_4_root == 0) + { + for (i = 0; i< M_output_values; i++) + { + switch (output_value_type_codes[i]) + { + /* out values type switches*/ + case CCTK_VARIABLE_CHAR: + *( (CCTK_CHAR *) output_values[i]) = pow(*( (CCTK_CHAR *) output_values[i]), 1.0/4.0); + break; + case CCTK_VARIABLE_INT: + *( (CCTK_INT *) output_values[i]) = pow(*( (CCTK_INT *) output_values[i]), 1.0/4.0); + break; + #ifdef CCTK_INT1 + case CCTK_VARIABLE_INT1: + *( (CCTK_INT1 *) output_values[i]) = pow(*( (CCTK_INT1 *) output_values[i]), 1.0/4.0); + break; + #endif + #ifdef CCTK_INT2 + case CCTK_VARIABLE_INT2: + *( (CCTK_INT2 *) output_values[i]) = pow(*( (CCTK_INT2 *) output_values[i]), 1.0/4.0); + break; + #endif + #ifdef CCTK_INT4 + case CCTK_VARIABLE_INT4: + *( (CCTK_INT4 *) output_values[i]) = pow( *( (CCTK_INT4 *) output_values[i]), 1.0/4.0); + break; + #endif + #ifdef CCTK_INT8 + case CCTK_VARIABLE_INT8: + *( (CCTK_INT8 *) output_values[i]) = pow(*( (CCTK_INT8 *) output_values[i]), 1.0/4.0); + break; + #endif + case CCTK_VARIABLE_REAL: + *( (CCTK_REAL *) output_values[i]) = pow(*( (CCTK_REAL *) output_values[i]), 1.0/4.0); + break; + #ifdef CCTK_REAL4 + case CCTK_VARIABLE_REAL4: + *( (CCTK_REAL4 *) output_values[i]) = pow(*( (CCTK_REAL4 *) output_values[i]), 1.0/4.0); + break; + #endif + #ifdef CCTK_REAL8 + case CCTK_VARIABLE_REAL8: + *( (CCTK_REAL8 *) output_values[i]) = pow(*( (CCTK_REAL8 *) output_values[i]), 1.0/4.0); + break; + #endif + #ifdef CCTK_REAL16 + case CCTK_VARIABLE_REAL16: + *( (CCTK_REAL16 *) output_values[i]) = pow(*( (CCTK_REAL16 *) output_values[i]), 1.0/4.0); + break; + #endif + case CCTK_VARIABLE_COMPLEX: + cmplx_tmp.Re = (*( (CCTK_COMPLEX *) output_values[i])).Re; + cmplx_tmp.Im = (*( (CCTK_COMPLEX *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/4.0); + (*( (CCTK_COMPLEX *) output_values[i])).Re = cmplx_tmp.Re; + (*( (CCTK_COMPLEX *) output_values[i])).Im = cmplx_tmp.Im; + break; + #ifdef CCTK_COMPLEX8 + case CCTK_VARIABLE_COMPLEX8: + cmplx_tmp8.Re = (*( (CCTK_COMPLEX8 *) output_values[i])).Re; + cmplx_tmp8.Im = (*( (CCTK_COMPLEX8 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/4.0); + (*( (CCTK_COMPLEX8 *) output_values[i])).Re = cmplx_tmp8.Re; + (*( (CCTK_COMPLEX8 *) output_values[i])).Im = cmplx_tmp8.Im; + break; + #endif + #ifdef CCTK_COMPLEX16 + case CCTK_VARIABLE_COMPLEX16: + cmplx_tmp16.Re = (*( (CCTK_COMPLEX16 *) output_values[i])).Re; + cmplx_tmp16.Im = (*( (CCTK_COMPLEX16 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/4.0); + (*( (CCTK_COMPLEX16 *) output_values[i])).Re = cmplx_tmp16.Re; + (*( (CCTK_COMPLEX16 *) output_values[i])).Im = cmplx_tmp16.Im; + break; + #endif + #ifdef CCTK_COMPLEX32 + case CCTK_VARIABLE_COMPLEX32: + cmplx_tmp32.Re = (*( (CCTK_COMPLEX32 *) output_values[i])).Re; + cmplx_tmp32.Im = (*( (CCTK_COMPLEX32 *) output_values[i])).Im; + cmplx_tmp = CCTK_CmplxPow(cmplx_tmp, 1.0/4.0); + (*( (CCTK_COMPLEX32 *) output_values[i])).Re = cmplx_tmp32.Re; + (*( (CCTK_COMPLEX32 *) output_values[i])).Im = cmplx_tmp32.Im; + break; + #endif + } + } + } + return ierr; } -- cgit v1.2.3