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_parameters
z0m
: Roughness length for momentum (m). Can be estimated using fromroughness_parameters
psi_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]