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"
40 const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
41 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
42 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
43 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
44 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
45 const bool use_real_bcs,
77 int icomp,
int ncomp, amrex::IntVect
const& nghost,
78 const double time,
int bccomp_cons,
bool do_fb =
true,
bool do_terrain_adjustment =
true);
94 const amrex::Array4<amrex::Real const>& xvel_arr,
95 const amrex::Array4<amrex::Real const>& yvel_arr,
96 const amrex::Box& bx,
const amrex::Box& domain,
97 int icomp,
int ncomp, amrex::IntVect
ng,
114 const amrex::Box& bx,
const amrex::Box& domain,
115 const amrex::Array4<amrex::Real const>& z_nd,
116 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
dxInv,
117 int icomp,
int ncomp,
const double time,
118 bool do_terrain_adjustment =
true);
149 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
150 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
151 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
152 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
153 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
154 const bool use_real_bcs,
183 amrex::IntVect
const& nghost,
const double time,
int bccomp,
bool do_fb);
197 const amrex::Array4<amrex::Real const>& xvel_arr,
198 const amrex::Array4<amrex::Real const>& yvel_arr,
199 const amrex::Box& bx,
const amrex::Box& domain,
215 const amrex::Box& bx,
const amrex::Box& domain,
216 const amrex::Array4<amrex::Real const>& z_nd,
217 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
dxInv,
250 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
251 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
252 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
253 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
254 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
255 const bool use_real_bcs,
284 amrex::IntVect
const& nghost,
const double time,
int bccomp,
bool do_fb);
298 const amrex::Array4<amrex::Real const>& xvel_arr,
299 const amrex::Array4<amrex::Real const>& yvel_arr,
300 const amrex::Box& bx,
const amrex::Box& domain,
316 const amrex::Box& bx,
const amrex::Box& domain,
317 const amrex::Array4<amrex::Real const>& z_nd,
318 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
dxInv,
353 const amrex::Vector<amrex::BCRec>& domain_bcs_type,
354 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
355 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_extdir_vals,
356 amrex::Array<amrex::Array<amrex::Real,AMREX_SPACEDIM*2>,AMREX_SPACEDIM+
NBCVAR_max> bc_neumann_vals,
357 const TerrainType& terrain_type,
358 amrex::Vector<std::unique_ptr<amrex::MultiFab>>& mapfac_lev,
359 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
360 const bool use_real_bcs,
393 amrex::IntVect
const& nghost,
const double time,
int bccomp,
413 const amrex::Array4<amrex::Real const>& xvel_arr,
414 const amrex::Array4<amrex::Real const>& yvel_arr,
415 const amrex::Box& bx,
const amrex::Box& domain,
416 const amrex::Array4<amrex::Real const>& mf_u,
417 const amrex::Array4<amrex::Real const>& mf_v,
418 const amrex::Array4<amrex::Real const>& z_nd,
419 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
dxInv,
420 TerrainType terrain_type,
int bccomp,
442 const amrex::Array4<amrex::Real const>& xvel_arr,
443 const amrex::Array4<amrex::Real const>& yvel_arr,
444 const amrex::Box& bx,
const amrex::Box& domain,
445 const amrex::Array4<amrex::Real const>& mf_u,
446 const amrex::Array4<amrex::Real const>& mf_v,
447 const amrex::Array4<amrex::Real const>& z_nd,
448 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
dxInv,
449 int bccomp_u,
int bccomp_v,
int bccomp_w,
450 TerrainType terrain_type,
482 const amrex::Geometry& geom,
const amrex::Vector<amrex::BCRec>& domain_bcs_type,
483 const amrex::Gpu::DeviceVector<amrex::BCRec>& domain_bcs_type_d,
484 std::unique_ptr<amrex::MultiFab>& z_phys_nd,
506 void operator() (amrex::MultiFab& mf,
int icomp,
int ncomp, amrex::IntVect
const& nghost);
518 const amrex::Box& bx,
const amrex::Box& domain,
519 int ncomp,
const amrex::IntVect& nghost);
532 const amrex::Array4<amrex::Real const>& z_nd,
533 const amrex::Box& bx,
const amrex::Box& domain,
534 int ncomp,
const amrex::IntVect& nghost);
@ v_y
Definition: ERF_DataStruct.H:28
@ u_x
Definition: ERF_DataStruct.H:27
#define NBCVAR_max
Definition: ERF_IndexDefines.H:29
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
pp get("wavelength", wavelength)
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_PhysBCFunct.H:469
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:481
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:541
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:260
int m_lev
Definition: ERF_PhysBCFunct.H:537
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:542
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:538
bool m_moving_terrain
Definition: ERF_PhysBCFunct.H:539
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:18
void operator()(amrex::MultiFab &mf, int icomp, int ncomp, amrex::IntVect const &nghost)
Definition: ERF_PhysBCFunct.cpp:360
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:540
~ERFPhysBCFunct_base()
Definition: ERF_PhysBCFunct.H:496
Definition: ERF_PhysBCFunct.H:24
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:128
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:122
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:125
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:126
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, int icomp, int ncomp, amrex::IntVect const &nghost, const double time, int bccomp_cons, bool do_fb=true, bool do_terrain_adjustment=true)
Definition: ERF_PhysBCFunct.cpp:22
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 double time, bool do_terrain_adjustment=true)
Definition: ERF_BoundaryConditionsCons.cpp:329
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 double time)
Definition: ERF_BoundaryConditionsCons.cpp:22
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:124
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:123
~ERFPhysBCFunct_cons()
Definition: ERF_PhysBCFunct.H:60
amrex::Real * m_th_bc_data
Definition: ERF_PhysBCFunct.H:129
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:39
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:127
int m_lev
Definition: ERF_PhysBCFunct.H:121
Definition: ERF_PhysBCFunct.H:133
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:148
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:223
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:226
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:225
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:229
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:227
amrex::Real * m_u_bc_data
Definition: ERF_PhysBCFunct.H:230
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 double time)
Definition: ERF_BoundaryConditionsXvel.cpp:197
int m_lev
Definition: ERF_PhysBCFunct.H:222
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 double time)
Definition: ERF_BoundaryConditionsXvel.cpp:18
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:224
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::IntVect const &nghost, const double time, int bccomp, bool do_fb)
Definition: ERF_PhysBCFunct.cpp:104
~ERFPhysBCFunct_u()
Definition: ERF_PhysBCFunct.H:169
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:228
Definition: ERF_PhysBCFunct.H:234
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 double time)
Definition: ERF_BoundaryConditionsYvel.cpp:17
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:324
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:326
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::IntVect const &nghost, const double time, int bccomp, bool do_fb)
Definition: ERF_PhysBCFunct.cpp:184
amrex::Real * m_v_bc_data
Definition: ERF_PhysBCFunct.H:331
int m_lev
Definition: ERF_PhysBCFunct.H:323
~ERFPhysBCFunct_v()
Definition: ERF_PhysBCFunct.H:270
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:249
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:328
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 double time)
Definition: ERF_BoundaryConditionsYvel.cpp:197
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:330
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:325
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:327
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:329
Definition: ERF_PhysBCFunct.H:335
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:456
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:455
int m_lev
Definition: ERF_PhysBCFunct.H:454
amrex::Real * m_w_bc_data
Definition: ERF_PhysBCFunct.H:465
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:464
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:457
amrex::MultiFab * m_mapfac_v
Definition: ERF_PhysBCFunct.H:462
TerrainType m_terrain_type
Definition: ERF_PhysBCFunct.H:460
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:463
amrex::MultiFab * m_mapfac_u
Definition: ERF_PhysBCFunct.H:461
void operator()(amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::IntVect const &nghost, const double time, int bccomp, bool do_fb)
Definition: ERF_PhysBCFunct.cpp:265
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:459
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:352
~ERFPhysBCFunct_w()
Definition: ERF_PhysBCFunct.H:379
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 double time)
Definition: ERF_BoundaryConditionsZvel.cpp:194
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 double time)
Definition: ERF_BoundaryConditionsZvel.cpp:23
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:458
@ ng
Definition: ERF_Morrison.H:49
@ xvel
Definition: ERF_IndexDefines.H:177
@ yvel
Definition: ERF_IndexDefines.H:178