From 6ac7336659585ea68e7f77c0e6d9091adaebda38 Mon Sep 17 00:00:00 2001 From: yye00 Date: Tue, 24 Jan 2006 21:06:04 +0000 Subject: 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 --- src/ReductionNormInf.c | 174 ++----------------------------------------------- 1 file 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); -- cgit v1.2.3