Optimal LAI
Models and Parameters
ClimaLand.Canopy.ZhouOptimalLAIModel — Type
ZhouOptimalLAIModel{FT, OLPT <: OptimalLAIParameters{FT}, GD, RDTH, HTH} <: AbstractBiomassModel{FT}An implementation of the optimal LAI model from Zhou et al. (2025) as a biomass model.
This model computes LAI dynamically based on optimality principles, balancing energy and water constraints. LAI is prognostic, in Y.canopy.biomass.LAI, and is mirrored into p.canopy.biomass.area_index.leaf for the rest of the canopy, consistent with PrescribedBiomassModel.
Fields
parameters: Required parameters for the optimal LAI modeloptimal_lai_inputs: NamedTuple with the spatially varying inputs of the LAImax and steady-state-LAI formulas: GSL (growing season length in days), vpdgs (growing-season mean VPD in Pa), and f0 (fraction of precip for transpiration). Typically created usingoptimal_lai_inputs, which reads them alongside the initial conditions.SAI: Prescribed stem area index (m^2 m^-2)RAI: Prescribed root area index (m^2 m^-2)rooting_depth: Rooting depth parameter (m) - a characteristic depth below which 1/e of the root mass liesheight: Canopy height (m) - can be scalar (uniform) or spatially-varying Field
References
Zhou et al. (2025) "A General Model for the Seasonal to Decadal Dynamics of Leaf Area" Global Change Biology. https://onlinelibrary.wiley.com/doi/pdf/10.1111/gcb.70125
ClimaLand.Canopy.OptimalLAIParameters — Type
OptimalLAIParameters{FT<:AbstractFloat}The required parameters for the optimal LAI model based on Zhou et al. (2025).
Water limitation is handled through the f0*P/A0 term following Zhou et al. (2025) Equation 11, where P is annual precipitation and A0 is annual potential GPP.
References
Zhou et al. (2025) "A General Model for the Seasonal to Decadal Dynamics of Leaf Area" Global Change Biology. https://onlinelibrary.wiley.com/doi/pdf/10.1111/gcb.70125
k: Light extinction coefficient (dimensionless), typically 0.5z: Unit cost of constructing and maintaining leaves (mol m^-2 yr^-1), globally fitted as 12.227 mol m^-2 yr^-1sigma: Dimensionless parameter representing departure from square-wave LAI dynamics, globally fitted as 0.771alpha: Smoothing factor for exponential moving average (dimensionless, 0-1). Set to 0.067 for ~15 days of memoryf0: Fraction of annual precipitation available for transpiration (dimensionless, 0-1). Following Zhou et al. (2025), f0 = 0.65 at the energy-water limitation transition. In arid regions, f0 can be lower: f0 = 0.65 * exp(-0.604 * ln^2(AI/1.9)) where AI is aridity index. Default value 0.65 assumes optimal water use efficiency.tau_long_term: Long-term memory timescale (s) of the A0 and precipitation running-mean annual totals that set LAI_max and the steady-state LAI. Default 2 years; a longer value filters the seasonal cycle more strongly, avoiding aliasing of the annual cycle.
ClimaLand.Canopy.OptimalLAIParameters — Method
OptimalLAIParameters{FT}(toml_dict::CP.ParamDict) where {FT}Creates an OptimalLAIParameters object from a TOML parameter dictionary.
Methods
ClimaLand.Canopy.compute_A0_and_χ — Function
compute_A0_and_χ(
fractional_c3::FT,
parameters::PModelParameters{FT},
constants::PModelConstants{FT},
T_air::FT,
P_air::FT,
VPD::FT,
ca::FT,
PPFD::FT,
βm::FT,
vpd_gs::FT,
) where {FT}Compute potential GPP (A0) and ci/ca ratio used in the optimal LAI model (Zhou et al. 2025).
This function computes the potential GPP assuming fAPAR = 1 (full light absorption), which represents the maximum carbon assimilation possible under given environmental conditions.
A0 responds to the instantaneous vapor pressure deficit, while χ is the growing-season value the water-limitation term of LAI_max calls for, and so is evaluated at the growing-season mean VPD vpd_gs. Both share the same optimal ξ, which depends on temperature and pressure only.
Arguments
fractional_c3::FT: Photosynthesis mechanism (1 for C3, 0 for C4)parameters: PModelParameters containing cstar, beta, etc.constants: PModelConstants containing physical constantsearth_param_set: Additional physical constantsT_air::FT: Air temperature (K)P_air::FT: Atmospheric pressure (Pa)q_air::FT: Atmospheric specific humidity (kg/kg)ca::FT: Ambient CO2 concentration (mol/mol)PPFD::FT: Downwelling radiative flux in PAR band at the surface (moles photons/m^2/s)βm::FT: Soil moisture stress factor (dimensionless, 0-1)vpd_gs::FT: Growing-season mean vapor pressure deficit (Pa)
Returns
- NamedTuple with
A0, the potential GPP with fAPAR=1 (mol C m^-2 s^-1), andχ = ci/caat the growing-season VPD (unitless)
ClimaLand.Canopy.compute_L_steady_target — Function
compute_L_steady_target(A0_daily, k, A0_annual, z, GSL, sigma, precip_annual, f0, ca_pa, chi, vpd_gs)Compute the steady-state LAI target L_steady (Zhou et al. 2025 Eqs. 11-15) from the daily and annual potential GPP and the water-limitation inputs, without the Eq. 16 acclimation lag. The prognostic LAI relaxes toward this target in the biomass tendency, so the acclimation alpha is applied there rather than here.
ClimaLand.Canopy.compute_L_max — Function
compute_L_max(Ao_annual, k, z, precip_annual, f0, ca_pa, chi, vpd_gs)Compute seasonal maximum leaf area index (LAI_max) based on annual potential GPP and water availability, following Zhou et al. (2025) Equation 11.
LAI_max is determined by the minimum of energy-limited and water-limited fAPAR:
- Energy-limited: fAPAR_energy = 1 - z/(k*A0)
- Water-limited: fAPAR_water = f0P/A0 * (ca(1-chi))/(1.6D)
Arguments
Ao_annual::FT: Annual total potential GPP (mol CO2 m^-2 yr^-1).k::FT: Light extinction coefficient (dimensionless), typically 0.5z::FT: Unit cost of constructing and maintaining leaves (mol m^-2 yr^-1), 12.227precip_annual::FT: Mean annual precipitation (mol H2O m^-2 yr^-1)f0::FT: Fraction of precipitation available for transpiration (dimensionless), 0.65ca_pa::FT: Ambient CO2 partial pressure (Pa), typically ~40 Pa at 400 ppmchi::FT: Optimal ratio of intercellular to ambient CO2 (dimensionless), typically 0.7-0.8vpd_gs::FT: Mean vapor pressure deficit during growing season (Pa)
Returns
LAI_max::FT: Seasonal maximum leaf area index (m^2 m^-2)
Notes
Following Zhou et al. (2025) Equation 11:
fAPAR_max = min{1 - z/(k*A0), f0*P/A0 * (ca(1-chi))/(1.6*D)}The first term is energy-limited (carbon gain vs leaf cost trade-off). The second term is water-limited (precipitation constrains transpiration, scaled by intrinsic water use efficiency iWUE = ca(1-chi)/(1.6*D)).
The iWUE factor converts water flux to carbon flux:
- ca(1-chi): CO2 drawdown from ambient to intercellular (Pa)
- 1.6*D: VPD adjusted for CO2/H2O diffusivity ratio (Pa)
References
Zhou et al. (2025) Global Change Biology, Equation 11
ClimaLand.Canopy.compute_m — Function
compute_m(GSL, LAI_max, Ao_annual, sigma, k)Compute the parameter m, which represents the ratio of steady-state LAI to steady-state GPP.
This implements Equation 20 from Zhou et al. (2025). The parameter m quantifies the relationship between LAI and GPP dynamics, representing the extent to which seasonal LAI dynamics depart from a "square wave" (where maximum LAI would be maintained throughout the growing season).
Arguments
GSL::FT: Growing season length (days). Defined as the length of continuous period above 0C longer than 5 days.LAI_max::FT: Seasonal maximum leaf area index (m^2 m^-2, dimensionless)Ao_annual::FT: Annual total potential GPP (mol m^-2 yr^-1). This is the integral of daily A0 over the year.sigma::FT: Dimensionless parameter representing departure from square-wave LAI dynamics. Globally fitted as sigma = 0.771k::FT: Light extinction coefficient (dimensionless)
Returns
m::FT: Parameter relating steady-state LAI to steady-state GPP (dimensionless, units work out as: days * m^2 m^-2 / (mol m^-2 yr^-1 * dimensionless) with implicit conversion)
References
Zhou et al. (2025) Global Change Biology, Equation 20
ClimaLand.Canopy.compute_steady_state_LAI — Function
compute_steady_state_LAI(Ao_daily, m, k, LAI_max)Compute steady-state LAI from daily potential GPP using the Lambert W function solution.
This implements Equations 13-15 from Zhou et al. (2025). The steady-state LAI (L_s) is the LAI that would be in equilibrium with GPP if weather conditions were held constant. Given daily meteorological conditions, this is computed on a daily basis.
Arguments
Ao_daily::FT: Daily potential GPP (mol m^-2 day^-1). This is the GPP that would be achieved if fAPAR = 1, calculated from LUE * PPFD.m::FT: Parameter relating steady-state LAI to steady-state GPP (dimensionless), fromcompute_m()k::FT: Light extinction coefficient (dimensionless), typically 0.5LAI_max::FT: Seasonal maximum LAI constraint (m^2 m^-2, dimensionless)
Returns
L_steady::FT: Steady-state leaf area index (m^2 m^-2, dimensionless). Always >= 0.
Notes
The solution uses the Lambert W0 function: Ls = min{mu + (1/k)W0[-kmuexp(-k*mu)], LAImax} where mu = m * A0. The result is constrained to be non-negative and below LAI_max.
References
Zhou et al. (2025) Global Change Biology, Equations 13-15
ClimaLand.Canopy.lambertw0 — Function
lambertw0(x::T; maxiter::Int = 8) where {T<:AbstractFloat}Compute the principal branch (W0) of the Lambert W function for x in [-1/e, Inf).
This is a GPU-device-friendly implementation using a fixed number of Halley iterations. The Lambert W function satisfies W(x)*exp(W(x)) = x.
Arguments
x::T: Input value, must be >= -1/e ~ -0.36788maxiter::Int: Maximum number of Halley iterations (default: 8; Halley's method has cubic convergence, so 8 is generous)
Returns
W::T: Lambert W0(x), the principal branch value, or NaN for invalid inputs
Algorithm
Uses Halley's method with a fixed number of iterations for GPU compatibility:
- No dynamic memory allocation
- No conditional breaks (runs all iterations)
- Broadcastable for use with CuArrays: lambertw0.(cuarray)
Device Compatibility
This implementation is designed to work on both CPU and GPU:
- All operations are scalar and supported on CUDA.jl
- No array allocations or dynamic loops
- Type-generic over AbstractFloat (Float32, Float64)
References
Corless et al. (1996) "On the Lambert W function"