Turbulent fluxes
This page is a work in progress. If you have any questions or notice any errors, please raise an issue.
Overview
Turbulent motion in the atmosphere transports heat away from the surface. Two primary mechanisms are involved: the sensible heat flux due to the temperature gradient between the atmosphere and land surface, and the latent heat flux (from evaporation, transpiration, and sublimation).
The surface energy budget partitioning strongly depends on the strength of these fluxes:
- Strong winds and atmospheric instability → large turbulent fluxes
- Calm conditions and stable boundary layer → weak turbulent fluxes
The coupling between the turbulent fluxes and atmospheric conditions are primarily captured through aerodynamic resistance (or equivalently conductance) terms that approximate the instantaneous resistance of the land surface to energy losses due to turbulent effects.
Implementations
Terrarium.PrescribedTurbulentFluxes — Type
struct PrescribedTurbulentFluxes{NF} <: Terrarium.AbstractTurbulentFluxes{NF}Represents the simplest case where the turbulent (sensible and latent) heat fluxes are prescribed via input variables.
Terrarium.DiagnosedTurbulentFluxes — Type
struct DiagnosedTurbulentFluxes{NF} <: Terrarium.AbstractTurbulentFluxes{NF}Represents the standard case where the turbulent (sensible and latent) heat fluxes are diagnosed from atmosphere and soil conditions.
Sensible heat flux
Sensible heat is transported by the mean wind and turbulent eddies using bulk aerodynamic theory:
\[\begin{equation} H_s = c_a \rho_a \frac{\Delta T}{r_a} \end{equation}\]
where $c_a$ is the specific heat capacity of moist air (J/kg/K) and $\rho_a$ is the moist air density (kg/m³), both computed dynamically based on the local atmosphere state using Thermodynamics.jl. $\Delta T = T_s - T_a$ is the temperature difference (K) (positive if surface warmer than air), and $r_a$ is the aerodynamic resistance (s/m). $H_s$ is positive when surface is warmer than air (heat flows upward), and negative when surface is cooler (heat flows downward).
Latent heat flux
Evaporation and sublimation remove heat from the surface through the latent heat pathway. It is driven by the specific humidity difference $\Delta q$ (kg/kg), equivalent with the vapor pressure difference $\Delta e$ (Pa), between the surface and atmosphere. Under the typical assumption that the land surface is saturated (see e.g. [23]), the vapor pressure difference is computed as:
\[\begin{equation} \Delta e = e_s - e_a = e_{\text{sat}}(T_s) - e_a(q_a, p) \end{equation}\]
with $T_s$ the skin temperature. The specific humidity difference $\Delta q$ is
\[\begin{equation} \Delta q = q_s - q_a = q_{\text{sat}}(T_s) - q_a \end{equation}\]
with $q_{\text{sat}}$ the saturation specific humidity at the surface temperature and $q_a$ the specific humidity of the atmosphere.
The latent heat flux is then computed as:
\[\begin{equation} H_l = L \rho_a \frac{\Delta q}{r_a} \end{equation}\]
where $L$ is the latent heat of vaporization or sublimation (J/kg). $H_l$ is always non-negative (≥ 0) and represents energy lost due to evaporation, transpiration, or sublimation. Currently, condensation (dew formation) is neglected so $\Delta q \geq 0$ and negative latent heat fluxes cannot occur.
The latent heat flux is directly tied to:
- Vegetation: Transpiration through stomata (see Photosynthesis)
- Soil moisture: Availability of water for evaporation (see Soil hydrology)
- Surface roughness: Vegetation height affects aerodynamic properties
Diagnosed turbulent fluxes
Terrarium.DiagnosedTurbulentFluxes — Type
struct DiagnosedTurbulentFluxes{NF} <: Terrarium.AbstractTurbulentFluxes{NF}Represents the standard case where the turbulent (sensible and latent) heat fluxes are diagnosed from atmosphere and soil conditions.
Prescribed turbulent fluxes
Terrarium.PrescribedTurbulentFluxes — Type
struct PrescribedTurbulentFluxes{NF} <: Terrarium.AbstractTurbulentFluxes{NF}Represents the simplest case where the turbulent (sensible and latent) heat fluxes are prescribed via input variables.
Process interface
Terrarium.compute_auxiliary! — Method
compute_auxiliary!(
state,
grid,
tur::DiagnosedTurbulentFluxes,
seb::Terrarium.AbstractSurfaceEnergyBalance,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere,
args...
)
Methods
Terrarium.compute_sensible_heat_flux — Function
compute_sensible_heat_flux(
_::DiagnosedTurbulentFluxes,
Q_T,
ρₐ,
cₐ
) -> Any
Compute the sensible heat flux [W/m²] as a function of the bulk aerodynamic temperature gradient Q_T [K m/s] and the density ρₐ [kg/m³] and specific heat capacity cₐ [J/kg K] of air.
compute_sensible_heat_flux(
i,
j,
grid,
fields,
tur::DiagnosedTurbulentFluxes,
skinT::Terrarium.AbstractSkinTemperature,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere
) -> Any
Compute the sensible heat flux at i, j based on the current skin temperature and atmospheric conditions.
Terrarium.compute_latent_heat_flux — Function
compute_latent_heat_flux(
_::DiagnosedTurbulentFluxes,
Q_h,
ρₐ,
L
) -> Any
Compute the latent heat flux as a function of the humidity flux Q_h [m/s], the density ρₐ [kg/m³] of air, and the specific latent heat of vaporization or sublimation L [J/kg].
compute_latent_heat_flux(
i,
j,
grid,
fields,
tur::DiagnosedTurbulentFluxes,
skinT::Terrarium.AbstractSkinTemperature,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere
) -> Any
Compute the bare ground latent heat flux at i, j based on the current skin temperature and atmospheric conditions. This implementation assumes that evaporation is the only contributor to the latent heat flux.
compute_latent_heat_flux(
i,
j,
grid,
fields,
tur::DiagnosedTurbulentFluxes,
evtr::Terrarium.AbstractEvapotranspiration,
constants::PhysicalConstants,
atmos::Terrarium.AbstractAtmosphere
) -> Any
Compute the latent heat flux at i, j based on the given evapotranspiration scheme. This implementation derives the latent heat flux from the surface_humidity_flux defined by evtr which is assumed to be already computed.
Terrarium.vapor_pressure_difference — Function
vapor_pressure_difference(
c::ThermodynamicConstants,
p,
q_air,
T
) -> Any
Computes the difference in vapor pressure between a saturated surface at temperature T [°C] and the atmosphere, defined by its specific humidity q_air [kg/kg] and pressure p [Pa]. Relies on Thermodynamics.jl via partial_pressure_vapor and saturation_vapor_pressure.
Terrarium.specific_humidity_difference — Function
specific_humidity_difference(
c::ThermodynamicConstants,
p,
q_air,
T
) -> Any
Computes the difference in specific humidity between a saturated surface at temperature T [°C] and the atmosphere, defined by its specific humidity q_air [kg/kg] and pressure p [Pa].
Kernel functions
Terrarium.compute_vapor_pressure_difference — Method
compute_vapor_pressure_difference(
i,
j,
grid,
fields,
atmos::Terrarium.AbstractAtmosphere,
c::PhysicalConstants,
T
) -> Any
Computes the vapor pressure difference [Pa] between a saturated surface at temperature T [°C] and the current atmospheric fields.
Terrarium.compute_specific_humidity_difference — Method
compute_specific_humidity_difference(
i,
j,
grid,
fields,
atmos::Terrarium.AbstractAtmosphere,
c::PhysicalConstants,
T
) -> Any
Computes the specific humidity difference [kg/kg] between a saturated surface at temperature T [°C] and the current atmospheric fields.
References
- [23]
- S. Zhou and B. Yu. Physical basis of the potential evapotranspiration and its estimation over land. Journal of Hydrology 641, 131825 (2024).