aboutsummaryrefslogtreecommitdiff
path: root/src/MinFunctions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/MinFunctions.c')
-rw-r--r--src/MinFunctions.c900
1 files changed, 605 insertions, 295 deletions
diff --git a/src/MinFunctions.c b/src/MinFunctions.c
index 41f13ce..231fe81 100644
--- a/src/MinFunctions.c
+++ b/src/MinFunctions.c
@@ -17,20 +17,26 @@
extern "C" {
#endif
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -38,51 +44,52 @@ int LocalReduce_Min_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
@@ -102,17 +109,20 @@ int LocalReduce_Min_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -120,6 +130,7 @@ int LocalReduce_Min_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
@@ -138,17 +149,20 @@ int LocalReduce_Min_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -157,6 +171,7 @@ int LocalReduce_Min_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
@@ -175,18 +190,21 @@ int LocalReduce_Min_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -195,6 +213,7 @@ int LocalReduce_Min_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
@@ -213,40 +232,51 @@ int LocalReduce_Min_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
#endif
}
- return num_points;
+ ierr = Util_TableSetInt(param_table_handle, num_points, "num_points");
+ ierr = Util_TableSetReal(param_table_handle, weight_sum, "weight_sum");
+ return 0;
}
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -254,51 +284,52 @@ int LocalReduce_Min_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
@@ -317,17 +348,20 @@ int LocalReduce_Min_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -335,6 +369,7 @@ int LocalReduce_Min_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
@@ -353,17 +388,20 @@ int LocalReduce_Min_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -372,6 +410,7 @@ int LocalReduce_Min_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
@@ -390,17 +429,20 @@ int LocalReduce_Min_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -409,6 +451,7 @@ int LocalReduce_Min_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
@@ -427,17 +470,20 @@ int LocalReduce_Min_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -447,20 +493,26 @@ int LocalReduce_Min_INT(int i, int mask_on, CCTK_INT * input_array_offsets, int
}
#ifdef CCTK_INT1
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -468,51 +520,52 @@ int LocalReduce_Min_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
@@ -531,17 +584,20 @@ int LocalReduce_Min_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -549,6 +605,7 @@ int LocalReduce_Min_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
@@ -567,17 +624,20 @@ int LocalReduce_Min_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -586,6 +646,7 @@ int LocalReduce_Min_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
@@ -604,18 +665,21 @@ int LocalReduce_Min_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -624,6 +688,7 @@ int LocalReduce_Min_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
@@ -642,18 +707,21 @@ int LocalReduce_Min_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -664,20 +732,26 @@ int LocalReduce_Min_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, int
#endif
#ifdef CCTK_INT2
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -685,51 +759,52 @@ int LocalReduce_Min_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
@@ -748,17 +823,20 @@ int LocalReduce_Min_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -766,6 +844,7 @@ int LocalReduce_Min_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
@@ -784,17 +863,20 @@ int LocalReduce_Min_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -803,6 +885,7 @@ int LocalReduce_Min_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
@@ -821,18 +904,21 @@ int LocalReduce_Min_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -841,6 +927,7 @@ int LocalReduce_Min_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
@@ -859,18 +946,21 @@ int LocalReduce_Min_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -881,20 +971,26 @@ int LocalReduce_Min_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, int
#endif
#ifdef CCTK_INT4
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -902,51 +998,52 @@ int LocalReduce_Min_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
@@ -965,17 +1062,20 @@ int LocalReduce_Min_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -983,6 +1083,7 @@ int LocalReduce_Min_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
@@ -1001,17 +1102,20 @@ int LocalReduce_Min_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1020,6 +1124,7 @@ int LocalReduce_Min_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
@@ -1038,18 +1143,21 @@ int LocalReduce_Min_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1058,6 +1166,7 @@ int LocalReduce_Min_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
@@ -1076,18 +1185,21 @@ int LocalReduce_Min_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -1098,20 +1210,26 @@ int LocalReduce_Min_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, int
#endif
#ifdef CCTK_INT8
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1119,51 +1237,52 @@ int LocalReduce_Min_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
@@ -1182,17 +1301,20 @@ int LocalReduce_Min_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1200,6 +1322,7 @@ int LocalReduce_Min_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
@@ -1218,17 +1341,20 @@ int LocalReduce_Min_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1237,6 +1363,7 @@ int LocalReduce_Min_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
@@ -1255,18 +1382,21 @@ int LocalReduce_Min_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1275,6 +1405,7 @@ int LocalReduce_Min_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
@@ -1293,18 +1424,21 @@ int LocalReduce_Min_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -1314,20 +1448,26 @@ int LocalReduce_Min_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, int
}
#endif
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1335,51 +1475,52 @@ int LocalReduce_Min_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
@@ -1398,17 +1539,20 @@ int LocalReduce_Min_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1416,6 +1560,7 @@ int LocalReduce_Min_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
@@ -1434,17 +1579,20 @@ int LocalReduce_Min_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1453,6 +1601,7 @@ int LocalReduce_Min_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
@@ -1471,18 +1620,21 @@ int LocalReduce_Min_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1491,6 +1643,7 @@ int LocalReduce_Min_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
@@ -1509,18 +1662,21 @@ int LocalReduce_Min_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -1530,20 +1686,26 @@ int LocalReduce_Min_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, int
}
#ifdef CCTK_REAL4
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1551,51 +1713,52 @@ int LocalReduce_Min_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
@@ -1614,17 +1777,20 @@ int LocalReduce_Min_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1632,6 +1798,7 @@ int LocalReduce_Min_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
@@ -1650,17 +1817,20 @@ int LocalReduce_Min_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1669,6 +1839,7 @@ int LocalReduce_Min_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
@@ -1687,18 +1858,21 @@ int LocalReduce_Min_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1707,6 +1881,7 @@ int LocalReduce_Min_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
@@ -1725,18 +1900,21 @@ int LocalReduce_Min_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -1747,20 +1925,26 @@ int LocalReduce_Min_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets, in
#endif
#ifdef CCTK_REAL8
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1768,51 +1952,52 @@ int LocalReduce_Min_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
@@ -1831,17 +2016,20 @@ int LocalReduce_Min_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1849,6 +2037,7 @@ int LocalReduce_Min_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
@@ -1867,17 +2056,20 @@ int LocalReduce_Min_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1886,6 +2078,7 @@ int LocalReduce_Min_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
@@ -1904,18 +2097,21 @@ int LocalReduce_Min_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1924,6 +2120,7 @@ int LocalReduce_Min_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
@@ -1942,11 +2139,13 @@ int LocalReduce_Min_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
@@ -1954,7 +2153,8 @@ int LocalReduce_Min_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(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -1965,20 +2165,26 @@ int LocalReduce_Min_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets, in
#endif
#ifdef CCTK_REAL16
-int LocalReduce_Min_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_Min_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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -1986,51 +2192,52 @@ int LocalReduce_Min_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
@@ -2049,17 +2256,20 @@ int LocalReduce_Min_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -2067,6 +2277,7 @@ int LocalReduce_Min_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
@@ -2085,17 +2296,20 @@ int LocalReduce_Min_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -2104,6 +2318,7 @@ int LocalReduce_Min_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
@@ -2122,18 +2337,21 @@ int LocalReduce_Min_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -2142,6 +2360,7 @@ int LocalReduce_Min_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
@@ -2160,18 +2379,21 @@ int LocalReduce_Min_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
#define REDUCTION_OPERATION(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0]; (num).Im = 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
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
break;
@@ -2181,13 +2403,18 @@ int LocalReduce_Min_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets, i
}
#endif
-int LocalReduce_Min_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_Min_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
@@ -2205,7 +2432,8 @@ int LocalReduce_Min_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2213,51 +2441,52 @@ int LocalReduce_Min_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
@@ -2266,10 +2495,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2287,7 +2518,8 @@ int LocalReduce_Min_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2295,6 +2527,7 @@ int LocalReduce_Min_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
@@ -2303,10 +2536,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2324,7 +2559,8 @@ int LocalReduce_Min_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2333,6 +2569,7 @@ int LocalReduce_Min_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
@@ -2341,11 +2578,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2363,7 +2602,8 @@ int LocalReduce_Min_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2372,6 +2612,7 @@ int LocalReduce_Min_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
@@ -2380,11 +2621,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2402,7 +2645,8 @@ int LocalReduce_Min_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
break;
@@ -2413,13 +2657,18 @@ int LocalReduce_Min_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets,
#ifdef CCTK_COMPLEX8
-int LocalReduce_Min_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_Min_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
@@ -2437,7 +2686,8 @@ int LocalReduce_Min_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2445,51 +2695,52 @@ int LocalReduce_Min_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
@@ -2498,10 +2749,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2519,7 +2772,8 @@ int LocalReduce_Min_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2527,6 +2781,7 @@ int LocalReduce_Min_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
@@ -2535,10 +2790,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2556,7 +2813,8 @@ int LocalReduce_Min_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2565,6 +2823,7 @@ int LocalReduce_Min_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
@@ -2573,11 +2832,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2595,7 +2856,8 @@ int LocalReduce_Min_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2604,6 +2866,7 @@ int LocalReduce_Min_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
@@ -2612,11 +2875,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2634,7 +2899,8 @@ int LocalReduce_Min_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
break;
@@ -2645,13 +2911,18 @@ int LocalReduce_Min_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offsets,
#endif
#ifdef CCTK_COMPLEX16
-int LocalReduce_Min_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_Min_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
@@ -2669,7 +2940,8 @@ int LocalReduce_Min_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2677,51 +2949,52 @@ int LocalReduce_Min_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
@@ -2730,10 +3003,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2751,7 +3026,8 @@ int LocalReduce_Min_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2759,6 +3035,7 @@ int LocalReduce_Min_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
@@ -2767,10 +3044,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2788,7 +3067,8 @@ int LocalReduce_Min_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2797,6 +3077,7 @@ int LocalReduce_Min_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
@@ -2805,11 +3086,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2827,7 +3110,8 @@ int LocalReduce_Min_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2836,6 +3120,7 @@ int LocalReduce_Min_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
@@ -2844,11 +3129,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2866,7 +3153,8 @@ int LocalReduce_Min_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
break;
@@ -2877,13 +3165,18 @@ int LocalReduce_Min_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offsets
#endif
#ifdef CCTK_COMPLEX32
-int LocalReduce_Min_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_Min_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
@@ -2901,7 +3194,8 @@ int LocalReduce_Min_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -2909,51 +3203,52 @@ int LocalReduce_Min_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
@@ -2962,10 +3257,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -2983,7 +3280,8 @@ int LocalReduce_Min_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0];
#define EXTRA_STEP(a, b)
@@ -2991,6 +3289,7 @@ int LocalReduce_Min_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
@@ -2999,10 +3298,12 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -3020,7 +3321,8 @@ int LocalReduce_Min_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -3029,6 +3331,7 @@ int LocalReduce_Min_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
@@ -3037,11 +3340,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -3059,7 +3364,8 @@ int LocalReduce_Min_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
@@ -3068,6 +3374,7 @@ int LocalReduce_Min_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
@@ -3076,11 +3383,13 @@ int LocalReduce_Min_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(Min, scalar) if ((Min).Re > (scalar).Re) (Min).Re = (scalar).Re;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if ((Min).Re > (scalar).Re*weight) (Min).Re = (scalar).Re*weight;
#define REDUCTION_INITIAL(num) (num).Re = typed_vdata[0].Re; (num).Im = typed_vdata[0].Im;
#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
@@ -3098,7 +3407,8 @@ int LocalReduce_Min_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offsets
inval = (CCTK_REAL16) typed_vdata[sum_indices].Re;
#endif
-#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define REDUCTION_OPERATION(Min, scalar) if (Min > scalar) Min = scalar;
+#define WEIGHTED_REDUCTION_OPERATION(Min, scalar, weight) if (Min > scalar*weight) Min = scalar*weight;
#define REDUCTION_INITIAL(num) num = typed_vdata[0].Re;
#define EXTRA_STEP(a, b)
break;