Proto  3.2
Proto_MBLevelBCLib.H
Go to the documentation of this file.
1 #pragma once
2 #ifndef __MB_PROTO_LEVEL_BC_LIB__
3 #define __MB_PROTO_LEVEL_BC_LIB__
4 
5 #include "Proto_MBLevelBC.H"
6 namespace Proto {
7 
8  /// No Boundary Condition
9  /** This is the default boundary condition for MMB
10  * and it does nothing
11  */
12  template<typename T, unsigned int C,
13  typename MAP,
14  MemType MEM, Centering CTR>
15  class NullBC : public MBLevelBC<T,C,MAP,MEM,CTR>
16  {
17  public:
19  inline void apply(MBLevelBoxData<T,C,MEM,CTR>& a_data) const {}
20  };
21 
22  /// Constant Ghost Value
23  /** Fills ghost cells with a constant value which can be different
24  * for each component of the state. This is mostly just for testing
25  * purposes.
26  */
27  template<typename T, unsigned int C,
28  typename MAP,
29  MemType MEM, Centering CTR>
30  class ConstBC : public MBLevelBC<T,C,MAP,MEM,CTR>
31  {
32  public:
34  inline void setVal(T a_value, int a_comp = -1);
35  inline void apply(MBLevelBoxData<T,C,MEM,CTR>& a_data) const;
36  private:
37  std::vector<std::pair<int, T>> m_compValues;
38  T m_globalValue = 0;
39  };
40  #include "implem/Proto_MBLevelBCLibImplem.H"
41 } // end namespace Proto
42 #endif //end include guard
std::enable_if< I< sizeof...(LArgs), void >::typecall_mb_level_forall(Func &a_func, MBIndex &a_index, Centering CTR, std::tuple< LArgs... > a_args, FArgs &&... a_fargs){ auto &arg=parse_mb_level_arg(a_index, CTR, std::get< I >a_args));call_mb_level_forall< I+1 >a_func, a_index, CTR, a_args, a_fargs..., arg);}template< typename T, unsigned int C, MemType MEM, Centering CTR >template< typename Func, typename... Srcs >void MBLevelBoxData< T, C, MEM, CTR >::initialize(Func &a_func, Srcs &... a_srcs){ auto srcs=std::tuple< Srcs &... >a_srcs...);for(auto iter :(m_layout)) { auto &patch=(*this)[iter];auto block=layout().block(iter);call_mb_level_forall(a_func, iter, CTR, srcs, patch, block);} }template< typename T, unsigned int C, MemType MEM, Centering CTR >template< typename Func, typename... Srcs >void MBLevelBoxData< T, C, MEM, CTR >::initConvolve(Func &a_func, Srcs &... a_srcs){ auto g=ghost();g[0]=g[0]+Point::Ones();MBLevelBoxData< T, C, MEM, CTR > tmp(m_layout, g);tmp.initialize(a_func, a_srcs...);for(auto iter :m_layout) { auto &tmp_i=tmp[iter];auto &patch=(*this)[iter];Operator::convolve(patch, tmp_i);}}template< typename T, unsigned int C, MemType MEM, Centering CTR >void MBLevelBoxData< T, C, MEM, CTR >::setVal(T a_value){ for(auto data :m_data) { data-> setVal(a_value)
Definition: Proto_MBLevelBoxData.H:208
MemType
Definition: Proto_MemType.H:7
No Boundary Condition.
Definition: Proto_MBLevelBCLib.H:15
Multiblock Level Box Data.
Definition: Proto_MBLevelBoxData.H:17
Definition: Proto_Array.H:17
void apply(MBLevelBoxData< T, C, MEM, CTR > &a_data) const
Definition: Proto_MBLevelBCLib.H:19
Definition: Proto_MBLevelBC.H:11
std::vector< std::pair< int, T > > m_compValues
Definition: Proto_MBLevelBCLib.H:37
Constant Ghost Value.
Definition: Proto_MBLevelBCLib.H:30
Centering
Definition: Proto_Centering.H:7