Stability correction
Bigleaf.Monin_Obukhov_length
— FunctionMonin_Obukhov_length(Tair, pressure, ustar, H; constants)
Monin_Obukhov_length!(df;constants=BigleafConstants())
Monin_Obukhov_length(df;constants=BigleafConstants())
calculates the Monin-Obukhov length.
Arguments
Tair
: Air temperature (degC)pressure
: Atmospheric pressure (kPa)ustar
: Friction velocity (m s-1)H
: Sensible heat flux (W m-2)df
: DataFrame containing the above variables
optional
constants=
BigleafConstants
()
: Dictionary with entriesKelvin
- conversion degree Celsius to Kelvincp
- specific heat of air for constant pressure (J K-1 1)k
- von Karman constant (-)g
- gravitational acceleration (m s-2)
Details
The Monin-Obukhov length (L) is given by:
$L = - (\rho * cp * ustar^3 * Tair) / (k * g * H)$
where $\rho$ is air density (kg m-3).
Note
Note that L gets very small for very low ustar values with implications for subsequent functions using L as input. It is recommended to filter data and exclude low ustar values (ustar < ~0.2) beforehand.
Value
Monin-Obukhov length L (m). The non-mutating DataFrame variant returns a vector, the mutating variant add or modifies column :MOL
.
References
Foken, T, 2008: Micrometeorology. Springer, Berlin, Germany.
See also
Monin_Obukhov_length(
Tair=25,pressure=100,
ustar=seq(0.2,1,0.1),H=seq(40,200,20))
Bigleaf.stability_parameter
— Functionstability_parameter(z,d,MOL)
stability_parameter(z,d,Tair, pressure, ustar, H; constants)
stability_parameter!(df::AbstractDataFrame; z,d, MOL=nothing, constants)
calculates stability parameter "zeta", a parameter characterizing stratification in the lower atmosphere.
Arguments
z
: height (m)d
: Zero-plane displacement height (m)MOL
: Monin-Obukhov-length L (m)df
: DataFrame containing the variables required byMonin_Obukhov_length
optional
constants=
BigleafConstants
()
In the second variant and if MOL=nothing
in the DataFrame variants, MOL is computed by Monin_Obukhov_length
.
Details
The stability parameter $\zeta$ is given by:
$\zeta = (z - d) / L$
where L is the Monin-Obukhov length (m), calculated by Monin_Obukhov_length
. The displacement height can be estimated from the function roughness_parameters
.
Value
$\zeta$: stability parameter (-). The nonmutainting DataFrame variant returns a vector. The mutating variant modifies or adds column [:zeta
].
using DataFrames
df = DataFrame(Tair=25.0, pressure=100.0, ustar=0.2:0.1:1.0, H=40:20.0:200)
z=40;d=15
zeta = stability_parameter.(z,d, df.Tair, df.pressure, df.ustar, df.H)
all(zeta .< 0)
Bigleaf.stability_correction
— Functionstability_correction(zeta;
stab_formulation=Dyer1970())
stability_correction(z,d, Tair,pressure,ustar,H; constants,
stab_formulation=Dyer1970())
stability_correction!(df; zeta, z, d;
stab_formulation=Dyer1970(), constants =BigleafConstants())
Integrated Stability Correction Functions for Heat and Momentum
Arguments
zeta
: Stability parameter zeta (-)Tair
,pressure
,ustar
,H
: seeMonin_Obukhov_length
z
,d
: seestability_parameter
df
: DataFrame containing the variables required byMonin_Obukhov_length
stab_formulation
: Formulation for the stability function. EitherDyer1970()
, orBusinger1971()
orNoStabilityCorrection()
In the second and third form computes zeta
by stability_parameter
and Monin_Obukhov_length
and requires respective arguments.
Details
These dimensionless values are needed to correct deviations from the exponential wind profile under non-neutral conditions. The functions give the integrated form of the universal functions. They depend on the value of the stability parameter $\zeta$, a function of height z
, which can be calculated from the function stability_parameter
. The integration of the universal functions is:
$\psi = -x * \zeta$
for stable atmospheric conditions ($\zeta$ >= 0), and
$\psi = 2 * log( (1 + y(\zeta)) / 2)$
for unstable atmospheric conditions ($\zeta$ < 0).
The different formulations differ in their value of x and y.
Value
a NamedTuple with the following columns:
psi_h
: the value of the stability function for heat and water vapor (-)psi_m
: the value of the stability function for momentum (-)
References
- Dyer, A_J., 1974: A review of flux-profile relationships. Boundary-Layer Meteorology 7, 363-372.
- Dyer, A. J., Hicks, B_B., 1970: Flux-Gradient relationships in the constant flux layer. Quart. J. R. Meteorol. Soc. 96, 715-721.
- Businger, J_A., Wyngaard, J. C., Izumi, I., Bradley, E. F., 1971: Flux-Profile relationships in the atmospheric surface layer. J. Atmospheric Sci. 28, 181-189.
- Paulson, C_A., 1970: The mathematical representation of wind speed and temperature profiles in the unstable atmospheric surface layer. Journal of Applied Meteorology 9, 857-861. Foken, T, 2008: Micrometeorology. Springer, Berlin, Germany.
Examples
using DataFrames
zeta = -2:0.5:0.5
df2 = DataFrame(stability_correction.(zeta; stab_formulation=Businger1971()))
propertynames(df2) == [:psi_h, :psi_m]