43 #ifndef DOMI_UTILS_HPP 44 #define DOMI_UTILS_HPP 47 #include "Domi_ConfigDefs.hpp" 50 #include "Teuchos_Array.hpp" 51 #include "Teuchos_ArrayView.hpp" 75 typedef Teuchos::Ordinal size_type;
89 typedef Ordinal dim_type;
94 typedef Ordinal difference_type;
102 typedef Teuchos::Tuple< int, 2 > padding_type;
124 LAST_INDEX_FASTEST = 0,
126 FIRST_INDEX_FASTEST = 1,
172 template<
class SIZE_TYPE,
class DIM_TYPE >
173 Teuchos::Array< SIZE_TYPE >
174 computeStrides(
const Teuchos::Array< DIM_TYPE > & dimensions,
177 int n = dimensions.size();
178 Teuchos::Array< SIZE_TYPE > strides(n);
179 if (n == 0)
return strides;
181 if (layout == FIRST_INDEX_FASTEST)
184 for (
int axis = 1; axis < n; ++axis)
185 strides[axis] = strides[axis-1] * dimensions[axis-1];
190 for (
int axis = n-2; axis >= 0; --axis)
191 strides[axis] = strides[axis+1] * dimensions[axis+1];
206 template<
class SIZE_TYPE,
class DIM_TYPE >
207 Teuchos::Array< SIZE_TYPE >
208 computeStrides(
const Teuchos::ArrayView< DIM_TYPE > & dimensions,
218 Teuchos::Array< DIM_TYPE > nonConstDims(0);
219 nonConstDims.insert(nonConstDims.begin(),
222 return computeStrides< SIZE_TYPE, DIM_TYPE >(nonConstDims, layout);
233 template<
class DIM_TYPE >
234 size_type computeSize(
const Teuchos::ArrayView< DIM_TYPE > & dimensions)
236 size_type result = 1;
237 for (
int axis = 0; axis < dimensions.size(); ++axis)
238 result *= dimensions[axis];
250 template<
class DIM_TYPE >
251 size_type computeSize(
const Teuchos::Array< DIM_TYPE > & dimensions)
259 Teuchos::Array< DIM_TYPE > nonConstDims(0);
260 nonConstDims.insert(nonConstDims.begin(),
263 return computeSize(nonConstDims());
276 template<
class SIZE_TYPE,
class DIM_TYPE >
277 SIZE_TYPE computeSize(
const Teuchos::ArrayView< DIM_TYPE > & dimensions,
278 const Teuchos::ArrayView< SIZE_TYPE > & strides)
282 for (
int axis = 0; axis < dimensions.size(); ++axis)
283 result += (dimensions[axis]-1) * strides[axis];
312 Teuchos::Array< int >
313 regularizeCommDims(
int numProcs,
315 const Teuchos::ArrayView< const int > & commDims);
327 Teuchos::Array< int >
328 computeCommIndexes(
int rank,
329 const Teuchos::ArrayView< int > & commStrides);
342 Teuchos::Array< int >
343 createArrayOfInts(
int numDims,
344 const Teuchos::ArrayView< const int > & source);
353 Teuchos::Array< int >
354 splitStringOfIntsWithCommas(std::string data);
363 template<
class T > MPI_Datatype mpiType();
376 int mpiOrder(Layout layout);
382 #endif // DOMI_MDARRAY_UTILS_HPP Provide capability to declare a variable as non-const, even if template parameter is const...
Definition: Domi_Utils.hpp:143
T type
Typedef for the non-const version of the template parameter.
Definition: Domi_Utils.hpp:159
T type
Typedef for the template parameter.
Definition: Domi_Utils.hpp:147
Definition: Domi_ConfigDefs.hpp:97