DASH  0.3.0
dash::halo::StencilSpec< StencilPointT, NumStencilPoints > Class Template Reference

A collection of stencil points (Stencil) e.g. More...

#include <Stencil.h>

Public Types

using stencil_size_t = std::size_t
 
using stencil_index_t = std::size_t
 
using StencilArray_t = std::array< StencilPointT, NumStencilPoints >
 
using StencilPoint_t = StencilPointT
 
using DistanceDim_t = std::pair< spoint_value_t, spoint_value_t >
 
using DistanceAll_t = std::array< DistanceDim_t, NumDimensions >
 
using DistanceTotal_t = std::array< spoint_distance_t, NumDimensions >
 

Public Member Functions

constexpr StencilSpec (const StencilArray_t &specs)
 Constructor. More...
 
template<typename... Values>
constexpr StencilSpec (const StencilPointT &value, const Values &... values)
 Constructor. More...
 
 StencilSpec (const Self_t &other)
 Copy Constructor. More...
 
constexpr const StencilArray_t & specs () const
 
const std::pair< stencil_index_t, bool > index (StencilPointT stencil) const
 Returns the stencil point index for a given StencilPoint. More...
 
DistanceTotal_t total_distances () const
 Returns the total distances of all stencil points for all dimensions. More...
 
spoint_distance_t total_distances (dim_t dim) const
 Returns the total distances of all stencil points for all dimensions. More...
 
DistanceAll_t minmax_distances () const
 Returns the minimal and maximal distances of all stencil points for all dimensions. More...
 
DistanceDim_t minmax_distances (dim_t dim) const
 Returns the minimal and maximal distances of all stencil points for the given dimension. More...
 
constexpr const StencilPointT & operator[] (stencil_index_t index) const
 

Static Public Member Functions

static constexpr stencil_size_t num_stencil_points ()
 

Detailed Description

template<typename StencilPointT, std::size_t NumStencilPoints>
class dash::halo::StencilSpec< StencilPointT, NumStencilPoints >

A collection of stencil points (Stencil) e.g.

StencilSpec<dash::StencilPoint<2>, 2,2>({StencilPoint<2>(-1,0), StencilPoint<2>(1,0)}) -> north and south

Examples:
ex.11.halo-stencil/main.cpp.

Definition at line 167 of file Stencil.h.

Constructor & Destructor Documentation

◆ StencilSpec() [1/3]

template<typename StencilPointT, std::size_t NumStencilPoints>
constexpr dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::StencilSpec ( const StencilArray_t &  specs)
inline

Constructor.

Takes a list of StencilPoint

Definition at line 187 of file Stencil.h.

187 : _specs(specs) {}
constexpr const StencilArray_t & specs() const
Definition: Stencil.h:211

◆ StencilSpec() [2/3]

template<typename StencilPointT, std::size_t NumStencilPoints>
template<typename... Values>
constexpr dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::StencilSpec ( const StencilPointT &  value,
const Values &...  values 
)
inline

Constructor.

Takes all given StencilPoint. The number of arguments has to be the same as the given number of stencil points via the template argument.

Definition at line 196 of file Stencil.h.

197  : _specs{ { value, (StencilPointT) values... } } {
198  static_assert(sizeof...(values) == NumStencilPoints - 1,
199  "Invalid number of stencil point arguments");
200  }

◆ StencilSpec() [3/3]

template<typename StencilPointT, std::size_t NumStencilPoints>
dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::StencilSpec ( const Self_t other)
inline

Copy Constructor.

Definition at line 206 of file Stencil.h.

206 { _specs = other._specs; }

Member Function Documentation

◆ index()

template<typename StencilPointT, std::size_t NumStencilPoints>
const std::pair<stencil_index_t, bool> dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::index ( StencilPointT  stencil) const
inline

Returns the stencil point index for a given StencilPoint.

Returns
The index and true if the given stecil point was found, else the index 0 and false. Keep in mind that index 0 is only a valid index, if the returned bool is true

Definition at line 228 of file Stencil.h.

228  {
229  for(auto i = 0; i < _specs.size(); ++i) {
230  if(_specs[i] == stencil)
231  return std::make_pair(i, true);
232  }
233 
234  return std::make_pair(0, false);
235  }

◆ minmax_distances() [1/2]

template<typename StencilPointT, std::size_t NumStencilPoints>
DistanceAll_t dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::minmax_distances ( ) const
inline

Returns the minimal and maximal distances of all stencil points for all dimensions.

(minimum (first) <= 0 and maximum (second) >= 0)

Definition at line 267 of file Stencil.h.

Referenced by dash::halo::StencilIterator< Element_t, Pattern_t, typename HaloBlockT::GlobMem_t, StencilSpecT, StencilViewScope::ALL >::StencilIterator().

267  {
268  DistanceAll_t max_dist{};
269  for(const auto& stencil_point : _specs) {
270  for(auto d = 0; d < NumDimensions; ++d) {
271  if(stencil_point[d] < max_dist[d].first) {
272  max_dist[d].first = stencil_point[d];
273  continue;
274  }
275  if(stencil_point[d] > max_dist[d].second)
276  max_dist[d].second = stencil_point[d];
277  }
278  }
279 
280  return max_dist;
281  }

◆ minmax_distances() [2/2]

template<typename StencilPointT, std::size_t NumStencilPoints>
DistanceDim_t dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::minmax_distances ( dim_t  dim) const
inline

Returns the minimal and maximal distances of all stencil points for the given dimension.

(minimum (first) <= 0 and maximum (second) >= 0)

Definition at line 287 of file Stencil.h.

287  {
288  DistanceDim_t max_dist{};
289  for(const auto& stencil_point : _specs) {
290  if(stencil_point[dim] < max_dist.first) {
291  max_dist.first = stencil_point[dim];
292  continue;
293  }
294  if(stencil_point[dim] > max_dist.second)
295  max_dist.second = stencil_point[dim];
296  }
297 
298  return max_dist;
299  }

◆ num_stencil_points()

template<typename StencilPointT, std::size_t NumStencilPoints>
static constexpr stencil_size_t dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::num_stencil_points ( )
inlinestatic
Returns
number of stencil points

Definition at line 216 of file Stencil.h.

Referenced by dash::halo::StencilOperatorBoundary< Self_t >::update().

216  {
217  return NumStencilPoints;
218  }

◆ operator[]()

template<typename StencilPointT, std::size_t NumStencilPoints>
constexpr const StencilPointT& dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::operator[] ( stencil_index_t  index) const
inline
Returns
stencil point for a given index

Definition at line 303 of file Stencil.h.

References dash::index().

303  {
304  return _specs[index];
305  }
const std::pair< stencil_index_t, bool > index(StencilPointT stencil) const
Returns the stencil point index for a given StencilPoint.
Definition: Stencil.h:228

◆ specs()

template<typename StencilPointT, std::size_t NumStencilPoints>
constexpr const StencilArray_t& dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::specs ( ) const
inline
Returns
container storing all stencil points

Definition at line 211 of file Stencil.h.

Referenced by dash::halo::HaloSpec< NumDimensions >::halo_extension_max(), and dash::halo::HaloMatrixWrapper< MatrixT, SigReady >::stencil_operator().

211 { return _specs; }

◆ total_distances() [1/2]

template<typename StencilPointT, std::size_t NumStencilPoints>
DistanceTotal_t dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::total_distances ( ) const
inline

Returns the total distances of all stencil points for all dimensions.

total distance = distance bewteen min and max of a dimension

Definition at line 242 of file Stencil.h.

242  {
243  DistanceTotal_t total_dist{};
244  auto minmax = minmax_distances();
245  for(auto d = 0; d < NumDimensions; ++d) {
246  total_dist[d] = (-1) * minmax.first() + minmax.second;
247  }
248 
249  return total_dist;
250  }
DistanceAll_t minmax_distances() const
Returns the minimal and maximal distances of all stencil points for all dimensions.
Definition: Stencil.h:267
Definition: main.cpp:123

◆ total_distances() [2/2]

template<typename StencilPointT, std::size_t NumStencilPoints>
spoint_distance_t dash::halo::StencilSpec< StencilPointT, NumStencilPoints >::total_distances ( dim_t  dim) const
inline

Returns the total distances of all stencil points for all dimensions.

total distance = distance bewteen min and max of a dimension

Definition at line 257 of file Stencil.h.

257  {
258  auto minmax = minmax_distances();
259 
260  return (-1) * minmax.first() + minmax.second;
261  }
DistanceAll_t minmax_distances() const
Returns the minimal and maximal distances of all stencil points for all dimensions.
Definition: Stencil.h:267
Definition: main.cpp:123

The documentation for this class was generated from the following file: