47#include "Domi_ConfigDefs.hpp"
50#include "Teuchos_Array.hpp"
51#include "Teuchos_ArrayView.hpp"
52#include "Teuchos_ParameterList.hpp"
76typedef Teuchos::Ordinal size_type;
90typedef Ordinal dim_type;
95typedef Ordinal difference_type;
103typedef Teuchos::Tuple< int, 2 > padding_type;
125 LAST_INDEX_FASTEST = 0,
127 FIRST_INDEX_FASTEST = 1,
173template<
class SIZE_TYPE,
class DIM_TYPE >
174Teuchos::Array< SIZE_TYPE >
175computeStrides(
const Teuchos::Array< DIM_TYPE > & dimensions,
178 int n = dimensions.size();
179 Teuchos::Array< SIZE_TYPE > strides(n);
180 if (n == 0)
return strides;
182 if (layout == FIRST_INDEX_FASTEST)
185 for (
int axis = 1; axis < n; ++axis)
186 strides[axis] = strides[axis-1] * dimensions[axis-1];
191 for (
int axis = n-2; axis >= 0; --axis)
192 strides[axis] = strides[axis+1] * dimensions[axis+1];
207template<
class SIZE_TYPE,
class DIM_TYPE >
208Teuchos::Array< SIZE_TYPE >
209computeStrides(
const Teuchos::ArrayView< DIM_TYPE > & dimensions,
219 Teuchos::Array< DIM_TYPE > nonConstDims(0);
220 nonConstDims.insert(nonConstDims.begin(),
223 return computeStrides< SIZE_TYPE, DIM_TYPE >(nonConstDims, layout);
234template<
class DIM_TYPE >
235size_type computeSize(
const Teuchos::ArrayView< DIM_TYPE > & dimensions)
237 size_type result = 1;
238 for (
int axis = 0; axis < dimensions.size(); ++axis)
239 result *= dimensions[axis];
251template<
class DIM_TYPE >
252size_type computeSize(
const Teuchos::Array< DIM_TYPE > & dimensions)
260 Teuchos::Array< DIM_TYPE > nonConstDims(0);
261 nonConstDims.insert(nonConstDims.begin(),
264 return computeSize(nonConstDims());
277template<
class SIZE_TYPE,
class DIM_TYPE >
278SIZE_TYPE computeSize(
const Teuchos::ArrayView< DIM_TYPE > & dimensions,
279 const Teuchos::ArrayView< SIZE_TYPE > & strides)
283 for (
int axis = 0; axis < dimensions.size(); ++axis)
284 result += (dimensions[axis]-1) * strides[axis];
305int indexOfMax(
const Teuchos::ArrayView< const float > & seq);
324decomposeProcs(
int nprocs,
325 const Teuchos::ArrayView< dim_type > & dimensions);
353regularizeCommDims(
int numProcs,
355 const Teuchos::ArrayView< const int > & commDims);
378regularizeCommDims(
int numProcs,
379 Teuchos::ParameterList & plist);
392computeCommIndexes(
int rank,
393 const Teuchos::ArrayView< int > & commStrides);
407createArrayOfInts(
int numDims,
408 const Teuchos::ArrayView< const int > & source);
418splitStringOfIntsWithCommas(std::string data);
427template<
class T > MPI_Datatype mpiType();
440int mpiOrder(Layout layout);
T type
Typedef for the non-const version of the template parameter.
Definition: Domi_Utils.hpp:160
Provide capability to declare a variable as non-const, even if template parameter is const.
Definition: Domi_Utils.hpp:145
T type
Typedef for the template parameter.
Definition: Domi_Utils.hpp:148