ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_PBLModels.H
Go to the documentation of this file.
1 #ifndef ERF_PBLMODELS_H_
2 #define ERF_PBLMODELS_H_
3 
4 #include "ERF_DataStruct.H"
5 
6 /**
7  * Compute eddy diffusivities of momentum (eddy viscosity) and heat using the
8  * Mellor-Yamada-Janjić (MYJ) boundary layer scheme.
9  * Reference: Janjić, Z. I., 1994: The Step-Mountain Eta Coordinate Model:
10  * Further Developments of the Convection, Viscous Sublayer, and Turbulence
11  * Closure Schemes. Monthly Weather Review, 122, 927–945.
12  * https://doi.org/10.1175/1520-0493(1994)122<0927:TSMECM>2.0.CO;2
13  *
14  * @param[in] xvel Velocity in x-dir
15  * @param[in] yvel Velocity in y-dir
16  * @param[in] cons_in Cell center conserved quantities
17  * @param[out] eddyViscosity Holds turbulent viscosity
18  * @param[in] geom Problem geometry
19  * @param[in] turbChoice Container with turbulence parameters
20  * @param[in] SurfLayer Pointer to Monin-Obukhov class if instantiated
21  * @param[in] use_moisture If we have microphysics enabled
22  * @param[in] level Current level
23  * @param[in] bc_ptr Pointer to array with boundary condition info
24  * @param[in] vert_only Only compute vertical eddy diffusivities
25  * @param[in] z_phys_nd Physical location of grid nodes, if terrain (or grid stretching) is enabled
26  * @param[in] z_phys_cc Physical location of cell centers
27  */
28 void
30  const amrex::MultiFab& xvel,
31  const amrex::MultiFab& yvel,
32  amrex::MultiFab& cons_in,
33  amrex::MultiFab& eddyViscosity,
34  const amrex::Geometry& geom,
35  const TurbChoice& turbChoice,
36  std::unique_ptr<SurfaceLayer>& SurfLayer,
37  bool use_terrain_fitted_coords,
38  bool use_moisture,
39  int level,
40  const amrex::BCRec* bc_ptr,
41  bool /*vert_only*/,
42  const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
43  const std::unique_ptr<amrex::MultiFab>& z_phys_cc,
44  const MoistureComponentIndices& moisture_indices);
45 
46 /**
47  * Compute eddy diffusivities of momentum (eddy viscosity) and heat using the
48  * Mellor-Yamada-Nakanishi-Niino Level amrex::Real(2.5) PBL scheme
49  *
50  * @param[in] xvel Velocity in x-dir
51  * @param[in] yvel Velocity in y-dir
52  * @param[in] cons_in Cell center conserved quantities
53  * @param[out] eddyViscosity Holds turbulent viscosity
54  * @param[in] geom Problem geometry
55  * @param[in] turbChoice Container with turbulence parameters
56  * @param[in] SurfLayer Pointer to Monin-Obukhov class if instantiated
57  * @param[in] use_moisture If we have microphysics enabled
58  * @param[in] level Current level
59  * @param[in] bc_ptr Pointer to array with boundary condition info
60  * @param[in] vert_only Only compute vertical eddy diffusivities
61  * @param[in] z_phys_nd Physical location of grid nodes, if terrain (or grid stretching) is enabled
62  * @param[in] z_phys_cc Physical location of cell centers
63  */
64 void
65 ComputeDiffusivityMYNN25 (const amrex::MultiFab& xvel,
66  const amrex::MultiFab& yvel,
67  const amrex::MultiFab& cons_in,
68  amrex::MultiFab& eddyViscosity,
69  const amrex::Geometry& geom,
70  const TurbChoice& turbChoice,
71  std::unique_ptr<SurfaceLayer>& SurfLayer,
72  bool use_terrain_fitted_coords,
73  bool use_moisture,
74  int level,
75  const amrex::BCRec* bc_ptr,
76  bool /*vert_only*/,
77  const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
78  const std::unique_ptr<amrex::MultiFab>& z_phys_cc,
79  const MoistureComponentIndices& moisture_indices);
80 
81 /**
82  * Compute eddy diffusivities of momentum (eddy viscosity) and heat using the
83  * Mellor-Yamada-Nakanishi-Niino Level amrex::Real(2.5) PBL scheme
84  *
85  * @param[in] xvel Velocity in x-dir
86  * @param[in] yvel Velocity in y-dir
87  * @param[in] cons_in Cell center conserved quantities
88  * @param[out] eddyViscosity Holds turbulent viscosity
89  * @param[in] geom Problem geometry
90  * @param[in] turbChoice Container with turbulence parameters
91  * @param[in] SurfLayer Pointer to Monin-Obukhov class if instantiated
92  * @param[in] use_moisture If we have microphysics enabled
93  * @param[in] level Current level
94  * @param[in] bc_ptr Pointer to array with boundary condition info
95  * @param[in] vert_only Only compute vertical eddy diffusivities
96  * @param[in] z_phys_nd Physical location of grid nodes, if terrain (or grid stretching) is enabled
97  * @param[in] z_phys_cc Physical location of cell centers
98  */
99 void
100 ComputeDiffusivityMYNNEDMF (const amrex::MultiFab& xvel,
101  const amrex::MultiFab& yvel,
102  const amrex::MultiFab& cons_in,
103  amrex::MultiFab& eddyViscosity,
104  const amrex::Geometry& geom,
105  const TurbChoice& turbChoice,
106  std::unique_ptr<SurfaceLayer>& SurfLayer,
107  bool use_terrain_fitted_coords,
108  bool use_moisture,
109  int level,
110  const amrex::BCRec* bc_ptr,
111  bool /*vert_only*/,
112  const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
113  const std::unique_ptr<amrex::MultiFab>& z_phys_cc,
114  const MoistureComponentIndices& moisture_indices);
115 
116 /**
117  * Compute eddy diffusivities of momentum (eddy viscosity) and heat using the
118  * Yonsei University PBL scheme
119  *
120  * @param[in] xvel Velocity in x-dir
121  * @param[in] yvel Velocity in y-dir
122  * @param[in] cons_in Cell center conserved quantities
123  * @param[out] eddyViscosity Holds turbulent viscosity
124  * @param[in] geom Problem geometry
125  * @param[in] turbChoice Container with turbulence parameters
126  * @param[in] SurfLayer Pointer to Monin-Obukhov class if instantiated
127  * @param[in] use_moisture If we have microphysics enabled
128  * @param[in] level Current level
129  * @param[in] bc_ptr Pointer to array with boundary condition info
130  * @param[in] vert_only Only compute vertical eddy diffusivities
131  * @param[in] z_phys_nd Physical location of grid nodes, if terrain (or grid stretching) is enabled
132  * @param[in] z_phys_cc Physical location of cell centers
133  */
134 void
135 ComputeDiffusivityYSU (const amrex::MultiFab& xvel,
136  const amrex::MultiFab& yvel,
137  const amrex::MultiFab& cons_in,
138  amrex::MultiFab& eddyViscosity,
139  const amrex::Geometry& geom,
140  const TurbChoice& turbChoice,
141  std::unique_ptr<SurfaceLayer>& SurfLayer,
142  bool use_terrain_fitted_coords,
143  bool use_moisture,
144  int level,
145  const amrex::BCRec* bc_ptr,
146  bool /*vert_only*/,
147  const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
148  const std::unique_ptr<amrex::MultiFab>& z_phys_cc,
149  const MoistureComponentIndices& moisture_indices);
150 /**
151  * Compute eddy diffusivities of momentum (eddy viscosity) and heat using the
152  * Medium Range Forecast (MRF) boundary layer scheme based on Hong and Pan (1996).
153  * Reference: Hong, S. Y., and H.-L. Pan, 1996: Nonlocal Boundary Layer Vertical
154  * Diffusion in a Medium-Range Forecast Model. Monthly Weather Review, 124,
155  * 2322-2339. https://doi.org/10.1175/1520-0493(1996)124<2322:NBLVDI>2.0.CO;2
156  *
157  * @param[in] xvel Velocity in x-dir
158  * @param[in] yvel Velocity in y-dir
159  * @param[in] cons_in Cell center conserved quantities
160  * @param[out] eddyViscosity Holds turbulent viscosity
161  * @param[in] geom Problem geometry
162  * @param[in] turbChoice Container with turbulence parameters
163  * @param[in] SurfLayer Pointer to Monin-Obukhov class if instantiated
164  * @param[in] use_moisture If we have microphysics enabled
165  * @param[in] level Current level
166  * @param[in] bc_ptr Pointer to array with boundary condition info
167  * @param[in] vert_only Only compute vertical eddy diffusivities
168  * @param[in] z_phys_nd Physical location of grid nodes, if terrain (or grid stretching) is enabled
169  * @param[in] z_phys_cc Physical location of cell centers
170  */
171 void
172 ComputeDiffusivityMRF (const amrex::MultiFab& xvel,
173  const amrex::MultiFab& yvel,
174  const amrex::MultiFab& cons_in,
175  amrex::MultiFab& eddyViscosity,
176  const amrex::Geometry& geom,
177  const TurbChoice& turbChoice,
178  std::unique_ptr<SurfaceLayer>& SurfLayer,
179  bool use_terrain_fitted_coords,
180  bool use_moisture,
181  int level,
182  const amrex::BCRec* bc_ptr,
183  bool /*vert_only*/,
184  const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
185  const std::unique_ptr<amrex::MultiFab>& z_phys_cc,
186  const MoistureComponentIndices& moisture_indices);
187 
188 /**
189  * Compute eddy diffusivities of momentum (eddy viscosity) and heat using the
190  * WRF Yonsei University (YSU) PBL scheme.
191  *
192  * Based on:
193  * Hong, Noh &amp; Dudhia (2006), MWR, https://doi.org/10.1175/MWR3250.1
194  * Hong (2010), QJRMS, https://doi.org/10.1002/qj.665
195  *
196  * Features: three-pass bulk-Richardson PBLH diagnosis, nonlocal
197  * countergradient fluxes, explicit entrainment at PBL top, and
198  * grid-adaptive Richardson-number mixing in free atmosphere.
199  *
200  * @param[in] xvel x-direction velocity
201  * @param[in] yvel y-direction velocity
202  * @param[in] cons_in cell-center conserved quantities
203  * @param[out] eddyViscosity turbulent eddy viscosity
204  * @param[in] geom problem geometry
205  * @param[in] turbChoice turbulence parameter container
206  * @param[in] SurfLayer Monin-Obukhov surface layer object
207  * @param[in] use_terrain_fitted_coords flag for terrain coordinates
208  * @param[in] use_moisture flag for moisture active
209  * @param[in] level AMR level
210  * @param[in] bc_ptr boundary condition array
211  * @param[in] vert_only compute vertical diffusivity only
212  * @param[in] z_phys_nd physical node heights (terrain)
213  * @param[in] z_phys_cc physical cell-center heights
214  * @param[in] moisture_indices component index mapping for moisture variables
215  * @param[in] qheating_rates radiation heating rates (SW, LW components); optional
216  */
217 void
218 ComputeDiffusivityYSUNew (const amrex::MultiFab& xvel,
219  const amrex::MultiFab& yvel,
220  const amrex::MultiFab& cons_in,
221  amrex::MultiFab& eddyViscosity,
222  const amrex::Geometry& geom,
223  const TurbChoice& turbChoice,
224  std::unique_ptr<SurfaceLayer>& SurfLayer,
225  bool use_terrain_fitted_coords,
226  bool use_moisture,
227  int level,
228  const amrex::BCRec* bc_ptr,
229  bool /*vert_only*/,
230  const std::unique_ptr<amrex::MultiFab>& z_phys_nd,
231  const std::unique_ptr<amrex::MultiFab>& z_phys_cc,
232  const MoistureComponentIndices& moisture_indices,
233  const amrex::MultiFab* qheating_rates = nullptr);
234 
235 /**
236  * Function for computing vertical derivatives for use in PBL model
237  *
238  * @param[in] u velocity in x-dir
239  * @param[in] v velocity in y-dir
240  * @param[in] cell_data conserved cell center vars
241  */
243 {
244  // Each value is the inverse physical distance between the two samples
245  // used by its corresponding derivative stencil.
249 };
250 
251 AMREX_GPU_DEVICE
252 AMREX_FORCE_INLINE
253 void
254 ComputeVerticalDerivativesPBL (int i, int j, int k,
255  const amrex::Array4<const amrex::Real>& uvel,
256  const amrex::Array4<const amrex::Real>& vvel,
257  const amrex::Array4<const amrex::Real>& cell_data,
258  const int izmin,
259  const int izmax,
260  const PBLDerivativeDzInv& dz_inv,
261  const bool c_ext_dir_on_zlo,
262  const bool c_ext_dir_on_zhi,
263  const bool u_ext_dir_on_zlo,
264  const bool u_ext_dir_on_zhi,
265  const bool v_ext_dir_on_zlo,
266  const bool v_ext_dir_on_zhi,
267  amrex::Real& dthetadz,
268  amrex::Real& dudz,
269  amrex::Real& dvdz,
270  const MoistureComponentIndices& moisture_indices)
271 {
272  // ext_dir ghost values hold the value at the physical boundary, which is
273  // half a ghost-center spacing from the adjacent cell center. Use a
274  // two-point, first-order boundary-to-center difference with inverse
275  // distance 2/dz.
276  if ( k==izmax && c_ext_dir_on_zhi ) {
277  dthetadz = ( GetThetav(i,j,k+1,cell_data,moisture_indices)
278  -GetThetav(i,j,k ,cell_data,moisture_indices) )*dz_inv.dirichlet_hi;
279  } else if ( k==izmin && c_ext_dir_on_zlo ) {
280  dthetadz = ( GetThetav(i,j,k ,cell_data,moisture_indices)
281  -GetThetav(i,j,k-1,cell_data,moisture_indices) )*dz_inv.dirichlet_lo;
282  } else {
283  dthetadz = ( GetThetav(i,j,k+1,cell_data,moisture_indices)
284  -GetThetav(i,j,k-1,cell_data,moisture_indices) )*dz_inv.interior;
285  }
286 
287  if ( k==izmax && u_ext_dir_on_zhi ) {
288  dudz = myhalf*( uvel(i ,j,k+1) - uvel(i ,j,k)
289  +uvel(i+1,j,k+1) - uvel(i+1,j,k) )*dz_inv.dirichlet_hi;
290  } else if ( k==izmin && u_ext_dir_on_zlo ) {
291  dudz = myhalf*( uvel(i ,j,k) - uvel(i ,j,k-1)
292  +uvel(i+1,j,k) - uvel(i+1,j,k-1) )*dz_inv.dirichlet_lo;
293  } else {
294  dudz = myhalf*( uvel(i ,j,k+1) - uvel(i ,j,k-1)
295  +uvel(i+1,j,k+1) - uvel(i+1,j,k-1) )*dz_inv.interior;
296  }
297 
298  if ( k==izmax && v_ext_dir_on_zhi ) {
299  dvdz = myhalf*( vvel(i,j ,k+1) - vvel(i,j ,k)
300  +vvel(i,j+1,k+1) - vvel(i,j+1,k) )*dz_inv.dirichlet_hi;
301  } else if ( k==izmin && v_ext_dir_on_zlo ) {
302  dvdz = myhalf*( vvel(i,j ,k) - vvel(i,j ,k-1)
303  +vvel(i,j+1,k) - vvel(i,j+1,k-1) )*dz_inv.dirichlet_lo;
304  } else {
305  dvdz = myhalf*( vvel(i,j ,k+1) - vvel(i,j ,k-1)
306  +vvel(i,j+1,k+1) - vvel(i,j+1,k-1) )*dz_inv.interior;
307  }
308 }
309 
310 /**
311  * Function for computing the QKE source terms (NN09, Eqn. 5).
312  *
313  * @param[in] u velocity in x-dir
314  * @param[in] v velocity in y-dir
315  * @param[in] cell_data conserved cell center vars
316  * @param[in] cell_prim primitive cell center vars
317  * @param[in] K_turb turbulent viscosity
318  * @param[in] domain box of the whole domain
319  * @param[in] dz_inv inverse spacings for interior and Dirichlet-boundary differences
320  * @param[in] pbl_mynn_B1_l a parameter
321  * @param[in] theta_mean average theta
322  */
323 AMREX_GPU_DEVICE
324 AMREX_FORCE_INLINE
326 ComputeQKESourceTerms (int i, int j, int k,
327  const amrex::Array4<const amrex::Real>& uvel,
328  const amrex::Array4<const amrex::Real>& vvel,
329  const amrex::Array4<const amrex::Real>& cell_data,
330  const amrex::Array4<const amrex::Real>& cell_prim,
331  const amrex::Array4<const amrex::Real>& K_turb,
332  const amrex::Box& domain,
333  const PBLDerivativeDzInv dz_inv,
334  amrex::Real pbl_mynn_B1_l,
335  const amrex::Real theta_mean,
336  const MoistureComponentIndices& moisture_indices,
337  bool c_ext_dir_on_zlo,
338  bool c_ext_dir_on_zhi,
339  bool u_ext_dir_on_zlo,
340  bool u_ext_dir_on_zhi,
341  bool v_ext_dir_on_zlo,
342  bool v_ext_dir_on_zhi)
343 {
344  // Compute some relevant derivatives
345  amrex::Real dthetadz, dudz, dvdz;
346  amrex::Real source_term = zero;
347 
348  int izmin = domain.smallEnd(2);
349  int izmax = domain.bigEnd(2);
350 
352  uvel, vvel, cell_data, izmin, izmax, dz_inv,
353  c_ext_dir_on_zlo, c_ext_dir_on_zhi,
354  u_ext_dir_on_zlo, u_ext_dir_on_zhi,
355  v_ext_dir_on_zlo, v_ext_dir_on_zhi,
356  dthetadz, dudz, dvdz,
357  moisture_indices);
358 
359  // Notes:
360  // - We transport TKE = myhalf*QKE rather than QKE, so the RHS terms do not
361  // have a factor of two.
362  // - Transport terms due to turbulence and pressure are included when
363  // DiffusionSrcForState_* is called from ERF_slow_rhs_post.
364  // - Eddy diffusivities are updated at the beginning of each time step only.
365 
366  // Second-order turbulent fluxes, e.g.:
367  // -<uw> = L q SM dU/dz (NN09, Eqn. 18)
368  // = Kmv/rho dU/dz
369 
370  // Shear Production
371  source_term += K_turb(i,j,k,EddyDiff::Mom_v) * (dudz*dudz + dvdz*dvdz);
372 
373  // Buoyancy Production
374  source_term -= (CONST_GRAV/theta_mean)*K_turb(i,j,k,EddyDiff::Theta_v)*dthetadz;
375 
376  // Dissipation (NN09, Eqn. 12)
377  amrex::Real qke = two * cell_prim(i,j,k,PrimKE_comp);
378  if (std::abs(qke) > zero) {
379  source_term -= cell_data(i,j,k,Rho_comp) * std::pow(qke,amrex::Real(1.5)) /
380  (pbl_mynn_B1_l * K_turb(i,j,k,EddyDiff::Turb_lengthscale));
381  }
382 
383  return source_term;
384 }
385 
387 {
389 
390  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
391  PBLDerivativeDzInv operator() (int, int, int) const noexcept
392  {
393  return {myhalf*value, two*value, two*value};
394  }
395 };
396 
398 {
399  const amrex::Real* dz;
400  int klo;
401  int khi;
402 
403  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
404  PBLDerivativeDzInv operator() (int, int, int k) const noexcept
405  {
406  // Adjacent cell centers are separated by half the sum of their widths.
407  const amrex::Real dz_lo = dz[(k > klo) ? k-1 : k];
408  const amrex::Real dz_hi = dz[(k < khi) ? k+1 : k];
409  return {two / (dz_lo + two*dz[k] + dz_hi),
410  two / dz[k],
411  two / dz[k]};
412  }
413 };
414 
416 {
417  amrex::Array4<const amrex::Real> z_cc;
418 
419  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
420  PBLDerivativeDzInv operator() (int i, int j, int k) const noexcept
421  {
422  return {one / (z_cc(i,j,k+1) - z_cc(i,j,k-1)),
423  two / (z_cc(i,j,k ) - z_cc(i,j,k-1)),
424  two / (z_cc(i,j,k+1) - z_cc(i,j,k ))};
425  }
426 };
427 #endif
constexpr amrex::Real two
Definition: ERF_Constants.H:10
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:64
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define PrimKE_comp
Definition: ERF_IndexDefines.H:56
const bool use_moisture
Definition: ERF_InitCustomPert_Bomex.H:14
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real GetThetav(const int &i, const int &j, const int &k, const amrex::Array4< amrex::Real const > &cell_data, const MoistureComponentIndices &moisture_indices)
Definition: ERF_MoistUtils.H:72
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 std::unique_ptr< amrex::MultiFab > &z_phys_cc, 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 std::unique_ptr< amrex::MultiFab > &z_phys_cc, const MoistureComponentIndices &moisture_indices)
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 PBLDerivativeDzInv &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:254
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 std::unique_ptr< amrex::MultiFab > &z_phys_cc, 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 std::unique_ptr< amrex::MultiFab > &z_phys_cc, const MoistureComponentIndices &moisture_indices)
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)
Definition: ERF_PBLModels.H:326
void ComputeDiffusivityMYJ(double 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 std::unique_ptr< amrex::MultiFab > &z_phys_cc, const MoistureComponentIndices &moisture_indices)
void ComputeDiffusivityYSUNew(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 std::unique_ptr< amrex::MultiFab > &z_phys_cc, const MoistureComponentIndices &moisture_indices, const amrex::MultiFab *qheating_rates=nullptr)
TurbChoice turbChoice
Definition: ERF_SetupVertDiff.H:6
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ Theta_v
Definition: ERF_IndexDefines.H:211
@ Turb_lengthscale
Definition: ERF_IndexDefines.H:215
@ Mom_v
Definition: ERF_IndexDefines.H:210
@ xvel
Definition: ERF_IndexDefines.H:176
@ yvel
Definition: ERF_IndexDefines.H:177
Definition: ERF_DataStruct.H:106
Definition: ERF_PBLModels.H:387
amrex::Real value
Definition: ERF_PBLModels.H:388
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE PBLDerivativeDzInv operator()(int, int, int) const noexcept
Definition: ERF_PBLModels.H:391
Definition: ERF_PBLModels.H:398
const amrex::Real * dz
Definition: ERF_PBLModels.H:399
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE PBLDerivativeDzInv operator()(int, int, int k) const noexcept
Definition: ERF_PBLModels.H:404
int klo
Definition: ERF_PBLModels.H:400
int khi
Definition: ERF_PBLModels.H:401
Definition: ERF_PBLModels.H:416
amrex::Array4< const amrex::Real > z_cc
Definition: ERF_PBLModels.H:417
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE PBLDerivativeDzInv operator()(int i, int j, int k) const noexcept
Definition: ERF_PBLModels.H:420
Definition: ERF_PBLModels.H:243
amrex::Real dirichlet_hi
Definition: ERF_PBLModels.H:248
amrex::Real interior
Definition: ERF_PBLModels.H:246
amrex::Real dirichlet_lo
Definition: ERF_PBLModels.H:247
Definition: ERF_TurbStruct.H:82