diff options
Diffstat (limited to 'src/ReductionCount.c')
-rw-r--r-- | src/ReductionCount.c | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/src/ReductionCount.c b/src/ReductionCount.c new file mode 100644 index 0000000..ee4c627 --- /dev/null +++ b/src/ReductionCount.c @@ -0,0 +1,234 @@ + /*@@ + @file ReductionCount.c + @date Thu Apr 3 11:54:53 1997 + @author Thomas Radke + @desc + Defines the PUGH reduction operator "count" to get the number of + grid points of an arbitrary array. + @enddesc + @version $Id$ + @@*/ + +#include <stdlib.h> +#include <string.h> + +#include "pugh_reductions.h" + +static const char *rcsid = "$Id$"; + +CCTK_FILEVERSION(CactusPUGH_PUGHReduce_ReductionCount_c) + +/* local function prototypes */ +static int ReductionCount (const cGH *GH, + int proc, + int num_dims, + const int from[/* dim */], + const int to[/* dim */], + int iterator[/* dim */], + const int points_per_dim[/* dim */], + int num_points, + int num_inarrays, + const int intypes[/* num_inarrays */], + const void *const inarrays[/* num_inarrays */], + int num_outvals, + CCTK_REAL outvals[/*num_inarrays*num_outvals*/]); + + +/*@@ + @routine PUGH_ReductionCountArrays + @author Thomas Radke + @date 19 Aug 1999 + @desc + Registered PUGH reduction routine for computing the counts + of a set of arrays. + The arrays are described by their dimensions and variable type. + For the number of output values only 1 is accepted. + Type casting of the result is provided by specifying the + requested output datatype. The intermediate reduction value + is always computed as a CCTK_REAL value internally. + @enddesc + @var GH + @vdesc Pointer to CCTK grid hierarchy + @vtype const cGH * + @vio in + @endvar + @var proc + @vdesc processor that should receive the result of operation + (negative value means all processors receive the result) + @vtype int + @vio in + @endvar + @var nDims + @vdesc number of dimensions of input arrays + @vtype int + @vio in + @endvar + @var dims + @vdesc dimensions of input arrays + @vtype const int * + @vio in + @endvar + @var nArrays + @vdesc number of input arrays + @vtype int + @vio in + @endvar + @var inarrays + @vdesc field of input arrays + @vtype const void *const + @vio in + @endvar + @var inType + @vdesc (common) variable type of input arrays + @vtype int + @vio in + @endvar + @var num_outvals + @vdesc number of values per output array + @vtype int + @vio in + @endvar + @var outvals + @vdesc pointer to buffer holding the output values + @vtype void * + @vio in + @endvar + @var outtype + @vdesc (common) variable type of output arrays + @vtype int + @vio in + @endvar +@@*/ +int PUGH_ReductionCountArrays (const cGH *GH, + int proc, + int num_dims, + const int dims[/* num_dims */], + int num_inarrays, + const void *const inarrays[/* num_inarrays */], + int intype, + int num_outvals, + void *outvals /* [num_outvals] */, + int outtype) +{ + return (PUGH_ReductionArrays (GH, proc, num_dims, dims, + intype, num_inarrays, inarrays, + outtype, num_outvals, outvals, + ReductionCount)); +} + + +/*@@ + @routine PUGH_ReductionCountGVs + @author Thomas Radke + @date 23 Apr 1999 + @desc + PUGH reduction routine to be registered for calculating the count. + It just goes through the list of variables and calls the appropriate + grouptype reduction routine. + If the number of requested output values equals the size of the + variable, global reduction is done element-wise. + Otherwise num_outvals must be 1, and global reduction is done on the + results of the local reductions. + @enddesc + @var GH + @vdesc Pointer to CCTK grid hierarchy + @vtype const cGH * + @vio in + @endvar + @var proc + @vdesc processor that should receive the result of operation + (negative value means all processors receive the result) + @vtype int + @vio in + @endvar + @var num_outvals + @vdesc number of requested output elements + @vtype int + @vio in + @endvar + @var outtype + @vdesc type of return value + @vtype int + @vio in + @endvar + @var outvals + @vdesc array for the result values to be stored + @vtype void * + @vio in + @endvar + @var num_invars + @vdesc number of variables in the list + @vtype int + @vio in + @endvar + @var invars + @vdesc list of variables (given as their global indices) + @vtype const int * + @vio in + @endvar +@@*/ +int PUGH_ReductionCountGVs (const cGH *GH, + int proc, + int num_outvals, + int outtype, + void *outvals /* [num_outvals] */, + int num_invars, + const int invars[/* num_invars */]) +{ + return (PUGH_ReductionGVs (GH, proc, num_invars, invars, + outtype, num_outvals, outvals, + ReductionCount)); +} + + +/*****************************************************************************/ +/* local functions */ +/*****************************************************************************/ +/*@@ + @routine ReductionCount + @date Aug 19 1999 + @author Thomas Radke + @desc + Returns the number of grid points of a distributed array + @enddesc +@@*/ +static int ReductionCount (const cGH *GH, + int proc, + int num_dims, + const int from[/* dim */], + const int to[/* dim */], + int iterator[/* dim */], + const int points_per_dim[/* dim */], + int num_points, + int num_inarrays, + const int intypes[/* num_inarrays */], + const void *const inarrays[/* num_inarrays */], + int num_outvals, + CCTK_REAL outvals[/*num_inarrays*num_outvals*/]) +{ + int i; + + + /* avoid compiler warnings about unused parameters */ + (void) (GH + 0); + (void) (proc + 0); + (void) (num_dims + 0); + (void) (from + 0); + (void) (to + 0); + (void) (iterator + 0); + (void) (points_per_dim + 0); + (void) (intypes + 0); + (void) (inarrays + 0); + (void) (num_outvals + 0); + + /* assign the return value */ + if (proc < 0 || proc == CCTK_MyProc (GH)) + { + for (i = 0; i < num_inarrays; i++) + { + outvals[i] = num_points; + } + } + + return (0); +} |