Proto  3.2
Proto_InterpStencil.H
Go to the documentation of this file.
1 #pragma once
2 #ifndef _PROTO_INTERP_STENCIL_
3 #define _PROTO_INTERP_STENCIL_
4 
6 
7 namespace Proto
8 {
9  template<typename T, unsigned int C, MemType MEM,
10  unsigned int D, unsigned int E>
11  struct LazyInterpStencil;
12 
13  template<typename T>
15  {
16  public:
17 
18  inline static InterpStencil<T> Constant(Point a_refRatio);
19  inline static InterpStencil<T> Linear(Point a_refRatio);
20  inline static InterpStencil<T> Quadratic(Point a_refRatio);
21  inline static InterpStencil<T> FiniteVolume(Point a_refRatio, int a_order = 5);
22 
24  InterpStencil(Point a_refRatio);
25  void define(Point a_refRatio);
26 
27  inline Box domain(Box a_range) const;
28  inline Box range(Box a_domain) const;
29  inline Point ghost() const;
30  inline Box span() const;
31  inline Point ratio() const {return m_ratio; }
32 
33  template<unsigned int C, MemType MEM=MEMTYPE_DEFAULT, unsigned int D, unsigned int E>
34  inline void apply(
35  BoxData<T,C,MEM,D,E>& a_output,
36  const BoxData<T,C,MEM,D,E>& a_input,
37  Box a_box,
38  bool a_overwrite,
39  T a_scale = 1.0) const;
40 
41  template<unsigned int C, MemType MEM, unsigned int D, unsigned int E>
43  const BoxData<T, C, MEM, D, E>& a_input,
44  T a_scale = 1.0) const;
45 
46  template<unsigned int C, MemType MEM, unsigned int D, unsigned int E>
48  const BoxData<T, C, MEM, D, E>& a_input,
49  Box a_range,
50  T a_scale = 1.0) const;
51 
52  private:
53 
56 
57  }; //end class InterpStencil
58 
59  template<typename T, unsigned int C, MemType MEM,
60  unsigned int D, unsigned int E>
61  struct LazyInterpStencil
62  {
63  inline LazyInterpStencil(){}
64  inline LazyInterpStencil(
65  const InterpStencil<T>& a_stencil,
66  const BoxData<T, C, MEM, D, E>& a_src,
67  Box a_range, T a_scale);
68 
69  inline void apply(BoxData<T,C,MEM,D,E>& a_dst, bool a_overwrite) const;
70  inline Box inferredRange() const;
72  const InterpStencil<T>* op;
74  T scale;
75  }; // end class LazyInterpStencil
76 
77 #include "implem/Proto_InterpStencilImplem.H"
78 #include "implem/Proto_InterpStencilDefs.H"
79 
80 
81  // Increment operator
82  template<typename T, unsigned int C, MemType MEM,
83  unsigned int D, unsigned int E>
85  BoxData<T,C,MEM,D,E>& a_dst,
87  {
88  a_op.apply(a_dst, false);
89  return a_dst;
90  }
91  // Replace operator
92  template<typename T, unsigned int C, MemType MEM,
93  unsigned int D, unsigned int E>
95  BoxData<T,C,MEM,D,E>& a_dst,
96  const LazyInterpStencil<T,C,MEM,D,E>&& a_op)
97  {
98  a_op.apply(a_dst, true);
99  return a_dst;
100  }
101 } // end Proto namespace
102 #endif //end include guard
Box range
Definition: Proto_InterpStencil.H:71
Multidimensional Rectangular Array.
Definition: Proto_BoxData.H:314
Array< InterpStencil1D< T >, DIM > m_interp
Definition: Proto_InterpStencil.H:55
static InterpStencil< T > Linear(Point a_refRatio)
Definition: Proto_InterpStencil.H:19
Point ratio() const
Definition: Proto_InterpStencil.H:31
LazyInterpStencil< T, C, MEM, D, E > operator()(const BoxData< T, C, MEM, D, E > &a_input, T a_scale=1.0) const
Definition: Proto_InterpStencil.H:119
InterpStencil()
Definition: Proto_InterpStencil.H:23
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
MemType
Definition: Proto_MemType.H:7
Definition: Proto_InterpStencil.H:14
Definition: Proto_BoxData.H:81
An interval in DIM dimensional space.
Definition: Proto_Box.H:29
Box span() const
Definition: Proto_InterpStencil.H:72
Box domain(Box a_range) const
Definition: Proto_InterpStencil.H:22
T scale
Definition: Proto_InterpStencil.H:74
const BoxData< T, C, MEM, D, E > * srcData
Definition: Proto_InterpStencil.H:73
Definition: Proto_Array.H:17
A templated constant size array object similar to std::array, but with the ability to be used inside ...
Definition: Proto_Array.H:28
Integer Valued Vector.
Definition: Proto_Point.H:24
void define(Point a_refRatio)
Definition: Proto_InterpStencil.H:10
static InterpStencil< T > Quadratic(Point a_refRatio)
Definition: Proto_InterpStencil.H:63
static InterpStencil< T > FiniteVolume(Point a_refRatio, int a_order=5)
Definition: Proto_InterpStencil.H:109
Box range(Box a_domain) const
Definition: Proto_InterpStencil.H:37
Point ghost() const
Definition: Proto_InterpStencil.H:57
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
void apply(BoxData< T, C, MEM, D, E > &a_output, const BoxData< T, C, MEM, D, E > &a_input, Box a_box, bool a_overwrite, T a_scale=1.0) const
Definition: Proto_InterpStencil.H:86
Point m_ratio
Definition: Proto_InterpStencil.H:54
static InterpStencil< T > Constant(Point a_refRatio)
Definition: Proto_InterpStencil.H:3