1 #ifndef ERF_TURB_KE_SOURCES_H_
2 #define ERF_TURB_KE_SOURCES_H_
5 #include <AMReX_BCRec.H>
45 template <
typename PBLDerivativeDzInvFunctor>
48 const amrex::Array4<const amrex::Real>& u,
49 const amrex::Array4<const amrex::Real>& v,
50 const amrex::Array4<const amrex::Real>& cell_data,
51 const amrex::Array4<const amrex::Real>& cell_prim,
52 const amrex::Array4<amrex::Real>& cell_rhs,
53 const amrex::Array4<const amrex::Real>& SmnSmn_a,
54 const amrex::Array4<const amrex::Real>& hfx_z,
55 const amrex::Array4<const amrex::Real>& qfx1_z,
56 const amrex::Array4<const amrex::Real>& diss,
57 const amrex::Array4<const amrex::Real>&
tau13,
58 const amrex::Array4<const amrex::Real>&
tau23,
59 const amrex::Array4<const amrex::Real>& mu_turb,
62 const amrex::Array4<const amrex::Real>& tm_arr,
63 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM> grav_gpu,
64 const amrex::BCRec* bc_ptr,
65 const bool use_SurfLayer,
66 const amrex::Vector<std::unique_ptr<SurfaceLayer>>& SurfLayer,
67 const PBLDerivativeDzInvFunctor& pbl_derivative_dz_inv)
69 BL_PROFILE(
"AddTurbKESources()");
73 const bool l_use_keqn = turbChoice.
use_keqn;
77 const bool SurfLayer_zlo = use_SurfLayer && SurfLayer[amrex::Orientation::zlo()] !=
nullptr;
84 const bool use_ref_theta = (turbChoice.
theta_ref > 0);
86 std::numeric_limits<amrex::Real>::min());
87 const amrex::Real l_inv_theta0 = (use_ref_theta) ? inv_theta_ref :
one;
122 AMREX_ASSERT(hfx_z.contains(bx.smallEnd(0), bx.smallEnd(1), bx.smallEnd(2)) &&
123 hfx_z.contains(bx.bigEnd(0), bx.bigEnd(1), bx.bigEnd(2)+1));
140 amrex::Real buoyancy_src = l_abs_g * l_inv_theta0 * hfx_cc;
141 if (!use_ref_theta) {
145 cell_rhs(i,j,k,qty_index) += buoyancy_src;
155 if (!l_implicit_diss) {
156 cell_rhs(i,j,k,qty_index) -= diss(i,j,k);
171 const bool l_surface_layer_on_zlo = SurfLayer_zlo;
182 const auto pbl_dz_inv = pbl_derivative_dz_inv(i,j,k);
185 cell_rhs(i, j, k, qty_index) +=
ComputeQKESourceTerms(i,j,k,u,v,cell_data,cell_prim,
186 mu_turb,domain,pbl_dz_inv,
187 pbl_mynn_B1_l,tm_arr(i,j,0),
189 c_ext_dir_on_zlo, c_ext_dir_on_zhi,
190 u_ext_dir_on_zlo, u_ext_dir_on_zhi,
191 v_ext_dir_on_zlo, v_ext_dir_on_zhi,
193 l_surface_layer_on_zlo);
@ tau23
Definition: ERF_DataStruct.H:48
@ tau13
Definition: ERF_DataStruct.H:48
#define PrimTheta_comp
Definition: ERF_IndexDefines.H:61
#define RhoKE_comp
Definition: ERF_IndexDefines.H:44
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
Dimensionless numeric literals and pure mathematical constants.
constexpr amrex::Real two
Definition: ERF_NumericalConstants.H:38
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:37
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real ComputeQKESourceTerms(int i, int j, int k, const amrex::Array4< const amrex::Real > &uvel, const amrex::Array4< const amrex::Real > &vvel, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< const amrex::Real > &K_turb, const amrex::Box &domain, const PBLDerivativeDzInv dz_inv, amrex::Real pbl_mynn_B1_l, const amrex::Real theta_mean, const MoistureComponentIndices &moisture_indices, bool c_ext_dir_on_zlo, bool c_ext_dir_on_zhi, bool u_ext_dir_on_zlo, bool u_ext_dir_on_zhi, bool v_ext_dir_on_zlo, bool v_ext_dir_on_zhi, const amrex::Array4< const amrex::Real > &tau13, const amrex::Array4< const amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &qfx1_z, bool surface_layer_on_zlo)
Definition: ERF_PBLModels.H:457
amrex::Real Real
Definition: ERF_ShocInterface.H:19
void AddTurbKESources(const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &cell_data, const amrex::Array4< const amrex::Real > &cell_prim, const amrex::Array4< amrex::Real > &cell_rhs, const amrex::Array4< const amrex::Real > &SmnSmn_a, const amrex::Array4< const amrex::Real > &hfx_z, const amrex::Array4< const amrex::Real > &qfx1_z, const amrex::Array4< const amrex::Real > &diss, const amrex::Array4< const amrex::Real > &tau13, const amrex::Array4< const amrex::Real > &tau23, const amrex::Array4< const amrex::Real > &mu_turb, const SolverChoice &solverChoice, const int level, const amrex::Array4< const amrex::Real > &tm_arr, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > grav_gpu, const amrex::BCRec *bc_ptr, const bool use_SurfLayer, const amrex::Vector< std::unique_ptr< SurfaceLayer >> &SurfLayer, const PBLDerivativeDzInvFunctor &pbl_derivative_dz_inv)
Definition: ERF_TurbKESources.H:47
@ yvel_bc
Definition: ERF_IndexDefines.H:109
@ cons_bc
Definition: ERF_IndexDefines.H:92
@ xvel_bc
Definition: ERF_IndexDefines.H:108
@ ext_dir
Definition: ERF_IndexDefines.H:300
@ Mom_v
Definition: ERF_IndexDefines.H:252
amrex::Real B1
Definition: ERF_MYNNStruct.H:52
Definition: ERF_DataStruct.H:685
amrex::Vector< TurbChoice > turbChoice
Turbulence options for each AMR level.
Definition: ERF_DataStruct.H:2252
MoistureComponentIndices moisture_indices
Index map of the moisture data carried by the active scheme: conserved-state components for the speci...
Definition: ERF_DataStruct.H:2575
Definition: ERF_TurbStruct.H:115
bool implicit_tke_dissipation
Definition: ERF_TurbStruct.H:839
amrex::Real theta_ref
Reference potential temperature for stable stratification.
Definition: ERF_TurbStruct.H:815
bool use_keqn
Whether a microscale TKE closure is active.
Definition: ERF_TurbStruct.H:922
MYNNLevel25 pbl_mynn
MYNN level-2.5 closure coefficients.
Definition: ERF_TurbStruct.H:917
bool use_pbl_tke
Whether a mesoscale PBL TKE closure is active.
Definition: ERF_TurbStruct.H:925