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 air (J/kg/K), $\rho_a$ is the air density (kg/m³), $\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:
\[\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) and $\Delta q = q_{\text{sat}}(T_s) - q_a$ is the specific humidity gradient (kg/kg) derived from the vapor pressure deficit. $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,
atmos::Terrarium.AbstractAtmosphere,
constants::PhysicalConstants,
args...
)
Methods
Terrarium.compute_sensible_heat_flux — Function
compute_sensible_heat_flux(
_::DiagnosedTurbulentFluxes,
Q_T,
ρₐ,
cₐ
) -> Any
Compute the sensible heat flux 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,
atmos::Terrarium.AbstractAtmosphere,
constants::PhysicalConstants
) -> 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,
ρₐ,
Lsl
) -> 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 fusion Lsl [J/kg].
compute_latent_heat_flux(
i,
j,
grid,
fields,
tur::DiagnosedTurbulentFluxes,
skinT::Terrarium.AbstractSkinTemperature,
atmos::Terrarium.AbstractAtmosphere,
constants::PhysicalConstants
) -> Any
Compute the bare ground latent heat flux at i, j based on the current skin temperature and atmospheric conditions. This imlementation 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
) -> 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.