1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
#ifndef __CS_ARRAY_REDUCE_H__
#define __CS_ARRAY_REDUCE_H__
/*============================================================================
* Common array reduction operations.
*============================================================================*/
/*
This file is part of the Code_Saturne Kernel, element of the
Code_Saturne CFD tool.
Copyright (C) 1998-2016 EDF S.A., France
contact: saturne-support@edf.fr
The Code_Saturne Kernel is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
The Code_Saturne Kernel is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the Code_Saturne Kernel; if not, write to the
Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor,
Boston, MA 02110-1301 USA
*/
/*----------------------------------------------------------------------------*/
#if defined(HAVE_MPI)
#include <mpi.h>
#endif
/*----------------------------------------------------------------------------
* Local headers
*----------------------------------------------------------------------------*/
#include "cs_defs.h"
#include "cs_mesh.h"
/*----------------------------------------------------------------------------*/
BEGIN_C_DECLS
/*=============================================================================
* Macro definitions
*============================================================================*/
/*============================================================================
* Type definitions
*============================================================================*/
/*=============================================================================
* Public function prototypes
*============================================================================*/
/*----------------------------------------------------------------------------
* Compute sums of an n-dimensional cs_real_t array's components.
*
* The maximum allowed dimension is 9 (allowing for a rank-2 tensor).
* The array is interleaved.
*
* For arrays of dimension 3, the statistics relative to the norm
* are also computed, and added at the end of the statistics arrays
* (which must be size dim+1).
*
* The algorithm here is similar to that used for BLAS, but computes several
* quantities simultaneously for better cache behavior.
*
* Note that for locations with elements shared across ranks
* (such as interior faces and vertices), sums may be incorrect as
* contributions from multiple ranks may be counted several times.
*
* parameters:
* n_elts <-- number of local elements
* v_elt_list <-- optional list of parent elements on which values
* are defined, or NULL
* dim <-- local array dimension (max: 9)
* v <-- pointer to array values
* vsum --> resulting sum array (size: dim, or 4 if dim = 3)
*----------------------------------------------------------------------------*/
void
cs_array_reduce_sum_l(cs_lnum_t n_elts,
int dim,
const cs_lnum_t *v_elt_list,
const cs_real_t v[],
double vsum[]);
/*----------------------------------------------------------------------------
* Compute simple local stats (minima, maxima, sum) of an
* n-dimensional cs_real_t array's components.
*
* The maximum allowed dimension is 9 (allowing for a rank-2 tensor).
* The array is interleaved.
*
* For arrays of dimension 3, the statistics relative to the norm
* are also computed, and added at the end of the statistics arrays
* (which must be size dim+1).
*
* The algorithm here is similar to that used for BLAS, but computes several
* quantities simultaneously for better cache behavior.
*
* Note that for locations with elements shared across ranks
* (such as interior faces and vertices), sums may be incorrect as
* contributions from multiple ranks may be counted several times.
*
* parameters:
* n_elts <-- number of local elements
* dim <-- local array dimension (max: 9)
* v_elt_list <-- optional list of parent elements on which values
* are defined, or NULL
* v <-- pointer to array values
* vmin --> resulting min array (size: dim, or 4 if dim = 3)
* vmax --> resulting max array (size: dim, or 4 if dim = 3)
* vsum --> resulting sum array (size: dim, or 4 if dim = 3)
*----------------------------------------------------------------------------*/
void
cs_array_reduce_simple_stats_l(cs_lnum_t n_elts,
int dim,
const cs_lnum_t *v_elt_list,
const cs_real_t v[],
double vmin[],
double vmax[],
double vsum[]);
/*----------------------------------------------------------------------------*/
/*!
* \brief Compute simple local stats (minima, maxima, sum, weighted sum) of
* an n-dimensional cs_real_t array's components for a given mesh location.
*
* The maximum allowed dimension is 9 (allowing for a rank-2 tensor).
* The array is interleaved.
*
* For arrays of dimension 3, the statistics relative to the norm
* are also computed, and added at the end of the statistics arrays
* (which must be size dim+1).
*
* The algorithm here is similar to that used for BLAS, but computes several
* quantities simultaneously for better cache behavior
*
* parameters:
* n_elts <-- number of local elements
* dim <-- local array dimension (max: 9)
* v_elt_list <-- optional list of parent elements on which values
* are defined, or NULL
* w_elt_list <-- optional list of parent elements on which weights
* are defined, or NULL; if v_elt_list is defined
* (ie. non-NULL),then w_elt_list = v_elt_list is assumed,
* so this parameter is ignored
* v <-- pointer to array values
* w <-- pointer to weights
* vmin --> resulting min array (size: dim, or 4 if dim = 3)
* vmax --> resulting max array (size: dim, or 4 if dim = 3)
* vsum --> resulting sum array (size: dim, or 4 if dim = 3)
* wsum --> resulting weighted sum array (size: dim, or 4 if dim = 3)
*/
/*----------------------------------------------------------------------------*/
void
cs_array_reduce_simple_stats_l_w(cs_lnum_t n_elts,
int dim,
const cs_lnum_t *v_elt_list,
const cs_lnum_t *w_elt_list,
const cs_real_t v[],
const cs_real_t w[],
double vmin[],
double vmax[],
double vsum[],
double wsum[]);
/*----------------------------------------------------------------------------*/
END_C_DECLS
#endif /* __CS_ARRAY_REDUCE_H__ */
|