aboutsummaryrefslogtreecommitdiff
path: root/src/Norm3Functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Norm3Functions.c')
-rw-r--r--src/Norm3Functions.c892
1 files changed, 614 insertions, 278 deletions
diff --git a/src/Norm3Functions.c b/src/Norm3Functions.c
index 995307f..deacf8d 100644
--- a/src/Norm3Functions.c
+++ b/src/Norm3Functions.c
@@ -23,13 +23,18 @@ extern "C" {
#define ABS(x) ((x) < 0 ? -(x) : (x))
-int LocalReduce_Norm3_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_Norm3_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
@@ -41,6 +46,7 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -48,51 +54,52 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
{
/* 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
@@ -115,11 +122,13 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -131,6 +140,7 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -138,6 +148,7 @@ int LocalReduce_Norm3_BYTE(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
@@ -159,11 +170,13 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -175,6 +188,7 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -183,6 +197,7 @@ int LocalReduce_Norm3_BYTE(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
@@ -204,12 +219,14 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -221,6 +238,7 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -229,6 +247,7 @@ int LocalReduce_Norm3_BYTE(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
@@ -250,12 +269,14 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_BYTE, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -267,21 +288,29 @@ int LocalReduce_Norm3_BYTE(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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_Norm3_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_Norm3_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
@@ -293,6 +322,7 @@ int LocalReduce_Norm3_INT(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(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -300,51 +330,52 @@ int LocalReduce_Norm3_INT(int i, int mask_on, CCTK_INT * input_array_offsets, in
{
/* 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
@@ -366,11 +397,13 @@ int LocalReduce_Norm3_INT(int i, int mask_on, CCTK_INT * input_array_offsets, in
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -382,6 +415,7 @@ int LocalReduce_Norm3_INT(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(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -389,6 +423,7 @@ int LocalReduce_Norm3_INT(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
@@ -410,11 +445,13 @@ int LocalReduce_Norm3_INT(int i, int mask_on, CCTK_INT * input_array_offsets, in
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -426,6 +463,7 @@ int LocalReduce_Norm3_INT(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(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -434,6 +472,7 @@ int LocalReduce_Norm3_INT(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
@@ -455,11 +494,13 @@ int LocalReduce_Norm3_INT(int i, int mask_on, CCTK_INT * input_array_offsets, in
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -471,6 +512,7 @@ int LocalReduce_Norm3_INT(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(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -479,6 +521,7 @@ int LocalReduce_Norm3_INT(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
@@ -500,11 +543,13 @@ int LocalReduce_Norm3_INT(int i, int mask_on, CCTK_INT * input_array_offsets, in
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -516,22 +561,30 @@ int LocalReduce_Norm3_INT(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(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#ifdef CCTK_INT1
-int LocalReduce_Norm3_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_Norm3_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
@@ -543,6 +596,7 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -550,51 +604,52 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
{
/* 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
@@ -616,11 +671,13 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -632,6 +689,7 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -639,6 +697,7 @@ int LocalReduce_Norm3_INT1(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
@@ -660,11 +719,13 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -676,6 +737,7 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -684,6 +746,7 @@ int LocalReduce_Norm3_INT1(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
@@ -705,12 +768,14 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -722,6 +787,7 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -730,6 +796,7 @@ int LocalReduce_Norm3_INT1(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
@@ -751,12 +818,14 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT1, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -768,23 +837,31 @@ int LocalReduce_Norm3_INT1(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
#ifdef CCTK_INT2
-int LocalReduce_Norm3_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_Norm3_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
@@ -796,6 +873,7 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -803,51 +881,52 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
{
/* 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
@@ -869,11 +948,13 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -885,6 +966,7 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -892,6 +974,7 @@ int LocalReduce_Norm3_INT2(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
@@ -913,11 +996,13 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -929,6 +1014,7 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -937,6 +1023,7 @@ int LocalReduce_Norm3_INT2(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
@@ -958,12 +1045,14 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -975,6 +1064,7 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -983,6 +1073,7 @@ int LocalReduce_Norm3_INT2(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
@@ -1004,12 +1095,14 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT2, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1021,23 +1114,31 @@ int LocalReduce_Norm3_INT2(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
#ifdef CCTK_INT4
-int LocalReduce_Norm3_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_Norm3_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
@@ -1049,6 +1150,7 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1056,51 +1158,52 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
{
/* 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
@@ -1122,11 +1225,13 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1138,6 +1243,7 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1145,6 +1251,7 @@ int LocalReduce_Norm3_INT4(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
@@ -1166,11 +1273,13 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1182,6 +1291,7 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1190,6 +1300,7 @@ int LocalReduce_Norm3_INT4(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
@@ -1211,12 +1322,14 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1228,6 +1341,7 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1236,6 +1350,7 @@ int LocalReduce_Norm3_INT4(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
@@ -1257,12 +1372,14 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1274,23 +1391,31 @@ int LocalReduce_Norm3_INT4(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
#ifdef CCTK_INT8
-int LocalReduce_Norm3_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_Norm3_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
@@ -1302,6 +1427,7 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1309,51 +1435,52 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
{
/* 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
@@ -1375,11 +1502,13 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1391,6 +1520,7 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1398,6 +1528,7 @@ int LocalReduce_Norm3_INT8(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
@@ -1419,11 +1550,13 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1435,6 +1568,7 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1443,6 +1577,7 @@ int LocalReduce_Norm3_INT8(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
@@ -1464,12 +1599,14 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1481,6 +1618,7 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1489,6 +1627,7 @@ int LocalReduce_Norm3_INT8(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
@@ -1510,12 +1649,14 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_INT8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1527,22 +1668,30 @@ int LocalReduce_Norm3_INT8(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
-int LocalReduce_Norm3_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_Norm3_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
@@ -1554,6 +1703,7 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1561,51 +1711,52 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
{
/* 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
@@ -1627,11 +1778,13 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1643,6 +1796,7 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1650,6 +1804,7 @@ int LocalReduce_Norm3_REAL(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
@@ -1671,11 +1826,13 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1687,6 +1844,7 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1695,6 +1853,7 @@ int LocalReduce_Norm3_REAL(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
@@ -1716,12 +1875,14 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1733,6 +1894,7 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1741,6 +1903,7 @@ int LocalReduce_Norm3_REAL(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
@@ -1762,12 +1925,14 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1779,22 +1944,30 @@ int LocalReduce_Norm3_REAL(int i, int mask_on, CCTK_INT * input_array_offsets, i
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#ifdef CCTK_REAL4
-int LocalReduce_Norm3_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_Norm3_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
@@ -1806,6 +1979,7 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1813,51 +1987,52 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
{
/* 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
@@ -1879,11 +2054,13 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1895,6 +2072,7 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1902,6 +2080,7 @@ int LocalReduce_Norm3_REAL4(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
#undef REDUCTION_PREOP_CAST
@@ -1923,11 +2102,13 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1939,6 +2120,7 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1947,6 +2129,7 @@ int LocalReduce_Norm3_REAL4(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
#undef REDUCTION_PREOP_CAST
@@ -1968,12 +2151,14 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -1985,6 +2170,7 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -1993,6 +2179,7 @@ int LocalReduce_Norm3_REAL4(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
#undef REDUCTION_PREOP_CAST
@@ -2014,12 +2201,14 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL4, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2031,23 +2220,31 @@ int LocalReduce_Norm3_REAL4(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
#ifdef CCTK_REAL8
-int LocalReduce_Norm3_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_Norm3_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
@@ -2059,6 +2256,7 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2066,51 +2264,52 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
{
/* 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
@@ -2132,11 +2331,13 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2148,6 +2349,7 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2155,6 +2357,7 @@ int LocalReduce_Norm3_REAL8(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
#undef REDUCTION_PREOP_CAST
@@ -2176,11 +2379,13 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2192,6 +2397,7 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2200,6 +2406,7 @@ int LocalReduce_Norm3_REAL8(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
#undef REDUCTION_PREOP_CAST
@@ -2221,12 +2428,14 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2238,6 +2447,7 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2246,6 +2456,7 @@ int LocalReduce_Norm3_REAL8(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
#undef REDUCTION_PREOP_CAST
@@ -2267,12 +2478,14 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2285,23 +2498,31 @@ int LocalReduce_Norm3_REAL8(int i, int mask_on, CCTK_INT * input_array_offsets,
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
#ifdef CCTK_REAL16
-int LocalReduce_Norm3_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_Norm3_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
@@ -2313,6 +2534,7 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2320,51 +2542,52 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
{
/* 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
@@ -2386,11 +2609,13 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2402,6 +2627,7 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2409,6 +2635,7 @@ int LocalReduce_Norm3_REAL16(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
#undef REDUCTION_PREOP_CAST
@@ -2430,11 +2657,13 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar,weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2446,6 +2675,7 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2454,6 +2684,7 @@ int LocalReduce_Norm3_REAL16(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
#undef REDUCTION_PREOP_CAST
@@ -2475,12 +2706,14 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2492,6 +2725,7 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2500,6 +2734,7 @@ int LocalReduce_Norm3_REAL16(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
#undef REDUCTION_PREOP_CAST
@@ -2521,12 +2756,14 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval.Re = (CCTK_REAL16) typed_vdata[sum_indices];
#endif
-#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define REDUCTION_OPERATION(Norm3, scalar) (scalar).Re = CUBE_ABS((scalar).Re); (scalar).Im = CUBE_ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) (scalar).Re = CUBE_ABS((scalar).Re*weight); (scalar).Im = CUBE_ABS((scalar).Im*weight); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_REAL16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#undef REDUCTION_PREOP_CAST
@@ -2538,22 +2775,30 @@ int LocalReduce_Norm3_REAL16(int i, int mask_on, CCTK_INT * input_array_offsets,
#define REDUCTION_PREOP_CAST(inval, typed_vdata,sum_indices, out_type) \
inval = (out_type) typed_vdata[sum_indices];
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
-int LocalReduce_Norm3_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_Norm3_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
#ifdef CUBE_ABS
@@ -2576,6 +2821,7 @@ int LocalReduce_Norm3_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2583,51 +2829,52 @@ int LocalReduce_Norm3_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
#ifdef CUBE_ABS
@@ -2640,10 +2887,12 @@ int LocalReduce_Norm3_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(Norm3, scalar) scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2666,6 +2915,7 @@ int LocalReduce_Norm3_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2673,6 +2923,7 @@ int LocalReduce_Norm3_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
#ifdef CUBE_ABS
@@ -2685,10 +2936,12 @@ int LocalReduce_Norm3_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(Norm3, scalar) scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2711,6 +2964,7 @@ int LocalReduce_Norm3_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2719,6 +2973,7 @@ int LocalReduce_Norm3_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
#ifdef CUBE_ABS
@@ -2731,11 +2986,13 @@ int LocalReduce_Norm3_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(Norm3, scalar) scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2758,6 +3015,7 @@ int LocalReduce_Norm3_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2766,6 +3024,7 @@ int LocalReduce_Norm3_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
#ifdef CUBE_ABS
@@ -2778,11 +3037,13 @@ int LocalReduce_Norm3_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(Norm3, scalar) scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2805,23 +3066,31 @@ int LocalReduce_Norm3_COMPLEX(int i, int mask_on, CCTK_INT * input_array_offsets
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#ifdef CCTK_COMPLEX8
-int LocalReduce_Norm3_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_Norm3_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
#ifdef CUBE_ABS
@@ -2844,6 +3113,7 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2851,51 +3121,52 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
{
/* 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
#ifdef CUBE_ABS
@@ -2908,10 +3179,12 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
(inval).Re = (CCTK_REAL) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2934,6 +3207,7 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2941,6 +3215,7 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#ifdef CCTK_COMPLEX8
case CCTK_VARIABLE_COMPLEX8:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2953,10 +3228,12 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
(inval).Re = (CCTK_REAL4) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL4) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2979,6 +3256,7 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -2987,6 +3265,7 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#ifdef CCTK_COMPLEX16
case CCTK_VARIABLE_COMPLEX16:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -2999,11 +3278,13 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
(inval).Re = (CCTK_REAL8) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL8) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3026,6 +3307,7 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3034,6 +3316,7 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#ifdef CCTK_COMPLEX32
case CCTK_VARIABLE_COMPLEX32:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3046,11 +3329,13 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
(inval).Re = (CCTK_REAL16) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL16) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX8, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3073,23 +3358,31 @@ int LocalReduce_Norm3_COMPLEX8(int i, int mask_on, CCTK_INT * input_array_offset
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
#ifdef CCTK_COMPLEX16
-int LocalReduce_Norm3_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_Norm3_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
#ifdef CUBE_ABS
@@ -3112,6 +3405,7 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3119,51 +3413,52 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
{
/* 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
#ifdef CUBE_ABS
@@ -3176,10 +3471,12 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3202,6 +3499,7 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3209,6 +3507,7 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#ifdef CCTK_COMPLEX8
case CCTK_VARIABLE_COMPLEX8:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3221,10 +3520,12 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL4) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL4) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3247,6 +3548,7 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3255,6 +3557,7 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#ifdef CCTK_COMPLEX16
case CCTK_VARIABLE_COMPLEX16:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3267,11 +3570,13 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL8) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL8) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3294,6 +3599,7 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3302,6 +3608,7 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#ifdef CCTK_COMPLEX32
case CCTK_VARIABLE_COMPLEX32:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3314,11 +3621,13 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL16) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL16) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX16, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3341,23 +3650,31 @@ int LocalReduce_Norm3_COMPLEX16(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif
#ifdef CCTK_COMPLEX32
-int LocalReduce_Norm3_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_Norm3_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
#ifdef CUBE_ABS
@@ -3380,6 +3697,7 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3387,51 +3705,52 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
{
/* 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
#ifdef CUBE_ABS
@@ -3444,10 +3763,12 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul(scalar, CCTK_CmplxMul(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3470,6 +3791,7 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3477,6 +3799,7 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#ifdef CCTK_COMPLEX8
case CCTK_VARIABLE_COMPLEX8:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3489,10 +3812,12 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL4) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL4) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul8(scalar, CCTK_CmplxMul8(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd8( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX8, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3515,6 +3840,7 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3523,6 +3849,7 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#ifdef CCTK_COMPLEX16
case CCTK_VARIABLE_COMPLEX16:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3535,11 +3862,13 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL8) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL8) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul16(scalar, CCTK_CmplxMul16(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd16( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX16, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3562,6 +3891,7 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 0;
#define EXTRA_STEP(a, b)
@@ -3570,6 +3900,7 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#ifdef CCTK_COMPLEX32
case CCTK_VARIABLE_COMPLEX32:
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3582,11 +3913,13 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
(inval).Re = (CCTK_REAL16) (typed_vdata[sum_indices]).Re; (inval).Im = (CCTK_REAL16) (typed_vdata[sum_indices]).Im;
#define REDUCTION_OPERATION(Norm3, scalar) scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) scalar.Re=scalar.Re*weight; scalar.Im=scalar.Im*weight; scalar = CCTK_CmplxMul32(scalar, CCTK_CmplxMul32(scalar,scalar)); (scalar).Re = ABS((scalar).Re); (scalar).Im = ABS((scalar).Im); Norm3 = CCTK_CmplxAdd32( Norm3, scalar);
#define REDUCTION_INITIAL(num) (num).Re = 0.0; (num).Im = 0.0;
#define EXTRA_STEP(a, b)
- ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], mask_on, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
+ ITERATE_ON_ARRAY(i,CCTK_COMPLEX32, input_arrays[i], CCTK_COMPLEX32, output_numbers[i], weight_on, weight, input_array_offsets[i], indices, sum_indices, max_iter, iter, flag, actual_indices,input_array_strides, input_array_min_subscripts,input_array_dims,product)
#undef REDUCTION_OPERATION
+#undef WEIGHTED_REDUCTION_OPERATION
#undef REDUCTION_INITIAL
#undef EXTRA_STEP
#ifdef CUBE_ABS
@@ -3609,12 +3942,15 @@ int LocalReduce_Norm3_COMPLEX32(int i, int mask_on, CCTK_INT * input_array_offse
#endif
#define REDUCTION_OPERATION(Norm3, scalar) Norm3 = Norm3 + CUBE_ABS(scalar);
+#define WEIGHTED_REDUCTION_OPERATION(Norm3, scalar, weight) Norm3 = Norm3 + CUBE_ABS(scalar*weight);
#define REDUCTION_INITIAL(num) num = 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;
}
#endif