1 #ifndef ERF_PBLMODELS_H_
2 #define ERF_PBLMODELS_H_
25 const amrex::MultiFab&
xvel,
26 const amrex::MultiFab&
yvel,
27 amrex::MultiFab& cons_in,
28 amrex::MultiFab& eddyViscosity,
29 const amrex::Geometry& geom,
31 std::unique_ptr<SurfaceLayer>& SurfLayer,
32 bool use_terrain_fitted_coords,
35 const amrex::BCRec* bc_ptr,
37 const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
59 const amrex::MultiFab&
yvel,
60 const amrex::MultiFab& cons_in,
61 amrex::MultiFab& eddyViscosity,
62 const amrex::Geometry& geom,
64 std::unique_ptr<SurfaceLayer>& SurfLayer,
65 bool use_terrain_fitted_coords,
68 const amrex::BCRec* bc_ptr,
70 const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
92 const amrex::MultiFab&
yvel,
93 const amrex::MultiFab& cons_in,
94 amrex::MultiFab& eddyViscosity,
95 const amrex::Geometry& geom,
97 std::unique_ptr<SurfaceLayer>& SurfLayer,
98 bool use_terrain_fitted_coords,
101 const amrex::BCRec* bc_ptr,
103 const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
125 const amrex::MultiFab&
yvel,
126 const amrex::MultiFab& cons_in,
127 amrex::MultiFab& eddyViscosity,
128 const amrex::Geometry& geom,
130 std::unique_ptr<SurfaceLayer>& SurfLayer,
131 bool use_terrain_fitted_coords,
134 const amrex::BCRec* bc_ptr,
136 const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
157 const amrex::MultiFab&
yvel,
158 const amrex::MultiFab& cons_in,
159 amrex::MultiFab& eddyViscosity,
160 const amrex::Geometry& geom,
162 std::unique_ptr<SurfaceLayer>& SurfLayer,
163 bool use_terrain_fitted_coords,
166 const amrex::BCRec* bc_ptr,
168 const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
182 const amrex::Array4<const amrex::Real>& uvel,
183 const amrex::Array4<const amrex::Real>& vvel,
184 const amrex::Array4<const amrex::Real>& cell_data,
188 const bool c_ext_dir_on_zlo,
189 const bool c_ext_dir_on_zhi,
190 const bool u_ext_dir_on_zlo,
191 const bool u_ext_dir_on_zhi,
192 const bool v_ext_dir_on_zlo,
193 const bool v_ext_dir_on_zhi,
199 if ( k==izmax && c_ext_dir_on_zhi ) {
200 dthetadz = (1.0/3.0)*( -
GetThetav(i,j,k-1,cell_data,moisture_indices)
201 - 3.0 *
GetThetav(i,j,k ,cell_data,moisture_indices)
202 + 4.0 *
GetThetav(i,j,k+1,cell_data,moisture_indices) )*dz_inv;
203 }
else if ( k==izmin && c_ext_dir_on_zlo ) {
204 dthetadz = (1.0/3.0)*(
GetThetav(i,j,k+1,cell_data,moisture_indices)
205 + 3.0 *
GetThetav(i,j,k ,cell_data,moisture_indices)
206 - 4.0 *
GetThetav(i,j,k-1,cell_data,moisture_indices) )*dz_inv;
208 dthetadz = 0.5*(
GetThetav(i,j,k+1,cell_data,moisture_indices)
209 -
GetThetav(i,j,k-1,cell_data,moisture_indices) )*dz_inv;
212 if ( k==izmax && u_ext_dir_on_zhi ) {
213 dudz = (1.0/6.0)*( (-uvel(i ,j,k-1) - 3.0 * uvel(i ,j,k ) + 4.0 * uvel(i ,j,k+1))
214 + (-uvel(i+1,j,k-1) - 3.0 * uvel(i+1,j,k ) + 4.0 * uvel(i+1,j,k+1)) )*dz_inv;
215 }
else if ( k==izmin && u_ext_dir_on_zlo ) {
216 dudz = (1.0/6.0)*( (uvel(i ,j,k+1) + 3.0 * uvel(i ,j,k ) - 4.0 * uvel(i ,j,k-1))
217 + (uvel(i+1,j,k+1) + 3.0 * uvel(i+1,j,k ) - 4.0 * uvel(i+1,j,k-1)) )*dz_inv;
219 dudz = 0.25*( uvel(i,j,k+1) - uvel(i,j,k-1) + uvel(i+1,j,k+1) - uvel(i+1,j,k-1) )*dz_inv;
222 if ( k==izmax && v_ext_dir_on_zhi ) {
223 dvdz = (1.0/6.0)*( (-vvel(i,j ,k-1) - 3.0 * vvel(i,j ,k ) + 4.0 * vvel(i,j ,k+1))
224 + (-vvel(i,j+1,k-1) - 3.0 * vvel(i,j+1,k ) + 4.0 * vvel(i,j+1,k+1)) )*dz_inv;
225 }
else if ( k==izmin && v_ext_dir_on_zlo ) {
226 dvdz = (1.0/6.0)*( (vvel(i,j ,k+1) + 3.0 * vvel(i,j ,k ) - 4.0 * vvel(i,j ,k-1))
227 + (vvel(i,j+1,k+1) + 3.0 * vvel(i,j+1,k ) - 4.0 * vvel(i,j+1,k-1)) )*dz_inv;
229 dvdz = 0.25*( vvel(i,j,k+1) - vvel(i,j,k-1) + vvel(i,j+1,k+1) - vvel(i,j+1,k-1) )*dz_inv;
250 const amrex::Array4<const amrex::Real>& uvel,
251 const amrex::Array4<const amrex::Real>& vvel,
252 const amrex::Array4<const amrex::Real>& cell_data,
253 const amrex::Array4<const amrex::Real>& cell_prim,
254 const amrex::Array4<const amrex::Real>& K_turb,
255 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
256 const amrex::Box& domain,
260 bool c_ext_dir_on_zlo,
261 bool c_ext_dir_on_zhi,
262 bool u_ext_dir_on_zlo,
263 bool u_ext_dir_on_zhi,
264 bool v_ext_dir_on_zlo,
265 bool v_ext_dir_on_zhi,
273 int izmin = domain.smallEnd(2);
274 int izmax = domain.bigEnd(2);
277 uvel, vvel, cell_data, izmin, izmax, dz_inv/met_h_zeta,
278 c_ext_dir_on_zlo, c_ext_dir_on_zhi,
279 u_ext_dir_on_zlo, u_ext_dir_on_zhi,
280 v_ext_dir_on_zlo, v_ext_dir_on_zhi,
281 dthetadz, dudz, dvdz,
296 source_term += K_turb(i,j,k,
EddyDiff::Mom_v) * (dudz*dudz + dvdz*dvdz);
303 if (std::abs(qke) > 0.0) {
304 source_term -= cell_data(i,j,k,
Rho_comp) * std::pow(qke,1.5) /
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:21
TurbChoice turbChoice
Definition: ERF_DiffSetup.H:2
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define PrimKE_comp
Definition: ERF_IndexDefines.H:51
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real GetThetav(int i, int j, int k, const amrex::Array4< amrex::Real const > &cell_data, const MoistureComponentIndices &moisture_indices)
Definition: ERF_MoistUtils.H:72
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::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Box &domain, 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::Real met_h_zeta=1.0)
Definition: ERF_PBLModels.H:249
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void ComputeVerticalDerivativesPBL(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 int izmin, const int izmax, const amrex::Real &dz_inv, const bool c_ext_dir_on_zlo, const bool c_ext_dir_on_zhi, const bool u_ext_dir_on_zlo, const bool u_ext_dir_on_zhi, const bool v_ext_dir_on_zlo, const bool v_ext_dir_on_zhi, amrex::Real &dthetadz, amrex::Real &dudz, amrex::Real &dvdz, const MoistureComponentIndices &moisture_indices)
Definition: ERF_PBLModels.H:181
void ComputeDiffusivityMYNN25(const amrex::MultiFab &xvel, const amrex::MultiFab &yvel, const amrex::MultiFab &cons_in, amrex::MultiFab &eddyViscosity, const amrex::Geometry &geom, const TurbChoice &turbChoice, std::unique_ptr< SurfaceLayer > &SurfLayer, bool use_terrain_fitted_coords, bool use_moisture, int level, const amrex::BCRec *bc_ptr, bool, const std::unique_ptr< amrex::MultiFab > &z_phys_nd, const MoistureComponentIndices &moisture_indices)
void ComputeDiffusivityYSU(const amrex::MultiFab &xvel, const amrex::MultiFab &yvel, const amrex::MultiFab &cons_in, amrex::MultiFab &eddyViscosity, const amrex::Geometry &geom, const TurbChoice &turbChoice, std::unique_ptr< SurfaceLayer > &SurfLayer, bool use_terrain_fitted_coords, bool use_moisture, int level, const amrex::BCRec *bc_ptr, bool, const std::unique_ptr< amrex::MultiFab > &z_phys_nd, const MoistureComponentIndices &moisture_indices)
void ComputeDiffusivityMYNNEDMF(const amrex::MultiFab &xvel, const amrex::MultiFab &yvel, const amrex::MultiFab &cons_in, amrex::MultiFab &eddyViscosity, const amrex::Geometry &geom, const TurbChoice &turbChoice, std::unique_ptr< SurfaceLayer > &SurfLayer, bool use_terrain_fitted_coords, bool use_moisture, int level, const amrex::BCRec *bc_ptr, bool, const std::unique_ptr< amrex::MultiFab > &z_phys_nd, const MoistureComponentIndices &moisture_indices)
void ComputeDiffusivityMRF(const amrex::MultiFab &xvel, const amrex::MultiFab &yvel, const amrex::MultiFab &cons_in, amrex::MultiFab &eddyViscosity, const amrex::Geometry &geom, const TurbChoice &turbChoice, std::unique_ptr< SurfaceLayer > &SurfLayer, bool use_terrain_fitted_coords, bool use_moisture, int level, const amrex::BCRec *bc_ptr, bool, const std::unique_ptr< amrex::MultiFab > &z_phys_nd, const MoistureComponentIndices &moisture_indices)
void ComputeDiffusivityMYJ(amrex::Real dt, const amrex::MultiFab &xvel, const amrex::MultiFab &yvel, amrex::MultiFab &cons_in, amrex::MultiFab &eddyViscosity, const amrex::Geometry &geom, const TurbChoice &turbChoice, std::unique_ptr< SurfaceLayer > &SurfLayer, bool use_terrain_fitted_coords, bool use_moisture, int level, const amrex::BCRec *bc_ptr, bool, const std::unique_ptr< amrex::MultiFab > &z_phys_nd, const MoistureComponentIndices &moisture_indices)
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ Theta_v
Definition: ERF_IndexDefines.H:176
@ Turb_lengthscale
Definition: ERF_IndexDefines.H:180
@ Mom_v
Definition: ERF_IndexDefines.H:175
@ xvel
Definition: ERF_IndexDefines.H:141
@ yvel
Definition: ERF_IndexDefines.H:142
Definition: ERF_DataStruct.H:99
Definition: ERF_TurbStruct.H:41