1 #ifndef _PROTO_STENCIL_H_ 2 #define _PROTO_STENCIL_H_ 16 #include "Proto_Matrix.H" 21 #define PR_MAX_COEFFS 343 29 template <
typename T,
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
73 template<
typename... vals>
152 "Shift::operator[] | Error: \ 153 a_dir = %i is invalid. a_dir must be in [0,DIM=%i)",
181 template <
typename T,
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
184 inline LazyStencil() {};
185 inline LazyStencil(
const Stencil<T>* a_stencil,
187 Box a_box, T a_scale);
191 inline unsigned long long int size()
const {
return m_stencil.size();}
192 inline Box inferredRange()
const;
195 std::vector<const Stencil<T>*> m_stencil;
196 std::vector<BoxData<T, C,MEMTYPE, D, E>*> m_src;
197 std::vector<Box> m_box;
198 std::vector<T> m_scale;
238 template <
typename T>
244 template <
typename TT,
unsigned int C, MemType MEMTYPE ,
unsigned int D,
unsigned int E>
245 friend class LazyStencil;
247 template <
typename TT,
unsigned int C , MemType MEMTYPE,
unsigned int D,
unsigned int E>
250 template <
typename TT,
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
253 LazyStencil<TT,C,MEMTYPE,D,E>&& a_op);
255 template <
typename TT,
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
258 LazyStencil<TT,C,MEMTYPE,D,E>&& a_op);
303 inline bool operator==(
const Stencil<T>& a_stencil)
const;
339 void operator*=(
const T a_coef);
385 inline const std::vector<T>&
coefs()
const {
return m_coefs;};
401 inline const std::vector<Point>&
offsets()
const {
return m_offsets;};
417 inline unsigned long long int size()
const {
return m_coefs.size();}
442 inline Point ghost()
const;
485 inline unsigned long long int numFlops(
const Box& a_box)
const;
491 inline bool closed()
const {
return m_isClosed;}
508 template<
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
509 inline LazyStencil <T,C,MEMTYPE,D,E>
522 template<
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
523 inline LazyStencil <T,C,MEMTYPE,D,E>
536 inline void invert(
int a_dir);
545 inline void transpose(
unsigned int a,
unsigned int b);
557 inline Box indexRange(
Box a_domain)
const;
570 inline Box indexDomain(
Box a_range)
const;
581 inline Box range(
Box a_domain)
const;
592 inline Box domain(
Box a_range)
const;
607 inline void print()
const;
631 static Stencil<T> Derivative(
int a_n,
int a_dir,
int a_order = 2);
654 static Stencil<T> LaplacianFace(
int a_dir,
int a_order = 2);
657 static std::vector<double> ExtrapCoefs(
const std::vector<double>& a_footprint,
bool a_cellAverage =
true);
659 template<
unsigned int C=1, MemType MEM=MEMTYPE_DEFAULT,
unsigned int D=1,
unsigned int E=1>
816 static Stencil<T> faceToCell(
int a_dir,
int a_order = 4);
818 static Stencil<T> cornersToFaces(
int a_dir,
int a_order = 4);
820 static Stencil<T> CornersToCells(
int a_order = 4);
841 template<
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
846 bool a_initToZero =
false,
847 const T a_scale = 1)
const;
850 template<
unsigned int C,
unsigned int D,
unsigned int E>
855 bool a_initToZero =
false,
859 template<
unsigned int C,
unsigned int D,
unsigned int E>
864 bool a_initToZero =
false,
868 template<
unsigned int C,
unsigned int D,
unsigned int E>
872 bool a_initToZero =
false,
873 T a_scale = 1)
const;
883 void addCoef(T a_coef,
Point a_offset);
893 inline void closeForDevice();
926 template <
typename T>
934 template <
typename T>
941 template <
typename T>
969 template <
typename T,
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
972 LazyStencil<T,C,MEMTYPE,D,E>&& a_op);
999 template <
class T,
unsigned int C, MemType MEMTYPE,
unsigned int D,
unsigned int E>
1000 BoxData<T,C,MEMTYPE,D,E>&
operator+=(
BoxData<T,C,MEMTYPE,D,E>& a_dest, LazyStencil<T,C,MEMTYPE,D,E>&& a_op);
unsigned long long int size() const
Get Vector of Offsets.
Definition: Proto_Stencil.H:417
Stencil Shift.
Definition: Proto_Stencil.H:46
static Shift Basis(int a_dir, int a_scale=1)
Basis Shift.
Definition: Proto_Stencil.H:89
LoHiSide
Side Enum.
Definition: Proto_Face.H:23
Point m_srcRefratio
Refinement of source data.
Definition: Proto_Stencil.H:897
Point & destShift()
Get Destination Shift.
Definition: Proto_Stencil.H:472
bool m_isClosed
Definition: Proto_Stencil.H:902
Multidimensional Rectangular Array.
Definition: Proto_BoxData.H:314
Low side; normal is in negative coordinate direction.
Definition: Proto_Face.H:26
Stencil< T > operator*(T a_coef) const
Scalar Multiplication.
Definition: Proto_Stencil.H:137
Point & srcRatio()
Get Source Refinement Ratio.
Definition: Proto_Stencil.H:448
Definition: Proto_Reduction.H:15
Point & destRatio()
Get Destination Refinement Ratio.
Definition: Proto_Stencil.H:460
A Linear Stencil Operation.
Definition: Proto_BoxData.H:76
BoxData< T, C, MEM, D, E > & operator|=(BoxData< T, C, MEM, D, E > &a_dst, const LazyInterpStencil< T, C, MEM, D, E > &&a_op)
Definition: Proto_InterpStencil.H:94
const std::vector< Point > & offsets() const
Get Vector of Coefficients (Primitive)
Definition: Proto_Stencil.H:401
static ACCEL_DECORATION Point Basis(int a_dir, int a_scale=1)
Get Basis.
Point m_destShift
Output shift in (refined) destination data. Meaningless without destination refinement.
Definition: Proto_Stencil.H:899
An interval in DIM dimensional space.
Definition: Proto_Box.H:29
const Point & srcRatio() const
Get Source Refinement Ratio (Const)
Definition: Proto_Stencil.H:454
static Shift Zeros()
Zero Shift.
Definition: Proto_Stencil.H:96
const Point & destShift() const
Get Destination Shift (Const)
Definition: Proto_Stencil.H:478
bool operator!=(const Stencil< T > &a_stencil) const
Inquality Operator.
Definition: Proto_Stencil.H:310
Shift(const Point &a_pt)
Point Constructor.
Definition: Proto_Stencil.H:63
Box m_span
Bounding Box defining the largest offsets of *this. Defines Stencil's spatial footprint.
Definition: Proto_Stencil.H:900
static Stencil< T > Identity()
Definition: Proto_Stencil.H:620
int & operator[](int a_dir)
Componentwise Access.
Definition: Proto_Stencil.H:149
static Shift Y(int scale=1)
Definition: Proto_Stencil.H:108
static Shift Z(int scale=1)
Definition: Proto_Stencil.H:109
static ACCEL_DECORATION Point X()
Definition: Proto_Point.H:144
MBPoint operator+(const MBPoint &mbpoint, const Point &p)
Definition: Proto_MBProblemDomain.H:55
#define PROTO_ASSERT(stmt, args...)
Definition: Proto_PAssert.H:48
static ACCEL_DECORATION Point Ones(int a_scale=1)
Get Ones.
Point m_shift
Definition: Proto_Stencil.H:162
static ACCEL_DECORATION Point Y()
Definition: Proto_Point.H:145
const std::vector< T > & coefs() const
Get Vector of Coefficients.
Definition: Proto_Stencil.H:385
Box span() const
Span.
Definition: Proto_Stencil.H:434
static ACCEL_DECORATION Point Z()
Definition: Proto_Point.H:146
static ACCEL_DECORATION Point Zeros()
Get Zeros.
Definition: Proto_Array.H:17
Integer Valued Vector.
Definition: Proto_Point.H:24
static Shift Ones(int a_scale=1)
Unit Shift.
Definition: Proto_Stencil.H:105
ACCEL_DECORATION Array< T, N > & operator-(Array< T, N > &arr)
Unary negation.
const Point & destRatio() const
Get Destination Refinement Ratio (Const)
Definition: Proto_Stencil.H:466
std::vector< Point > m_offsets
Offsets associated with the Stencil.
Definition: Proto_Stencil.H:896
Shift()
Default Constructor.
Definition: Proto_Stencil.H:54
Point dir
Definition: Proto_MBBoxPartition.H:16
BoxData< T, C, MEM, D, E > & operator+=(BoxData< T, C, MEM, D, E > &a_dst, const LazyInterpStencil< T, C, MEM, D, E > &&a_op)
Definition: Proto_InterpStencil.H:84
Shift operator*(const Shift &a_shift) const
Convolution.
Definition: Proto_Stencil.H:146
Shift(vals... args)
Variadic Constructor.
Definition: Proto_Stencil.H:74
Point m_destRefratio
Refinement of destination data.
Definition: Proto_Stencil.H:898
Point & point()
Get Shift Point.
Definition: Proto_Stencil.H:112
std::vector< T > m_coefs
Coefficients of the Stencil.
Definition: Proto_Stencil.H:895
static Shift X(int scale=1)
Definition: Proto_Stencil.H:107
bool closed() const
Stencil Closed Query.
Definition: Proto_Stencil.H:491