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,
209 amrex::Vector<std::unique_ptr<amrex::MultiFab>>& mapfac_lev,
210 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
211 const bool use_real_bcs,
212 amrex::Real* w_bc_data)
240 amrex::IntVect
const& nghost,
const amrex::Real time,
int bccomp,
244 const amrex::Array4<amrex::Real const>& xvel_arr,
245 const amrex::Array4<amrex::Real const>& yvel_arr,
246 const amrex::Box& bx,
const amrex::Box& domain,
247 const amrex::Array4<amrex::Real const>& mf_u,
248 const amrex::Array4<amrex::Real const>& mf_v,
249 const amrex::Array4<amrex::Real const>& z_nd,
250 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
251 TerrainType terrain_type,
int bccomp);
253 const amrex::Array4<amrex::Real const>& xvel_arr,
254 const amrex::Array4<amrex::Real const>& yvel_arr,
255 const amrex::Box& bx,
const amrex::Box& domain,
256 const amrex::Array4<amrex::Real const>& mf_u,
257 const amrex::Array4<amrex::Real const>& mf_v,
258 const amrex::Array4<amrex::Real const>& z_nd,
259 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
260 int bccomp_u,
int bccomp_v,
int bccomp_w,
261 TerrainType terrain_type);
282 const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
283 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
302 void operator() (amrex::MultiFab& mf,
int icomp,
int ncomp, amrex::IntVect
const& nghost);
305 const amrex::Box& bx,
const amrex::Box& domain,
306 int ncomp,
const amrex::IntVect& nghost);
308 const amrex::Box& bx,
const amrex::Box& domain,
309 int ncomp,
const amrex::IntVect& nghost);
@ v_x
Definition: ERF_DataStruct.H:21
@ u_x
Definition: ERF_DataStruct.H:21
#define NBCVAR_max
Definition: ERF_IndexDefines.H:29
Definition: ERF_PhysBCFunct.H:279
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:316
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:281
int m_lev
Definition: ERF_PhysBCFunct.H:312
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:313
bool m_moving_terrain
Definition: ERF_PhysBCFunct.H:314
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:321
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:315
~ERFPhysBCFunct_base()
Definition: ERF_PhysBCFunct.H:291
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:192
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:193
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:266
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:265
int m_lev
Definition: ERF_PhysBCFunct.H:264
amrex::Real * m_w_bc_data
Definition: ERF_PhysBCFunct.H:275
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:274
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 > &mf_u, const amrex::Array4< amrex::Real const > &mf_v, 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
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:267
amrex::MultiFab * m_mapfac_v
Definition: ERF_PhysBCFunct.H:272
TerrainType m_terrain_type
Definition: ERF_PhysBCFunct.H:270
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:273
amrex::MultiFab * m_mapfac_u
Definition: ERF_PhysBCFunct.H:271
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:269
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, amrex::Vector< std::unique_ptr< amrex::MultiFab >> &mapfac_lev, std::unique_ptr< amrex::MultiFab > &z_phys_nd, const bool use_real_bcs, amrex::Real *w_bc_data)
Definition: ERF_PhysBCFunct.H:203
~ERFPhysBCFunct_w()
Definition: ERF_PhysBCFunct.H:227
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 > &mf_u, const amrex::Array4< amrex::Real const > &mf_v, 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:181
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:268
@ ng
Definition: ERF_Morrison.H:48
@ xvel
Definition: ERF_IndexDefines.H:141
@ yvel
Definition: ERF_IndexDefines.H:142