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,
65 const amrex::Real time);
67 const amrex::Box& bx,
const amrex::Box& domain,
68 const amrex::Array4<amrex::Real const>& z_nd,
69 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
70 int icomp,
int ncomp,
const amrex::Real time,
71 bool do_terrain_adjustment =
true);
89 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
90 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
91 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
92 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
93 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
94 const bool use_real_bcs,
95 amrex::Real* u_bc_data)
117 amrex::IntVect
const& nghost,
const amrex::Real time,
int bccomp,
bool do_fb);
120 const amrex::Array4<amrex::Real const>& xvel_arr,
121 const amrex::Array4<amrex::Real const>& yvel_arr,
122 const amrex::Box& bx,
const amrex::Box& domain,
124 const amrex::Real time);
126 const amrex::Box& bx,
const amrex::Box& domain,
127 const amrex::Array4<amrex::Real const>& z_nd,
128 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
130 const amrex::Real time);
148 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
149 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
150 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
151 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
152 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
153 const bool use_real_bcs,
154 amrex::Real* v_bc_data)
178 amrex::IntVect
const& nghost,
const amrex::Real time,
int bccomp,
bool do_fb);
181 const amrex::Array4<amrex::Real const>& xvel_arr,
182 const amrex::Array4<amrex::Real const>& yvel_arr,
183 const amrex::Box& bx,
const amrex::Box& domain,
185 const amrex::Real time);
187 const amrex::Box& bx,
const amrex::Box& domain,
188 const amrex::Array4<amrex::Real const>& z_nd,
189 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
191 const amrex::Real time);
209 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
210 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
211 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
212 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
213 const TerrainType& terrain_type,
214 amrex::Vector<std::unique_ptr<amrex::MultiFab>>& mapfac_lev,
215 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
216 const bool use_real_bcs,
217 amrex::Real* w_bc_data)
245 amrex::IntVect
const& nghost,
const amrex::Real time,
int bccomp,
249 const amrex::Array4<amrex::Real const>& xvel_arr,
250 const amrex::Array4<amrex::Real const>& yvel_arr,
251 const amrex::Box& bx,
const amrex::Box& domain,
252 const amrex::Array4<amrex::Real const>& mf_u,
253 const amrex::Array4<amrex::Real const>& mf_v,
254 const amrex::Array4<amrex::Real const>& z_nd,
255 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
256 TerrainType terrain_type,
int bccomp,
257 const amrex::Real time);
259 const amrex::Array4<amrex::Real const>& xvel_arr,
260 const amrex::Array4<amrex::Real const>& yvel_arr,
261 const amrex::Box& bx,
const amrex::Box& domain,
262 const amrex::Array4<amrex::Real const>& mf_u,
263 const amrex::Array4<amrex::Real const>& mf_v,
264 const amrex::Array4<amrex::Real const>& z_nd,
265 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> dxInv,
266 int bccomp_u,
int bccomp_v,
int bccomp_w,
267 TerrainType terrain_type,
268 const amrex::Real time);
289 const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
290 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
291 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
311 void operator() (amrex::MultiFab& mf,
int icomp,
int ncomp, amrex::IntVect
const& nghost);
314 const amrex::Box& bx,
const amrex::Box& domain,
315 int ncomp,
const amrex::IntVect& nghost);
317 const amrex::Array4<amrex::Real const>& z_nd,
318 const amrex::Box& bx,
const amrex::Box& domain,
319 int ncomp,
const amrex::IntVect& nghost);
@ v_y
Definition: ERF_DataStruct.H:23
@ u_x
Definition: ERF_DataStruct.H:22
#define NBCVAR_max
Definition: ERF_IndexDefines.H:29
Definition: ERF_PhysBCFunct.H:286
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, std::unique_ptr< amrex::MultiFab > &z_phys_nd, bool moving_terrain)
Definition: ERF_PhysBCFunct.H:288
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:326
void impose_vertical_basestate_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &z_nd, const amrex::Box &bx, const amrex::Box &domain, int ncomp, const amrex::IntVect &nghost)
Definition: ERF_BoundaryConditionsBaseState.cpp:248
int m_lev
Definition: ERF_PhysBCFunct.H:322
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:327
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:323
bool m_moving_terrain
Definition: ERF_PhysBCFunct.H:324
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:16
void operator()(amrex::MultiFab &mf, int icomp, int ncomp, amrex::IntVect const &nghost)
Definition: ERF_PhysBCFunct.cpp:325
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:325
~ERFPhysBCFunct_base()
Definition: ERF_PhysBCFunct.H:300
Definition: ERF_PhysBCFunct.H:24
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:81
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:75
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:78
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, const amrex::Real time)
Definition: ERF_BoundaryConditionsCons.cpp:18
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, const amrex::Real time, bool do_terrain_adjustment=true)
Definition: ERF_BoundaryConditionsCons.cpp:319
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:79
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:77
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:76
~ERFPhysBCFunct_cons()
Definition: ERF_PhysBCFunct.H:44
amrex::Real * m_th_bc_data
Definition: ERF_PhysBCFunct.H:82
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:80
int m_lev
Definition: ERF_PhysBCFunct.H:74
Definition: ERF_PhysBCFunct.H:86
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:88
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, const amrex::Real time)
Definition: ERF_BoundaryConditionsXvel.cpp:15
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:134
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:137
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:136
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:140
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:138
amrex::Real * m_u_bc_data
Definition: ERF_PhysBCFunct.H:141
int m_lev
Definition: ERF_PhysBCFunct.H:133
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:135
~ERFPhysBCFunct_u()
Definition: ERF_PhysBCFunct.H:106
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:90
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:139
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:193
Definition: ERF_PhysBCFunct.H:145
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:195
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:197
amrex::Real * m_v_bc_data
Definition: ERF_PhysBCFunct.H:202
int m_lev
Definition: ERF_PhysBCFunct.H:194
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, const amrex::Real time)
Definition: ERF_BoundaryConditionsYvel.cpp:14
~ERFPhysBCFunct_v()
Definition: ERF_PhysBCFunct.H:165
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:147
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, const amrex::Real time)
Definition: ERF_BoundaryConditionsYvel.cpp:193
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:199
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:201
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:165
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:196
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:198
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:200
Definition: ERF_PhysBCFunct.H:206
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:273
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:272
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, const amrex::Real time)
Definition: ERF_BoundaryConditionsZvel.cpp:182
int m_lev
Definition: ERF_PhysBCFunct.H:271
amrex::Real * m_w_bc_data
Definition: ERF_PhysBCFunct.H:282
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:238
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:281
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, const amrex::Real time)
Definition: ERF_BoundaryConditionsZvel.cpp:16
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:274
amrex::MultiFab * m_mapfac_v
Definition: ERF_PhysBCFunct.H:279
TerrainType m_terrain_type
Definition: ERF_PhysBCFunct.H:277
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:280
amrex::MultiFab * m_mapfac_u
Definition: ERF_PhysBCFunct.H:278
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:276
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:208
~ERFPhysBCFunct_w()
Definition: ERF_PhysBCFunct.H:232
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:275
@ ng
Definition: ERF_Morrison.H:48
@ xvel
Definition: ERF_IndexDefines.H:141
@ yvel
Definition: ERF_IndexDefines.H:142