Photosynthesis
About
Photosynthesis models for C3 and C4 photosynthesis. Photosynthesis.jl supports three photosynthesis models and two fluorescence models. The photosynthesis models are
- C3VJP model based on classic C3 model, which is known as FvCB model (Farquhar et al. 1980)
- C4VJP model based on classic C4 model, which is known as Collaz model (Collaz et al. 1992)
- C3Cytochrome model based on a new C3 model developed by Johnson and Berry (2021)
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 C3VJP and C4VJP models
- Johnson and Berry (2021) fluorescence model to use with C3Cytochrome model
We aim to make Photosynthesis.jl a standalone package rather than just part of the CliMA Land 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.
Model Selection
Starting from v0.3, photosynthesis and fluorescence model selection is done by setting up the fields of a leaf. There are three types of leaf in Photosynthesis (all the structures are defined in ClimaCache.jl and shared among all CliMA Land submodules), and they are
Leaf
for a single leaf to use in leaf level researchLeaves1D
for a vector of leaves to use in big leaf modelsLeaves2D
for a matrix of sunlit fractions and a shaded fraction to use along with canopy with leaf angular distribution
For all of the three leaf structs, there are two fields named
PSM
for photosynthesis modelPRC
for photosynthesis reaction center
A C3VJPModel
type PSM
along with a VJPReactionCenter
type PRC
defines the C3VJP model; a C4VJPModel
type PSM
along with a VJPReactionCenter
type PRC
defines the C4VJP model; and a C3CytochromeModel
type PSM
along with a CytochromeReactionCenter
type PRC
defines the C3Cytochrome model. For instance, leaf_c3
, leaf_c4
, and leaf_cy
each defines a model to use the three predefined photosynthesis models:
using ClimaCache;
FT = Float64;
leaf_c3 = ClimaCache.Leaf{FT}();
leaf_c4 = ClimaCache.Leaf{FT}(PSM = ClimaCache.C4VJPModel{FT}());
leaf_cy = ClimaCache.Leaf{FT}(PSM = ClimaCache.C3CytochromeModel{FT}(), PRC = ClimaCache.CytochromeReactionCenter{FT}());
# users can define the same fields for Leaves1D and Leaves2D to custoimize photosynthesis model
leaf_d3 = ClimaCache.Leaves1D{FT}();
leaf_d4 = ClimaCache.Leaves1D{FT}(PSM = ClimaCache.C4VJPModel{FT}());
leaf_dy = ClimaCache.Leaves1D{FT}(PSM = ClimaCache.C3CytochromeModel{FT}(), PRC = ClimaCache.CytochromeReactionCenter{FT}());
leaf_e3 = ClimaCache.Leaves2D{FT}();
leaf_e4 = ClimaCache.Leaves2D{FT}(PSM = ClimaCache.C4VJPModel{FT}());
leaf_ey = ClimaCache.Leaves2D{FT}(PSM = ClimaCache.C3CytochromeModel{FT}(), PRC = ClimaCache.CytochromeReactionCenter{FT}());
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 leaf_photosynthesis!
(see page API for all supported methods). At leaf level, one can simply call the function, for example
using Photosynthesis
air = ClimaCache.AirLayer{FT}();
g_mode = ClimaCache.GCO₂Mode();
p_mode = ClimaCache.PCO₂Mode();
Photosynthesis.leaf_photosynthesis!(leaf_c3, air, g_mode);
Photosynthesis.leaf_photosynthesis!(leaf_cy, air, p_mode);
Note here that (1) we need parameters from surrounding air to compute photosynthetic rates, such as oxygen concentration, (2) GCO₂Mode
mode is used when leaf total diffusive conductance for CO₂ is known, and PCO₂Mode
is used when leaf internal CO₂ partial pressure is known, and (3) leaf and air conditions must be synced before calling the leaf_photosynthesis!
function. For example, to construct an A-Ci curve, one will need to change the field _p_CO₂_i
to proceed:
leaf_c3.t = 300;
leaf_c3.ppar = 1000;
for _p in 5:5:100
leaf_c3._p_CO₂_i = _p;
Photosynthesis.leaf_photosynthesis!(leaf_c3, air, p_mode);
@info "Photosynthetic rate at" leaf_c3._p_CO₂_i leaf_c3.a_net;
end
In the example above, we first defined leaf temperature is 300 K
(note that we use Kelvin here, not Celcius), then prescribed a PPAR of 1000 μmol m⁻² s⁻¹
. 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). See our technical note for the difference between PAR, APAR, and PPAR. Similarly, we can try out how Anet responds to leaf temperature and PPAR by modifying the example above.
Photosynthesis model
Photosynthesis.leaf_photosynthesis!
— FunctionPer refactored Photosynthesis module, the only things one need to know is the public function leaf_photosynthesis!
and some construtors from ClimaCache
. See the examples in the methods below for details about how to use the function. The steps for computing photosynthetic rates are
- 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!
Photosynthesis.leaf_photosynthesis!
— Methodleaf_photosynthesis!(lf::Union{Leaf{FT}, Leaves2D{FT}}, air::AirLayer{FT}, g_lc::FT, ppar::FT, t::FT = lf.t) where {FT<:AbstractFloat}
leaf_photosynthesis!(lf::Leaves1D{FT}, air::AirLayer{FT}, g_lc::FT, ppar::FT, t::FT) where {FT<:AbstractFloat}
Updates leaf photosynthetic rates based on CO₂ partial pressure (for StomataModels.jl temporary use), given
lf
Leaf
,Leaves1D
, orLeaves2D
type structure that stores biophysical, reaction center, and photosynthesis model structuresair
AirLayer
structure for environmental conditions like O₂ partial pressureg_lc
Leaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹]
, default isleaf._g_CO₂
ppar
APAR used for photosynthesist
Leaf temperature in[K]
Photosynthesis.leaf_photosynthesis!
— Methodleaf_photosynthesis!(lf::Union{Leaf{FT}, Leaves1D{FT}, Leaves2D{FT}}, air::AirLayer{FT}, mode::Union{GCO₂Mode, PCO₂Mode}) where {FT<:AbstractFloat}
Updates leaf photosynthetic rates based on CO₂ partial pressure or CO₂ conductance, given
lf
Leaf
,Leaves1D
, orLeaves2D
type structure that stores biophysical, reaction center, and photosynthesis model structuresair
AirLayer
structure for environmental conditions like O₂ partial pressuremode
GCO₂Mode
orPCO₂Mode
that uses CO₂ conductance or partial pressure to compute photosynthetic rates
Photosynthesis.leaf_photosynthesis!
— Methodleaf_photosynthesis!(spac::MonoElementSPAC{FT}, mode::Union{GCO₂Mode, PCO₂Mode}) where {FT<:AbstractFloat}
leaf_photosynthesis!(spac::Union{MonoMLGrassSPAC{FT}, MonoMLPalmSPAC{FT}, MonoMLTreeSPAC{FT}}, mode::Union{GCO₂Mode, PCO₂Mode}) where {FT<:AbstractFloat}
Updates leaf photosynthetic rates for SPAC, given
spac
MonoElementSPAC
,MonoMLGrassSPAC
,MonoMLPalmSPAC
, orMonoMLTreeSPAC
type SPACmode
GCO₂Mode
orPCO₂Mode
Temperature dependency
Photosynthesis.temperature_correction
— Functiontemperature_correction(td::Arrhenius{FT}, t::FT; t_ref::FT = td.T_REF) where {FT<:AbstractFloat}
temperature_correction(td::ArrheniusPeak{FT}, t::FT; t_ref::FT = td.T_REF) where {FT<:AbstractFloat}
temperature_correction(td::Q10{FT}, t::FT; t_ref::FT = td.T_REF) where {FT<:AbstractFloat}
temperature_correction(td::Q10Peak{FT}, t::FT; t_ref::FT = td.T_REF) where {FT<:AbstractFloat}
Return the correction ratio for a temperature dependent variable, given
td
Arrhenius
,ArrheniusPeak
,Q10
, orQ10Peak
type temperature dependency struturet
Target temperature inK
t_ref
Reference temperature inK
, default istd.T_REF
(298.15 K)
Photosynthesis.temperature_corrected_value
— Functiontemperature_corrected_value(td::Union{Arrhenius{FT}, ArrheniusPeak{FT}, Q10{FT}, Q10Peak{FT}}, t::FT; t_ref::FT = td.T_REF) where {FT<:AbstractFloat}
Return the temperature corrected value, given
td
Arrhenius
,ArrheniusPeak
,Q10
, orQ10Peak
type temperature dependency struturet
Target temperature inK
t_ref
Reference temperature inK
, default istd.T_REF
(298.15 K)
Photosynthesis.photosystem_temperature_dependence!
— Functionphotosystem_temperature_dependence!(psm::C3CytochromeModel{FT}, air::AirLayer{FT}, t::FT) where {FT<:AbstractFloat}
photosystem_temperature_dependence!(psm::C3VJPModel{FT}, air::AirLayer{FT}, t::FT) where {FT<:AbstractFloat}
photosystem_temperature_dependence!(psm::C4VJPModel{FT}, air::AirLayer{FT}, t::FT) where {FT<:AbstractFloat}
Update the temperature dependencies of C3 photosynthesis model, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
structure for photosynthesis modelair
AirLayer
structure for environmental conditions like O₂ partial pressuret
Target temperature inK
Photosynthesis.∂R∂T
— Function∂R∂T(leaf::Leaf{FT}) where {FT<:AbstractFloat}
∂R∂T(leaves::Leaves1D{FT}) where {FT<:AbstractFloat}
∂R∂T(leaves::Leaves2D{FT}) where {FT<:AbstractFloat}
Return the marginal increase in respiration rate per temperature, given
leaf
Leaf
type leafleaves
Leaves1D
orLeaves2D
type leaf
Electron transport
Photosynthesis.photosystem_electron_transport!
— Functionphotosystem_electron_transport!(psm::C3CytochromeModel{FT}, rc::CytochromeReactionCenter{FT}, ppar::FT, p_i::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
photosystem_electron_transport!(psm::C3VJPModel{FT}, rc::VJPReactionCenter{FT}, ppar::FT, p_i::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
photosystem_electron_transport!(psm::C4VJPModel{FT}, rc::VJPReactionCenter{FT}, ppar::FT, p_i::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
Update the electron transport rates, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
type C3 photosynthesis modelrc
CytochromeReactionCenter
orVJPReactionCenter
type photosynthesis system reaction centerppar
Absorbed photosynthetically active radiation inμmol m⁻² s⁻¹
p_i
Internal CO₂ partial pressure inPa
, used to compute etocβ
Tuning factor to downregulate effective Vmax, Jmax, and Rd
Photosynthetic rates
Photosynthesis.rubisco_limited_rate!
— FunctionThis function supports two types of calculations:
- Calculate the rate from internal CO₂
- Calculate the rate from CO₂ conductance by solving a quadratic function
Photosynthesis.rubisco_limited_rate!
— Methodrubisco_limited_rate!(psm::Union{C3CytochromeModel{FT},C3VJPModel{FT}}, p_i::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
rubisco_limited_rate!(psm::C4VJPModel{FT}, p_i::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
Update the RubisCO limited photosynthetic rate, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
structure for photosynthesis modelp_i
Internal CO₂ partial pressure inPa
β
Tuning factor to downregulate effective Vmax, Jmax, and Rd
Photosynthesis.rubisco_limited_rate!
— Methodrubisco_limited_rate!(psm::Union{C3CytochromeModel{FT}, C3VJPModel{FT}}, air::AirLayer{FT}, g_lc::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
rubisco_limited_rate!(psm::C4VJPModel{FT}, air::AirLayer{FT}, g_lc::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
Update the RubisCO limited photosynthetic rate in conductance mode, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
structure for photosynthesis modelair
AirLayer
structure for environmental conditions like O₂ partial pressureg_lc
Leaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹]
β
Tuning factor to downregulate effective Vmax, Jmax, and Rd
Photosynthesis.light_limited_rate!
— FunctionThis function supports two types of calculations:
- Calculate the rate from internal CO₂
- Calculate the rate from CO₂ conductance by solving a quadratic function
Photosynthesis.light_limited_rate!
— Methodlight_limited_rate!(psm::Union{C3CytochromeModel{FT}, C4VJPModel{FT}}) where {FT<:AbstractFloat}
light_limited_rate!(psm::C3VJPModel{FT}) where {FT<:AbstractFloat}
Update the electron transport limited photosynthetic rate, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
structure for C3 photosynthesis model
Photosynthesis.light_limited_rate!
— Methodlight_limited_rate!(psm::C3CytochromeModel{FT}, rc::CytochromeReactionCenter{FT}, air::AirLayer{FT}, g_lc::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
light_limited_rate!(psm::C3VJPModel{FT}, rc::VJPReactionCenter{FT}, air::AirLayer{FT}, g_lc::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
light_limited_rate!(psm::C4VJPModel{FT}, rc::VJPReactionCenter{FT}, air::AirLayer{FT}, g_lc::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
Update the electron transport limited photosynthetic rate in conductance mode, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
structure for C3 photosynthesis modelrc
CytochromeReactionCenter
orVJPReactionCenter
type photosynthesis system reaction centerair
AirLayer
structure for environmental conditions like O₂ partial pressureg_lc
Leaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹]
β
Tuning factor to downregulate effective Vmax, Jmax, and Rd
Photosynthesis.product_limited_rate!
— FunctionThis function supports two types of calculations:
- Calculate the rate from internal CO₂
- Calculate the rate from CO₂ conductance by solving a quadratic function
Photosynthesis.product_limited_rate!
— Methodproduct_limited_rate!(psm::Union{C3CytochromeModel{FT}, C3VJPModel{FT}}, p_i::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
product_limited_rate!(psm::C4VJPModel{FT}, p_i::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
Update the product limited photosynthetic rate, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
structure for C3 photosynthesis modelp_i
Internal CO₂ partial pressure inPa
, not used in this methodβ
Tuning factor to downregulate effective Vmax, Jmax, and Rd
Photosynthesis.product_limited_rate!
— Methodproduct_limited_rate!(psm::Union{C3CytochromeModel{FT}, C3VJPModel{FT}}, air::AirLayer{FT}, g_lc::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
product_limited_rate!(psm::C4VJPModel{FT}, air::AirLayer{FT}, g_lc::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
Update the electron transport limited photosynthetic rate in conductance mode, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
structure for C3 photosynthesis modelair
AirLayer
structure for environmental conditions like O₂ partial pressure, not used in this methodg_lc
Leaf diffusive conductance to CO₂ in[mol m⁻² s⁻¹]
, not used in this methodβ
Tuning factor to downregulate effective Vmax, Jmax, and Rd
Colimitation
Photosynthesis.colimit_photosynthesis!
— Functioncolimit_photosynthesis!(psm::Union{C3CytochromeModel{FT}, C3VJPModel{FT}, C4VJPModel{FT}}; β::FT = FT(1)) where {FT<:AbstractFloat}
Colimit the photosynthesis by rubisco-, light-, and product-limited photosynthetic rates, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
type photosynthesis modelβ
Tuning factor to downregulate effective Vmax, Jmax, and Rd (default is 1)
Photosynthesis.colimited_rate
— Functioncolimited_rate(a_1::FT, a_2::FT, colim::MinimumColimit{FT}) where {FT<:AbstractFloat}
colimited_rate(a_1::FT, a_2::FT, colim::QuadraticColimit{FT}) where {FT<:AbstractFloat}
colimited_rate(a_1::FT, a_2::FT, colim::SerialColimit{FT}) where {FT<:AbstractFloat}
colimited_rate(a_1::FT, a_2::FT, colim::SquareColimit{FT}) where {FT<:AbstractFloat}
Return the minimum of two rates, given
a_1
Rate 1a_2
Rate 2colim
MinimumColimit
,QuadraticColimit
, orSerialColimit
type struct
Coefficients and fluorescence
Photosynthesis.photosystem_coefficients!
— Functionphotosystem_coefficients!(psm::C3CytochromeModel{FT}, rc::CytochromeReactionCenter{FT}, ppar::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
photosystem_coefficients!(psm::Union{C3VJPModel{FT}, C4VJPModel{FT}}, rc::VJPReactionCenter{FT}, ppar::FT; β::FT = FT(1)) where {FT<:AbstractFloat}
Update the rate constants and coefficients in reaction center, given
psm
C3CytochromeModel
,C3VJPModel
, orC4VJPModel
type photosynthesis modelrc
CytochromeReactionCenter
orVJPReactionCenter
type photosynthesis system reaction centerppar
Absorbed photosynthetically active radiation inμmol m⁻² s⁻¹
β
Tuning factor to downregulate effective Vmax, Jmax, and Rd