Evapotranspiration
This page is a work in progress. If you have any questions or notice any errors, please raise an issue.
Overview
Evapotranspiration ($\text{ET}$) (m/s) is the combined process of water evaporation from soil and open water surfaces, evaporation of water intercepted by the canopy, and transpiration through leaf stomata. These processes remove water from the surface, driving latent heat flux and competing with sensible heat and ground heat fluxes in the surface energy balance.
All evapotranspiration pathways are primarily driven by the vapor pressure difference or specific humidity difference at the surface $\Delta q = q_{\text{sat}}(T_s) - q_a$, where $q_{\text{sat}}(T_s)$ is the saturation specific humidity at surface temperature $T_s$ (kg/kg) and $q_a$ is the atmospheric specific humidity (kg/kg) at a particular reference height.
Each pathway is also modulated by aerodynamic resistance(s) $r_a$ (s/m) (between surface and atmosphere) and possibly stomatal resistance $r_s$ (s/m) (in the case of transpiration).
Terrarium.AbstractEvapotranspiration — Type
Base type for evapotranspiration processes.
subtypes(Terrarium.AbstractEvapotranspiration)2-element Vector{Any}:
BareGroundEvaporation
PALADYNCanopyEvapotranspirationFlux conventions: kinematic humidity vs. liquid water mass
Evapotranspiration computations involve (at least) three different physical domains, each with its own natural units: the atmosphere (humidity fluxes), the surface energy balance (energy fluxes), and soil hydrology (water mass fluxes). To maintain clarity and prevent unit errors, Terrarium distinguishes between kinematic humidity fluxes $Q_h$ used in the calculation of the energy budget and liquid water mass fluxes $E$ that drive the hydrological state of the land surface.
Kinematic humidity flux $Q_h$
The kinematic humidity flux $Q_h$ [m/s] represents the transport of water vapor through the air, scaled by air density:
\[\begin{equation} Q_h = \Delta q \cdot g \quad \text{[m/s]}, \end{equation}\]
where $\Delta q$ (kg/kg) is the specific humidity difference and $g$ (m/s) is the vapor conductance.
Liquid water mass flux $E$
The liquid water mass flux $E$ (m/s) represents the equivalent flux of liquid water that would produce the same mass transfer:
\[\begin{equation} E = Q_h \cdot \frac{\rho_a}{\rho_w} \quad \text{[m/s]}, \end{equation}\]
where $\rho_a$ (kg/m³) is air density and $\rho_w$ (kg/m³) is liquid water density.
Why the distinction matters
The ratio $\rho_a / \rho_w \approx 1.2 / 1000 \approx 1.2 \times 10^{-3}$ means that a kinematic humidity flux of $Q_h = 10^{-5}$ m/s corresponds to a liquid water flux of only $E \approx 1.2 \times 10^{-8}$ m/s. This scaling is critical for:
- Energy balance consistency: The SEB uses $Q_h$ to compute latent heat ($H_l = \rho_a L Q_h$)
- Hydrology consistency: Soil moisture budgets use $E$ as a water loss term
- Mass conservation: The same physical process must remove the same mass from both atmosphere and soil
Summary
| Flux type | Symbol | Units | Used in | Computed by |
|---|---|---|---|---|
| Kinematic humidity | $Q_h$ | m/s | Surface energy balance | humidity_flux, compute_surface_humidity_flux |
| Liquid water mass | $E$ | m/s | Soil hydrology | compute_evapotranspiration_fluxes! (rescales $Q_h$) |
| Latent heat | $H_l$ | W/m² | Surface energy balance | compute_latent_heat_flux (uses $Q_h$) |
Bare ground evaporation
Terrarium.BareGroundEvaporation — Type
BareGroundEvaporation{NF, GR} <: AbstractEvapotranspirationEvaporation scheme for bare ground that calculates the humidity flux as
\[E = \beta \frac{\Delta q}{r_a}\]
where Δq is the specific humidity difference, rₐ is aerodynamic resistance, and β is an evaporation limiting factor.
variables(BareGroundEvaporation(Float32))Variables
├─ Prognostic:
├─ Auxiliary:
├── ground_evaporation_conductance [m s^-1] on XY{Center, Center}
├── evaporation_ground [m s^-1] on XY{Center, Center}
├─ Inputs:
├── skin_temperature [°C] on XY{Center, Center}
├─ Namespaces:
Vegetated land evapotranspiration
Terrarium.PALADYNCanopyEvapotranspiration — Type
struct PALADYNCanopyEvapotranspiration{NF, GR<:Terrarium.AbstractGroundEvaporationResistanceFactor} <: Terrarium.AbstractEvapotranspiration{NF}Canopy evapotranspiration scheme from PALADYN ([16, Eq. (5)]) that includes a canopy evaporation term based on the saturation fraction of canopy water defined by the canopy hydrology scheme.
\[E_{\text{ground}} = \beta \frac{\Delta q}{r_a + r_e}\]
\[E_{\text{can}} = f_{\text{can}} \frac{\Delta q}{r_a}\]
\[T_{\text{can}} = \frac{\Delta q}{r_a + r_s}\]
Properties:
C_can: Drag coefficient for the transfer of heat and water between the ground and canopyground_resistance: Parameterization for ground resistance to evaporation/sublimation
References
- [16] Willeit and Ganopolski, Geoscientific Model Development (2016)
variables(PALADYNCanopyEvapotranspiration(Float32))Variables
├─ Prognostic:
├─ Auxiliary:
├── ground_evaporation_conductance [m s^-1] on XY{Center, Center}
├── canopy_evaporation_conductance [m s^-1] on XY{Center, Center}
├── transpiration_conductance [m s^-1] on XY{Center, Center}
├── evaporation_canopy [m s^-1] on XY{Center, Center}
├── evaporation_ground [m s^-1] on XY{Center, Center}
├── transpiration [m s^-1] on XY{Center, Center}
├─ Inputs:
├── skin_temperature [°C] on XY{Center, Center}
├── ground_temperature [°C] on XY{Center, Center}
├─ Namespaces:
Evaporation from the canopy
Canopy evaporation of intercepted water $E_{\text{can}}$ (liquid water flux, m/s) depends on the saturation state of the canopy (fraction of leaves wet). The underlying kinematic humidity flux $Q_{h,\text{can}}$ is:
\[\begin{equation} Q_{h,\text{can}} = f_{\text{can}} \frac{\Delta q}{r_a} \quad \text{[m/s]}, \end{equation}\]
where $f_{\text{can}}$ is the canopy saturation fraction (0 = dry, 1 = saturated) (-) and $\Delta q$ is the specific humidity difference (kg vapor/kg air).
When $f_{\text{can}} = 0$ (completely dry canopy), $Q_{h,\text{can}} = 0$. When $f_{\text{can}} = 1$ (wet canopy), evaporation proceeds at the potential rate.
The canopy evaporation vapor conductance is computed as
\[\begin{equation} g_{\text{can}} = \frac{f_{\text{can}}}{r_a} \quad \text{[m/s]}, \end{equation}\]
so that $Q_{h,\text{can}} = g_{\text{can}} \cdot \Delta q$.
The liquid water flux $E_{\text{can}}$ is then obtained by rescaling:
\[\begin{equation} E_{\text{can}} = Q_{h,\text{can}} \cdot \frac{\rho_a}{\rho_w} \quad \text{[m/s]}. \end{equation}\]
Ground evaporation
Evaporation from exposed soil or under-canopy surfaces $E_{\text{ground}}$ (liquid water flux, m/s) is limited by soil water availability. The underlying kinematic humidity flux $Q_{h,\text{ground}}$ is:
\[\begin{equation} Q_{h,\text{ground}} = \beta \frac{\Delta q}{r_a + r_e} \quad \text{[m/s]}, \end{equation}\]
where $\beta$ is the ground evaporation resistance factor (0 to 1) (-), $r_a$ is aerodynamic resistance (s/m), and $r_e$ is the aerodynamic resistance between ground and canopy (s/m).
The ground evaporation vapor conductance is computed as
\[\begin{equation} g_{\text{ground}} = \frac{\beta}{r_a + r_e} \quad \text{[m/s]}, \end{equation}\]
so that $Q_{h,\text{ground}} = g_{\text{ground}} \cdot \Delta q$.
The liquid water flux $E_{\text{ground}}$ is then:
\[\begin{equation} E_{\text{ground}} = Q_{h,\text{ground}} \cdot \frac{\rho_a}{\rho_w} \quad \text{[m/s]}. \end{equation}\]
The resistance factor $\beta$ is computed from soil moisture in the upper layer: $\beta = 1$ when soil is wet (at field capacity) and $\beta \to 0$ as soil dries.
Transpiration
Plant transpiration occurs through stomata and is controlled by stomatal conductance. The kinematic humidity flux for transpiration $Q_{h,\text{trp}}$ is:
\[\begin{equation} Q_{h,\text{trp}} = \frac{\Delta q}{r_a + r_s} \quad \text{[m/s]}, \end{equation}\]
where $r_s = 1 / g_w$ is the stomatal resistance (s/m) and $g_w$ is the stomatal conductance (m/s) (computed from photosynthesis; see Stomatal conductance).
The transpiration vapor conductance is computed as
\[\begin{equation} g_{\text{trp}} = \frac{1}{r_a + r_s} \quad \text{[m/s]}, \end{equation}\]
so that $Q_{h,\text{trp}} = g_{\text{trp}} \cdot \Delta q$.
The liquid water flux $E_{\text{trp}}$ is then:
\[\begin{equation} E_{\text{trp}} = Q_{h,\text{trp}} \cdot \frac{\rho_a}{\rho_w} \quad \text{[m/s]}. \end{equation}\]
High stomatal conductance (when photosynthetically active) leads to low stomatal resistance and high transpiration. This creates a strong coupling between carbon uptake (photosynthesis) and water loss (transpiration).
Total evapotranspiration
The PALADYN approach combines all three pathways in parallel. The total kinematic humidity flux is:
\[\begin{equation} Q_{h,\text{total}} = Q_{h,\text{can}} + Q_{h,\text{ground}} + Q_{h,\text{trp}} \quad \text{[m/s]}, \end{equation}\]
which is converted to latent heat flux for the surface energy balance:
\[\begin{equation} H_l = \rho_a \, L_v \, Q_{h,\text{total}} \quad \text{[W/m²]}, \end{equation}\]
where $L_v$ is the latent heat of vaporization (J/kg).
The total liquid water flux (sum of component liquid water fluxes) is used as a source/sink in soil hydrology:
\[\begin{equation} E_{\text{total}} = E_{\text{can}} + E_{\text{ground}} + E_{\text{trp}} \quad \text{[m/s]}. \end{equation}\]
Evaporation flux computation
All evapotranspiration pathways share a unified functional form for the kinematic humidity flux:
\[\begin{equation} Q_h = \Delta q \cdot g \quad \text{[m/s]}, \end{equation}\]
where $\Delta q$ [kg/kg] is the specific humidity difference and $g$ [m/s] is the vapor conductance specific to each pathway. The unified function humidity_flux handles all three pathways:
Terrarium.humidity_flux — Function
humidity_flux(
_::Terrarium.AbstractEvapotranspiration,
Δq,
g
) -> Any
Compute an evapotranspiration flux (m/s, positive upwards) as the product of a vapor conductance g (m/s) and a specific humidity difference Δq (kg/kg).
Note: The function returns $Q_h$ (kinematic humidity flux). To obtain the liquid water mass flux $E$ for soil hydrology, multiply by the density ratio $\rho_a/\rho_w$ as shown in the equations above.
Conductance functions
The vapor conductances for each pathway are computed separately and stored as auxiliary fields during the compute_auxiliary! pass. These conductances are skin-temperature-independent (held fixed during the surface energy balance solve).
Transpiration conductance
Terrarium.transpiration_conductance — Function
transpiration_conductance(
_::PALADYNCanopyEvapotranspiration{NF},
rₐ,
g_stm
) -> Any
Compute the transpiration vapor conductance [m/s] from aerodynamic resistance rₐ and stomatal conductance g_stm. The transpiration flux is this conductance times the humidity gradient.
Canopy evaporation conductance
Terrarium.canopy_evaporation_conductance — Function
canopy_evaporation_conductance(
_::PALADYNCanopyEvapotranspiration,
f_can,
rₐ
) -> Any
Compute the canopy evaporation vapor conductance [m/s] from the current canopy saturation fraction f_can and aerodynamic resistance rₐ.
Ground evaporation conductance
Terrarium.ground_evaporation_conductance — Function
ground_evaporation_conductance(
_::BareGroundEvaporation,
β,
rₐ
) -> Any
ground_evaporation_conductance(
_::PALADYNCanopyEvapotranspiration,
β,
rₐ,
rₐ_can
) -> Any
Compute the ground evaporation conductance from the given resistance factor β and aerodynamic resistances.
Ground resistance parameterizations
The ground evaporation resistance factor $\beta$ is computed from soil moisture using parameterizations of AbstractGroundEvaporationResistanceFactor:
Terrarium.ConstantEvaporationResistanceFactor — Type
struct ConstantEvaporationResistanceFactor{NF} <: Terrarium.AbstractGroundEvaporationResistanceFactorRepresents a spatiotemporally constant ground evaporation resistance factor.
Terrarium.SoilMoistureResistanceFactor — Type
struct SoilMoistureResistanceFactor{NF} <: Terrarium.AbstractGroundEvaporationResistanceFactorImplements the soil moisture limiting resistance factor of [28],
\[\beta = \frac{1}{4} \left[1 - \cos\left(π \theta_1/\theta_{\text{fc}} \right)\right] \quad \text{for } \theta_1 < \theta_{\text{fc}}\]
otherwise $\beta=1$.
References
- [28] Lee and Pielke, Journal of Applied Meteorology (1992)
Terrarium.ground_evaporation_resistance_factor — Function
ground_evaporation_resistance_factor(i, j, grid, fields, :AbstractGroundEvaporationResistanceFactor, args...)Compute the resistance factor against ground evaporation [-] based on the current state and implementation-specific process dependencies in args.
Process interface
Terrarium.compute_auxiliary! — Method
compute_auxiliary!(
state,
grid,
evaporation::BareGroundEvaporation,
::NoCanopyInterception,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere
)
compute_auxiliary!(
state,
grid,
evaporation::BareGroundEvaporation,
::NoCanopyInterception,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
soil::Union{Nothing, Terrarium.AbstractSoil}
)
compute_auxiliary!(
state,
grid,
evaporation::BareGroundEvaporation,
::NoCanopyInterception,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
soil::Union{Nothing, Terrarium.AbstractSoil},
snow::Union{Nothing, Terrarium.AbstractSnow}
)
Terrarium.compute_auxiliary! — Method
compute_auxiliary!(
state,
grid,
evapotranspiration::PALADYNCanopyEvapotranspiration,
interception::Terrarium.AbstractCanopyInterception,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
soil::Terrarium.AbstractSoil,
vegetation::Terrarium.AbstractVegetation,
args...
)
Coupling to soil hydrology
Subtypes of AbstractEvapotranpsiration automatically inherit a default implementation of the forcing interface for SoilHydrology, which computes the contribution of ET to the soil moisture tendency of the uppermost soil layer using ground_evapotranspiration_flux.
Terrarium.forcing — Method
forcing(
i,
j,
k,
grid,
clock,
fields,
evapotranspiration::Terrarium.AbstractEvapotranspiration,
_::Terrarium.AbstractSoilHydrology,
args...
) -> Any
Compute and return the evapotranspiration forcing for soil moisture at the given indices i, j, k. The ET forcing is just the ground_evapotranspiration_flux rescaled by the thickness of layer k.
Kernel functions
Terrarium.ground_evapotranspiration_flux — Function
ground_evapotranspiration_flux(i, j, grid, fields, ::AbstractEvapotranspiration)Return the total ground evapotranspiration flux [m/s], i.e. ground evaporation + plant transpiration, at cell i, j based on the current state.
Terrarium.compute_surface_humidity_flux — Function
compute_surface_humidity_flux(
i,
j,
grid,
fields,
evaporation::BareGroundEvaporation,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
args...
) -> Any
Evaluate the bare-ground, kinematic surface humidity flux [m/s] from the current skin temperature and evaporation conductance in fields.
compute_surface_humidity_flux(
i,
j,
grid,
fields,
evtr::PALADYNCanopyEvapotranspiration,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
args...
) -> Any
Compute the kinematic surface humidity flux [m/s] from the current skin temperature and conductances in fields.
Terrarium.compute_surface_humidity_fluxes — Function
Compute unscaled transpiration, evaporation_ground, and evaporation_canopy fluxes on grid. Following the implementation of PALADYN, Qh_can is clamped to be strictly positive (no canopy dew formation).
Terrarium.compute_evapotranspiration_conductances! — Function
compute_evapotranspiration_conductances!(
out,
i,
j,
grid,
fields,
evaporation::BareGroundEvaporation,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere
) -> Any
compute_evapotranspiration_conductances!(
out,
i,
j,
grid,
fields,
evaporation::BareGroundEvaporation,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
soil::Union{Nothing, Terrarium.AbstractSoil}
) -> Any
Compute and store the skin-driven ground evaporation vapor conductance on grid for the given bare-ground evaporation scheme.
compute_evapotranspiration_conductances!(
out,
i,
j,
grid,
fields,
evapotranspiration::PALADYNCanopyEvapotranspiration,
interception::Terrarium.AbstractCanopyInterception,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
soil::Terrarium.AbstractSoil,
vegetation::Terrarium.AbstractVegetation,
args...
) -> Any
Compute and store the skin-driven vapor conductances on grid for the given scheme evapotranspiration and process dependencies.
Terrarium.compute_evapotranspiration_fluxes! — Function
Compute transpiration, evaporation_ground, and evaporation_canopy fluxes on grid for the given scheme evapotranspiration and process dependencies.