Optimal LAI

Models and Parameters

ClimaLand.Canopy.ZhouOptimalLAIModel — Type
ZhouOptimalLAIModel{FT, OLPT <: OptimalLAIParameters{FT}, SA, RA, RDTH, HTH, TSH, T} <: 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 model
  • SAI: Stem area index (m^2 m^-2): prescribed (scalar or Field), or AreaIndexFromMaxLAI to follow the model's seasonal maximum LAI and tree share
  • RAI: Root area index (m^2 m^-2), prescribed or AreaIndexFromMaxLAI like SAI
  • rooting_depth: Rooting depth parameter (m) - a characteristic depth below which 1/e of the root mass lies
  • height: Canopy height (m) - can be scalar (uniform) or spatially-varying Field
  • tree_share: Tree share of the vegetation (dimensionless), which sets the unit cost of leaves (leaf_cost): prescribed (scalar or Field), or ClimateTreeShare() to compute it from the simulated climate (climate_tree_share)

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

source
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/E0 term following Zhou et al. (2025) Equation 11, where P is annual precipitation and E0 the annual transpiration of the 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.5

  • z_tree: Unit cost of constructing and maintaining tree leaves (mol m^-2 yr^-1): the leaf cost z of Zhou et al. (2025), fitted as 12.227 mol m^-2 yr^-1. See leaf_cost.

  • z_grass: Unit cost of grass leaves (mol m^-2 yr^-1), above that of trees: z includes the below-ground allocation that supplies the leaves, which is larger for grasses.

  • sigma: Ratio of the yearly sum of LAI to that of a square wave holding LAImax over the growing season (dimensionless), which sets the ratio m of the steady-state LAI to the steady-state GPP (`computem`); Zhou et al. (2025) fit 0.771. It does not prescribe the seasonal cycle of LAI, which follows the daily potential GPP.

  • alpha: Smoothing factor for exponential moving average (dimensionless, 0-1): LAI relaxes toward its steady state over 1/alpha days. Zhou et al. (2025) use 0.067, ~15 days of memory

  • f0_max: Peak fraction of annual precipitation available for transpiration (dimensionless, 0-1), reached at the energy-water limitation transition. The fraction actually used, f0 = f0_max * exp(-0.604 * ln^2(AI/1.9)) with AI the aridity index, falls off toward both extremes; Zhou et al. (2025) fit f0_max = 0.65. See f0_from_aridity.

  • 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.

  • c3c4_k: Steepness of the logistic mapping the proportional C4 GPP advantage to the expected C4 fraction (dimensionless), fitted by Lavergne et al. (2022).

  • c3c4_q: Midpoint of that logistic (dimensionless): the C4 GPP advantage at which C4 and C3 are equally expected.

  • tc_a: Coefficient a of the C3 tree-cover relation tc(g) = a·g^b + c, with g the annual C3 GPP (kg C m^-2 yr^-1).

  • tc_b: Exponent b of the tree-cover relation (dimensionless).

  • tc_c: Offset c of the tree-cover relation; negative, so tree cover vanishes below a threshold GPP.

  • tc_gpp_ref: Reference annual C3 GPP (kg C m^-2 yr^-1) normalizing the tree-cover relation: tc(g)/tc(tc_gpp_ref), clamped to [0, 1], is the C3 tree proportion.

  • tree_b0: Intercept of the logistic of the climate tree share (dimensionless); see climate_tree_share.

  • tree_b_lai: Coefficient of the LAI_max of a tree canopy in that logistic (m^-2 m^2).

  • tree_b_dry: Coefficient of the number of dry months in that logistic (month^-1).

  • tree_b_temp: Coefficient of the growing-season air temperature in that logistic (°C^-1).

  • tree_retention: Fraction of their LAI_max that trees keep through the unfavourable season (dimensionless): the evergreen and semi-evergreen part of their canopy.

  • maintenance_share: Share of the leaf cost that is maintenance, which accrues while the air is above freezing and with its temperature (dimensionless); see leaf_cost_scale.

  • maintenance_q10: Temperature sensitivity of that maintenance (dimensionless Q10).

source

Methods

ClimaLand.Canopy.compute_A0 — Function
compute_A0(
    fractional_c3::FT,
    parameters::PModelParameters{FT},
    constants::PModelConstants{FT},
    earth_param_set,
    T_air::FT,
    P_air::FT,
    q_air::FT,
    ca::FT,
    PPFD::FT,
    βm::FT,
) where {FT}

Compute the potential GPP (A0) 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, at the instantaneous vapor pressure deficit.

Arguments

  • fractional_c3::FT: C3 fraction, the weight of the pure-C3 potential GPP in the blend with the pure-C4 one (1 = all C3, 0 = all C4)
  • parameters: PModelParameters containing cstar, beta, etc.
  • constants: PModelConstants containing physical constants
  • earth_param_set: Additional physical constants
  • T_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)

Returns

  • NamedTuple with A0, the potential GPP with fAPAR=1 (mol C m^-2 s^-1), and the pure-C3 and pure-C4 potential GPP A0_c3/A0_c4 that the C3/C4 competition compares
source
ClimaLand.Canopy.potential_gpp_transpiration — Function
potential_gpp_transpiration(A0, T, P_air, ca, vpd, β, constants)

Transpiration (mol H2O, in the area and time units of A0) that goes with the potential GPP A0 (mol CO2) of one photosynthetic pathway: A0 / iWUE, with the intrinsic water use efficiency iWUE = ca (1 - χ) / (Drel D) (Zhou et al. 2025, Equations 4 and 5), the relative diffusivity of water vapour and CO2 Drel (1.6) of the P-model constants, and the optimal ratio of intercellular to ambient CO2 χ of unit cost ratio β (optimal_chi) at air temperature T (K), air pressure P_air (Pa), CO2 mixing ratio ca (mol mol^-1) and vapor pressure deficit vpd (Pa).

A canopy blends the GPP and stomatal conductance of pure C3 and pure C4 canopies with its C3 fraction, so its transpiration blends theirs, each with its own χ.

source
ClimaLand.Canopy.compute_L_steady_target — Function
compute_L_steady_target(A0_daily, k, A0_annual, z, GSL, sigma, precip_annual, f0, E0_annual)

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: compute_L_max, compute_m and compute_steady_state_LAI in turn. ZhouOptimalLAIModel computes the same target from its cached LAI_max, and its prognostic LAI relaxes toward it, so the acclimation alpha is applied there rather than here.

source
ClimaLand.Canopy.compute_L_max — Function
compute_L_max(Ao_annual, k, z, precip_annual, f0, E0_annual)

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 = f0*P/E0

Arguments

  • Ao_annual::FT: Annual total potential GPP (mol CO2 m^-2 yr^-1).
  • k::FT: Light extinction coefficient (dimensionless), typically 0.5
  • z::FT: Unit cost of constructing and maintaining leaves (mol m^-2 yr^-1); see leaf_cost
  • precip_annual::FT: Mean annual precipitation (mol H2O m^-2 yr^-1): the depth of liquid water times its molar density
  • f0::FT: Fraction of precipitation available for transpiration (dimensionless); see f0_from_aridity
  • E0_annual::FT: Annual transpiration of the potential GPP (mol H2O m^-2 yr^-1); see potential_gpp_transpiration

Returns

  • LAI_max::FT: Seasonal maximum leaf area index (m^2 m^-2)

Notes

The energy-limited fAPAR maximizes the carbon gain net of the leaf cost. The water-limited fAPAR is the one at which the canopy transpires f0*P. For a single photosynthetic pathway, E0 = A0 * Drel*D / (ca(1-chi)), with Drel = 1.6, and the water limit is f0*P/A0 * ca(1-chi)/(Drel*D), as in Zhou et al. (2025) Equation 11.

The energy limit is below 1, and negative where A0 < z/k: no leaf pays back its cost, and LAI_max is 0.

References

Zhou et al. (2025) Global Change Biology, Equation 11

source
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). ZhouOptimalLAIModel uses the trailing-year count of days above freezing; Zhou et al. (2025) use the 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.771
  • k::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

source
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), from compute_m()
  • k::FT: Light extinction coefficient (dimensionless), typically 0.5
  • LAI_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

source
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.36788
  • maxiter::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"

source