diff options
Diffstat (limited to 'src/SumFunctions.c')
-rw-r--r-- | src/SumFunctions.c | 756 |
1 files changed, 532 insertions, 224 deletions
diff --git a/src/SumFunctions.c b/src/SumFunctions.c index 401c5a0..dca7920 100644 --- a/src/SumFunctions.c +++ b/src/SumFunctions.c @@ -18,13 +18,18 @@ extern "C" { #endif -int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_BYTE(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -32,6 +37,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -39,51 +45,52 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -103,10 +110,12 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -114,6 +123,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -121,6 +131,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -139,10 +150,12 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -150,6 +163,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -158,6 +172,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -176,11 +191,13 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -188,6 +205,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -196,6 +214,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -214,11 +233,13 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -226,6 +247,7 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -234,13 +256,18 @@ int LocalReduce_Sum_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int return num_points; } -int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_INT(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -248,6 +275,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -255,51 +283,52 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -318,10 +347,12 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -329,6 +360,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -336,6 +368,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -354,10 +387,12 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -365,6 +400,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -373,6 +409,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -391,10 +428,12 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -402,6 +441,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -410,6 +450,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -428,10 +469,12 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -439,6 +482,7 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -448,13 +492,18 @@ int LocalReduce_Sum_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int } #ifdef CCTK_INT1 -int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_INT1(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -462,6 +511,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -469,51 +519,52 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT11 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT12 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT14 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT18 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -532,10 +583,12 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -543,6 +596,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -550,6 +604,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -568,10 +623,12 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -579,6 +636,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -587,6 +645,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -605,11 +664,13 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -617,6 +678,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -625,6 +687,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -643,11 +706,13 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -655,6 +720,7 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -665,13 +731,18 @@ int LocalReduce_Sum_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int #endif #ifdef CCTK_INT2 -int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_INT2(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -679,6 +750,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -686,51 +758,52 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT21 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT22 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT24 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT28 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -749,10 +822,12 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -760,6 +835,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -767,6 +843,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -785,10 +862,12 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -796,6 +875,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -804,6 +884,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -822,11 +903,13 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -834,6 +917,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -842,6 +926,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -860,11 +945,13 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -872,6 +959,7 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -882,13 +970,18 @@ int LocalReduce_Sum_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int #endif #ifdef CCTK_INT4 -int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_INT4(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -896,6 +989,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -903,51 +997,52 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -966,10 +1061,12 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -977,6 +1074,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -984,6 +1082,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1002,10 +1101,12 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1013,6 +1114,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1021,6 +1123,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1039,11 +1142,13 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1051,6 +1156,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1059,6 +1165,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1077,11 +1184,13 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1089,6 +1198,7 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -1099,13 +1209,18 @@ int LocalReduce_Sum_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int #endif #ifdef CCTK_INT8 -int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_INT8(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1113,6 +1228,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1120,51 +1236,52 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1183,10 +1300,12 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1194,6 +1313,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1201,6 +1321,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1219,10 +1340,12 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1230,6 +1353,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1238,6 +1362,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1256,11 +1381,13 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1268,6 +1395,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1276,6 +1404,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1294,11 +1423,13 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1306,6 +1437,7 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -1315,13 +1447,18 @@ int LocalReduce_Sum_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int } #endif -int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_REAL(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1329,6 +1466,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1336,51 +1474,52 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1399,10 +1538,12 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1410,6 +1551,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1417,6 +1559,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1435,10 +1578,12 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1446,6 +1591,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1454,6 +1600,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1472,11 +1619,13 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1484,6 +1633,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1492,6 +1642,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1510,11 +1661,13 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1522,6 +1675,7 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -1531,13 +1685,18 @@ int LocalReduce_Sum_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int } #ifdef CCTK_REAL4 -int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_REAL4(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1545,6 +1704,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1552,51 +1712,52 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1615,10 +1776,12 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1626,6 +1789,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1633,6 +1797,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1651,10 +1816,12 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1662,6 +1829,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1670,6 +1838,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1688,11 +1857,13 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1700,6 +1871,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1708,6 +1880,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1726,11 +1899,13 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1738,6 +1913,7 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -1748,13 +1924,18 @@ int LocalReduce_Sum_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in #endif #ifdef CCTK_REAL8 -int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_REAL8(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1762,6 +1943,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1769,51 +1951,52 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1832,10 +2015,12 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1843,6 +2028,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1850,6 +2036,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1868,10 +2055,12 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1879,6 +2068,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1887,6 +2077,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1905,11 +2096,13 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1917,6 +2110,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1925,6 +2119,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1943,11 +2138,13 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1956,6 +2153,7 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -1966,13 +2164,18 @@ int LocalReduce_Sum_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in #endif #ifdef CCTK_REAL16 -int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_REAL16(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -1980,6 +2183,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -1987,51 +2191,52 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2050,10 +2255,12 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2061,6 +2268,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2068,6 +2276,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2086,10 +2295,12 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2097,6 +2308,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2105,6 +2317,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2123,11 +2336,13 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2135,6 +2350,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2143,6 +2359,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2161,11 +2378,13 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i inval.Re = (CCTK_REAL16) typed_vdata[sum_indices]; #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP #undef REDUCTION_PREOP_CAST @@ -2173,6 +2392,7 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i #define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \ inval = (out_type) typed_vdata[sum_indices]; #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -2182,13 +2402,18 @@ int LocalReduce_Sum_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i } #endif -int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_COMPLEX(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2207,6 +2432,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2214,51 +2440,52 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2267,10 +2494,12 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2289,6 +2518,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2296,6 +2526,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2304,10 +2535,12 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL4) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL4) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2326,6 +2559,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2334,6 +2568,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2342,11 +2577,13 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL8) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL8) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2365,6 +2602,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2373,6 +2611,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2381,11 +2620,13 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL16) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL16) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2404,6 +2645,7 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -2414,13 +2656,18 @@ int LocalReduce_Sum_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets, #ifdef CCTK_COMPLEX8 -int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_COMPLEX8(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2439,6 +2686,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2446,51 +2694,52 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2499,10 +2748,12 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2521,6 +2772,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2528,6 +2780,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2536,10 +2789,12 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL4) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL4) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2558,6 +2813,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2566,6 +2822,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2574,11 +2831,13 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL8) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL8) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2597,6 +2856,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2605,6 +2865,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2613,11 +2874,13 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, (inval).Re = (CCTK_REAL16) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL16) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2636,6 +2899,7 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -2646,13 +2910,18 @@ int LocalReduce_Sum_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets, #endif #ifdef CCTK_COMPLEX16 -int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_COMPLEX16(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2671,6 +2940,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2678,51 +2948,52 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_BYTE, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_BYTE, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2731,10 +3002,12 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2753,6 +3026,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2760,6 +3034,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2768,10 +3043,12 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL4) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL4) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2790,6 +3067,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2798,6 +3076,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2806,11 +3085,13 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL8) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL8) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2829,6 +3110,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2837,6 +3119,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2845,11 +3128,13 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL16) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL16) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2868,6 +3153,7 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; @@ -2878,13 +3164,18 @@ int LocalReduce_Sum_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets #endif #ifdef CCTK_COMPLEX32 -int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[]) +int LocalReduce_Sum_COMPLEX32(int i, int weight_on, const void * const weight, CCTK_INT * input_array_offsets, int * indices, int max_iter, int * actual_indices, CCTK_INT * input_array_strides, CCTK_INT * input_array_min_subscripts,const CCTK_INT * input_array_dims, int num_points, int * actual_iters_per_dim, int * iters_per_dim, int N_dims, const void *const input_arrays[], const CCTK_INT output_number_type_codes[], void * const output_numbers[], int param_table_handle) { int iter = 0; int sum_indices = 0; - int flag, product, j, k; + int flag, product, j, k, ierr; + + /* Weight variables */ + CCTK_REAL weight_sum = 0.0; + CCTK_REAL weight_value = 1.0; #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2903,6 +3194,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2910,51 +3202,52 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets { /* out values type switches*/ case CCTK_VARIABLE_BYTE: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; case CCTK_VARIABLE_INT: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_INT1 case CCTK_VARIABLE_INT1: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT1, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT1, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT2 case CCTK_VARIABLE_INT2: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT2, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT2, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT4 case CCTK_VARIABLE_INT4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_INT8 case CCTK_VARIABLE_INT8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_INT8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_REAL: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #ifdef CCTK_REAL4 case CCTK_VARIABLE_REAL4: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL4, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL4, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL8 case CCTK_VARIABLE_REAL8: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif #ifdef CCTK_REAL16 case CCTK_VARIABLE_REAL16: - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_REAL16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) break; #endif case CCTK_VARIABLE_COMPLEX: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2963,10 +3256,12 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -2985,6 +3280,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -2992,6 +3288,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #ifdef CCTK_COMPLEX8 case CCTK_VARIABLE_COMPLEX8: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -3000,10 +3297,12 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL4) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL4) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd8( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd8( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -3022,6 +3321,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -3030,6 +3330,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #ifdef CCTK_COMPLEX16 case CCTK_VARIABLE_COMPLEX16: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -3038,11 +3339,13 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL8) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL8) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd16( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd16( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -3061,6 +3364,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) @@ -3069,6 +3373,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #ifdef CCTK_COMPLEX32 case CCTK_VARIABLE_COMPLEX32: #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -3077,11 +3382,13 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets (inval).Re = (CCTK_REAL16) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL16) (typed_vdata[sum_indices]).Im; #define REDUCTION_OPERATION(Sum, scalar) Sum = CCTK_CmplxAdd32( Sum, scalar); +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; Sum = CCTK_CmplxAdd32( Sum, scalar); #define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0; #define EXTRA_STEP(a, b) - ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) + ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product) #undef REDUCTION_OPERATION +#undef WEIGHTED_REDUCTION_OPERATION #undef REDUCTION_INITIAL #undef EXTRA_STEP @@ -3100,6 +3407,7 @@ int LocalReduce_Sum_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets #endif #define REDUCTION_OPERATION(Sum, scalar) Sum = Sum + scalar; +#define WEIGHTED_REDUCTION_OPERATION(Sum, scalar, weight) Sum = Sum + scalar*weight; #define REDUCTION_INITIAL(num) num = 0; #define EXTRA_STEP(a, b) break; |