Photosynthesis
Leaf and Environment Structures
To model photosynthesis more efficiently, we use a container (Leaf
struct) to store the photosynthesis-related information. For example, many of the physiological parameters are temperature-dependent, but these temperature-dependent values only need to be updated when leaf temperature changes. Therefore, use of the container significantly reduces the time required when programing leaf gas exchange prognostically. The Leaf
struct has the following fields:
Land.Photosynthesis.Leaf
— Typemutable struct Leaf{FT}
Struct to store leaf information.
Fields
T::AbstractFloat
: Temperature [K]
T_old::AbstractFloat
: Old Temperature [K]
, if not T, run leaftemperaturedependence!
Kd::AbstractFloat
: Rate constant for thermal dissipation
Kf::AbstractFloat
: Rate constant for fluorescence (const)
Kr::AbstractFloat
: Reversible NPQ rate constant (initially zero)
Ks::AbstractFloat
: Sustained NPQ rate constant (for seasonal changes, default is zero)
Kp::AbstractFloat
: Rate constant for photochemistry (all reaction centers open)
Kp_max::AbstractFloat
: Maximal Kp
maxPSII::AbstractFloat
: max PSII yield (Kr=0, all RC open)
PSII_frac::AbstractFloat
: Fraction of absorbed light used by PSII ETR
p_i::AbstractFloat
: Leaf internal CO₂ partial pressure [Pa]
p_s::AbstractFloat
: Leaf surface CO₂ partial pressure [Pa]
p_sat::AbstractFloat
: Saturation H₂O vapor pressure [Pa]
g_bc::AbstractFloat
: Leaf diffusive conductance to CO₂ [mol m⁻² s⁻¹]
g_lc::AbstractFloat
: Leaf diffusive conductance to CO₂ [mol m⁻² s⁻¹]
Ac::AbstractFloat
: RubisCO limited photosynthetic rate [μmol m⁻² s⁻¹]
Aj::AbstractFloat
: Light limited photosynthetic rate [μmol m⁻² s⁻¹]
Ag::AbstractFloat
: Gross photosynthetic rate [μmol m⁻² s⁻¹]
An::AbstractFloat
: Net photosynthetic rate [μmol m⁻² s⁻¹]
Ap::AbstractFloat
: Product limited photosynthetic rate [μmol m⁻² s⁻¹]
J::AbstractFloat
: Electron transport [μmol m⁻² s⁻¹]
J_pot::AbstractFloat
: Potential Electron Transport Rate [μmol m⁻² s⁻¹]
Jmax::AbstractFloat
: Maximal electron transport rate [μmol m⁻² s⁻¹]
Jmax25::AbstractFloat
: Maximal electron transport rate at 298.15 K [μmol m⁻² s⁻¹]
Kc::AbstractFloat
: RubisCO coefficient Kc [Pa]
Ko::AbstractFloat
: RubisCO coefficient Ko [Pa]
Kpep::AbstractFloat
: PEP coefficient Ko [Pa]
Km::AbstractFloat
: Michaelis-Menten's coefficient [Pa]
Rd::AbstractFloat
: Respiration rate [μmol m⁻² s⁻¹]
Rd25::AbstractFloat
: Respiration rate at 298.15 K [μmol m⁻² s⁻¹]
Vcmax::AbstractFloat
: Maximal carboxylation rate [μmol m⁻² s⁻¹]
Vcmax25::AbstractFloat
: Maximal carboxylation rate at 298.15 K [μmol m⁻² s⁻¹]
Vpmax::AbstractFloat
: Maximal PEP carboxylation rate [μmol m⁻² s⁻¹]
Vpmax25::AbstractFloat
: Maximal PEP carboxylation rate at 298.15 K [μmol m⁻² s⁻¹]
Γ_star::AbstractFloat
: CO₂ compensation point with the absence of Rd [Pa]
C_b₆f::AbstractFloat
: Total concentration of Cytochrome b₆f [μmol m⁻²]
k_q::AbstractFloat
: Maximal turnover rate of Cytochrome b₆f [e⁻ s⁻¹]
Vqmax::AbstractFloat
: Maximal Cytochrome b₆f activity [μmol e⁻ m⁻² s⁻¹]
K_D1::AbstractFloat
: Rate constant of consititutive heat loss from the antennae [s⁻¹]
K_F1::AbstractFloat
: rate constant of fluorescence [s⁻¹]
K_N1::AbstractFloat
: Rate constant of regulated heat loss for PS I [s⁻¹]
K_P1::AbstractFloat
: Rate constant of photochemistry for PS I [s⁻¹]
K_P2::AbstractFloat
: Rate constant of photochemistry for PS II [s⁻¹]
K_U2::AbstractFloat
: Rate constant of excitation sharing for PS II [s⁻¹]
α_1::AbstractFloat
: PPFD absorbed by PS I per incident PPFD
α_2::AbstractFloat
: PPFD absorbed by PS II per incident PPFD
ϵ_1::AbstractFloat
: Weighting factor for PS I
ϵ_2::AbstractFloat
: Weighting factor for PS II
φ_P1_max::AbstractFloat
: Maximal PS I photochemical yield
n_C::AbstractFloat
: Coupling efficiency of cyclic electron flow [mol ATP mol⁻¹ e⁻]
n_L::AbstractFloat
: Coupling efficiency of linear electron flow [mol ATP mol⁻¹ e⁻]
η::AbstractFloat
: ratio between JP700 and JP680
J_P680_a::AbstractFloat
: PS II electron transport rate [μmol e⁻ m⁻² s⁻¹]
J_P680_c::AbstractFloat
: Rubisco limited PS II electron transport rate [μmol e⁻ m⁻² s⁻¹]
J_P680_j::AbstractFloat
: Light limited PS II electron transport rate [μmol e⁻ m⁻² s⁻¹]
J_P680_p::AbstractFloat
: Product limited PS II electron transport rate [μmol e⁻ m⁻² s⁻¹]
J_P700_a::AbstractFloat
: PS I electron transport rate [μmol e⁻ m⁻² s⁻¹]
J_P700_c::AbstractFloat
: Rubisco limited PS I electron transport rate [μmol e⁻ m⁻² s⁻¹]
J_P700_j::AbstractFloat
: Light limited PS I electron transport rate [μmol e⁻ m⁻² s⁻¹]
J_P700_p::AbstractFloat
: Product limited PS I electron transport rate [μmol e⁻ m⁻² s⁻¹]
Jmax25WW::AbstractFloat
: Well watered maximal electron transport rate at 298.15 K [μmol m⁻² s⁻¹]
Rd25WW::AbstractFloat
: Well watered respiration rate at 298.15 K [μmol m⁻² s⁻¹]
Vcmax25WW::AbstractFloat
: Well watered maximal carboxylation rate at 298.15 K [μmol m⁻² s⁻¹]
Vpmax25WW::AbstractFloat
: Well watered maximal PEP carboxylation rate at 298.15 K [μmol m⁻² s⁻¹]
e2c::AbstractFloat
: Total efficiency, incl. photorespiration [mol CO₂ mol⁻¹ e-]
Fm::AbstractFloat
: dark adapted yield (Kp=0
)
Fm′::AbstractFloat
: light adapted yield (Kp=0
)
Fo::AbstractFloat
: dark-adapted fluorescence yield (Kp=max
)
Fo′::AbstractFloat
: light-adapted fluorescence yield in the dark (Kp=max
)
Ja::AbstractFloat
: Actual electron transport rate [μmol m⁻² s⁻¹]
NPQ::AbstractFloat
: Non-Photochemical quenching
qQ::AbstractFloat
: Photochemical quenching
qE::AbstractFloat
: energy quenching
φ::AbstractFloat
: PSII yield
φs::AbstractFloat
: Steady-state (light-adapted) yield (aka Fs)
APAR::AbstractFloat
: Absorbed photosynthetic active radiation [μmol m⁻² s⁻¹]
Also, environmental conditions are required to compute photosynthetic rate, and these conditions are stored in AirLayer
struct. An AirLayer
struct further allows for more conveniently modeling photosynthesis the vertical CO₂ and H₂O gradients in the canopy. The AirLayer
structs has the following fields:
Land.Photosynthesis.AirLayer
— Typemutable struct AirLayer{FT}
Struct to store environmental conditions in each air layer corresponds to one canopy layer.
Fields
t_air::AbstractFloat
: Air temperature [K]
p_a::AbstractFloat
: Atmospheric CO₂ partial pressure [Pa]
p_atm::AbstractFloat
: Atmospheric pressure [Pa]
p_H₂O::AbstractFloat
: Atmospheric vapor pressure [Pa]
p_O₂::AbstractFloat
: Atmospheric O₂ partial pressure [Pa]
p_sat::AbstractFloat
: Saturation vapor pressure [Pa]
RH::AbstractFloat
: Relatiev humidity
vpd::AbstractFloat
: Vapor pressure deficit [Pa]
wind::AbstractFloat
: Wind speed [m s⁻¹]
See exmaples below for how to create the structs
FT = Float32;
leaf = Leaf{FT}();
envir = AirLayer{FT}();
Temperature Dependency Structs
The temperature-dependent (TD) photosynthetic parameters include
- $J_\text{max}$ Maximal electron transport rate
- $K_\text{c}$ Michaelis constant for CO₂
- $K_\text{m}$ Michaelis-Menten's coefficient
- $K_\text{o}$ Michaelis constant for O₂
- $K_\text{pep}$ Michaelis constant for PEP carboxylation
- $R_\text{d}$ Dark respiration
- $V_\text{cmax}$ Maximal RuBP carboxylation rate
- $V_\text{omax}$ Maximal RuBP oxygenation rate
- $V_\text{pmax}$ Maximal PEP carboxylation rate
- $Γ^{*}$ CO₂ compensation point with the absence of dark respiration
There are two typical types of temperature dependencies using the classic Arrhenius equation. We define the three types as ArrheniusTD
, ArrheniusPeakTD
, and Q10TD
subject to AbstractTDParameterSet
type:
Land.Photosynthesis.AbstractTDParameterSet
— Typeabstract type AbstractTDParameterSet{FT}
Hierarchy of the AbstractTDParameterSet
:
Land.Photosynthesis.ArrheniusTD
— Typestruct ArrheniusTD{FT}
An AbstractTDParameterSet
type struct using
\[corr = \exp \left( \dfrac{ΔHa}{R T_0} - \dfrac{ΔHa}{R T_1} \right)\]
Fields
VAL_25::AbstractFloat
: Uncorrected value at 298.15 K
ΔHa_to_R::AbstractFloat
: Ratio between ΔHa and R [K]
ΔHa_to_RT25::AbstractFloat
: Ratio between ΔHa and R*K_25
Land.Photosynthesis.ArrheniusPeakTD
— Typestruct ArrheniusPeakTD{FT}
An AbstractTDParameterSet
type struct using
\[corr = \exp \left( \dfrac{ΔHa}{R T_0} - \dfrac{ΔHa}{R T_1} \right) \cdot \dfrac{ 1 + \exp \left( \dfrac{S_v T_0 - H_d}{R T_0} \right) } { 1 + \exp \left( \dfrac{S_v T_1 - H_d}{R T_1} \right) }\]
Fields
ΔHa_to_RT25::AbstractFloat
: Ratio between ΔHa and R*K_25
ΔHd_to_R::AbstractFloat
: Ratio between ΔHd and R
ΔSv_to_R::AbstractFloat
: Ratio between ΔSv and R
C::AbstractFloat
: Correction factor C = 1 + exp( Sv/R + Hd/(RT0) )
Land.Photosynthesis.Q10TD
— Typestruct Q10TD{FT}
An AbstractTDParameterSet
type struct using
\[VAL = VAL_{REF} \left( \dfrac{T_1 - T_{REF}}}{10} \right)^{Q_{10}}\]
Fields
VAL_REF::AbstractFloat
: Uncorrected value at reference temperature
T_REF::AbstractFloat
: Reference temperature [K]
Q_10::AbstractFloat
: Power of Q10 correction
There are many published parameter sets for the various temperature dependencies, and to ease the modeling we predefined most of the structs:
Land.Photosynthesis.JmaxTDBernacchi
— FunctionArrheniusPeakTD
type Jmax TD
Land.Photosynthesis.JmaxTDCLM
— FunctionArrheniusPeakTD
type Jmax TD
Land.Photosynthesis.JmaxTDLeuning
— FunctionArrheniusPeakTD
type Jmax TD from Leuning's data
Land.Photosynthesis.KcTDBernacchi
— FunctionArrheniusTD
type Kc TD from Bernacchi's data
Land.Photosynthesis.KcTDCLM
— FunctionArrheniusTD
type Kc TD
Land.Photosynthesis.KoTDBernacchi
— FunctionArrheniusTD
type Ko TD from Bernacchi's data
Land.Photosynthesis.KoTDCLM
— FunctionArrheniusTD
type Ko TD
Land.Photosynthesis.KpepTDBoyd
— FunctionArrheniusTD
type Kpep TD from Boyd's data
Land.Photosynthesis.KpepTDCLM
— FunctionArrheniusTD
type Kpep TD
Land.Photosynthesis.Q10TDAngiosperm
— FunctionQ10TD
type Respiration TD for angiosperms per biomass
Land.Photosynthesis.Q10TDGymnosperm
— FunctionQ10TD
type Respiration TD for symnosperms per biomass
Land.Photosynthesis.RespirationTDBernacchi
— FunctionArrheniusTD
type Respiration TD from Bernacchi's data
Land.Photosynthesis.RespirationTDCLM
— FunctionArrheniusPeakTD
type Respiration TD
Land.Photosynthesis.VcmaxTDBernacchi
— FunctionArrheniusTD
type Vcmax TD from Bernacchi's data
Land.Photosynthesis.VcmaxTDCLM
— FunctionArrheniusPeakTD
type Vcmax TD
Land.Photosynthesis.VcmaxTDLeuning
— FunctionArrheniusPeakTD
type Vcmax TD from Leuning's data
Land.Photosynthesis.VomaxTDBernacchi
— FunctionArrheniusTD
type Vomax TD from Bernacchi's data
Land.Photosynthesis.VpmaxTDBoyd
— FunctionArrheniusPeakTD
type Vpmax TD from Boyd's data
Land.Photosynthesis.ΓStarTDBernacchi
— FunctionArrheniusTD
type $Γ^{*}$ TD from Bernacchi's data
Land.Photosynthesis.ΓStarTDCLM
— FunctionArrheniusTD
type Γ* TD
The TDs can be easily created using commands like
FT = Float32;
_td_1 = JmaxTDBernacchi(FT);
_td_2 = VcmaxTDCLM(FT);
However, be aware that these pre-defined TD structs are not mutable, to create customized TD struct, code like this will be useful
FT = Float32;
_td_1 = ArrheniusTD{FT}(1, 10000, 30);
_td_1 = ArrheniusPeakTD{FT}(1, 10000, 30, 1);
To further simplify the use of Photosynthesis module, we provide a few collections/structs of temperature dependencies as well as other parameter sets like FluoParaSet
. The structs are catergorized to C3ParaSet
and C4ParaSet
subject to an AbstractPhotoModelParaSet
type, and the structs are meant for modeling C3 photosynthesis and C4 photosynthesis, respectively.
Land.Photosynthesis.AbstractPhotoModelParaSet
— Typeabstract type AbstractPhotoModelParaSet{FT}
Hierarchy of the AbstractPhotoModelParaSet
:
Land.Photosynthesis.C3ParaSet
— Typemutable struct C3Paraset{FT}
Parameter sets for C3 photosynthesis.
Fields
JT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Jmax temperature dependency
KcT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Kc temperature dependency
KoT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Ko temperature dependency
ReT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Respiration temperature dependency
VcT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Vcmax temperature dependency
ΓsT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Γ_star temperature dependency
Flu::Land.Photosynthesis.AbstractFluoModelParaSet{FT} where FT<:AbstractFloat
: Fluorescence model
VR::AbstractFloat
: Vcmax25 and respiration correlation
Eff_1::AbstractFloat
: Coefficient 4.0/4.5 for NADPH/ATP requirement stochiometry, respectively
Eff_2::AbstractFloat
: Coefficient 8.0/10.5 for NADPH/ATP requirement stochiometry, respectively
Θ_J::AbstractFloat
: Smoothing factor for J
Land.Photosynthesis.C4ParaSet
— Typemutable struct C4ParaSet{FT}
Parameter sets for C3 photosynthesis.
Fields
KpT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Kpep temperature dependency
ReT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Respiration temperature dependency
VcT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Vcmax temperature dependency
VpT::Land.Photosynthesis.AbstractTDParameterSet{FT} where FT<:AbstractFloat
: Vpmax temperature dependency
Flu::Land.Photosynthesis.AbstractFluoModelParaSet{FT} where FT<:AbstractFloat
: Fluorescence model
VR::AbstractFloat
: Vcmax25 and respiration correlation
Again, to guarantee a quick start, we provided a few pre-defined parameter sets:
Land.Photosynthesis.C3Bernacchi
— FunctionC3ParaSet
type C3 photosynthesis using Bernacchi's data
Land.Photosynthesis.C3CLM
— FunctionC3ParaSet
type C3 photosynthesis using CLM5's data
Land.Photosynthesis.C4CLM
— FunctionC4ParaSet
type C4 photosynthesis using CLM5's data
Examples:
FT = Float32;
set_b = C3Bernacchi(FT);
set_3 = C3CLM(FT);
set_4 = C4CLM(FT);
Note it here that the C3ParaSet
and C4ParaSet
structs are mutable, and the fields can be changed to another non-mutable TD struct. We'd like to mention that in some cases, leaf respiration rate is not measured, and in this case, the dark respiration rate will be computed from $V_\text{cmax}$ using a multiplier
Land.Photosynthesis.VtoRCollatz
— FunctionA constant of 0.01
Land.Photosynthesis.VtoRDefault
— FunctionA constant of 0.015
Temperature Dependency
As mentioned above, temperature corrections only need to be done once per temperature change, and storing the temperature corrected values will significantly boost the code speed. Here we provide a few functions to change the stored values. First of all, all the temperature corrections are made with temperature_correction
:
Land.Photosynthesis.temperature_correction
— Functiontemperature_correction(
td_set::AbstractTDParameterSet{FT},
T::FT
) where {FT<:AbstractFloat}
A correction factor based on arrhenius's fitting procedure, given
td_set
ArrheniusTD
orArrheniusPeakTD
type structT
Leaf temperature in[K]
The equation used for ArrheniusTD
is
\[corr = \exp \left( \dfrac{ΔHa}{R T_0} - \dfrac{ΔHa}{R T_1} \right)\]
The equations used for ArrheniusPeakTD
are
\[corr = \exp \left( \dfrac{ΔHa}{R T_0} - \dfrac{ΔHa}{R T_1} \right) \cdot \dfrac{ 1 + \exp \left( \dfrac{S_v T_0 - H_d}{R T_0} \right) } { 1 + \exp \left( \dfrac{S_v T_1 - H_d}{R T_1} \right) }\]
The equation used for Q10TD
is
\[corr = \left( \dfrac{T_1 - T_\text{REF}}{10} \right)^{Q_{10}}\]
Second, depending on which physiological parameter to correct, some corrections use the VAL_25
field in the ArrheniusTD
, like $K_\text{c}$, $K_\text{o}$, and $K_\text{pep}$:
Land.Photosynthesis.photo_TD_from_set
— Functionphoto_TD_from_set(td_set::ArrheniusTD{FT}, T::FT) where {FT<:AbstractFloat}
photo_TD_from_set(td_set::Q10TD{FT}, T::FT) where {FT<:AbstractFloat}
Make temperature correction from parameter set, given
td_set
ArrheniusTD
type parameter set, which has aVAL_25
fieldT
Leaf temperature
Useful for Kc, Ko, Kpep, and $Γ^{*}$.
Some corrections use the reference values from the Leaf
struct, like $V_\text{cmax}$ and $J_\text{max}$:
Land.Photosynthesis.photo_TD_from_val
— Functionphoto_TD_from_val(
td_set::AbstractTDParameterSet{FT},
val::FT,
T::FT
) where {FT<:AbstractFloat}
Make temperature correction from a given value, given
td_set
ArrheniusTD
orArrheniusPeakTD
type structval
Uncorrected value at 298.15 KT
Leaf temperature
Useful for Vcmax, Vomax, Vpmax, Jmax, and Respiration.
The functions to make temperature corrections to each individual variables are
Land.Photosynthesis.leaf_jmax!
— Functionleaf_jmax!(td_set::AbstractTDParameterSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Update maximal electron transport rate at leaf temperature, given
td_set
AbstractTDParameterSet
type TD parameter setleaf
Leaf
type struct
Land.Photosynthesis.leaf_kc!
— Functionleaf_kc!(td_set::ArrheniusTD{FT}, leaf::Leaf{FT}) where {FT<:AbstractFloat}
Update Kc at leaf temperature, given
td_set
ArrheniusTD
type TD parameter setleaf
Leaf
type struct
Land.Photosynthesis.leaf_km!
— Functionleaf_km!(photo_set::C3ParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT}
) where {FT<:AbstractFloat}
Update Ko at leaf temperature, given
Land.Photosynthesis.leaf_ko!
— Functionleaf_ko!(td_set::ArrheniusTD{FT}, leaf::Leaf{FT}) where {FT<:AbstractFloat}
Update Ko at leaf temperature, given
td_set
ArrheniusTD
type TD parameter setleaf
Leaf
type struct
Land.Photosynthesis.leaf_kpep!
— Functionleaf_kpep!(td_set::ArrheniusTD{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Update Kpep at leaf temperature, given
td_set
ArrheniusTD
type TD parameter setleaf
Leaf
type struct
Land.Photosynthesis.leaf_rd!
— Functionleaf_rd!(td_set::AbstractTDParameterSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Update leaf dark respiration rate at leaf temperature, given
td_set
AbstractTDParameterSet
type TD parameter setleaf
Leaf
type struct
Land.Photosynthesis.leaf_vcmax!
— Functionleaf_vcmax!(td_set::AbstractTDParameterSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Update leaf maximal carboxylation rate at leaf temperature, given
td_set
AbstractTDParameterSet
type TD parameter setleaf
Leaf
type struct
Land.Photosynthesis.leaf_vpmax!
— Functionleaf_vpmax!(td_set::AbstractTDParameterSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Update leaf maximal PEP carboxylation rate at leaf temperature, given
td_set
AbstractTDParameterSet
type TD parameter setleaf
Leaf
type struct
Land.Photosynthesis.leaf_Γstar!
— Functionleaf_Γstar!(td_set::ArrheniusTD{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Update $Γ^{*}$ at leaf temperature, given
td_set
ArrheniusTD
type TD parameter setleaf
Leaf
type struct
Again to ease the coding, we provide a function to run all the temperature dependencies:
Land.Photosynthesis.leaf_temperature_dependence!
— Functionleaf_temperature_dependence!(
photo_set::AbstractPhotoModelParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT}
) where {FT<:AbstractFloat}
leaf_temperature_dependence!(
photo_set::AbstractPhotoModelParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT},
T::FT
) where {FT<:AbstractFloat}
Update the temperature dependent photosynthesis only, given
photo_set
AbstractPhotoModelParaSet
type parameter setleaf
Leaf
type structenvir
AirLayer
type structT
Given leaf temperature
Note it here that function leaf_temperature_dependence!
updates saturated vapor pressure from leaf temperature as well.
Example:
FT = Float32;
leaf = Leaf{FT}();
envir = AirLayer{FT}();
set_3 = C3CLM(FT);
leaf_temperature_dependence!(c3_set, leaf, envir);
leaf_temperature_dependence!(c3_set, leaf, envir, FT(300));
RubisCO-limited Photosynthesis
By default, Photosynthesis module computes gross photosynthetic rate as the minimal of the three:
- $A_\text{c}$ RubisCO-limited photosynthetic rate
- $A_\text{j}$ Light-limited photosynthetic rate
- $A_\text{p}$ Product-limited photosynthetic rate
If leaf internal CO₂ is known, $A_\text{c}$ (gross rate) can be computed using
Land.Photosynthesis.rubisco_limited_rate!
— Functionrubisco_limited_rate!(
photo_set::Union{C3Cytochrome{FT},C3ParaSet{FT}},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
rubisco_limited_rate!(
photo_set::C4ParaSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
rubisco_limited_rate!(
photo_set::C3ParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT}
) where {FT<:AbstractFloat}
Calculate the RubisCO limited photosynthetic rate, given
If total leaf diffusive conductance to CO₂ is known, $A_\text{c}$ can be computed analytically by solving the quadratic function. The calculation is done by adding an envir
to the function parameter list. Note it here that analytical solution using leaf diffusive conductance only applies to C3 photosynthesis as the RubisCO-limited rate for C4 plants is $V_\text{cmax}$.
Light-limited Photosynthesis
If leaf internal CO₂ is known, $A_\text{j}$ (gross rate) can be computed using
Land.Photosynthesis.light_limited_rate!
— Functionlight_limited_rate!(
photo_set::Union{C3Cytochrome{FT},C3ParaSet{FT}},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
light_limited_rate!(
photo_set::C4ParaSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
light_limited_rate!(
photo_set::C3ParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT}
) where {FT<:AbstractFloat}
Calculate the light limited photosynthetic rate, given
If total leaf diffusive conductance to CO₂ is known, $A_\text{j}$ can be computed analytically using the same function by adding an envir
to the parameter list. Note that this analytical solution using leaf diffusive conductance to CO2 only applies to C3 photosynthesis as the RubisCO-limited rate for C4 plants is the electron transport rate.
Be aware that leaf electron transport rate needs to be calculated before the light-limited rate:
Land.Photosynthesis.leaf_ETR!
— Functionleaf_ETR!(photo_set::AbstractPhotoModelParaSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Update the electron transport variables in the leaf struct, given
Product-limited Photosynthesis
If leaf internal CO₂ is known, $A_\text{p}$ (gross rate) can be computed using
Land.Photosynthesis.product_limited_rate!
— Functionproduct_limited_rate!(
photo_set::C3ParaSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
product_limited_rate!(
photo_set::C4ParaSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
product_limited_rate!(
photo_set::C4ParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT}
) where {FT<:AbstractFloat}
Calculate the product limited photosynthetic rate, given
If total leaf diffusive conductance to CO₂ is known, $A_\text{p}$ can be computed analytically by adding an envir
to the parameter list. Note it here that the calculation using leaf diffusive conductance to CO2 only applies to C4 photosynthesis as the RubisCO-limited rate for C4 plants is $V_\text{cmax}$/2.
Photosynthetic Rates
For empirical and optimization stomatal models, iterations are required to get the final solution as in StomataModels module. In this case, more conveniently computing photosynthetic rates for each leaf is preferable. In this case, leaf_photosynthesis!
is a better option:
Land.Photosynthesis.AbstractCalculationMode
— TypeLand.Photosynthesis.GCO₂Mode
— Typestruct GCO₂Mode <: AbstractCalculationMode
Calculate leaf photosynthesis using leaf internal CO₂ partial pressure
Land.Photosynthesis.PCO₂Mode
— Typestruct PCO₂Mode <: AbstractCalculationMode
Calculate leaf photosynthesis using total leaf diffusive conductance to CO₂
Land.Photosynthesis.leaf_photosynthesis!
— Functionleaf_photosynthesis!(
photo_set::AbstractPhotoModelParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT},
mode::PCO₂Mode
) where {FT<:AbstractFloat}
leaf_photosynthesis!(
photo_set::AbstractPhotoModelParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT},
mode::PCO₂Mode,
p_i::FT
) where {FT<:AbstractFloat}
leaf_photosynthesis!(
photo_set::C3ParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT},
mode::GCO₂Mode
) where {FT<:AbstractFloat}
leaf_photosynthesis!(
photo_set::C4ParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT},
mode::GCO₂Mode
) where {FT<:AbstractFloat}
leaf_photosynthesis!(
photo_set::AbstractPhotoModelParaSet{FT},
leaf::Leaf{FT},
envir::AirLayer{FT},
mode::GCO₂Mode,
g_lc::FT
) where {FT<:AbstractFloat}
Compute leaf photosynthetic rates, given
photo_set
AbstractPhotoModelParaSet
type parameter setleaf
Leaf
type structp_i
Given leaf internal CO₂envir
AirLayer
type structg_lc
Given leaf diffusive conductance to CO₂
The C3 photosynthesis model is from Farquhar et al. (1980) "A biochemical model of photosynthetic CO₂ assimilation in leaves of C3 species."
The C4 photosynthesis model is adapted from Collatz et al. (1992) "Coupled photosynthesis-stomatal conductance model for leaves of C4 plants."
Fluorescence
Photosynthesis module also provide ways to compute leaf fluorescence. By default, the modules uses fluorescence parameters from van del Tol et al. (2014) with struct FluorescenceVanDerTol
:
Land.Photosynthesis.AbstractFluoModelParaSet
— TypeLand.Photosynthesis.FluoParaSet
— Typemutable struct FluoParaSet{FT}
A AbstractFluoModelParaSet
type paramter set.
Fields
Kr1::AbstractFloat
: Fluorescence model coefficient
Kr2::AbstractFloat
: Fluorescence model coefficient
Kr3::AbstractFloat
: Fluorescence model coefficient
Land.Photosynthesis.FluorescenceVanDerTol
— FunctionFluoParaSet
type parameter set using all data
Land.Photosynthesis.FluorescenceVanDerTolDrought
— FunctionFluoParaSet
type parameter set using Flexas's data (drought)
The function that is used to compute fluorescene is
Land.Photosynthesis.leaf_fluorescence!
— Functionleaf_fluorescence!(
fluo_set::CytoFluoParaSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
leaf_fluorescence!(
fluo_set::FluoParaSet{FT},
leaf::Leaf{FT}
) where {FT<:AbstractFloat}
Compute fluorescence yield, Kr, Ks, and Kp for leaf, given
fluo_set
FluoParaSet
type parameter setleaf
Leaf
struct