9 const bool l_use_turb = solverChoice.turbChoice[level].use_kturb;
10 const bool l_use_stretched_dz = (solverChoice.mesh_type == MeshType::StretchedDz);
13 (solverChoice.turbChoice[level].use_tke)) {
16 const BCRec* bc_ptr_h = domain_bcs_type.data();
17 GpuArray<Real, AMREX_SPACEDIM*2> l_bc_neumann_vals_d;
18 for (
int ori = 0; ori < 2*AMREX_SPACEDIM; ori++) {
19 l_bc_neumann_vals_d[ori] = m_bc_neumann_vals[
RhoKE_comp][ori];
21 const bool l_use_SurfLayer =
false;
25 Box bx = mfi.tilebox();
28 const Array4< Real>& cell_data = S_new[
IntVars::cons].array(mfi);
30 const Array4<const Real>& z_nd_arr = z_phys_nd[level]->const_array(mfi);
31 const Array4<const Real>& detJ_arr = detJ_cc[level]->const_array(mfi);
32 const Array4<const Real> mf_mx = mapfac[level][
MapFacType::m_x]->const_array(mfi);
33 const Array4<const Real> mf_my = mapfac[level][
MapFacType::m_y]->const_array(mfi);
34 const bool l_implicit_metric = solverChoice.implicit_terrain_metric &&
35 l_use_terrain_fitted_coords;
37 const Array4<const Real>& mu_turb = l_use_turb ? eddyDiffs->const_array(mfi) :
40 if (l_use_stretched_dz) {
42 slow_dt, l_bc_neumann_vals_d, cell_data,
43 stretched_dz_d[level], Array4<const Real>{},
44 mu_turb, solverChoice,
46 }
else if (l_use_terrain_fitted_coords) {
48 slow_dt, l_bc_neumann_vals_d, cell_data,
49 z_nd_arr, detJ_arr,
dxInv, Array4<const Real>{},
50 mu_turb, solverChoice,
52 false, mf_mx, mf_my, l_implicit_metric);
55 slow_dt, l_bc_neumann_vals_d, cell_data,
56 dxInv, Array4<const Real>{}, mu_turb, solverChoice,
66 const BCRec* bc_ptr_h = domain_bcs_type.data();
67 GpuArray<Real, AMREX_SPACEDIM*2> l_bc_neumann_vals_d;
68 for (
int ori = 0; ori < 2*AMREX_SPACEDIM; ori++) {
69 l_bc_neumann_vals_d[ori] = m_bc_neumann_vals[
RhoQ1_comp][ori];
71 const bool l_use_SurfLayer = (m_SurfaceLayer[Orientation(Direction::z, Orientation::low)] !=
nullptr);
75 Box bx = mfi.tilebox();
78 const Array4< Real>& cell_data = S_new[
IntVars::cons].array(mfi);
80 const Array4<const Real>& z_nd_arr = z_phys_nd[level]->const_array(mfi);
81 const Array4<const Real>& detJ_arr = detJ_cc[level]->const_array(mfi);
82 const Array4<const Real> mf_mx = mapfac[level][
MapFacType::m_x]->const_array(mfi);
83 const Array4<const Real> mf_my = mapfac[level][
MapFacType::m_y]->const_array(mfi);
84 const bool l_implicit_metric = solverChoice.implicit_terrain_metric &&
85 l_use_terrain_fitted_coords;
87 const Array4<const Real>& mu_turb = l_use_turb ? eddyDiffs->const_array(mfi) :
89 const Array4<const Real>& q1fx_z = Q1fx3->const_array(mfi);
90 const bool l_use_mrf_cg = solverChoice.turbChoice[level].enable_mrf_countergradient
91 && (solverChoice.turbChoice[level].pbl_type == PBLType::MRF);
92 if (l_use_stretched_dz) {
94 slow_dt, l_bc_neumann_vals_d, cell_data,
95 stretched_dz_d[level], q1fx_z,
96 mu_turb, solverChoice,
99 }
else if (l_use_terrain_fitted_coords) {
101 slow_dt, l_bc_neumann_vals_d, cell_data,
102 z_nd_arr, detJ_arr,
dxInv, q1fx_z,
103 mu_turb, solverChoice,
106 mf_mx, mf_my, l_implicit_metric);
109 slow_dt, l_bc_neumann_vals_d, cell_data,
110 dxInv, q1fx_z, mu_turb, solverChoice,
@ m_y
Definition: ERF_DataStruct.H:38
@ m_x
Definition: ERF_DataStruct.H:37
void ImplicitDiffForStateLU_N(const amrex::Box &bx, const amrex::Box &domain, const int level, const int n, const double dt, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const amrex::Array4< amrex::Real > &cell_data, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_mrf_countergradient=false)
Apply implicit vertical state diffusion on a uniform grid without terrain.
void ImplicitDiffForStateLU_T(const amrex::Box &bx, const amrex::Box &domain, const int level, const int n, const double dt, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const amrex::Array4< amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_mrf_countergradient=false, const amrex::Array4< const amrex::Real > &mf_mx={}, const amrex::Array4< const amrex::Real > &mf_my={}, const bool implicit_metric=false)
Apply implicit vertical state diffusion on terrain-following coordinates.
void ImplicitDiffForStateLU_S(const amrex::Box &bx, const amrex::Box &domain, const int level, const int n, const double dt, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const amrex::Array4< amrex::Real > &cell_data, const amrex::Gpu::DeviceVector< amrex::Real > &stretched_dz_d, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Real implicit_fac, const bool use_mrf_countergradient=false)
Apply implicit vertical state diffusion on a vertically stretched grid.
const bool l_do_implicit_ke
Definition: ERF_ImplicitPost.H:4
const bool l_do_implicit_moist
Definition: ERF_ImplicitPost.H:5
const Real l_vert_implicit_fac
Definition: ERF_ImplicitPost.H:6
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:48
#define RhoKE_comp
Definition: ERF_IndexDefines.H:44
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv
Definition: ERF_InitCustomPertVels_ParticleTests.H:17
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:36
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_FORCE_INLINE amrex::IntVect TileNoZ()
Definition: ERF_TileNoZ.H:11
@ cons
Definition: ERF_IndexDefines.H:235
@ None
Definition: ERF_LSM_Types.H:6