Stability correction

Bigleaf.Monin_Obukhov_lengthFunction
Monin_Obukhov_length(Tair, pressure, ustar, H; constants)
Monin_Obukhov_length!(df;constants=bigleaf_constants())
Monin_Obukhov_length(df;constants=bigleaf_constants())

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=bigleaf_constants(): Dictionary with entries
    • Kelvin - conversion degree Celsius to Kelvin
    • cp - 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

stability_parameter

Monin_Obukhov_length(
  Tair=25,pressure=100,
  ustar=seq(0.2,1,0.1),H=seq(40,200,20))
Bigleaf.stability_parameterFunction
stability_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 containting the variables required by Monin_Obukhov_length

optional

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, pressure=100, ustar=0.2:0.1:1.0, H=40:20:200)
z=40;d=15
zeta = stability_parameter.(z,d, df.Tair, df.pressure, df.ustar, df.H)
all(zeta .< 0)
Bigleaf.stability_correctionFunction
stability_correction(zeta; 
  stab_formulation=Val(:Dyer_1970))
stability_correction(z,d, Tair,pressure,ustar,H; constants,
  stab_formulation=Val(:Dyer_1970))
stability_correction!(df; zeta, z, d; 
  stab_formulation=Val(:Dyer_1970), constants = bigleaf_constants())

Integrated Stability Correction Functions for Heat and Momentum

Arguments

  • zeta : Stability parameter zeta (-)
  • Tair,pressure,ustar,H : see Monin_Obukhov_length
  • z,d : see stability_parameter
  • df : DataFrame containting the variables required by Monin_Obukhov_length
  • stab_formulation : Formulation for the stability function. Either Val(:Dyer_1970), or Val(:Businger_1971) or Val(:no_stability_correction)

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 heigh 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=Val(:Businger_1971)))                         
propertynames(df2) == [:psi_h, :psi_m]