Aerodynamic Conductance
Bigleaf.aerodynamic_conductance! — Functionaerodynamic_conductance!(df;
Gb_model = Thom1972(), Ram_model = ResistanceWindZr(),
zr=nothing, zh=nothing, d = isnothing(zh) ? nothing : 0.7*zh,
...
)Bulk aerodynamic conductance, including options for the boundary layer conductance formulation and stability correction functions.
Arguments
df: DataFrame with columnsustar: Friction velocity (m s-1)wind: Wind speed at sensor height (m s-1)
Gb_model: model for computing boundary layer conductance (seecompute_Gb!)Ram_model: model for computing aerodynamic resistance (seecompute_Ram)zh: canopy height (m)zr: Instrument (reference) height (m)
Further required columns of df and keyword argument depend on Gb_model (see compute_Gb!) and Ram_model (see compute_Ram).
If only columns ustar and wind are available, use default models (Thom1972() and ResistanceWindZr()).
Details
Aerodynamic conductance for heat (Ga_h) is calculated as:
$Ga_h = 1 / (Ra_m + Rb_h)$
where $Ra_m$ is the aerodynamic resistance for momentum and $Rb_h = 1/Gb_h$ the (quasi-laminar) canopy boundary layer resistance ('excess resistance') for heat.
Ra_m is computed and described with compute_Ram using model Ram_model.
Rb_h is computed and described with 1/compute_Gb! using a given Gb_model.
Value
combined results of compute_Gb! and
Ra_m: Aerodynamic resistance for momentum transfer (s m-1)Ga_m: Aerodynamic conductance for momentum transfer (m s-1)Ga_h: Aerodynamic conductance for heat transfer (m s-1)Ra_h: Aerodynamic resistance for heat transfer (s m-1)Ga_CO2: Aerodynamic conductance for CO2 transfer (m s-1)z0h: roughness length for heat (m)
Note
The roughness length for water and heat (z0h) is computed by roughness_length_heat.
TODO check Input variables such as LAI, Dl, or zh can be either constants, or vary with time, i.e. are vectors of the same length as df.
Note that boundary layer conductance to water vapor transfer (Gb_w) is often assumed to equal Gb_h. This assumption is also made in Bigleaf.jl, for example in the function surface_conductance.
If the roughness length for momentum (z0m) is not provided as input, it is estimated using roughness_parameters, which estimates a single z0m value for the entire time period. If a varying z0m value (e.g. across seasons or years) is required, z0m should be provided as input argument.
Examples
using DataFrames
df = DataFrame(Tair=25.0,pressure=100.0,wind=[3.0,4,5],
ustar=[0.5,0.6,0.65],H=[200.0,230,250])
# simple calculation of Ga
aerodynamic_conductance!(df;Gb_model=Thom1972())
# calculation of Ram using a model derived from the logarithmic wind profile
aerodynamic_conductance!(df;Gb_model=Thom1972(),Ram_model = ResistanceWindProfile(),
zr=40,zh=25,d=17.5,z0m=2)
# simple calculation of Ga, but a physically based canopy boundary layer model
aerodynamic_conductance!(df,Gb_model=Su2001(),
zr=40,zh=25,d=17.5,Dl=0.05,N=2,fc=0.8)
all(isfinite.(df.psi_h))Bigleaf.compute_Ram — Functioncompute_Ram(::ResistanceWindProfile(), ustar;
zr, d, z0m, psi_h, constants=BigleafConstants())
compute_Ram!(df, method::ResistanceWindProfile();
zr, d, z0m, psi_h = df.psi_h, kwargs...)
compute_Ram(::ResistanceWindZr(), ustar, wind)
compute_Ram!(df, method::ResistanceWindZr(); kwargs...)Estimate bulk aerodynamic conductance.
Arguments
ustar: Friction velocity (m s-1)df: DataFrame with above columnszr: Instrument (reference) height (m)d: Zero-plane displacement height (-), can be estimated usingroughness_parametersz0m: Roughness length for momentum (m). Can be estimated using fromroughness_parameterspsi_h: the value of the stability function for heat and water vapor (-) seestability_correction
Details
The aerodynamic resistance for momentum $R_{a_m}$ is given by (Ram_method = ResistanceWindZr()):
$R_{a_m} = u/{u^*}^2$
Where u is the horizontal wind velocity. Note that this formulation accounts for changes in atmospheric stability, and does not require an additional stability correction function.
An alternative method to calculate $Ra_m$ is provided (Ram_method = ResistanceWindProfile()):
$R_{a_m} = (ln((z_r - d)/z_{0m}) - \psi_h) / (k \, u^*)$
If the roughness parameters z0m and d are unknown, they can be estimated using roughness_parameters. The argument stab_formulation determines the stability correction function used to account for the effect of atmospheric stability on Ra_m (Ra_m is lower for unstable and higher for stable stratification). Stratification is based on a stability parameter zeta $\zeta=(z-d/L)$, where z is the height, d the zero-plane displacement height, and L the Monin-Obukhov length, calculated with Monin_Obukhov_length The stability correction function is chosen by the argument stab_formulation. Options are Dyer1970() and Businger1971() and NoStabilityCorrection().
Note
For adding aerodynamic conductance for other species see add_Ga!.
Value
Aerodynamic resistance for momentum transfer (s m-1) ($Ra_m$)
References
- Verma, S., 1989: Aerodynamic resistances to transfers of heat, mass and momentum. In: Estimation of areal evapotranspiration, IAHS Pub, 177, 13-20.
- Verhoef, A., De Bruin, H., Van Den Hurk, B., 1997: Some practical notes on the parameter kB^(-1) for sparse vegetation. Journal of Applied Meteorology, 36, 560-572.
- Hicks, BB., Baldocchi, DD., Meyers, TP., Hosker, JR., Matt, D_R., 1987: A preliminary multiple resistance routine for deriving dry deposition velocities from measured quantities. Water, Air, and Soil Pollution 36, 311-330.
- Monteith, JL., Unsworth, MH., 2008: Principles of environmental physics. Third Edition. Elsevier Academic Press, Burlington, USA.
See also
Bigleaf.roughness_length_heat — Functionroughness_length_heat(z0m, kB_h)Arguments
z0m: Roughness length for momentum (m). Can be calculated byroughness_parameters.kB_h: kB^(-1) parameter of heat transfer, Output ofaerodynamic_conductance!
Details
The roughness length for water and heat (z0h) is calculated from the relationship (e.g. Verma 1989):
${k_B}_h = ln(z_{0m}/z_{0h})$
it follows:
$z_{0h} = z_{0m} / e^{k_{B_h}}$
References
- Verma, S., 1989: Aerodynamic resistances to transfers of heat, mass and momentum. In: Estimation of areal evapotranspiration, IAHS Pub, 177, 13-20.
- Rigden, A., Li, D., Salvucci, G., 2018: Dependence of thermal roughness length on friction velocity across land cover types: A synthesis analysis using AmeriFlux data. Agricultural and Forest Meteorology 249, 512-519.
Bigleaf.add_Ga! — Functionadd_Ga(Gb_h, Ga_m, Sc::Vararg{Pair,N}; constants)
add_Ga!(df::AbstractDataFrame, Sc; Gb_h = df.Gb_h, Ga_m = df.Ga.m, kwargs...)compute additional aerodynamic conductance quantities for given Schmidt-numbers
Arguments
Gb_h: Boundary layer conductance for heat transfer (m s-1)Ga_m: Aerodynamic conductance for momentum (m s-1)Sc: severalPair{Symbol,Number}Output name and Schmidt number of additional conductances to be calculateddf: DataFrame to add output columns
optional
constants=BigleafConstants(): Dictionary with entriesPr- Prandtl number
Details
Aerodynamic conductance is calculated as
$G_{a_x} = 1/(1/G_{a_m} + 1/G_{b_x})$
where Gb_x is the Boundary layer conductance for other quantities x is calculated based on boundary layer for heat transfer, Schmidt-Number, and Prantl number, as documented in add_Gb!.
Value
a NameTuple or df with keys Ga_x where x are the keys in Sc and corresponding aerodynamic conductances (m s-1).
Examples
using DataFrames
df = DataFrame(Gb_h=[0.02, missing, 0.055], Ga_m = 1 ./ [0.03, 0.03, 0.03])
add_Ga!(df, :O2 => 0.84, :CH4 => 0.99)
propertynames(df)[3:4] == [:Ga_O2, :Ga_CH4]