aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryye00 <yye00@7daa882c-dc44-4453-834e-278d26b18e6a>2006-01-24 21:06:04 +0000
committeryye00 <yye00@7daa882c-dc44-4453-834e-278d26b18e6a>2006-01-24 21:06:04 +0000
commit6ac7336659585ea68e7f77c0e6d9091adaebda38 (patch)
tree2548041a0f462e36a4e9ce5132adc2140b927a6d
parent47207166128c4a82506f91674c6167f0a98762f7 (diff)
Fix for infinite norm, removed superfluous divide by num_points and changed the global operation code from 3 (sum) to 1(max). Some minor modifications
git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/LocalReduce/trunk@73 7daa882c-dc44-4453-834e-278d26b18e6a
-rw-r--r--src/ReductionNormInf.c174
1 files changed, 5 insertions, 169 deletions
diff --git a/src/ReductionNormInf.c b/src/ReductionNormInf.c
index c3e20a1..490c9aa 100644
--- a/src/ReductionNormInf.c
+++ b/src/ReductionNormInf.c
@@ -3,7 +3,7 @@
@date
@author Tom Goodale, Yaakoub Y El Khamra
@desc
- Defines the reduction operator to get the average
+ Defines the reduction operator to get the infinite norm
of an arbitrary array.
@enddesc
@version $Id$
@@ -119,7 +119,7 @@ int LocalReduce_LInf (int N_dims, int operator_handle,
@routine ReductionLInf
@date
@author Tom Goodale, Yaakoub Y El Khamra
- @desc Returns the average of a distributed array with
+ @desc Returns the infinite norm of a distributed array with
'num_points' elements. Global reduction is done element-wise
(num_outvals == 1) or on the results of the local reductions.
@enddesc
@@ -216,7 +216,7 @@ static int ReductionLInf (int N_dims, int operator_handle,
/* reduction maps an array to a single value of the same type */
if (M_output_numbers != N_input_arrays)
{
- CCTK_WARN (1, "Average reduction returns a single value\n \
+ CCTK_WARN (1, "Infinite norm reduction returns a single value\n \
for each input array\n");
return (-1);
}
@@ -330,173 +330,9 @@ static int ReductionLInf (int N_dims, int operator_handle,
if ( global_calling != 0)
{
ierr = Util_TableSetInt(param_table_handle, num_points, "num_points");
- ierr = Util_TableSetInt(param_table_handle, 3,"global_operation");
- ierr = Util_TableSetInt(param_table_handle, 1,"perform_division");
+ ierr = Util_TableSetInt(param_table_handle, 1,"global_operation");
}
- else
- {
- if (weight_on == 1)
- {
- if (ABS(weight_sum) > 1e-12)
- {
- for (i = 0; i< M_output_numbers; i++)
- {
- switch (output_number_type_codes[i])
- {
- /* out values type switches*/
- case CCTK_VARIABLE_BYTE:
- *( (CCTK_BYTE *) output_numbers[i]) = *( (CCTK_BYTE *) output_numbers[i]) / weight_sum;
- break;
- case CCTK_VARIABLE_INT:
- *( (CCTK_INT *) output_numbers[i]) = *( (CCTK_INT *) output_numbers[i]) / weight_sum;
- break;
- #ifdef HAVE_CCTK_INT1
- case CCTK_VARIABLE_INT1:
- *( (CCTK_INT1 *) output_numbers[i]) = *( (CCTK_INT1 *) output_numbers[i]) / weight_sum;
- break;
- #endif
- #ifdef HAVE_CCTK_INT2
- case CCTK_VARIABLE_INT2:
- *( (CCTK_INT2 *) output_numbers[i]) = *( (CCTK_INT2 *) output_numbers[i]) / weight_sum;
- break;
- #endif
- #ifdef HAVE_CCTK_INT4
- case CCTK_VARIABLE_INT4:
- *( (CCTK_INT4 *) output_numbers[i]) = *( (CCTK_INT4 *) output_numbers[i]) / weight_sum;
- break;
- #endif
- #ifdef HAVE_CCTK_INT8
- case CCTK_VARIABLE_INT8:
- *( (CCTK_INT8 *) output_numbers[i]) = *( (CCTK_INT8 *) output_numbers[i]) / weight_sum;
- break;
- #endif
- case CCTK_VARIABLE_REAL:
- *( (CCTK_REAL *) output_numbers[i]) = *( (CCTK_REAL *) output_numbers[i]) / weight_sum;
- break;
- #ifdef HAVE_CCTK_REAL4
- case CCTK_VARIABLE_REAL4:
- *( (CCTK_REAL4 *) output_numbers[i]) = *( (CCTK_REAL4 *) output_numbers[i]) / weight_sum;
- break;
- #endif
- #ifdef HAVE_CCTK_REAL8
- case CCTK_VARIABLE_REAL8:
- *( (CCTK_REAL8 *) output_numbers[i]) = *( (CCTK_REAL8 *) output_numbers[i]) / weight_sum;
- break;
- #endif
- #ifdef HAVE_CCTK_REAL16
- case CCTK_VARIABLE_REAL16:
- *( (CCTK_REAL16 *) output_numbers[i]) = *( (CCTK_REAL16 *) output_numbers[i]) / weight_sum;
- break;
- #endif
- case CCTK_VARIABLE_COMPLEX:
- (*( (CCTK_COMPLEX *) output_numbers[i])).Re = (*( (CCTK_COMPLEX *) output_numbers[i])).Re / weight_sum;
- (*( (CCTK_COMPLEX *) output_numbers[i])).Im = (*( (CCTK_COMPLEX *) output_numbers[i])).Im / weight_sum;
- break;
- #ifdef HAVE_CCTK_COMPLEX8
- case CCTK_VARIABLE_COMPLEX8:
- (*( (CCTK_COMPLEX8 *) output_numbers[i])).Re = (*( (CCTK_COMPLEX8 *) output_numbers[i])).Re / weight_sum;
- (*( (CCTK_COMPLEX8 *) output_numbers[i])).Im = (*( (CCTK_COMPLEX8 *) output_numbers[i])).Im / weight_sum;
- break;
- #endif
- #ifdef HAVE_CCTK_COMPLEX16
- case CCTK_VARIABLE_COMPLEX16:
- (*( (CCTK_COMPLEX16 *) output_numbers[i])).Re = (*( (CCTK_COMPLEX16 *) output_numbers[i])).Re / weight_sum;
- (*( (CCTK_COMPLEX16 *) output_numbers[i])).Im = (*( (CCTK_COMPLEX16 *) output_numbers[i])).Im / weight_sum;
- break;
- #endif
- #ifdef HAVE_CCTK_COMPLEX32
- case CCTK_VARIABLE_COMPLEX32:
- (*( (CCTK_COMPLEX32 *) output_numbers[i])).Re = (*( (CCTK_COMPLEX32 *) output_numbers[i])).Re / weight_sum;
- (*( (CCTK_COMPLEX32 *) output_numbers[i])).Im = (*( (CCTK_COMPLEX32 *) output_numbers[i])).Im / weight_sum;
- break;
- #endif
- }
- }
- }
- else
- {
- CCTK_WARN (1, "The sum of weights in average reduction is zero");
- return (-1);
- }
- }
- else
- {
- for (i = 0; i< M_output_numbers; i++)
- {
- switch (output_number_type_codes[i])
- {
- /* out values type switches*/
- case CCTK_VARIABLE_BYTE:
- *( (CCTK_BYTE *) output_numbers[i]) = *( (CCTK_BYTE *) output_numbers[i]) / num_points;
- break;
- case CCTK_VARIABLE_INT:
- *( (CCTK_INT *) output_numbers[i]) = *( (CCTK_INT *) output_numbers[i]) / num_points;
- break;
- #ifdef HAVE_CCTK_INT1
- case CCTK_VARIABLE_INT1:
- *( (CCTK_INT1 *) output_numbers[i]) = *( (CCTK_INT1 *) output_numbers[i]) / num_points;
- break;
- #endif
- #ifdef HAVE_CCTK_INT2
- case CCTK_VARIABLE_INT2:
- *( (CCTK_INT2 *) output_numbers[i]) = *( (CCTK_INT2 *) output_numbers[i]) / num_points;
- break;
- #endif
- #ifdef HAVE_CCTK_INT4
- case CCTK_VARIABLE_INT4:
- *( (CCTK_INT4 *) output_numbers[i]) = *( (CCTK_INT4 *) output_numbers[i]) / num_points;
- break;
- #endif
- #ifdef HAVE_CCTK_INT8
- case CCTK_VARIABLE_INT8:
- *( (CCTK_INT8 *) output_numbers[i]) = *( (CCTK_INT8 *) output_numbers[i]) / num_points;
- break;
- #endif
- case CCTK_VARIABLE_REAL:
- *( (CCTK_REAL *) output_numbers[i]) = *( (CCTK_REAL *) output_numbers[i]) / num_points;
- break;
- #ifdef HAVE_CCTK_REAL4
- case CCTK_VARIABLE_REAL4:
- *( (CCTK_REAL4 *) output_numbers[i]) = *( (CCTK_REAL4 *) output_numbers[i]) / num_points;
- break;
- #endif
- #ifdef HAVE_CCTK_REAL8
- case CCTK_VARIABLE_REAL8:
- *( (CCTK_REAL8 *) output_numbers[i]) = *( (CCTK_REAL8 *) output_numbers[i]) / num_points;
- break;
- #endif
- #ifdef HAVE_CCTK_REAL16
- case CCTK_VARIABLE_REAL16:
- *( (CCTK_REAL16 *) output_numbers[i]) = *( (CCTK_REAL16 *) output_numbers[i]) / num_points;
- break;
- #endif
- case CCTK_VARIABLE_COMPLEX:
- (*( (CCTK_COMPLEX *) output_numbers[i])).Re = (*( (CCTK_COMPLEX *) output_numbers[i])).Re / num_points;
- (*( (CCTK_COMPLEX *) output_numbers[i])).Im = (*( (CCTK_COMPLEX *) output_numbers[i])).Im / num_points;
- break;
- #ifdef HAVE_CCTK_COMPLEX8
- case CCTK_VARIABLE_COMPLEX8:
- (*( (CCTK_COMPLEX8 *) output_numbers[i])).Re = (*( (CCTK_COMPLEX8 *) output_numbers[i])).Re / num_points;
- (*( (CCTK_COMPLEX8 *) output_numbers[i])).Im = (*( (CCTK_COMPLEX8 *) output_numbers[i])).Im / num_points;
- break;
- #endif
- #ifdef HAVE_CCTK_COMPLEX16
- case CCTK_VARIABLE_COMPLEX16:
- (*( (CCTK_COMPLEX16 *) output_numbers[i])).Re = (*( (CCTK_COMPLEX16 *) output_numbers[i])).Re / num_points;
- (*( (CCTK_COMPLEX16 *) output_numbers[i])).Im = (*( (CCTK_COMPLEX16 *) output_numbers[i])).Im / num_points;
- break;
- #endif
- #ifdef HAVE_CCTK_COMPLEX32
- case CCTK_VARIABLE_COMPLEX32:
- (*( (CCTK_COMPLEX32 *) output_numbers[i])).Re = (*( (CCTK_COMPLEX32 *) output_numbers[i])).Re / num_points;
- (*( (CCTK_COMPLEX32 *) output_numbers[i])).Im = (*( (CCTK_COMPLEX32 *) output_numbers[i])).Im / num_points;
- break;
- #endif
- }
- }
- }
- }
-
+
/* free memory */
free (iters_per_dim);
free (indices);