Photosynthesis.jl
Installation
using Pkg;
Pkg.add("Photosynthesis");About
Photosynthesis models for C3 and C4 photosynthesis. Photosynthesis.jl supports foour photosynthesis models and three fluorescence models. The photosynthesis models are
- C3-Jmax model based on classic C3 model, which is known as FvCB model (Farquhar et al. 1980)
- C3-Vqmaxe model based on a new C3 model developed by Johnson and Berry (2021)
- C4-Vcmax model based on classic C4 model, which is known as Collaz model (Collaz et al. 1992)
- C4-Vpmax model based on PEP activity as in Boyd et al. (2015)
We, however, made some modifications by adding a product limited photosynthetic rate to the C3 models, and a Rubisco limited photosynthetic rate to the C4 model.
Besides the tranditional photosynthesis model, we also included functions to compute fluorescence related parameters, such as fluorescence quantum yield and non-photochemical quenching. he two implemented fluorescence models are
- Van der Tol et al. (2013) fluorescence model to use with C3-Jmax and C4 models
- Han et al. (2022) fluorescence model to used with C3-Jmax and C4 models
- Johnson and Berry (2021) fluorescence model to use with C3Cytochrome model
Starting from v0.5, photosynthesis and fluorescence model selection is done by setting up the fields of a PhotosynthesisMethods struct (see the tutorial in the tests folder).
We aim to make Photosynthesis.jl a standalone package rather than just part of the Emerald model. Thus, in the documentations below, we will present examples of how to use Photosynthesis.jl at the leaf level. Same logic applies to canopy scale simulations.
Notes
In our model, we used PPAR, rather than PAR or APAR. PPAR is the photosynthetically active radiation (PAR) that goes to photosystems; PPAR is different from APAR (PAR absorbed by leaf, some APAR does not go to photosystems).
Photosynthesis Model Procedure
For all three photosynthesis+fluorescence combo models, photosynthetic rates are computed using the following procedure:
- Update temperature dependent variables using
photosystem_temperature_dependence! - Calculate electron transport rate using
photosystem_electron_transport! - Calculate RubisCO limited rate using
rubisco_limited_rate! - Calculate light limited rate using
light_limited_rate! - Calculate product limited rate using
product_limited_rate! - Calculate gross and net rates using
colimit_photosynthesis! - Update fluorescence related variables using
photosystem_coefficients!
Yet, for convenience, all the listed steps are combined in one function photosynthesis!.
0. Key Structures and Methods
Photosynthesis.C3Trait — Type
mutable struct C3Trait{FT}Struct that contains the trait variables for C3 photosynthesis
Fields
K_OCS::Any: Multiplier to derive internal conductance for OCS[mol μmol⁻¹]b₆f::Any: Total concentration of Cytochrome b₆f[μmol m⁻²]j_max25::Any: Maximal electron transport rate at 298.15 K[μmol m⁻² s⁻¹]r_d25::Any: Respiration rate at 298.15 K[μmol m⁻² s⁻¹]v_cmax25::Any: Maximal carboxylation rate at 298.15 K[μmol m⁻² s⁻¹]
Photosynthesis.C4Trait — Type
mutable struct C4Trait{FT}Struct that contains the trait variables for C4 photosynthesis
Fields
K_OCS::Any: Multiplier to derive internal conductance for OCS[mol μmol⁻¹]r_d25::Any: Respiration rate at 298.15 K[μmol m⁻² s⁻¹]v_cmax25::Any: Maximal carboxylation rate at 298.15 K[μmol m⁻² s⁻¹]v_pmax25::Any: Maximal PEP carboxylation rate at 298.15 K[μmol m⁻² s⁻¹]
Photosynthesis.C3State — Type
mutable struct C3State{FT}Struct that contains the state variables for C3 photosynthesis (VJP model)
Fields
EFF_1::Any: Coefficient 4.0/4.5 for NADPH/ATP requirement stochiometry, respectivelyEFF_2::Any: Coefficient 8.0/10.5 for NADPH/ATP requirement stochiometry, respectivelyk_npq_sus::Any: Sustained NPQ rate constant (for seasonal changes, default is zero)
Photosynthesis.C4State — Type
mutable struct C4State{FT}Struct that contains the state variables for C4 photosynthesis (VJP model)
Fields
k_npq_sus::Any: Sustained NPQ rate constant (for seasonal changes, default is zero)
Photosynthesis.LeafPhotosystemAuxil — Type
mutable struct LeafPhotosystemAuxil{FT}Struct that contains the auxiliary variables for leaf photosynthesis
Fields
a_c::Vector: RubisCO limited photosynthetic rate[μmol m⁻² s⁻¹]a_g::Vector: Gross photosynthetic rate[μmol m⁻² s⁻¹]a_i::Vector: Intermediate photosynthetic rate[μmol m⁻² s⁻¹]a_j::Vector: Light limited photosynthetic rate[μmol m⁻² s⁻¹]a_n::Vector: Net photosynthetic rate[μmol m⁻² s⁻¹]a_p::Vector: Product limited photosynthetic rate[μmol m⁻² s⁻¹]e2c::Vector: Electron to CO₂ coefficientf_psii::Any: Fraction of absorbed light used by PSII ETRj::Vector: Electron transport[μmol m⁻² s⁻¹]j_max::Any: Maximal electron transport rate at leaf temperature[μmol m⁻² s⁻¹]j_pot::Vector: Potential Electron Transport Rate[μmol m⁻² s⁻¹]j_psi::Vector: PSI electron transport rate after colimitationk_c::Any: RubisCO coefficient Kc[Pa]k_m::Any: Michaelis-Menten's coefficient[Pa]k_o::Any: RubisCO coefficient Ko[Pa]k_pep::Any: PEP coefficient Kpep[Pa]k_pep_clm::Any: PEP coefficient Kpep fro CLM (different algorithm)[Pa]k_q::Any: Maximal turnover rate of Cytochrome b₆f[e⁻ s⁻¹]γ_star::Any: CO₂ compensation point with the absence of Rd[Pa]r_d::Any: Respiration rate at leaf temperature[μmol m⁻² s⁻¹]v_cmax::Any: Maximal carboxylation rate at leaf temperature[μmol m⁻² s⁻¹]v_pmax::Any: Maximal PEP carboxylation rate at leaf temperature[μmol m⁻² s⁻¹]v_qmax::Any: Maximal Cytochrome b₆f activity[μmol e⁻ m⁻² s⁻¹]η::Vector: ratio between JP700 and JP680η_c::Any: Coupling efficiency of cyclic electron flow[mol ATP mol⁻¹ e⁻]η_l::Any: Coupling efficiency of linear electron flow[mol ATP mol⁻¹ e⁻]ϕ_d::Vector: Heat dissipation yieldϕ_f::Vector: Fluorescence yieldϕ_n::Vector: Non-photochemical yieldϕ_p::Vector: Photochemical yieldϕ_f1::Vector: Fluorescence yield of PSIϕ_f2::Vector: Fluorescence yield of PSIIf_m::Any: Dark adapted yield (Kp=0)f_m′::Vector: Light adapted yield (Kp=0)f_o::Any: Dark-adapted fluorescence yield (Kp=max)f_o′::Vector: Light-adapted fluorescence yield in the dark (Kp=max)npq::Vector: Non-Photochemical quenchingq_e::Vector: Energy quenchingq_p::Vector: Photochemical quenchingk_d::Any: Rate constant for thermal dissipationk_n::Vector: Reversible NPQ rate constant (initially zero)k_p::Vector: Rate constant for photochemistryϕ_psi_max::Any: Maximal PS I photochemical yieldϕ_psii_max::Any: max PSII yield (knpq_rev = 0, all RC open)cache1::Vectorcache2::Vectorcache3::Vectorcache4::Vectorcache5::Vectorcache6::Vectorcache7::Vectorcache8::Vectorcache9::Vectorcache0::Vector
Photosynthesis.LeafPhotosystem — Type
mutable struct LeafPhotosystem{FT}Struct that contains the fields for C3 photosynthesis
Fields
trait::Union{Photosynthesis.C3Trait{FT}, Photosynthesis.C4Trait{FT}} where FT: Trait variablesstate::Union{Photosynthesis.C3State{FT}, Photosynthesis.C4State{FT}} where FT: State variablesauxil::Photosynthesis.LeafPhotosystemAuxil: Auxilary variables
Photosynthesis.PhotosynthesisMethods — Type
Method configuration for the Photosynthesis model
1. Temperature Dependencies
Photosynthesis.AbstractTemperatureDependency — Type
Hierarchy of AbstractTemperatureDependency:
- Arrhenius
- ArrheniusPeak
- ArrheniusPeak2
- Q10
- Q10Peak
- Q10PeakHT
- Q10PeakLTHT
Photosynthesis.Arrhenius — Type
An Arrhenius type struct using
\[Y_1 = Y_0 \cdot \exp \left( \dfrac{H_a}{R T_0} - \dfrac{H_a}{R T_1} \right)\]
Photosynthesis.ArrheniusPeak — Type
An ArrheniusPeak type struct using
\[Y_1 = Y_0 \cdot \exp \left( \dfrac{H_a}{R T_0} - \dfrac{H_a}{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) }\]
Photosynthesis.ArrheniusPeak2 — Type
An ArrheniusPeak2 type struct using
\[Y_1 = Y_0 \cdot \min \left(1, \exp \left( \dfrac{H_a}{R T_0} - \dfrac{H_a}{R T_1} \right) \right) \cdot \min \left(1, \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) } \right)\]
Photosynthesis.Q10 — Type
A Q10 type struct using
\[Y_1 = Y_0 \cdot Q_{10} ^ \dfrac{T_1 - T_0}{10}\]
Photosynthesis.Q10Peak — Type
A Q10Peak type struct using
\[Y_1 = Y_0 \cdot Q_{10} ^ \dfrac{T_1 - T_0}{10} \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) }\]
Photosynthesis.Q10PeakHT — Type
A Q10PeakHT type struct using
\[Y_1 = Y_0 \cdot Q_{10} ^ \dfrac{T_1 - T_0}{10} \cdot \dfrac{ 1 } { 1 + \exp \left( S_H * (T_1 - T_H) \right) }\]
Photosynthesis.Q10PeakLTHT — Type
A Q10PeakLTHT type struct using
\[Y_1 = Y_0 \cdot Q_{10} ^ \dfrac{T_1 - T_0}{10} \cdot \dfrac{ 1 }{ 1 + \exp \left( S_H * (T_1 - T_H) \right) } \cdot \dfrac{ 1 }{ 1 + \exp \left( S_L * (T_L - T_1) \right) }\]
Photosynthesis.temperature_correction — Function
temperature_correction(
td::AbstractTemperatureDependency{FT},
t::FT;
t_ref::FT = td.T_REF
) where {FT}Return the correction ratio for a temperature dependent variable, given
tdArrhenius,ArrheniusPeak,ArrheniusPeak2,Q10,Q10Peak,Q10PeakHT, orQ10PeakLTHTtype temperature dependency struturetTarget temperature inKt_refReference temperature inK, default istd.T_REF(298.15 K)
Photosynthesis.temperature_corrected_value — Function
temperature_corrected_value(td::AbstractTemperatureDependency{FT}, t::FT; t_ref::FT = td.T_REF) where {FT}Return the temperature corrected value, given
tdArrhenius,ArrheniusPeak,ArrheniusPeak2,Q10,Q10Peak,Q10PeakHT, orQ10PeakLTHTtype temperature dependency struturetTarget temperature inKt_refReference temperature inK, default istd.T_REF(298.15 K)
Photosynthesis.photosystem_temperature_dependence! — Function
photosystem_temperature_dependence!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_air::FT,
t::FT) where {FT}Update the temperature dependencies of C3 photosynthesis model, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemstructurep_airSurface atmosphere pressure inPatTarget temperature inK
2. Electron Transport
Photosynthesis.PSRateConstants — Type
Structure that stores rate constants for photosystems (do not split PSI and PSII)
Photosynthesis.PSIRateConstants — Type
Structure that stores rate constants for photosystem I
Photosynthesis.PSIIRateConstants — Type
Structure that stores rate constants for photosystem II
Photosynthesis.photosystem_electron_transport! — Function
photosystem_electron_transport!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
ppar::Vector{FT},
p_i::Union{FT,Vector{FT}};
β::FT = FT(1)
) where {FT}Update the electron transport rates, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemtype structpparAbsorbed photosynthetically active radiation inμmol m⁻² s⁻¹p_iInternal CO₂ partial pressure inPa, used to compute etocβTuning factor to downregulate effective Vmax, Jmax, and Rd
3. RubisCO Limited Rate
Photosynthesis.AbstractAcMethod — Type
Abstract type for photosynthesis rate calculation methods for Ac:
- AcMethodC3VcmaxPi
- AcMethodC4Vcmax
Photosynthesis.AcMethodC3VcmaxPi — Type
Method to compute rubisco-limited photosynthesis rate (Ac):
\[A_\text{c} = V_{\text{cmax}} \dfrac{(P_{\text{i}} - \Gamma)}{(P_{\text{i}} + K_{\text{m}})}\]
Photosynthesis.AcMethodC4Vcmax — Type
Method to compute rubisco-limited photosynthesis rate (Ac):
\[A_\text{c} = V_{\text{cmax}}\]
Photosynthesis.rubisco_limited_rate! — Function
rubisco_limited_rate!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_air::FT,
p_co2::FT,
g_lc::Vector{FT};
β::FT = FT(1)
) where {FT}
rubisco_limited_rate!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_i::Union{FT,Vector{FT}};
β::FT = FT(1)
) where {FT}Update the RubisCO limited photosynthetic rate, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemstructp_airSurface atmosphere pressure inPap_co2Surface CO₂ partial pressure inPag_lcLeaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹](if appears in the function signature, it is meant for conductance mode)βTuning factor to downregulate effective Vmax, Jmax, and Rdp_iInternal CO₂ partial pressure inPa
4. Light Limited Rate
Photosynthesis.AbstractAjMethod — Type
Abstract type for photosynthesis rate calculation methods for Aj:
- AjMethodC3JmaxPi
- AjMethodC3VqmaxPi
- AjMethodC4JPSII
Photosynthesis.AjMethodC3JmaxPi — Type
Method to compute electron transport-limited photosynthesis rate (Aj):
\[A_\text{j} = \dfrac{J}{4} \dfrac{(P_{\text{i}} - \Gamma)}{(P_{\text{i}} + 2 \Gamma)}\]
Photosynthesis.AjMethodC3VqmaxPi — Type
Method to compute electron transport-limited photosynthesis rate (Aj) using cytochrome b6f:
\[J = \dfrac{J_{\text{PSI}}}{\eta} A_{\text{j}} = \dfrac{J}{4} \dfrac{(P_{\text{i}} - \Gamma)}{(P_{\text{i}} + 2 \Gamma)}\]
Photosynthesis.AjMethodC4JPSII — Type
Method to compute electron transport-limited photosynthesis rate (Aj) using cytochrome b6f:
\[Aj = \dfrac{J}{6}\]
Photosynthesis.light_limited_rate! — Function
light_limited_rate!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_air::FT,
p_co2::FT,
g_lc::Vector{FT};
β::FT = FT(1)
) where {FT}
light_limited_rate!(
ps::LeafPhotosystem{FT}
) where {FT}Update the electron transport limited photosynthetic rate, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemstructp_airSurface atmosphere pressure inPap_co2Surface CO₂ partial pressure inPag_lcLeaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹](if appears in the function signature, it is meant for conductance mode)βTuning factor to downregulate effective Vmax, Jmax, and Rd
5. Product Limited Rate
Photosynthesis.AbstractApMethod — Type
Abstract type for photosynthesis rate calculation methods for Ap:
- ApMethodC3Inf
- ApMethodC3Vcmax
- ApMethodC4VcmaxPi
- ApMethodC4VpmaxPi
Photosynthesis.ApMethodC3Vcmax — Type
Method to compute product-limited photosynthesis rate (Ap) from Vcmax:
\[A_{\text{p}} = \dfrac{V_{\text{cmax}}}{2}\]
Photosynthesis.ApMethodC3Inf — Type
Method for models without TPU limitation:
\[A_{\text{p}} = \infty\]
Photosynthesis.ApMethodC4VcmaxPi — Type
Method to compute product-limited photosynthesis rate (Ap) from Vcmax:
\[A_{\text{p}} = k \cdot V_{\text{cmax}} \cdot P_{\text{i}}\]
Photosynthesis.ApMethodC4VpmaxPi — Type
Method to compute product-limited photosynthesis rate (Ap) from Vpmax:
\[A_{\text{p}} = V_{\text{pmax}} \dfrac{P_{\text{i}}}{(P_{\text{i}} + K_{\text{pep}})}\]
Photosynthesis.product_limited_rate! — Function
product_limited_rate!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_air::FT,
p_co2::FT,
g_lc::Vector{FT};
β::FT = FT(1)
) where {FT}
product_limited_rate!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_i::Union{FT,Vector{FT}};
β::FT = FT(1)
) where {FT}Update the product limited photosynthetic rate, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemstructp_airSurface atmosphere pressure inPap_co2Surface CO₂ partial pressure inPag_lcLeaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹](if appears in the function signature, it is meant for conductance mode)βTuning factor to downregulate effective Vmax, Jmax, and Rdp_iInternal CO₂ partial pressure inPa
6. Colimitation
Photosynthesis.AbstractColimit — Type
Hierarchy of AbstractColimit
- MinimumColimit
- QuadraticColimit
- SerialColimit
- SquareColimit
Photosynthesis.MinimumColimit — Type
Empty structure to indicate minimum colimitation: x = min(x₁, x₂)
Photosynthesis.QuadraticColimit — Type
Structure to indicate quadratic colimitation (contains field CURVATURE): θ⋅x² - (x₁ + x₂)⋅x + x₁x₂ = 0
Photosynthesis.SerialColimit — Type
Empty structure to indicate serial colimitation: x = 1 / (1/x₁ + 1/x₂)
Photosynthesis.SquareColimit — Type
Empty structure to indicate square colimitation: x = x₁⋅x₂ / sqrt(x₁² + x₂²)
Photosynthesis.colimited_rate — Function
colimited_rate(
a_1::FT,
a_2::FT,
colim::AbstractColimit{FT}
) where {FT}Return the minimum of two rates, given
a_1Rate 1a_2Rate 2colimMinimumColimit,QuadraticColimit,SerialColimit, orSquareColimittype struct
Photosynthesis.colimited_rate! — Function
colimited_rate!(
a_1::Union{FT,Vector{FT}},
a_2::Vector{FT},
a_i::Vector{FT},
colim::AbstractColimit{FT}
) where {FT}Colimit the rates, given
a_1Rate 1a_2Rate 2a_iIntermediate rate (overwritten)colimMinimumColimit,QuadraticColimit,SerialColimit, orSquareColimittype struct
Photosynthesis.colimit_photosynthesis! — Function
colimit_photosynthesis!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT};
β::FT = FT(1)
) where {FT}Colimit the photosynthesis by rubisco-, light-, and product-limited photosynthetic rates, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemtype photosynthesis modelβTuning factor to downregulate effective Vmax, Jmax, and Rd (default is 1)
7. Fluorescence Related Parameters
Photosynthesis.AbstractFluorescenceMethod — Type
Module that defines fluorescence methods used in leaf photosynthesis modeling:
Photosynthesis.KNFluorescenceModel — Type
Structure that stores van der Tol et al. (2013) fluorescence model parameters.
- van der Tol et al. (2013) Models of fluorescence and photosynthesis for interpreting measurements of solar-induced chlorophyll fluorescence
Photosynthesis.QLFluorescenceModel — Type
Structure that stores modified Han et al. (2022) fluorescence model parameters.
- Han et al. (2022) The physiological basis for estimating photosynthesis from Chla fluorescence
Photosynthesis.QLFluorescenceModelHan — Type
Structure that stores original Han et al. (2022) fluorescence model parameters.
- Han et al. (2022) The physiological basis for estimating photosynthesis from Chla fluorescence
Photosynthesis.CytochromeFluorescenceModel — Type
Structure for the C3 Cytochrome fluorescence model.
Photosynthesis.photosystem_coefficients! — Function
photosystem_coefficients!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
ppar::Vector{FT};
β::FT = FT(1)
) where {FT}Update the rate constants and coefficients in reaction center, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemtype structpparAbsorbed photosynthetically active radiation inμmol m⁻² s⁻¹βTuning factor to downregulate effective Vmax, Jmax, and Rd
Full Pipeline
Photosynthesis.photosynthesis! — Function
photosynthesis!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_air::FT,
p_co2::FT,
ppar::Vector{FT},
t::FT,
g_lc::Vector{FT}
) where {FT}
photosynthesis!(
methods::PhotosynthesisMethods{FT},
ps::LeafPhotosystem{FT},
p_air::FT,
ppar::Vector{FT},
t::FT,
p_i::Union{FT,Vector{FT}}
) where {FT}Update the photosynthesis rate, given
methodsPhotosynthesisMethodsstructure that contains rate constants, temperature dependency methods, colimitation methods, and model featurespsLeafPhotosystemstructp_airSurface atmosphere pressure inPap_co2Surface CO₂ partial pressure inPapparVector of photosynthetically active radiationtLeaf temperature inKg_lcLeaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹](if appears in the function signature, it is meant for conductance mode)p_iVector of intercellular CO₂ partial pressures