diff options
author | yye00 <yye00@7daa882c-dc44-4453-834e-278d26b18e6a> | 2006-01-24 21:06:04 +0000 |
---|---|---|
committer | yye00 <yye00@7daa882c-dc44-4453-834e-278d26b18e6a> | 2006-01-24 21:06:04 +0000 |
commit | 6ac7336659585ea68e7f77c0e6d9091adaebda38 (patch) | |
tree | 2548041a0f462e36a4e9ce5132adc2140b927a6d | |
parent | 47207166128c4a82506f91674c6167f0a98762f7 (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.c | 174 |
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); |