aboutsummaryrefslogtreecommitdiff
path: root/src/SumFunctions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/SumFunctions.c')
-rw-r--r--src/SumFunctions.c756
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;