|
ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
|
Functions | |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | zeta_max () noexcept |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | floored_wind (amrex::Real speed, amrex::Real wind_floor) noexcept |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | bounded_obukhov_length (amrex::Real Olen, amrex::Real z_ref) noexcept |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | bounded_zeta (amrex::Real z, amrex::Real Olen) noexcept |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | psi_cap (amrex::Real z, amrex::Real z0, amrex::Real factor) noexcept |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | capped_psi (amrex::Real psi, amrex::Real z, amrex::Real z0, amrex::Real factor) noexcept |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | psi_m_for_ustar (amrex::Real psi_m, amrex::Real z, amrex::Real z0, amrex::Real factor) noexcept |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real | clamped_ustar (amrex::Real ustar) noexcept |
Bounds on the stability estimate of the immersed-forcing wall law. Without them a zero tangential wind one cell from the wall gives u* = 0, an Obukhov length of zero and zeta = z/0 (erf-model/ERF#4016).
Always on:
Opt-in (WRF's revised surface layer, sf_sfclayrev):
|
noexcept |
An Obukhov length derived from u* and the heat flux, with |L| no smaller than z_ref / zeta_max(), so that z / L lies within +-zeta_max() for every z <= z_ref and the zero L of a zero u* is never divided by. The sign is kept: L = -0 is the unstable bound and L = +0 the stable one. Unchanged, bit for bit, when |L| >= z_ref / zeta_max(). Not for a prescribed L, whose bound would then depend on the local cell size; see bounded_zeta.
Referenced by compute_if_most_target_vel(), ImmersedForcingBuildings_Scalar(), ImmersedForcingTerrain_Scalar(), ImmersedForcingTerrain_Xmom(), and ImmersedForcingTerrain_Ymom().


|
noexcept |
zeta = z / L held within +-zeta_max(), for an L that is not zero (a prescribed erf.if_Olen, which start-up refuses at 0, or one from bounded_obukhov_length). Unchanged, bit for bit, when |z / L| <= zeta_max(); a NaN stays NaN.
Referenced by compute_if_most_target_vel(), ImmersedForcingBuildings_Scalar(), ImmersedForcingTerrain_Scalar(), ImmersedForcingTerrain_Xmom(), and ImmersedForcingTerrain_Ymom().


|
noexcept |
psi held at or below psi_cap(z, z0, factor).
Referenced by compute_if_most_target_vel(), ImmersedForcingBuildings_Scalar(), ImmersedForcingTerrain_Scalar(), ImmersedForcingTerrain_Xmom(), and ImmersedForcingTerrain_Ymom().


|
noexcept |
The friction velocity held within [0, 2] m/s, a NaN going to 0: the wall law's guard against a log-law denominator that cancels or changes sign.
Referenced by compute_if_most_target_vel(), ImmersedForcingBuildings_Scalar(), ImmersedForcingTerrain_Scalar(), ImmersedForcingTerrain_Xmom(), and ImmersedForcingTerrain_Ymom().

|
noexcept |
The wind speed the stability estimate uses: the speed, floored at wind_floor (>= 0).
Referenced by compute_if_most_target_vel(), ImmersedForcingBuildings_Scalar(), ImmersedForcingTerrain_Scalar(), ImmersedForcingTerrain_Xmom(), and ImmersedForcingTerrain_Ymom().

|
noexcept |
The largest psi (momentum or heat) the wall law uses at height z: factor ln(z / z0) for 0 < factor <= 1, and never more than ln(z / z0). For z > z0 a factor below 1 keeps ln(z / z0) - psi at no less than (1 - factor) ln(z / z0) > 0, so strongly unstable air still carries momentum and heat between the wall and the cell above; a cap of ln(z / z0) itself makes the target zero (momentum) or the value above (heat). For z <= z0, where the log law does not hold, the cap stays ln(z / z0).
Referenced by capped_psi().

|
noexcept |
psi_m in the friction velocity u* = U kappa / (ln(z / z0) - psi_m) at height z: held at or below factor ln(z / z0), as WRF caps PSIM before it forms UST, so the denominator stays at least (1 - factor) ln(z / z0) > 0 and strongly unstable air keeps a positive u*. Uncapped for factor = 1 (a cap of ln(z / z0) would zero the denominator) and for z <= z0, where the log law does not hold; there the wall law's u* clamp handles a denominator of either sign.
Referenced by compute_if_most_target_vel(), ImmersedForcingTerrain_Xmom(), and ImmersedForcingTerrain_Ymom().

|
noexcept |
Largest |zeta| = |z / L| the wall law uses.
Referenced by bounded_obukhov_length(), and bounded_zeta().
