aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryye00 <yye00@d60812e6-3970-4df4-986e-c251b06effeb>2005-01-25 02:05:57 +0000
committeryye00 <yye00@d60812e6-3970-4df4-986e-c251b06effeb>2005-01-25 02:05:57 +0000
commitd164bfdc4be5be69b9a8adf332ab572936175834 (patch)
treeb2da70429da78a8d7c9b0f1d018d2bbb7c0145de
parentd01bd250a08175c54dfaf8d3b4d7ebb4a0ee7519 (diff)
matching the new -correct- complex reduction definitions
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGHReduce/trunk@63 d60812e6-3970-4df4-986e-c251b06effeb
-rw-r--r--src/ReduceGA.c291
1 files 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;
}