1 #ifndef ERF_PhysBCFunct_H_
2 #define ERF_PhysBCFunct_H_
4 #include <AMReX_Config.H>
6 #include <AMReX_BCRec.H>
7 #include <AMReX_Geometry.H>
8 #include <AMReX_MultiFab.H>
9 #include <AMReX_ArrayLim.H>
10 #include <AMReX_FilCC_C.H>
11 #include <AMReX_FilND_C.H>
12 #include <AMReX_FilFC_C.H>
13 #include "AMReX_TypeTraits.H"
14 #include "AMReX_Orientation.H"
27 const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
28 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
29 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
30 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
31 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
32 const bool use_real_bcs,
33 amrex::Real* th_bc_data)
57 int icomp,
int ncomp, amrex::IntVect
const& nghost,
58 const amrex::Real time,
int bccomp_cons,
bool do_fb =
true,
bool do_terrain_adjustment =
true);
61 const amrex::Array4<amrex::Real const>& xvel_arr,
62 const amrex::Array4<amrex::Real const>& yvel_arr,
63 const amrex::Box& bx,
const amrex::Box& domain,
64 int icomp,
int ncomp, amrex::IntVect ng);
66 const amrex::Box& bx,
const amrex::Box& domain,
67 const amrex::Array4<amrex::Real const>& z_nd,
68 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
69 int icomp,
int ncomp,
bool do_terrain_adjustment =
true);
87 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
88 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
89 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
90 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
91 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
92 const bool use_real_bcs,
93 amrex::Real* u_bc_data)
115 amrex::IntVect
const& nghost,
const amrex::Real time,
int bccomp,
bool do_fb);
118 const amrex::Array4<amrex::Real const>& xvel_arr,
119 const amrex::Array4<amrex::Real const>& yvel_arr,
120 const amrex::Box& bx,
const amrex::Box& domain,
123 const amrex::Box& bx,
const amrex::Box& domain,
124 const amrex::Array4<amrex::Real const>& z_nd,
125 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
127 const amrex::Real time);
145 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
146 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
147 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
148 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
149 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
150 const bool use_real_bcs,
151 amrex::Real* v_bc_data)
175 amrex::IntVect
const& nghost,
const amrex::Real time,
int bccomp,
bool do_fb);
178 const amrex::Array4<amrex::Real const>& xvel_arr,
179 const amrex::Array4<amrex::Real const>& yvel_arr,
180 const amrex::Box& bx,
const amrex::Box& domain,
183 const amrex::Box& bx,
const amrex::Box& domain,
184 const amrex::Array4<amrex::Real const>& z_nd,
185 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
204 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
205 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
206 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
207 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
208 const TerrainType& terrain_type, std::unique_ptr<amrex::MultiFab>& z_phys_nd,
209 const bool use_real_bcs,
210 amrex::Real* w_bc_data)
235 amrex::IntVect
const& nghost,
const amrex::Real time,
int bccomp,
239 const amrex::Array4<amrex::Real const>& xvel_arr,
240 const amrex::Array4<amrex::Real const>& yvel_arr,
241 const amrex::Box& bx,
const amrex::Box& domain,
242 const amrex::Array4<amrex::Real const>& z_nd,
243 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
244 TerrainType terrain_type,
int bccomp);
246 const amrex::Array4<amrex::Real const>& xvel_arr,
247 const amrex::Array4<amrex::Real const>& yvel_arr,
248 const amrex::Box& bx,
const amrex::Box& domain,
249 const amrex::Array4<amrex::Real const>& z_nd,
250 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
251 int bccomp_u,
int bccomp_v,
int bccomp_w,
252 TerrainType terrain_type);
271 const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
272 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
291 void operator() (amrex::MultiFab& mf,
int icomp,
int ncomp, amrex::IntVect
const& nghost);
294 const amrex::Box& bx,
const amrex::Box& domain,
295 int ncomp,
const amrex::IntVect& nghost);
297 const amrex::Box& bx,
const amrex::Box& domain,
298 int ncomp,
const amrex::IntVect& nghost);
#define NBCVAR_max
Definition: ERF_IndexDefines.H:29
Definition: ERF_PhysBCFunct.H:268
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:305
void impose_vertical_basestate_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Box &bx, const amrex::Box &domain, int ncomp, const amrex::IntVect &nghost)
Definition: ERF_BoundaryConditionsBaseState.cpp:247
ERFPhysBCFunct_base(const int lev, const amrex::Geometry &geom, const amrex::Vector< amrex::BCRec > &domain_bcs_type, const amrex::Gpu::DeviceVector< amrex::BCRec > &domain_bcs_type_d, bool moving_terrain)
Definition: ERF_PhysBCFunct.H:270
int m_lev
Definition: ERF_PhysBCFunct.H:301
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:302
bool m_moving_terrain
Definition: ERF_PhysBCFunct.H:303
void impose_lateral_basestate_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Box &bx, const amrex::Box &domain, int ncomp, const amrex::IntVect &nghost)
Definition: ERF_BoundaryConditionsBaseState.cpp:15
void operator()(amrex::MultiFab &mf, int icomp, int ncomp, amrex::IntVect const &nghost)
Definition: ERF_PhysBCFunct.cpp:319
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:304
~ERFPhysBCFunct_base()
Definition: ERF_PhysBCFunct.H:280
Definition: ERF_PhysBCFunct.H:24
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:79
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:73
void impose_vertical_cons_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int icomp, int ncomp, bool do_terrain_adjustment=true)
Definition: ERF_BoundaryConditionsCons.cpp:317
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:76
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:77
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, int icomp, int ncomp, amrex::IntVect const &nghost, const amrex::Real time, int bccomp_cons, bool do_fb=true, bool do_terrain_adjustment=true)
Definition: ERF_PhysBCFunct.cpp:16
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:75
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:74
~ERFPhysBCFunct_cons()
Definition: ERF_PhysBCFunct.H:44
amrex::Real * m_th_bc_data
Definition: ERF_PhysBCFunct.H:80
ERFPhysBCFunct_cons(const int lev, const amrex::Geometry &geom, const amrex::Vector< amrex::BCRec > &domain_bcs_type, const amrex::Gpu::DeviceVector< amrex::BCRec > &domain_bcs_type_d, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_extdir_vals, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_neumann_vals, std::unique_ptr< amrex::MultiFab > &z_phys_nd, const bool use_real_bcs, amrex::Real *th_bc_data)
Definition: ERF_PhysBCFunct.H:26
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:78
int m_lev
Definition: ERF_PhysBCFunct.H:72
void impose_lateral_cons_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, int icomp, int ncomp, amrex::IntVect ng)
Definition: ERF_BoundaryConditionsCons.cpp:17
Definition: ERF_PhysBCFunct.H:84
ERFPhysBCFunct_u(const int lev, const amrex::Geometry &geom, const amrex::Vector< amrex::BCRec > &domain_bcs_type, const amrex::Gpu::DeviceVector< amrex::BCRec > &domain_bcs_type_d, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_extdir_vals, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_neumann_vals, std::unique_ptr< amrex::MultiFab > &z_phys_nd, const bool use_real_bcs, amrex::Real *u_bc_data)
Definition: ERF_PhysBCFunct.H:86
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:131
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:134
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:133
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:137
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:135
amrex::Real * m_u_bc_data
Definition: ERF_PhysBCFunct.H:138
void impose_lateral_xvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, int bccomp)
Definition: ERF_BoundaryConditionsXvel.cpp:15
int m_lev
Definition: ERF_PhysBCFunct.H:130
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:132
~ERFPhysBCFunct_u()
Definition: ERF_PhysBCFunct.H:104
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::IntVect const &nghost, const amrex::Real time, int bccomp, bool do_fb)
Definition: ERF_PhysBCFunct.cpp:89
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:136
void impose_vertical_xvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int bccomp, const amrex::Real time)
Definition: ERF_BoundaryConditionsXvel.cpp:180
Definition: ERF_PhysBCFunct.H:142
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:190
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:192
amrex::Real * m_v_bc_data
Definition: ERF_PhysBCFunct.H:197
int m_lev
Definition: ERF_PhysBCFunct.H:189
~ERFPhysBCFunct_v()
Definition: ERF_PhysBCFunct.H:162
ERFPhysBCFunct_v(const int lev, const amrex::Geometry &geom, const amrex::Vector< amrex::BCRec > &domain_bcs_type, const amrex::Gpu::DeviceVector< amrex::BCRec > &domain_bcs_type_d, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_extdir_vals, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_neumann_vals, std::unique_ptr< amrex::MultiFab > &z_phys_nd, const bool use_real_bcs, amrex::Real *v_bc_data)
Definition: ERF_PhysBCFunct.H:144
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:194
void impose_vertical_yvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int bccomp)
Definition: ERF_BoundaryConditionsYvel.cpp:181
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:196
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::IntVect const &nghost, const amrex::Real time, int bccomp, bool do_fb)
Definition: ERF_PhysBCFunct.cpp:163
void impose_lateral_yvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, int bccomp)
Definition: ERF_BoundaryConditionsYvel.cpp:14
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:191
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:193
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:195
Definition: ERF_PhysBCFunct.H:201
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:257
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:256
int m_lev
Definition: ERF_PhysBCFunct.H:255
amrex::Real * m_w_bc_data
Definition: ERF_PhysBCFunct.H:264
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::IntVect const &nghost, const amrex::Real time, int bccomp, bool do_fb)
Definition: ERF_PhysBCFunct.cpp:235
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:263
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:258
void impose_vertical_zvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int bccomp_u, int bccomp_v, int bccomp_w, TerrainType terrain_type)
Definition: ERF_BoundaryConditionsZvel.cpp:171
TerrainType m_terrain_type
Definition: ERF_PhysBCFunct.H:261
ERFPhysBCFunct_w(const int lev, const amrex::Geometry &geom, const amrex::Vector< amrex::BCRec > &domain_bcs_type, const amrex::Gpu::DeviceVector< amrex::BCRec > &domain_bcs_type_d, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_extdir_vals, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_neumann_vals, const TerrainType &terrain_type, std::unique_ptr< amrex::MultiFab > &z_phys_nd, const bool use_real_bcs, amrex::Real *w_bc_data)
Definition: ERF_PhysBCFunct.H:203
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:262
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:260
~ERFPhysBCFunct_w()
Definition: ERF_PhysBCFunct.H:222
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:259
void impose_lateral_zvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, TerrainType terrain_type, int bccomp)
Definition: ERF_BoundaryConditionsZvel.cpp:16
@ xvel
Definition: ERF_IndexDefines.H:141
@ yvel
Definition: ERF_IndexDefines.H:142