Functions
Index
PlantBiophysics.AbstractEnergy_BalanceModel
PlantBiophysics.AbstractLight_InterceptionModel
PlantBiophysics.AbstractPhotosynthesisModel
PlantBiophysics.AbstractStomatal_ConductanceModel
PlantBiophysics.Beer
PlantBiophysics.BeerShortwave
PlantBiophysics.ConstantA
PlantBiophysics.ConstantAGs
PlantBiophysics.ConstantGs
PlantBiophysics.Fvcb
PlantBiophysics.FvcbIter
PlantBiophysics.FvcbRaw
PlantBiophysics.LightIgnore
PlantBiophysics.Medlyn
PlantBiophysics.Monteith
PlantBiophysics.OpticalProperties
PlantBiophysics.Translucent
PlantBiophysics.σ
PlantBiophysics.Fvcb_net_assimiliation
PlantBiophysics.arrhenius
PlantBiophysics.arrhenius
PlantBiophysics.black_body
PlantBiophysics.f_ms_to_mol
PlantBiophysics.gbh_to_gbw
PlantBiophysics.gbₕ_forced
PlantBiophysics.gbₕ_free
PlantBiophysics.get_Cᵢᵥ
PlantBiophysics.get_Cᵢⱼ
PlantBiophysics.get_Dₕ
PlantBiophysics.get_J
PlantBiophysics.get_km
PlantBiophysics.get_model
PlantBiophysics.get_process
PlantBiophysics.grey_body
PlantBiophysics.gs_closure
PlantBiophysics.gs_closure
PlantBiophysics.gsc_to_gsw
PlantBiophysics.gsw_to_gsc
PlantBiophysics.instantiate
PlantBiophysics.is_model
PlantBiophysics.latent_heat
PlantBiophysics.locf!
PlantBiophysics.max_root
PlantBiophysics.mol_to_ms
PlantBiophysics.ms_to_mol
PlantBiophysics.negative_root
PlantBiophysics.net_longwave_radiation
PlantBiophysics.positive_root
PlantBiophysics.read_licor6400
PlantBiophysics.read_model
PlantBiophysics.read_walz
PlantBiophysics.sensible_heat
PlantBiophysics.Γ_star
PlantBiophysics.γ_star
PlantBiophysics.λE_to_E
PlantSimEngine.fit
PlantSimEngine.fit
PlantSimEngine.fit
PlantSimEngine.run!
PlantSimEngine.run!
PlantSimEngine.run!
PlantSimEngine.run!
PlantSimEngine.run!
PlantSimEngine.run!
PlantSimEngine.run!
PlantSimEngine.run!
PlantSimEngine.run!
API documentation
PlantBiophysics.AbstractEnergy_BalanceModel
— Typeenergy_balance
process abstract model.
All models implemented to simulate the energy_balance
process must be a subtype of this type, e.g. struct MyEnergy_BalanceModel <: AbstractEnergy_BalanceModel end
.
You can list all models implementing this process using subtypes
:
Examples
subtypes(AbstractEnergy_BalanceModel)
Energy balance process. This process computes the energy balance of objects, meaning that it computes the net radiation, the sensible heat flux, and the latent heat flux if necessary. It can be coupled with a photosynthesis model in the case of plants leaves.
At the moment, two models are implemented in the package:
Monteith
: the model found in Monteith and Unsworth (2013)Missing
: if no computation of the energy balance is needed
Note
Some models need input values for some variables. For example Monteith
requires a value for Ra_SW_f
, d
and sky_fraction
. If you read the models from a file, you can use init_status!
(see examples).
Examples
using PlantMeteo, PlantSimEngine, PlantBiophysics
# ---Simple example---
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
# Using the model of Monteith and Unsworth (2013) for energy, Farquhar et al. (1980) for
# photosynthesis, and Medlyn et al. (2011) for stomatal conductance:
leaf =
ModelList(
energy_balance = Monteith(),
photosynthesis = Fvcb(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Ra_SW_f = 13.747, sky_fraction = 1.0, aPPFD = 1500.0, d = 0.03)
)
run!(leaf,meteo)
# ---Using several components---
leaf2 = copy(leaf)
leaf2[:aPPFD] = 800.0
run!([leaf,leaf2],meteo)
# You can use a Dict if you'd like to keep track of the leaf in the returned DataFrame:
run!(Dict(:leaf1 => leaf, :leaf2 => leaf2), meteo)
# ---Using several meteo time-steps---
w = Weather(
[
Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65),
Atmosphere(T = 25.0, Wind = 1.5, P = 101.3, Rh = 0.55)
],
(site = "Test site",)
)
leaf =
ModelList(
energy_balance = Monteith(),
photosynthesis = Fvcb(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Ra_SW_f = [12.0,13.747], sky_fraction = 1.0, aPPFD = 1500.0, d = 0.03)
)
run!(leaf, w)
# ---Using several meteo time-steps and several components---
leaf2 =
ModelList(
energy_balance = Monteith(),
photosynthesis = Fvcb(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Ra_SW_f = [12.0,13.747], sky_fraction = 1.0, aPPFD = 1500.0, d = 0.01)
)
run!(Dict(:leaf1 => leaf, :leaf2 => leaf2), w)
# ---Using a model file---
model = read_model(joinpath(dirname(dirname(pathof(PlantBiophysics))),"test","inputs","models","plant_coffee.yml"))
# An example model file is available here:
# "https://raw.githubusercontent.com/VEZY/PlantBiophysics/main/test/inputs/models/plant_coffee.yml"
# Initialising the mandatory variables:
init_status!(model, Ra_SW_f = 13.747, sky_fraction = 1.0, aPPFD = 1500.0, Tₗ = 25.0, d = 0.03)
# NB: To know which variables has to be initialized according to the models used, you can use
# `to_initialize(ComponentModels)`, *e.g.*:
to_initialize(model["Leaf"])
# Running a simulation for all component types in the same scene:
run!(model, meteo)
model["Leaf"].status.Rn
model["Leaf"].status.A
model["Leaf"].status.Cᵢ
# ---Simulation on a full plant using an MTG---
using PlantBiophysics, MultiScaleTreeGraph, PlantGeom, GLMakie, Dates, PlantMeteo
file = joinpath(dirname(dirname(pathof(PlantBiophysics))), "test", "inputs", "scene", "opf", "coffee.opf")
mtg = read_opf(file)
# Import the meteorology:
met_file = joinpath(dirname(dirname(pathof(PlantMeteo))), "test", "data", "meteo.csv")
meteo = read_weather(
met_file,
:temperature => :T,
:relativeHumidity => (x -> x ./ 100) => :Rh,
:wind => :Wind,
:atmosphereCO2_ppm => :Cₐ,
date_format = DateFormat("yyyy/mm/dd")
)
# Make the models:
models = Dict(
"Leaf" =>
ModelList(
energy_balance = Monteith(),
photosynthesis = Fvcb(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (d = 0.03,)
)
)
# List the MTG attributes:
names(mtg)
# We have the skyFraction already, but not Ra_SW_f and aPPFD, so we must compute them first.
# Ra_SW_f is the shortwave radiation (or global radiation), so it is the sum of Ra_PAR_f and Ra_NIR_f.
# aPPFD is the PAR in μmol m-2 s-1, so Ra_PAR_f * 4.57.
# We can compute them using the following code (transform! comes from MultiScaleTreeGraph.jl):
transform!(
mtg,
[:Ra_PAR_f, :Ra_NIR_f] => ((x, y) -> x + y) => :Ra_SW_f,
:Ra_PAR_f => (x -> x * 4.57) => :aPPFD,
ignore_nothing = true
)
# We can now initialize the models in the mtg:
init_mtg_models!(mtg, models, length(meteo))
# Making the simulation:
run!(mtg, meteo)
# Pull the leaf temperature of the first step:
transform!(
mtg,
:Tₗ => (x -> x[1]) => :Tₗ_1,
ignore_nothing = true
)
# Vizualise the output:
viz(mtg, color = :Tₗ_1)
References
Duursma, R. A., et B. E. Medlyn. 2012. « MAESPA: a model to study interactions between water limitation, environmental drivers and vegetation function at tree and stand levels, with an example application to [CO2] × drought interactions ». Geoscientific Model Development 5 (4): 919‑40. https://doi.org/10.5194/gmd-5-919-2012.
Monteith, John L., et Mike H. Unsworth. 2013. « Chapter 13 - Steady-State Heat Balance: (i) Water Surfaces, Soil, and Vegetation ». In Principles of Environmental Physics (Fourth Edition), edited by John L. Monteith et Mike H. Unsworth, 217‑47. Boston: Academic Press.
Schymanski, Stanislaus J., et Dani Or. 2017. « Leaf-Scale Experiments Reveal an Important Omission in the Penman–Monteith Equation ». Hydrology and Earth System Sciences 21 (2): 685‑706. https://doi.org/10.5194/hess-21-685-2017.
Vezy, Rémi, Mathias Christina, Olivier Roupsard, Yann Nouvellon, Remko Duursma, Belinda Medlyn, Maxime Soma, et al. 2018. « Measuring and modelling energy partitioning in canopies of varying complexity using MAESPA model ». Agricultural and Forest Meteorology 253‑254 (printemps): 203‑17. https://doi.org/10.1016/j.agrformet.2018.02.005.
PlantBiophysics.AbstractLight_InterceptionModel
— Typelight_interception
process abstract model.
All models implemented to simulate the light_interception
process must be a subtype of this type, e.g. struct MyLight_InterceptionModel <: AbstractLight_InterceptionModel end
.
You can list all models implementing this process using subtypes
:
Examples
subtypes(AbstractLight_InterceptionModel)
Light interception process. Available as object.light_interception
.
At the moment, two models are implemented in the package:
Beer
: the Beer-Lambert law of ligth extinctionLightIgnore
: ignore the computation of light interception (this one is for backward
compatibility with ARCHIMED-ϕ)
Examples
using PlantSimEngine, PlantBiophysics, PlantMeteo
m = ModelList(light_interception=Beer(0.5), status=(LAI=2.0,))
meteo = Atmosphere(T=20.0, Wind=1.0, P=101.3, Rh=0.65, Ri_PAR_f=300.0)
run!(m, meteo)
m[:aPPFD]
PlantBiophysics.AbstractPhotosynthesisModel
— Typephotosynthesis
process abstract model.
All models implemented to simulate the photosynthesis
process must be a subtype of this type, e.g. struct MyPhotosynthesisModel <: AbstractPhotosynthesisModel end
.
You can list all models implementing this process using subtypes
:
Examples
subtypes(AbstractPhotosynthesisModel)
Photosynthesis process to compute the CO₂ assimilation, and potentially hard-coupled with a stomatal conductance process.
The models used are defined by the types of the photosynthesis
and stomatal_conductance
fields of the ModelList
. For exemple to use the implementation of the Farquhar–von Caemmerer–Berry (FvCB) model, use the type Fvcb
(see example below).
Examples
using PlantSimEngine, PlantMeteo, PlantBiophysics
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
# Using Fvcb model:
leaf =
ModelList(
photosynthesis = Fvcb(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Tₗ = 25.0, aPPFD = 1000.0, Cₛ = 400.0, Dₗ = meteo.VPD)
)
run!(leaf, meteo)
# ---Using several components---
leaf2 = copy(leaf)
leaf2.status.aPPFD = 800.0
run!([leaf,leaf2],meteo)
# ---Using several meteo time-steps---
w = Weather(
[
Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65),
Atmosphere(T = 25.0, Wind = 1.5, P = 101.3, Rh = 0.55)
],
(site = "Test site,)
)
run!(leaf, w)
# ---Using several meteo time-steps and several components---
run!(Dict(:leaf1 => leaf, :leaf2 => leaf2), w)
# Using a model file:
model = read_model("a-model-file.yml")
# Initialising the mandatory variables:
init_status!(model, Tₗ = 25.0, aPPFD = 1000.0, Cₛ = 400.0, Dₗ = meteo.VPD)
# Running a simulation for all component types in the same scene:
run!(model, meteo)
model["Leaf"].status.A
Note that we use VPD
as an approximation of Dₗ
here because we don't have the leaf temperature (i.e. Dₗ = VPD
when Tₗ = T
).
PlantBiophysics.AbstractStomatal_ConductanceModel
— Typestomatal_conductance
process abstract model.
All models implemented to simulate the stomatal_conductance
process must be a subtype of this type, e.g. struct MyStomatal_ConductanceModel <: AbstractStomatal_ConductanceModel end
.
You can list all models implementing this process using subtypes
:
Examples
subtypes(AbstractStomatal_ConductanceModel)
Process for the stomatal conductance for CO₂ (mol m⁻² s⁻¹), it takes the form:
leaf.stomatal_conductance.g0 + gs_closure(leaf,meteo) * leaf.status.A
where gsclosure(leaf,meteo) computes the stomatal closure, and must be implemented for the type of `leaf.stomatalconductance. The stomatal conductance is not allowed to go below
leaf.stomatalconductance.gsmin`.
Arguments
Gs::Gsm
: a stomatal conductance model, usually the leaf model (i.e. leaf.stomatal_conductance)models::ModelList
: A leaf struct holding the parameters for the model. See
ModelList
, and Medlyn
or ConstantGs
for the conductance models.
status::Status
: A status, usually the leaf status (i.e. leaf.status)gs_mod
: the output from ags_closure
implementation (the conductance models
generally only implement this function)
meteo<:PlantMeteo.AbstractAtmosphere
: meteo data, seeAtmosphere
Examples
using PlantMeteo, PlantSimEngine, PlantBiophysics
meteo = Atmosphere(T = 22.0, Wind = 0.8333, P = 101.325, Rh = 0.4490995)
# Using a constant value for Gs:
leaf =
ModelList(
stomatal_conductance = Medlyn(0.03,12.0), # Instance of a Medlyn type
status = (A = 20.0, Cₛ = 380.0, Dₗ = meteo.VPD)
)
# Computing the stomatal conductance using the Medlyn et al. (2011) model:
run!(leaf,meteo)
PlantBiophysics.Beer
— TypeBeer(k)
Beer-Lambert law for light interception.
Required inputs: LAI
in m² m⁻². Required meteorology data: Ri_PAR_f
, the incident flux of atmospheric radiation in the PAR, in W m[soil]⁻² (== J m[soil]⁻² s⁻¹).
Output: aPPFD, the absorbed Photosynthetic Photon Flux Density in μmol[PAR] m[leaf]⁻² s⁻¹.
PlantBiophysics.BeerShortwave
— TypeBeerShortwave(k, f)
BeerShortwave(k)
The Beer-Lambert law for light interception for the shortwave radiation.
Arguments
k_PAR
: extinction coefficient for the PARk_NIR
: extinction coefficient for the NIR, taken equal to the one for the PAR by default
Required inputs
LAI
: the leaf area index (m² m⁻²)Ri_PAR_f
: (from meteorology) the incident flux of atmospheric radiation in the PAR, in W m[soil]⁻² (== J m[soil]⁻² s⁻¹).Ri_NIR_f
: (from meteorology) the incident flux of atmospheric radiation in the NIR, in W m[soil]⁻² (== J m[soil]⁻² s⁻¹).
Outputs
aPPFD
: the absorbed Photosynthetic Photon Flux Density in μmol[PAR] m[leaf]⁻² s⁻¹.Ra_PAR_f
: the absorbed PAR in W m[leaf]⁻².Ra_NIR_f
: the absorbed NIR in W m[leaf]⁻².Ra_SW_f
: the absorbed shortwave radiation in W m[leaf]⁻².
Examples
using PlantSimEngine, PlantBiophysics, PlantMeteo
m = ModelList(light_interception=BeerShortwave(0.5), status=(LAI=2.0,))
meteo = Atmosphere(T=20.0, Wind=1.0, P=101.3, Rh=0.65, Ri_PAR_f=300.0, Ri_NIR_f=280.0)
run!(m, meteo)
m[:aPPFD]
m[:Ra_SW_f]
m[:Ra_PAR_f]
m[:Ra_NIR_f]
PlantBiophysics.ConstantA
— TypeConstant (forced) assimilation, given in $μmol\ m^{-2}\ s^{-1}$.
See also ConstantAGs
.
Examples
ConstantA(30.0)
PlantBiophysics.ConstantAGs
— TypeConstant (forced) assimilation, given in $μmol\ m^{-2}\ s^{-1}$, coupled with a stomatal conductance model that helps computing Cᵢ.
Examples
ConstantAGs(30.0)
PlantBiophysics.ConstantGs
— TypeConstant stomatal conductance for CO₂ struct.
Arguments
g0
: intercept (only used when calling from a photosynthesis model, e.g. Fvcb).Gₛ
: stomatal conductance.
Then used as follows: Gs = ConstantGs(0.0,0.1)
PlantBiophysics.Fvcb
— TypeFarquhar–von Caemmerer–Berry (FvCB) model for C3 photosynthesis (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981) coupled with a conductance model.
Parameters
Tᵣ
: the reference temperature (°C) at which other parameters were measuredVcMaxRef
: maximum rate of Rubisco activity ($μmol\ m^{-2}\ s^{-1}$)JMaxRef
: potential rate of electron transport ($μmol\ m^{-2}\ s^{-1}$)RdRef
: mitochondrial respiration in the light at reference temperature ($μmol\ m^{-2}\ s^{-1}$)TPURef
: triose phosphate utilization-limited photosynthesis rate ($μmol\ m^{-2}\ s^{-1}$)Eₐᵣ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for Rd.O₂
: intercellular dioxygen concentration ($ppm$)Eₐⱼ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for JMax.Hdⱼ
: rate of decrease of the function above the optimum (also called EDVJ) for JMax.Δₛⱼ
: entropy factor for JMax.Eₐᵥ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for VcMax.Hdᵥ
: rate of decrease of the function above the optimum (also called EDVC) for VcMax.Δₛᵥ
: entropy factor for VcMax.α
: quantum yield of electron transport ($mol_e\ mol^{-1}_{quanta}$). See also eq. 4 of
Medlyn et al. (2002), equation 9.16 from von Caemmerer et al. (2009) ((1-f)/2) and its implementation in get_J
θ
: determines the curvature of the light response curve forJ~aPPFD
. See also eq. 4 of
Medlyn et al. (2002) and its implementation in get_J
Note on parameters
The default values of the temperature correction parameters are taken from plantecophys. If there is no negative effect of high temperatures on the reaction (Jmax or VcMax), then Δₛ can be set to 0.0.
θ is taken at 0.7 according to (Von Caemmerer, 2000) but it can be modified to 0.9 as in (Su et al., 2009). The larger it is, the lower the smoothing.
α is taken at 0.425 as proposed in von Caemmerer et al. (2009) eq. 9.16, where α = (1-f)/2.
Medlyn et al. (2002) found relatively low influence ("a slight effect") of α and θ. They also say that Kc, Ko and Γ* "are thought to be intrinsic properties of the Rubisco enzyme and are generally assumed constant among species".
See also
FvcbRaw
for non-coupled model, directly from Farquhar et al. (1980)FvcbIter
for the coupled assimilation / conductance model with an iterative resolutionget_J
AbstractPhotosynthesisModel
References
Caemmerer, S. von, et G. D. Farquhar. 1981. « Some Relationships between the Biochemistry of Photosynthesis and the Gas Exchange of Leaves ». Planta 153 (4): 376‑87. https://doi.org/10.1007/BF00384257.
Farquhar, G. D., S. von von Caemmerer, et J. A. Berry. 1980. « A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species ». Planta 149 (1): 78‑90.
Medlyn, B. E., E. Dreyer, D. Ellsworth, M. Forstreuter, P. C. Harley, M. U. F. Kirschbaum, X. Le Roux, et al. 2002. « Temperature response of parameters of a biochemically based model of photosynthesis. II. A review of experimental data ». Plant, Cell & Environment 25 (9): 1167‑79. https://doi.org/10.1046/j.1365-3040.2002.00891.x.
Su, Y., Zhu, G., Miao, Z., Feng, Q. and Chang, Z. 2009. « Estimation of parameters of a biochemically based model of photosynthesis using a genetic algorithm ». Plant, Cell & Environment, 32: 1710-1723. https://doi.org/10.1111/j.1365-3040.2009.02036.x.
Von Caemmerer, Susanna. 2000. Biochemical models of leaf photosynthesis. Csiro publishing.
Duursma, R. A. 2015. « Plantecophys - An R Package for Analysing and Modelling Leaf Gas Exchange Data ». PLoS ONE 10(11): e0143346. https://doi:10.1371/journal.pone.0143346.
Examples
Get the fieldnames:
fieldnames(Fvcb)
# Using default values for the model:
A = Fvcb()
A.Eₐᵥ
PlantBiophysics.FvcbIter
— TypeFarquhar–von Caemmerer–Berry (FvCB) model for C3 photosynthesis (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981).
Iterative implementation, i.e. the assimilation is computed iteratively over Cᵢ.
Parameters
Tᵣ
: the reference temperature (°C) at which other parameters were measuredVcMaxRef
: maximum rate of Rubisco activity ($μmol\ m^{-2}\ s^{-1}$)JMaxRef
: potential rate of electron transport ($μmol\ m^{-2}\ s^{-1}$)RdRef
: mitochondrial respiration in the light at reference temperature ($μmol\ m^{-2}\ s^{-1}$)TPURef
: triose phosphate utilization-limited photosynthesis rate ($μmol\ m^{-2}\ s^{-1}$)Eₐᵣ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for Rd.O₂
: intercellular dioxygen concentration ($ppm$)Eₐⱼ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for JMax.Hdⱼ
: rate of decrease of the function above the optimum (also called EDVJ) for JMax.Δₛⱼ
: entropy factor for JMax.Eₐᵥ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for VcMax.Hdᵥ
: rate of decrease of the function above the optimum (also called EDVC) for VcMax.Δₛᵥ
: entropy factor for VcMax.α
: quantum yield of electron transport ($mol_e\ mol^{-1}_{quanta}$). See also eq. 4 of
Medlyn et al. (2002), equation 9.16 from von Caemmerer et al. (2009) ((1-f)/2) and its implementation in get_J
θ
: determines the curvature of the light response curve forJ~aPPFD
. See also eq. 4 of
Medlyn et al. (2002) and its implementation in get_J
iter_A_max::Int
: maximum number of iterations allowed for the iteration on the assimilation.ΔT_A::T = 1
: threshold bellow which the assimilation is considered constant. Given in
percent of change, i.e. 1% means that two successive assimilations with less than 1% difference in value are considered the same value.
Note on parameters
The default values of the temperature correction parameters are taken from plantecophys. If there is no negative effect of high temperatures on the reaction (Jmax or VcMax), then Δₛ can be set to 0.0.
θ is taken at 0.7 according to (Von Caemmerer, 2000) but it can be modified to 0.9 as in (Su et al., 2009). The larger it is, the lower the smoothing.
α is taken at 0.425 as proposed in von Caemmerer et al. (2009) eq. 9.16, where α = (1-f)/2.
Medlyn et al. (2002) found relatively low influence ("a slight effect") of α and θ. They also say that Kc, Ko and Γ* "are thought to be intrinsic properties of the Rubisco enzyme and are generally assumed constant among species".
PlantBiophysics.FvcbRaw
— TypeFarquhar–von Caemmerer–Berry (FvCB) model for C3 photosynthesis (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981). Direct implementation of the model.
Parameters
Tᵣ
: the reference temperature (°C) at which other parameters were measuredVcMaxRef
: maximum rate of Rubisco activity ($μmol\ m^{-2}\ s^{-1}$)JMaxRef
: potential rate of electron transport ($μmol\ m^{-2}\ s^{-1}$)RdRef
: mitochondrial respiration in the light at reference temperature ($μmol\ m^{-2}\ s^{-1}$)TPURef
: triose phosphate utilization-limited photosynthesis rate ($μmol\ m^{-2}\ s^{-1}$)Eₐᵣ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for Rd.O₂
: intercellular dioxygen concentration ($ppm$)Eₐⱼ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for JMax.Hdⱼ
: rate of decrease of the function above the optimum (also called EDVJ) for JMax.Δₛⱼ
: entropy factor for JMax.Eₐᵥ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for VcMax.Hdᵥ
: rate of decrease of the function above the optimum (also called EDVC) for VcMax.Δₛᵥ
: entropy factor for VcMax.α
: quantum yield of electron transport ($mol_e\ mol^{-1}_{quanta}$). See also eq. 4 of
Medlyn et al. (2002), equation 9.16 from von Caemmerer et al. (2009) ((1-f)/2) and its implementation in get_J
θ
: determines the curvature of the light response curve forJ~aPPFD
. See also eq. 4 of
Medlyn et al. (2002) and its implementation in get_J
See also
Fvcb
for the coupled assimilation / conductance modelFvcbIter
for the coupled assimilation / conductance model with an iterative resolutionget_J
AbstractPhotosynthesisModel
References
Caemmerer, S. von, et G. D. Farquhar. 1981. « Some Relationships between the Biochemistry of Photosynthesis and the Gas Exchange of Leaves ». Planta 153 (4): 376‑87. https://doi.org/10.1007/BF00384257.
Farquhar, G. D., S. von von Caemmerer, et J. A. Berry. 1980. « A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species ». Planta 149 (1): 78‑90.
Examples
Get the fieldnames:
fieldnames(FvcbRaw)
# Using default values for the model:
A = FvcbRaw()
A.Eₐᵥ
PlantBiophysics.LightIgnore
— TypeIgnore model for light interception, see here. Make the mesh invisible, and not computed. Can save a lot of time for the computations when there are components types that are not visible anyway (e.g. inside others).
PlantBiophysics.Medlyn
— TypeMedlyn et al. (2011) stomatal conductance model for CO₂.
Arguments
g0
: intercept.g1
: slope.gs_min = 0.001
: residual conductance. We consider the residual conductance being different fromg0
because in practiceg0
can be negative when fitting real-world data.
Examples
using PlantMeteo, PlantSimEngine, PlantBiophysics
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
leaf =
ModelList(
stomatal_conductance = Medlyn(0.03, 12.0),
status = (A = A, Cₛ = 380.0, Dₗ = meteo.VPD)
)
run!(leaf,meteo)
Note that we use VPD
as an approximation of Dₗ
here because we don't have the leaf temperature (i.e. Dₗ = VPD
when Tₗ = T
).
References
Medlyn, Belinda E., Remko A. Duursma, Derek Eamus, David S. Ellsworth, I. Colin Prentice, Craig V. M. Barton, Kristine Y. Crous, Paolo De Angelis, Michael Freeman, et Lisa Wingate.
- « Reconciling the optimal and empirical approaches to modelling stomatal conductance ».
Global Change Biology 17 (6): 2134‑44. https://doi.org/10.1111/j.1365-2486.2010.02375.x.
PlantBiophysics.Monteith
— TypeStruct to hold parameter and values for the energy model close to the one in Monteith and Unsworth (2013)
Arguments
aₛₕ = 2
: number of faces of the object that exchange sensible heat fluxesaₛᵥ = 1
: number of faces of the object that exchange latent heat fluxes (hypostomatous => 1)ε = 0.955
: emissivity of the objectmaxiter = 10
: maximal number of iterations allowed to close the energy balanceΔT = 0.01
(°C): maximum difference in object temperature between two iterations to consider convergence
Examples
energy_model = Monteith() # a leaf in an illuminated chamber
PlantBiophysics.OpticalProperties
— TypeOptical properties abstract struct
PlantBiophysics.Translucent
— TypeTranslucent model for light interception, see here. This model is not yet implemented in PlantBiophysics, so it takes the values from the MTG nodes, which means all nodes with the model should provide the necessary attributes:
Ra_SW_f
the absorbed flux of atmospheric radiation in the short wave bandwidth (PAR+NIR), in W m[object]⁻² (== J m[object]⁻² s⁻¹).Ra_PAR_f
the absorbed flux of atmospheric radiation in the PAR bandwidth, in W m[object]⁻² (== J m[object]⁻² s⁻¹).sky_fraction
the sky fraction seen by the the node, in [0, 1].
PlantBiophysics.σ
— Typeσ()
σ, the scattering factor of a component. See here for more details
PlantBiophysics.Fvcb_net_assimiliation
— MethodFvcb_net_assimiliation(Cᵢ,Vⱼ,Γˢ,VcMax,Km,Rd)
Net assimilation following the Farquhar–von Caemmerer–Berry (FvCB) model for C3 photosynthesis (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981)
PlantBiophysics.arrhenius
— Functionarrhenius(A,Eₐ,Tₖ,Tᵣₖ,R = PlantMeteo.Constants().R)
The Arrhenius function for dependence of the rate constant of a chemical reaction.
Arguments
A
: pre-exponential factor, a constant for each chemical reactionEₐ
: activation energy for the reaction ($J\ mol^{-1}$)Tₖ
: temperature (Kelvin)Tᵣₖ
: reference temperature (Kelvin) at which A was measuredR
: universal gas constant ($J\ mol^{-1}\ K^{-1}$)
Examples
using PlantBiophysics, PlantMeteo
# Importing physical constants
constants = PlantMeteo.Constants()
# Using default values for the model:
A = Fvcb()
# Computing Jmax:
arrhenius(A.JMaxRef,A.Eₐⱼ,28.0-constants.K₀,A.Tᵣ-constants.K₀,constants.R)
# ! Warning: temperatures must be given in Kelvin
# Computing Vcmax:
arrhenius(A.VcMaxRef,A.Eₐᵥ,28.0-constants.K₀,A.Tᵣ-constants.K₀,constants.R)
PlantBiophysics.arrhenius
— Functionarrhenius(A,Eₐ,Tₖ,Tᵣₖ,Hd,Δₛ,R = Constants().R)
The Arrhenius function for dependence of the rate constant of a chemical reaction, modified following equation (17) from Medlyn et al. (2002) to consider the negative effect of very high temperatures.
Arguments
A
: the pre-exponential factor, a constant for each chemical reactionEₐ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise
of the function (Ha in the equation of Medlyn et al. (2002))
Tₖ
: current temperature (Kelvin)Tᵣₖ
: reference temperature (Kelvin) at which A was measuredHd
: rate of decrease of the function above the optimum (called EDVJ in
MAESPA and plantecophys)
Δₛ
: entropy factorR
: is the universal gas constant ($J\ mol^{-1}\ K^{-1}$)
References
Medlyn, B. E., E. Dreyer, D. Ellsworth, M. Forstreuter, P. C. Harley, M. U. F. Kirschbaum, X. Le Roux, et al. 2002. « Temperature response of parameters of a biochemically based model of photosynthesis. II. A review of experimental data ». Plant, Cell & Environment 25 (9): 1167‑79. https://doi.org/10.1046/j.1365-3040.2002.00891.x.
Examples
using PlantBiophysics, PlantMeteo
# Importing physical constants
constants = Constants()
# Using default values for the model:
A = Fvcb()
# Computing Jmax:
PlantBiophysics.arrhenius(A.JMaxRef,A.Eₐⱼ,28.0-constants.K₀,A.Tᵣ-constants.K₀,A.Hdⱼ,A.Δₛⱼ)
# ! Warning: temperatures must be given in Kelvin
# Computing Vcmax:
PlantBiophysics.arrhenius(A.VcMaxRef,A.Eₐᵥ,28.0-constants.K₀,A.Tᵣ-constants.K₀,A.Hdᵥ,A.Δₛᵥ)
PlantBiophysics.black_body
— Methodblack_body(T, K₀, σ)
black_body(T)
Thermal infrared, i.e. longwave radiation emitted from a black body at temperature T.
T
: temperature of the object in Celsius degreeK₀
: absolute zero (°C)σ
($W\ m^{-2}\ K^{-4}$) Stefan-Boltzmann constant
Note
K₀
and σ
are taken from PlantMeteo.Constants
if not provided.
PlantBiophysics.gbh_to_gbw
— Functiongbh_to_gbw(gbh, Gbₕ_to_Gbₕ₂ₒ = PlantMeteo.Constants().Gbₕ_to_Gbₕ₂ₒ)
gbw_to_gbh(gbh, Gbₕ_to_Gbₕ₂ₒ = PlantMeteo.Constants().Gbₕ_to_Gbₕ₂ₒ)
Boundary layer conductance for water vapor from boundary layer conductance for heat.
Arguments
gbh
(m s-1): boundary layer conductance for heat under mixed convection.Gbₕ_to_Gbₕ₂ₒ
: conversion factor.
Note
Gbₕ is the sum of free and forced convection. See gbₕ_free
and gbₕ_forced
.
PlantBiophysics.gbₕ_forced
— Methodgbₕ_forced(Wind,d)
Boundary layer conductance for heat under forced convection (m s-1). See eq. E1 from Leuning et al. (1995) for more details.
Arguments
Wind
(m s-1): wind speedd
(m): characteristic dimension, e.g. leaf width (see eq. 10.9 from Monteith and Unsworth, 2013).
Notes
d
is the minimal dimension of the surface of an object in contact with the air.
References
Leuning, R., F. M. Kelliher, DGG de Pury, et E.-D. SCHULZE. 1995. « Leaf nitrogen, photosynthesis, conductance and transpiration: scaling from leaves to canopies ». Plant, Cell & Environment 18 (10): 1183‑1200.
PlantBiophysics.gbₕ_free
— Functiongbₕ_free(Tₐ,Tₗ,d,Dₕ₀)
gbₕ_free(Tₐ,Tₗ,d)
Leaf boundary layer conductance for heat under free convection (m s-1).
Arguments
Tₐ
(°C): air temperatureTₗ
(°C): leaf temperatured
(m): characteristic dimension, e.g. leaf width (see eq. 10.9 from Monteith and Unsworth, 2013).Dₕ₀ = 21.5e-6
: molecular diffusivity for heat at base temperature. Use value from
PlantMeteo.Constants
if not provided.
Note
R
and Dₕ₀
can be found using PlantMeteo.Constants
. To transform in $mol\ m^{-2}\ s^{-1}$, use ms_to_mol
.
References
Leuning, R., F. M. Kelliher, DGG de Pury, et E.-D. SCHULZE. 1995. « Leaf nitrogen, photosynthesis, conductance and transpiration: scaling from leaves to canopies ». Plant, Cell & Environment 18 (10): 1183‑1200.
Monteith, John, et Mike Unsworth. 2013. Principles of environmental physics: plants, animals, and the atmosphere. Academic Press. Paragraph 10.1.3, eq. 10.9.
PlantBiophysics.get_Cᵢᵥ
— MethodAnalytic resolution of Cᵢ when the RuBisCo activity is limiting ($μmol\ mol^{-1}$)
Arguments
VcMAX
: maximum rate of RuBisCo activity($μmol\ m^{-2}\ s^{-1}$)Γˢ
: CO2 compensation point $Γ^⋆$ ($μmol\ mol^{-1}$)Cₛ
: Air CO₂ concentration at the leaf surface ($μmol\ mol^{-1}$)Rd
: day respiration ($μmol\ m^{-2}\ s^{-1}$)g0
: residual stomatal conductance ($μmol\ m^{-2}\ s^{-1}$)st_closure
: stomatal conductance term computed from a given implementation of a Gs model,
e.g. Medlyn
.
Km
: effective Michaelis–Menten coefficient for CO2 ($μ mol\ mol^{-1}$)
PlantBiophysics.get_Cᵢⱼ
— MethodAnalytic resolution of Cᵢ when the rate of electron transport is limiting ($μmol\ mol^{-1}$)
Arguments
Vⱼ
: RuBP regeneration (J/4.0, $μmol\ m^{-2}\ s^{-1}$)Γˢ
: CO2 compensation point $Γ^⋆$ ($μmol\ mol^{-1}$)Cₛ
: Air CO₂ concentration at the leaf surface ($μmol\ mol^{-1}$)Rd
: day respiration ($μmol\ m^{-2}\ s^{-1}$)g0
: residual stomatal conductance ($μmol\ m^{-2}\ s^{-1}$)st_closure
: stomatal conductance term computed from a given implementation of a Gs model,
e.g. Medlyn
.
References
Duursma, R. A., et B. E. Medlyn. 2012. « MAESPA: a model to study interactions between water limitation, environmental drivers and vegetation function at tree and stand levels, with an example application to [CO2] × drought interactions ». Geoscientific Model Development 5 (4): 919‑40. https://doi.org/10.5194/gmd-5-919-2012.
Wang and Leuning, 1998
PlantBiophysics.get_Dₕ
— Functionget_Dₕ(T,Dₕ₀)
get_Dₕ(T)
Dₕ -molecular diffusivity for heat at base temperature- from Dₕ₀ (corrected by temperature). See Monteith and Unsworth (2013, eq. 3.10).
Arguments
Tₐ
(°C): temperatureDₕ₀
: molecular diffusivity for heat at base temperature. Use value fromPlantMeteo.Constants
if not provided.
References
Monteith, John, et Mike Unsworth. 2013. Principles of environmental physics: plants, animals, and the atmosphere. Academic Press. Paragraph 10.1.3.
PlantBiophysics.get_J
— MethodRate of electron transport J ($μmol\ m^{-2}\ s^{-1}$), computed using the smaller root of the quadratic equation (eq. 4 from Medlyn et al., 2002):
θ * J² - (α * aPPFD + JMax) * J + α * aPPFD * JMax
NB: we use the smaller root because considering the range of values for θ and α (quite stable), and aPPFD and JMax, the function always tends to JMax with high aPPFD with the smaller root (behavior we are searching), and the opposite with the larger root.
Returns
A tuple with (A, Gₛ, Cᵢ):
- A: carbon assimilation (μmol m-2 s-1)
- Gₛ: stomatal conductance (mol m-2 s-1)
- Cᵢ: intercellular CO₂ concentration (ppm)
Arguments
aPPFD
: absorbed photon irradiance ($μmol_{quanta}\ m^{-2}\ s^{-1}$)α
: quantum yield of electron transport ($mol_e\ mol^{-1}_{quanta}$)JMax
: maximum rate of electron transport ($μmol\ m^{-2}\ s^{-1}$)θ
: determines the shape of the non-rectangular hyperbola (-)
References
Medlyn, B. E., E. Dreyer, D. Ellsworth, M. Forstreuter, P. C. Harley, M. U. F. Kirschbaum, X. Le Roux, et al. 2002. « Temperature response of parameters of a biochemically based model of photosynthesis. II. A review of experimental data ». Plant, Cell & Environment 25 (9): 1167‑79. https://doi.org/10.1046/j.1365-3040.2002.00891.x.
Von Caemmerer, Susanna. 2000. Biochemical models of leaf photosynthesis. Csiro publishing.
Examples
# Using default values for the model:
julia> A = Fvcb()
Fvcb{Float64}(25.0, 200.0, 250.0, 0.6, 9999.0, 46390.0, 210.0, 29680.0, 200000.0, 631.88, 58550.0, 200000.0, 629.26, 0.425, 0.7)
julia> PlantBiophysics.get_J(1500, A.JMaxRef, A.α, A.θ)
216.5715752671342
PlantBiophysics.get_km
— FunctionCompute the effective Michaelis–Menten coefficient for CO2 $Km$ ($μ mol\ mol^{-1}$) according to Medlyn et al. (2002), equations (5) and (6).
References
Medlyn, B. E., E. Dreyer, D. Ellsworth, M. Forstreuter, P. C. Harley, M. U. F. Kirschbaum, X. Le Roux, et al. 2002. « Temperature response of parameters of a biochemically based model of photosynthesis. II. A review of experimental data ». Plant, Cell & Environment 25 (9): 1167‑79. https://doi.org/10.1046/j.1365-3040.2002.00891.x.
Examples
# computing the temperature dependence of γˢ:
get_km(28,25,210.0)
PlantBiophysics.get_model
— Methodget_model(x)
Return the model (the actual struct) given its name passed as a String.
PlantBiophysics.get_process
— Methodget_process(x)
Return the process type (the actual struct) given its name passed as a String.
PlantBiophysics.grey_body
— MethodThermal infrared, i.e. longwave radiation emitted from an object at temperature T.
T
: temperature of the object in Celsius degreeε
object emissivity (not to confuse with ε the
ratio of molecular weights from PlantMeteo.Constants
). A typical value for a leaf is 0.955.
K₀
: absolute zero (°C)σ
($W\ m^{-2}\ K^{-4}$) Stefan-Boltzmann constant
Note
K₀
and σ
are taken from PlantMeteo.Constants
if not provided.
Examples
# Thermal infrared radiation of water at 25 °C:
grey_body(25.0, 0.96)
PlantBiophysics.gs_closure
— Functiongs_closure(::Medlyn, models, status, meteo, constants=nothing, extra=nothing)
Stomatal closure for CO₂ according to Medlyn et al. (2011). Carefull, this is just a part of the computation of the stomatal conductance.
The result of this function is then used as:
gs_mod = gs_closure(leaf,meteo)
# And then stomatal conductance (μmol m-2 s-1) calling [`stomatal_conductance`](@ref):
Gₛ = leaf.stomatal_conductance.g0 + gs_mod * leaf.status.A
Arguments
::Medlyn
: an instance of theMedlyn
model typemodels::ModelList
: AModelList
struct holding the parameters for the models.status
: A status struct holding the variables for the models.meteo
: meteorology structure, seeAtmosphere
. Is not used in this model.constants
: A constants struct holding the constants for the models. Is not used in this model.extra
: A struct holding the extra variables for the models. Is not used in this model.
Details
Use variables()
on Medlyn to get the variables that must be instantiated in the ModelList
struct.
Notes
Cₛ
is used instead ofCₐ
because Gₛ is between the surface and the intercellular space. The conductance
between the atmosphere and the surface is accounted for using the boundary layer conductance (Gbc
in Monteith
). Medlyn et al. (2011) uses Cₐ
in their paper because they relate their models to the measurements made at leaf level, with a well-mixed chamber whereCₛ ≈ Cₐ
.
Dₗ
is forced to be >= 1e-9 because it is used in a squared root. It is prefectly acceptable to
get a negative Dₗ when leaves are re-hydrating from air. Cloud forests are the perfect example. See e.g.: Guzmán‐Delgado, P, Laca, E, Zwieniecki, MA. Unravelling foliar water uptake pathways: The contribution of stomata and the cuticle. Plant Cell Environ. 2021; 1– 13. https://doi.org/10.1111/pce.14041
Examples
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
leaf =
ModelList(
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Cₛ = 380.0, Dₗ = meteo.VPD)
)
gs_mod = gs_closure(leaf, meteo)
A = 20 # example assimilation (μmol m-2 s-1)
Gs = leaf.stomatal_conductance.g0 + gs_mod * A
# Or more directly using `run!()`:
leaf =
ModelList(
stomatal_conductance = Medlyn(0.03, 12.0),
status = (A = A, Cₛ = 380.0, Dₗ = meteo.VPD)
)
run!(leaf,meteo)
Note that we use VPD
as an approximation of Dₗ
here because we don't have the leaf temperature (i.e. Dₗ = VPD
when Tₗ = T
).
References
Medlyn, Belinda E., Remko A. Duursma, Derek Eamus, David S. Ellsworth, I. Colin Prentice, Craig V. M. Barton, Kristine Y. Crous, Paolo De Angelis, Michael Freeman, et Lisa Wingate.
- « Reconciling the optimal and empirical approaches to modelling stomatal conductance ».
Global Change Biology 17 (6): 2134‑44. https://doi.org/10.1111/j.1365-2486.2010.02375.x.
PlantBiophysics.gs_closure
— FunctionConstant stomatal closure. Usually called from a photosynthesis model.
Note
meteo
is just declared here for compatibility with other formats of calls.
PlantBiophysics.gsc_to_gsw
— Functiongsc_to_gsw(Gₛ, Gsc_to_Gsw = PlantMeteo.Constants().Gsc_to_Gsw)
Conversion of a stomatal conductance for CO₂ into stomatal conductance for H₂O.
PlantBiophysics.gsw_to_gsc
— Functiongsw_to_gsc(Gₛ, Gsc_to_Gsw = PlantMeteo.Constants().Gsc_to_Gsw)
Conversion of a stomatal conductance for H₂O into stomatal conductance for CO₂.
PlantBiophysics.instantiate
— Methodinstantiate(x)
Instantiate a model given its parameter names, considering that parameter names can be different compared to the model fields (used to insure compatibility with Archimed).
PlantBiophysics.is_model
— Methodis_model(model)
Check if a model object has the"Group" and "Type" keys as the first level of a Dict type object. But the function is generic as long as the input struct has a keys()
method.
Examples
models = read_model("path_to_a_model_file.yaml")
is_model(models)
PlantBiophysics.latent_heat
— Methodlatent_heat(Rn, VPD, γˢ, Rbₕ, Δ, ρ, aₛₕ, Cₚ)
latent_heat(Rn, VPD, γˢ, Rbₕ, Δ, ρ, aₛₕ)
λE -the latent heat flux (W m-2)- using the Monteith and Unsworth (2013) definition corrected by Schymanski et al. (2017), eq.22.
Rn
(W m-2): net radiation. Carefull: not the isothermal net radiationVPD
(kPa): air vapor pressure deficitγˢ
(kPa K−1): apparent value of psychrometer constant (seePlantMeteo.γ_star
)Rbₕ
(s m-1): resistance for heat transfer by convection, i.e. resistance to sensible heatΔ
(KPa K-1): rate of change of saturation vapor pressure with temperature (seePlantMeteo.e_sat_slope
)ρ
(kg m-3): air density of moist air.aₛₕ
(1,2): number of sides that exchange energy for heat (2 for leaves)Cₚ
(J K-1 kg-1): specific heat of air for constant pressure
References
Monteith, J. and Unsworth, M., 2013. Principles of environmental physics: plants, animals, and the atmosphere. Academic Press. See eq. 13.33.
Schymanski et al. (2017), Leaf-scale experiments reveal an important omission in the Penman–Monteith equation, Hydrology and Earth System Sciences. DOI: https://doi.org/10.5194/hess-21-685-2017. See equ. 22.
Examples
Tₐ = 20.0 ; P = 100.0 ;
ρ = air_density(Tₐ, P) # in kg m-3
Δ = e_sat_slope(Tₐ)
latent_heat(300.0, 2.0, 0.1461683, 50.0, Δ, ρ, 2.0)
PlantBiophysics.mol_to_ms
— Methodms_to_mol(G,T,P,R,K₀)
ms_to_mol(G,T,P)
Conversion of a conductance G
from $mol\ m^{-2}\ s^{-1}$ to $m\ s^{-1}$.
Arguments
G
($m\ s^{-1}$): conductanceT
(°C): air temperatureP
(kPa): air pressureR
($J\ mol^{-1}\ K^{-1}$): universal gas constant.K₀
(°C): absolute zero
See also
ms_to_mol
for the inverse process.
PlantBiophysics.ms_to_mol
— Methodms_to_mol(G,T,P,R,K₀)
ms_to_mol(G,T,P)
Conversion of a conductance G
from $m\ s^{-1}$ to $mol\ m^{-2}\ s^{-1}$.
Arguments
G
($m\ s^{-1}$): conductanceT
(°C): air temperatureP
(kPa): air pressureR
($J\ mol^{-1}\ K^{-1}$): universal gas constant.K₀
(°C): absolute zero
See also
mol_to_ms
for the inverse process.
PlantBiophysics.net_longwave_radiation
— Methodnet_longwave_radiation(T₁,T₂,ε₁,ε₂,F₁,K₀,σ)
net_longwave_radiation(T₁,T₂,ε₁,ε₂,F₁)
Net longwave radiation fluxes (i.e. thermal radiation, W m-2) between an object and another. The object of interest is at temperature T₁ and has an emissivity ε₁, and the object with which it exchanges energy is at temperature T₂ and has an emissivity ε₂.
If the result is positive, then the object of interest gain energy.
Arguments
T₁
(Celsius degree): temperature of the target object (object 1)T₂
(Celsius degree): temperature of the object with which there is potential exchange (object 2)ε₁
: object 1 emissivityε₂
: object 2 emissivityF₁
: view factor (0-1), i.e. visible fraction of object 2 from object 1 (see note)K₀
: absolute zero (°C)σ
($W\ m^{-2}\ K^{-4}$) Stefan-Boltzmann constant
Note
F₁
, the view factor (also called shape factor) is a coefficient applied to the semi-hemisphere field of view of object 1 that "sees" object 2. E.g. a leaf can be viewed as a plane. If one side of the leaf sees only object 2 in its field of view (e.g. the sky), then F₁ = 1
. Then the net longwave radiation flux for this part of the leaf is multiplied by its actual surface to get the exchange. Note that we apply reciprocity between the two objects for the view factor (they have the same value), i.e.: A₁F₁₂ = A₂F₂₁.
Then, if we take a leaf as object 1, and the sky as object 2, the visible fraction of sky viewed by the leaf would be:
0.5
if the leaf is on top of the canopy, i.e. the upper side of the leaf sees the sky,
the side bellow sees other leaves and the soil.
- between 0 and 0.5 if it is within the canopy and partly shaded by other objects.
Note that A₁
for a leaf is twice its common used leaf area, because A₁
is the total leaf area of the object that exchange energy.
# Net thermal radiation fluxes between a leaf and the sky considering the leaf at the top of
# the canopy:
Tₗ = 25.0 ; Tₐ = 20.0
ε₁ = 0.955 ; ε₂ = 1.0
Ra_LW_f = net_longwave_radiation(Tₗ,Tₐ,ε₁,ε₂,1.0)
Ra_LW_f
# Ra_LW_f is the net longwave radiation flux between the leaf and the atmosphere per surface area.
# To get the actual net longwave radiation flux we need to multiply by the surface of the
# leaf, e.g. for a leaf of 2cm²:
leaf_area = 2e-4 # in m²
Ra_LW_f * leaf_area
# The leaf lose ~0.0055 W towards the atmosphere.
References
Cengel, Y, et Transfer Mass Heat. 2003. A practical approach. New York, NY, USA: McGraw-Hill.
PlantBiophysics.read_licor6400
— Methodread_licor6400(file; abs=0.85)
Import Licor6400 data (such as Medlyn 2001 data) with the units and names corresponding to the ones used in PlantBiophysics.jl.
Arguments
file
: a string or a vector of strings containing the path to the file(s) to read.abs=0.85
: the absorptance of the leaf. Default is 0.85 (von Caemmerer et al., 2009).
PlantBiophysics.read_model
— Methodread_model(file)
Read a model file. The model file holds the choice and the parameterization of the models.
Arguments
file::String
: path to a model file
Examples
file = joinpath(dirname(dirname(pathof(PlantBiophysics))), "test", "inputs", "models", "plant_coffee.yml")
models = read_model(file)
PlantBiophysics.read_walz
— Methodread_walz(file; abs=0.85)
Import a Walz GFS-3000 output file, perform variables conversion and rename according to package conventions.
Arguments
file
: a string or a vector of strings containing the path to the file(s) to read.abs=0.85
: the absorptance of the leaf. Default is 0.85 (von Caemmerer et al., 2009).
Returns
A DataFrame containing the data read and transformed from the file(s). The units are the same than in the Walz output file, except for:
- Dₗ: kPa
- Rh: fraction (0-1)
- VPD: kPa
- Gₛ: mol[CO₂] m⁻² s⁻¹
Examples
Reading one file:
file = joinpath(dirname(dirname(pathof(PlantBiophysics))),"test","inputs","data","P1F20129.csv")
read_walz(file)
We can also read multiple files at once:
files = readdir(joinpath(dirname(dirname(pathof(PlantBiophysics))),"test","inputs","data"), join = true)
df = read_walz(files)
In this case, the source of the data is added as the source
columns into the DataFrame:
df.source
PlantBiophysics.sensible_heat
— Methodsensible_heat(Rn, VPD, γˢ, Rbₕ, Δ, ρ, aₛₕ, Cₚ)
sensible_heat(Rn, VPD, γˢ, Rbₕ, Δ, ρ, aₛₕ)
H -the sensible heat flux (W m-2)- using the Monteith and Unsworth (2013) definition corrected by Schymanski et al. (2017), eq.22.
Rn
(W m-2): net radiation. Carefull: not the isothermal net radiationVPD
(kPa): air vapor pressure deficitγˢ
(kPa K−1): apparent value of psychrometer constant (seePlantMeteo.γ_star
)Rbₕ
(s m-1): resistance for heat transfer by convection, i.e. resistance to sensible heatΔ
(KPa K-1): rate of change of saturation vapor pressure with temperature (seePlantMeteo.e_sat_slope
)ρ
(kg m-3): air density of moist air.aₛₕ
(1,2): number of sides that exchange energy for heat (2 for leaves)Cₚ
(J K-1 kg-1): specific heat of air for constant pressure
References
Monteith, J. and Unsworth, M., 2013. Principles of environmental physics: plants, animals, and the atmosphere. Academic Press. See eq. 13.33.
Schymanski et al. (2017), Leaf-scale experiments reveal an important omission in the Penman–Monteith equation, Hydrology and Earth System Sciences. DOI: https://doi.org/10.5194/hess-21-685-2017. See equ. 22.
Examples
Tₐ = 20.0 ; P = 100.0 ;
ρ = air_density(Tₐ, P) # in kg m-3
Δ = PlantMeteo.e_sat_slope(Tₐ)
sensible_heat(300.0, 2.0, 0.1461683, 50.0, Δ, ρ, 2.0)
PlantBiophysics.Γ_star
— FunctionΓ_star(Tₖ,Tᵣₖ,R = PlantMeteo.Constants().R)
CO₂ compensation point $Γ^⋆$ ($μ mol\ mol^{-1}$) according to equation (12) from Medlyn et al. (2002).
$Γ^⋆$ is the [CO₂] at which oxygenation proceeds at
twice the rate of carboxylation causing photosynthetic uptake of CO2 to be exactly compensated by photorespiratory CO₂ release (Sharkey et al., 2007).
Notes
Could be replaced by equation (38) from Farquhar et al. (1980), but Medlyn et al. (2002) states that $Γ^⋆$ as a relatively low effect on the model outputs.
Arguments
Tₖ
(Kelvin): current temperatureTᵣₖ
(Kelvin): reference temperature at which A was measuredR
($J\ mol^{-1}\ K^{-1}$): is the universal gas constant
Examples
using PlantBiophysics, PlantMeteo
# Importing the physical constants:
constants = Constants()
# computing the temperature dependence of γˢ:
Γ_star(28-constants.K₀,25-constants.K₀,constants.R)
References
Farquhar, G. D., S. von von Caemmerer, et J. A. Berry. 1980. « A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species ». Planta 149 (1): 78‑90.
Medlyn, B. E., E. Dreyer, D. Ellsworth, M. Forstreuter, P. C. Harley, M. U. F. Kirschbaum, X. Le Roux, et al. 2002. « Temperature response of parameters of a biochemically based model of photosynthesis. II. A review of experimental data ». Plant, Cell & Environment 25 (9): 1167‑79. https://doi.org/10.1046/j.1365-3040.2002.00891.x.
Sharkey, Thomas D., Carl J. Bernacchi, Graham D. Farquhar, et Eric L. Singsaas. 2007. « Fitting Photosynthetic Carbon Dioxide Response Curves for C3 Leaves ». Plant, Cell & Environment 30 (9): 1035‑40. https://doi.org/10.1111/j.1365-3040.2007.01710.x.
Un-exported functions
PlantBiophysics.f_ms_to_mol
— MethodConversion factor between conductance in $m\ s^{-1}$ to $mol\ m^{-2}\ s^{-1}$.
Arguments
T
(°C): air temperatureP
(kPa): air pressureR
($J\ mol^{-1}\ K^{-1}$): universal gas constant.K₀
(°C): absolute zero
PlantBiophysics.locf!
— Methodlocf!(var)
Last observation carried forward (LOCF) iterates forwards var
and fills missing data with the last existing observation.
This function is heavily inspired (i.e. copied) by the function locf
in the package Impute
(MIT licence). See here for more details.
PlantBiophysics.max_root
— MethodMaximum value between two roots of a quadratic equation.
PlantBiophysics.negative_root
— MethodNegative root of a quadratic equation, but returns 0 if Δ is negative. Careful, this is not right mathematically, but biologically OK because used in the computation of Cᵢ (gives A = 0 in this case).
PlantBiophysics.positive_root
— MethodPositive root of a quadratic equation, but returns 0 if Δ is negative. Careful, this is not right mathematically, but biologically OK because used in the computation of Cᵢ (gives A = 0 in this case).
PlantBiophysics.γ_star
— Methodγstar(γ, ash, a_s, rbv, Rsᵥ, Rbₕ)
γ∗, the apparent value of psychrometer constant (kPa K−1).
Arguments
γ
(kPa K−1): psychrometer constantaₛₕ
(1,2): number of faces exchanging heat fluxes (see Schymanski et al., 2017)aₛᵥ
(1,2): number of faces exchanging water fluxes (see Schymanski et al., 2017)Rbᵥ
(s m-1): boundary layer resistance to water vaporRsᵥ
(s m-1): stomatal resistance to water vaporRbₕ
(s m-1): boundary layer resistance to heat
Note
Using the corrigendum from Schymanski et al. (2017) in here so the definition of latent_heat
remains generic.
Not to be confused with Γ_star
the CO₂ compensation point.
References
Monteith, John L., et Mike H. Unsworth. 2013. « Chapter 13 - Steady-State Heat Balance: (i) Water Surfaces, Soil, and Vegetation ». In Principles of Environmental Physics (Fourth Edition), edited by John L. Monteith et Mike H. Unsworth, 217‑47. Boston: Academic Press.
Schymanski, Stanislaus J., et Dani Or. 2017. Leaf-Scale Experiments Reveal an Important Omission in the Penman–Monteith Equation ». Hydrology and Earth System Sciences 21 (2): 685‑706. https://doi.org/10.5194/hess-21-685-2017.
PlantBiophysics.λE_to_E
— FunctionλE_to_E(λE, λ, Mₕ₂ₒ=PlantMeteo.Constants().Mₕ₂ₒ)
E_to_λE(E, λ, Mₕ₂ₒ=PlantMeteo.Constants().Mₕ₂ₒ)
Conversion from latent heat (W m-2) to evaporation (mol[H₂O] m-2 s-1) or the opposite (E_to_λE
).
Arguments
λE
: latent heat flux (W m-2)E
: water evaporation (mol[H₂O] m-2 s-1)λ
(J kg-1): latent heat of vaporizationMₕ₂ₒ = 18.0e-3
(kg mol-1): Molar mass for water.
Note
λ
can be computed using:
λ = latent_heat_vaporization(T, constants.λ₀)
It is also directly available from the Atmosphere
structure, and by extention in Weather
.
To convert E from mol[H₂O] m-2 s-1 to mm s-1 you can simply do:
E_mms = E_mol / constants.Mₕ₂ₒ
mm[H₂O] s-1 is equivalent to kg[H₂O] m-2 s-1, wich is equivalent to l[H₂O] m-2 s-1.
PlantSimEngine.fit
— Methodfit(::Type{Beer}, df; J_to_umol=PlantMeteo.Constants().J_to_umol)
Optimize k
, the coefficient of the Beer-Lambert law of light extinction.
Arguments
- df: a DataFrame with columns RiPARf (Incoming light flux in the PAR, W m⁻²),
aPPFD (μmol m⁻² s⁻¹) and LAI (m² m⁻²), where each row is an observation. The column names should match exactly.
Examples
using PlantSimEngine, PlantBiophysics, DataFrames, PlantMeteo
# Defining dummy data:
df = DataFrame(
Ri_PAR_f = [200.0, 250.0, 300.0],
aPPFD = [548.4, 685.5, 822.6],
LAI = [1.0, 1.0, 1.0],
T = [20.0, 20.0, 20.0],
Rh = [0.5, 0.5, 0.5],
Wind = [10.0, 10.0, 10.0],
)
# Fit the parameters values:
k = fit(Beer, df)
# Re-simulating aPPFD using the newly fitted parameters:
w = Weather(df)
leaf = ModelList(
Beer(k.k),
status = (LAI = df.LAI,)
)
run!(leaf, w)
leaf
PlantSimEngine.fit
— Methodfit(::Type{Medlyn}, df)
Optimize the parameters of the Medlyn
model. Note that here Gₛ is stomatal conductance for CO2, not H2O.
Careful, g0 and g1 are fitted on CO₂ stomatal conductance, and so are given for CO₂, not H₂O. If you want to compare the values with the ones usually given in the literature, you need to multiply g0 and g1 by 1.57.
Arguments
- df: a DataFrame with columns A, Dₗ, Cₐ and Gₛ, where each row is an observation. The column
names should match exactly.
Note that Dₗ is the leaf to air vapour pressure deficit, computed as follows:
Dₗ = PlantMeteo.e_sat(Tₗ) - PlantMeteo.e_sat(T) * Rh
with Tₗ the leaf temperature, T the air temperature and Rh the air relative humidity. If Tₗ is not available, you can use Tₗ = T as a crude approximation, which gives Dₗ = VPD.
Examples
using PlantBiophysics, PlantMeteo, Plots, DataFrames
file = joinpath(dirname(dirname(pathof(PlantBiophysics))),"test","inputs","data","P1F20129.csv")
df = read_walz(file)
# Removing the CO2 and ligth Curve, we fit the parameters on the Rh curve:
filter!(x -> x.curve != "ligth Curve" && x.curve != "CO2 Curve", df)
# Fit the parameters values:
g0, g1 = fit(Medlyn, df)
# Re-simulating Gₛ using the newly fitted parameters:
w = Weather(select(df, :T, :P, :Rh, :Cₐ, :VPD, :T => (x -> 10) => :Wind))
leaf = ModelList(
stomatal_conductance = Medlyn(g0, g1),
status = (A = df.A, Cₛ = df.Cₐ, Dₗ = df.Dₗ)
)
run!(leaf, w)
# Visualising the results:
gsAvpd = PlantBiophysics.GsADₗ(g0, g1, df.Gₛ, df.Dₗ, df.A, df.Cₐ, leaf[:Gₛ])
plot(gsAvpd,leg=:bottomright)
# As in [`Medlyn`](@ref) reference paper, linear regression is also plotted.
PlantSimEngine.fit
— Methodfit(
::Type{Fvcb}, df;
Tᵣ = nothing,
VcMaxRef = 0.0, JMaxRef = 0.0, RdRef = 0.0, TPURef = 0.0,
VcMaxRef_bound=[0.0, Inf], JMaxRef_bound=[0.0, Inf], RdRef_bound=[0.0, Inf], TPURef_bound=[0.0, Inf],
verbose = true,
Eₐᵣ=46390.0, O₂=210.0, Eₐⱼ=29680.0, Hdⱼ=200000.0, Δₛⱼ=631.88, Eₐᵥ=58550.0, Hdᵥ=200000.0, Δₛᵥ=629.26, α=0.425, θ=0.7
)
Optimize the parameters of the Fvcb
model. Also works for FvcbIter
.
Arguments
- df: a DataFrame with columns A, aPPFD, Tₗ and Cᵢ, where each row is an observation. The column
names should match exactly
- Tᵣ: reference temperature for the optimized parameter values. If not provided, use the average Tₗ.
- VcMaxRef, JMaxRef, RdRef, TPURef: initialisation values for the parameter optimisation
- VcMaxRefbound, JMaxRefbound, RdRefbound, TPURefbound: boundary values for the parameter optimisation
- verbose: if true, print the optimisation results
- Eₐᵣ, O₂, Eₐⱼ, Hdⱼ, Δₛⱼ, Eₐᵥ, Hdᵥ, Δₛᵥ, α, θ: parameters for the FvCB model
FvCB model parameters:
Parameters
Tᵣ
: the reference temperature (°C) at which other parameters were measuredVcMaxRef
: maximum rate of Rubisco activity ($μmol\ m^{-2}\ s^{-1}$)JMaxRef
: potential rate of electron transport ($μmol\ m^{-2}\ s^{-1}$)RdRef
: mitochondrial respiration in the light at reference temperature ($μmol\ m^{-2}\ s^{-1}$)TPURef
: triose phosphate utilization-limited photosynthesis rate ($μmol\ m^{-2}\ s^{-1}$)Eₐᵣ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for Rd.O₂
: intercellular dioxygen concentration ($ppm$)Eₐⱼ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for JMax.Hdⱼ
: rate of decrease of the function above the optimum (also called EDVJ) for JMax.Δₛⱼ
: entropy factor for JMax.Eₐᵥ
: activation energy ($J\ mol^{-1}$), or the exponential rate of rise for VcMax.Hdᵥ
: rate of decrease of the function above the optimum (also called EDVC) for VcMax.Δₛᵥ
: entropy factor for VcMax.α
: quantum yield of electron transport ($mol_e\ mol^{-1}_{quanta}$). See also eq. 4 of
Medlyn et al. (2002), equation 9.16 from von Caemmerer et al. (2009) ((1-f)/2) and its implementation in get_J
θ
: determines the curvature of the light response curve forJ~aPPFD
. See also eq. 4 of
Medlyn et al. (2002) and its implementation in get_J
Note that boundary values are set to [0.0, Inf] by default. You should adapt them to your use case. Note that no boundary can be set using [-Inf, Inf].
Examples
using PlantBiophysics, PlantSimEngine, PlantMeteo, Plots, DataFrames
file = joinpath(dirname(dirname(pathof(PlantBiophysics))),"test","inputs","data","P1F20129.csv")
df = read_walz(file)
# Removing the Rh and light curves for the fitting because temperature varies
filter!(x -> x.curve != "Rh Curve" && x.curve != "ligth Curve", df)
# Fit the parameter values:
VcMaxRef, JMaxRef, RdRef, TPURef = fit(Fvcb, df; Tᵣ = 25.0)
# Note that Tᵣ was set to 25 °C in our response curve. You should adapt its value to what you
# had during the response curves
# Checking the results:
filter!(x -> x.curve == "CO2 Curve", df)
# Sort the DataFrame by :Cᵢ to get ordered data point
sort!(df, :Cᵢ)
# Re-simulating A using the newly fitted parameters:
leaf =
ModelList(
photosynthesis = FvcbRaw(VcMaxRef = VcMaxRef, JMaxRef = JMaxRef, RdRef = RdRef, TPURef = TPURef),
status = (Tₗ = df.Tₗ, aPPFD = df.aPPFD, Cᵢ = df.Cᵢ)
)
run!(leaf)
df_sim = DataFrame(leaf)
# Visualising the results:
ACi_struct = PlantBiophysics.ACi(VcMaxRef, JMaxRef, RdRef, df.A, df_sim.A, df[:,:Cᵢ], df_sim.Cᵢ)
plot(ACi_struct,leg=:bottomright)
# Note that we can also simulate the results using the full photosynthesis model too (Fvcb):
# Adding the windspeed to simulate the boundary-layer conductance (we put a high value):
df[!, :Wind] .= 10.0
leaf = ModelList(
photosynthesis = Fvcb(VcMaxRef = VcMaxRef, JMaxRef = JMaxRef, RdRef = RdRef, Tᵣ = 25.0, TPURef = TPURef),
# stomatal_conductance = ConstantGs(0.0, df[i,:Gₛ]),
stomatal_conductance = Medlyn(0.03, 12.),
status = (Tₗ = df.Tₗ, aPPFD = df.aPPFD, Cₛ = df.Cₐ, Dₗ = 0.1)
)
w = Weather(select(df, :T, :P, :Rh, :Cₐ, :T => (x -> 10) => :Wind))
run!(leaf, w)
df_sim2 = DataFrame(leaf)
# And finally we plot the results:
ACi_struct_full = PlantBiophysics.ACi(VcMaxRef, JMaxRef, RdRef, df.A, df_sim2.A, df[:,:Cᵢ], df_sim2.Cᵢ)
plot(ACi_struct_full,leg=:bottomright)
# Note that the results differ a bit because there are more variables that are re-simulated (e.g. Cᵢ)
PlantSimEngine.run!
— Functionrun!(::LightIgnore, models::ModelList, status, meteo,constants = Constants())
Method for when light interception should be explicitely ignored (do nothing).
Arguments
::LightIgnore
: anIgnore
model.models
: aModelList
struct with a missing energy model.status
: the status of the model, usually the one from the models (i.e. models.status)meteo
: meteorology structure, seeAtmosphere
constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
PlantSimEngine.run!
— Functionrun!(::Monteith, models, status, meteo, constants=Constants())
Leaf energy balance according to Monteith and Unsworth (2013), and corrigendum from Schymanski et al. (2017). The computation is close to the one from the MAESPA model (Duursma et al., 2012, Vezy et al., 2018) here. The leaf temperature is computed iteratively to close the energy balance using the mass flux (~ Rn - λE).
Arguments
::Monteith
: a Monteith model, usually from a model list (i.e. m.energy_balance)models
: AModelList
struct holding the parameters for the model with
initialisations for: - Ra_SW_f
(W m-2): net shortwave radiation (PAR + NIR). Often computed from a light interception model - sky_fraction
(0-2): view factor between the object and the sky for both faces (see details). - d
(m): characteristic dimension, e.g. leaf width (see eq. 10.9 from Monteith and Unsworth, 2013).
status
: the status of the model, usually the model list status (i.e. leaf.status)meteo
: meteorology structure, seeAtmosphere
constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
Details
The sky_fraction in the variables is equal to 2 if all the leaf is viewing is sky (e.g. in a controlled chamber), 1 if the leaf is e.g. up on the canopy where the upper side of the leaf sees the sky, and the side bellow sees soil + other leaves that are all considered at the same temperature than the leaf, or less than 1 if it is partly shaded.
Notes
If you want the algorithm to print a message whenever it does not reach convergence, use the debugging mode by executing this in the REPL: ENV["JULIA_DEBUG"] = PlantBiophysics
.
More information here.
Examples
meteo = Atmosphere(T = 22.0, Wind = 0.8333, P = 101.325, Rh = 0.4490995)
# Using a constant value for Gs:
leaf = ModelList(
energy_balance = Monteith(),
photosynthesis = Fvcb(),
stomatal_conductance = ConstantGs(0.0, 0.0011),
status = (Ra_SW_f = 13.747, sky_fraction = 1.0, d = 0.03)
)
run!(leaf,meteo)
leaf.status.Rn
julia> 12.902547446281233
# Using the model from Medlyn et al. (2011) for Gs:
leaf = ModelList(
energy_balance = Monteith(),
photosynthesis = Fvcb(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Ra_SW_f = 13.747, sky_fraction = 1.0, aPPFD = 1500.0, d = 0.03)
)
run!(leaf,meteo)
leaf[:Rn]
leaf[:Ra_LW_f]
leaf[:A]
DataFrame(leaf)
References
Duursma, R. A., et B. E. Medlyn. 2012. « MAESPA: a model to study interactions between water limitation, environmental drivers and vegetation function at tree and stand levels, with an example application to [CO2] × drought interactions ». Geoscientific Model Development 5 (4): 919‑40. https://doi.org/10.5194/gmd-5-919-2012.
Monteith, John L., et Mike H. Unsworth. 2013. « Chapter 13 - Steady-State Heat Balance: (i) Water Surfaces, Soil, and Vegetation ». In Principles of Environmental Physics (Fourth Edition), edited by John L. Monteith et Mike H. Unsworth, 217‑47. Boston: Academic Press.
Schymanski, Stanislaus J., et Dani Or. 2017. « Leaf-Scale Experiments Reveal an Important Omission in the Penman–Monteith Equation ». Hydrology and Earth System Sciences 21 (2): 685‑706. https://doi.org/10.5194/hess-21-685-2017.
Vezy, Rémi, Mathias Christina, Olivier Roupsard, Yann Nouvellon, Remko Duursma, Belinda Medlyn, Maxime Soma, et al. 2018. « Measuring and modelling energy partitioning in canopies of varying complexity using MAESPA model ». Agricultural and Forest Meteorology 253‑254 (printemps): 203‑17. https://doi.org/10.1016/j.agrformet.2018.02.005.
PlantSimEngine.run!
— Functionrun!(::Fvcb, models, status, meteo, constants=Constants())
Coupled photosynthesis and conductance model using the Farquhar–von Caemmerer–Berry (FvCB) model for C3 photosynthesis (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981) that models the assimilation as the most limiting factor between three processes:
- RuBisCo-limited photosynthesis, when the kinetics of the RuBisCo enzyme for fixing
CO₂ is at its maximum (RuBisCo = Ribulose-1,5-bisphosphate carboxylase-oxygenase). It happens mostly when the CO₂ concentration in the stomata is too low. The main parameter is VcMaxRef, the maximum rate of RuBisCo activity at reference temperature. See get_Cᵢᵥ
for the computation.
- RuBP-limited photosynthesis, when the rate of RuBP (ribulose-1,5-bisphosphate) regeneration
associated with electron transport rates on the thylakoid membrane (RuBP) is limiting. It happens mostly when light is limiting, or when CO₂ concentration is rather high. It is parameterized using JMaxRef
, the potential rate of electron transport. See get_Cᵢⱼ
for the computation.
- TPU-limited photosynthesis, when the rate at which inorganic phosphate is released for
regenerating ATP from ADP during the utilization of triose phosphate (TPU) is limiting. It happens at very high assimilation rate, when neither light or CO₂ are limiting factors. The parameter is TPURef
.
The computation in this function is made following Farquhar & Wong (1984), Leuning et al. (1995), and the MAESPA model (Duursma et al., 2012).
The resolution is analytical as first presented in Baldocchi (1994), and needs Cₛ as input.
Triose phosphate utilization (TPU) limitation is taken into account as proposed in Lombardozzi (2018) (i.e. Aₚ = 3 * TPURef
, making the assumption that glycolate recycling is set to 0
). TPURef
is set at 9999.0
by default, meaning there is no limitation of photosynthesis by TPU. Note that TPURef
can be (badly) approximated using the simple equation TPURef = 0.167 * VcMaxRef
as presented in Lombardozzi (2018).
If you prefer to use Gbc, you can use the iterative implementation of the Fvcb model FvcbIter
If you want a version that is de-coupled from the stomatal conductance use FvcbRaw
, but you'll need Cᵢ as input of the model.
Returns
Modify the first argument in place for A, Gₛ and Cᵢ:
- A: carbon assimilation (μmol[CO₂] m-2 s-1)
- Gₛ: stomatal conductance for CO₂ (mol[CO₂] m-2 s-1)
- Cᵢ: intercellular CO₂ concentration (ppm)
Arguments
::Fvcb
: the Farquhar–von Caemmerer–Berry (FvCB) modelmodels
: aModelList
struct holding the parameters for the model with
initialisations for: - Tₗ
(°C): leaf temperature - aPPFD
(μmol m-2 s-1): absorbed Photosynthetic Photon Flux Density - Cₛ
(ppm): Air CO₂ concentration at the leaf surface - Dₗ
(kPa): vapour pressure difference between the surface and the saturated air vapour pressure in case you're using the stomatal conductance model of Medlyn
.
status
: A status, usually the leaf status (i.e. leaf.status)meteo
: meteorology structure, seeAtmosphere
constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
Note
Tₗ
, aPPFD
, Cₛ
(and Dₗ
if you use Medlyn
) must be initialized by providing them as keyword arguments (see examples). If in doubt, it is simpler to compute the energy balance of the leaf with the photosynthesis to get those variables. See AbstractEnergy_BalanceModel
for more details.
Examples
using PlantBiophysics, PlantMeteo
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
leaf =
ModelList(
photosynthesis = Fvcb(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Tₗ = 25.0, aPPFD = 1000.0, Cₛ = 400.0, Dₗ = meteo.VPD)
)
# NB: we need to initalise Tₗ, aPPFD and Cₛ.
# NB2: we provide the name of the process before the model but it is not mandatory.
run!(leaf,meteo,PlantMeteo.Constants())
leaf.status.A
leaf.status.Cᵢ
Note that we use VPD
as an approximation of Dₗ
here because we don't have the leaf temperature (i.e. Dₗ = VPD
when Tₗ = T
).
References
Baldocchi, Dennis. 1994. « An analytical solution for coupled leaf photosynthesis and stomatal conductance models ». Tree Physiology 14 (7-8‑9): 1069‑79. https://doi.org/10.1093/treephys/14.7-8-9.1069.
Duursma, R. A., et B. E. Medlyn. 2012. « MAESPA: a model to study interactions between water limitation, environmental drivers and vegetation function at tree and stand levels, with an example application to [CO2] × drought interactions ». Geoscientific Model Development 5 (4): 919‑40. https://doi.org/10.5194/gmd-5-919-2012.
Farquhar, G. D., S. von von Caemmerer, et J. A. Berry. 1980. « A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species ». Planta 149 (1): 78‑90.
Leuning, R., F. M. Kelliher, DGG de Pury, et E.D. Schulze. 1995. « Leaf nitrogen, photosynthesis, conductance and transpiration: scaling from leaves to canopies ». Plant, Cell & Environment 18 (10): 1183‑1200.
Lombardozzi, L. D. et al. 2018.« Triose phosphate limitation in photosynthesis models reduces leaf photosynthesis and global terrestrial carbon storage ». Environmental Research Letters 13.7: 1748-9326. https://doi.org/10.1088/1748-9326/aacf68.
PlantSimEngine.run!
— Functionrun!(::ConstantAGs, models, status, meteo, constants=Constants())
Constant photosynthesis coupled with a stomatal conductance model.
Returns
Modify the leaf status in place for A, Gₛ and Cᵢ:
- A: carbon assimilation, set to leaf.photosynthesis.A (μmol[CO₂] m-2 s-1)
- Gₛ: stomatal conductance for CO₂ (mol[CO₂] m-2 s-1)
- Cᵢ: intercellular CO₂ concentration (ppm)
Arguments
::ConstantAGs
: a constant assimilation model coupled to a stomatal conductance modelmodels
: aModelList
struct holding the parameters for the model with
initialisations for: - Cₛ
(mol m-2 s-1): surface CO₂ concentration. - any other value needed by the stomatal conductance model.
status
: A status, usually the leaf status (i.e. leaf.status)meteo
: meteorology structure, seeAtmosphere
constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
Examples
using PlantBiophysics, PlantMeteo
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
leaf = ModelList(
photosynthesis = ConstantAGs(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Cₛ = 400.0, Dₗ = 2.0)
)
run!(leaf,meteo,PlantMeteo.Constants())
status(leaf, :A)
status(leaf, :Cᵢ)
PlantSimEngine.run!
— Functionrun!(::FvcbIter, models, status, meteo, constants=Constants())
Photosynthesis using the Farquhar–von Caemmerer–Berry (FvCB) model for C3 photosynthesis (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981). Computation is made following Farquhar & Wong (1984), Leuning et al. (1995), and the Archimed model.
Iterative implementation, i.e. the assimilation is computed iteratively over Cᵢ. For the analytical resolution, see Fvcb
.
Returns
Modify the first argument in place for A, Gₛ and Cᵢ:
- A: carbon assimilation (μmol[CO₂] m-2 s-1)
- Gₛ: stomatal conductance for CO₂ (mol[CO₂] m-2 s-1)
- Cᵢ: intercellular CO₂ concentration (ppm)
Arguments
::FvcbIter
: Farquhar–von Caemmerer–Berry (FvCB) model with iterative resolution.models
: aModelList
struct holding the parameters for the model with
initialisations for: - Tₗ
(°C): leaf temperature - aPPFD
(μmol m-2 s-1): absorbed Photosynthetic Photon Flux Density - Gbc
(mol m-2 s-1): boundary conductance for CO₂ - Dₗ
(kPa): is the difference between the vapour pressure at the leaf surface and the saturated air vapour pressure in case you're using the stomatal conductance model of Medlyn
.
status
: A status, usually the leaf status (i.e. leaf.status)meteo
: meteorology structure, seeAtmosphere
constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
Note
Tₗ
, aPPFD
, Gbc
(and Dₗ
if you use Medlyn
) must be initialized by providing them as keyword arguments (see examples). If in doubt, it is simpler to compute the energy balance of the leaf with the photosynthesis to get those variables. See AbstractEnergy_BalanceModel
for more details.
Examples
using PlantBiophysics, PlantMeteo
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
leaf =
ModelList(
photosynthesis = FvcbIter(),
stomatal_conductance = Medlyn(0.03, 12.0),
status = (Tₗ = 25.0, aPPFD = 1000.0, Gbc = 0.67, Dₗ = meteo.VPD)
)
# NB: we need to initalise Tₗ, aPPFD and Gbc.
run!(leaf,meteo,PlantMeteo.Constants())
leaf.status.A
leaf.status.Cᵢ
Note that we use VPD
as an approximation of Dₗ
here because we don't have the leaf temperature (i.e. Dₗ = VPD
when Tₗ = T
).
References
Baldocchi, Dennis. 1994. « An analytical solution for coupled leaf photosynthesis and stomatal conductance models ». Tree Physiology 14 (7-8‑9): 1069‑79. https://doi.org/10.1093/treephys/14.7-8-9.1069.
Farquhar, G. D., S. von von Caemmerer, et J. A. Berry. 1980. « A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species ». Planta 149 (1): 78‑90.
Leuning, R., F. M. Kelliher, DGG de Pury, et E.D. Schulze. 1995. Leaf nitrogen, photosynthesis, conductance and transpiration: scaling from leaves to canopies ». Plant, Cell & Environment 18 (10): 1183‑1200.
PlantSimEngine.run!
— Functionrun!(object, meteo, constants = Constants())
Computes the light interception of an object using the Beer-Lambert law.
Arguments
::Beer
: a Beer model, from the model list (i.e. m.light_interception)models
: AModelList
struct holding the parameters for the model with
initialisations for LAI
(m² m⁻²): the leaf area index.
status
: the status of the model, usually the model list status (i.e. m.status)meteo
: meteorology structure, seeAtmosphere
constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
Examples
using PlantSimEngine, PlantBiophysics, PlantMeteo
m = ModelList(light_interception=Beer(0.5), status=(LAI=2.0,))
meteo = Atmosphere(T=20.0, Wind=1.0, P=101.3, Rh=0.65, Ri_PAR_f=300.0)
run!(m, meteo)
m[:aPPFD]
PlantSimEngine.run!
— Functionrun!(::ConstantA; models, status, meteo, constants=Constants())
Constant photosynthesis (forcing the value).
Returns
Modify the leaf status in place for A with a constant value:
- A: carbon assimilation, set to leaf.photosynthesis.A (μmol[CO₂] m-2 s-1)
Arguments
::ConstantA
: a constant assimilation modelmodels
: aModelList
struct holding the parameters for the model.status
: A status, usually the leaf status (i.e. leaf.status)meteo
: meteorology structure, seeAtmosphere
constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
Examples
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
leaf = ModelList(photosynthesis = ConstantA(26.0))
run!(leaf,meteo,Constants())
leaf.status.A
PlantSimEngine.run!
— Functionrun!(::FvcbRaw, models, status, meteo=nothing, constants=Constants())
Direct implementation of the photosynthesis model for C3 photosynthesis from Farquhar–von Caemmerer–Berry (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981).
Returns
Modify the first argument in place for A, the carbon assimilation (μmol[CO₂] m-2 s-1).
Arguments
::FvcbRaw
: the Farquhar–von Caemmerer–Berry (FvCB) model (not coupled)models
: aModelList
struct holding the parameters for the model with
initialisations for: - Tₗ
(°C): leaf temperature - aPPFD
(μmol m-2 s-1): absorbed Photosynthetic Photon Flux Density - Cₛ
(ppm): Air CO₂ concentration at the leaf surface - Dₗ
(kPa): vapour pressure difference between the surface and the saturated air vapour pressure in case you're using the stomatal conductance model of Medlyn
.
status
: A status, usually the leaf status (i.e. leaf.status)constants = PlantMeteo.Constants()
: physical constants. SeePlantMeteo.Constants
for more details
Note
Tₗ
, aPPFD
, Cₛ
(and Dₗ
if you use Medlyn
) must be initialized by providing them as keyword arguments (see examples). If in doubt, it is simpler to compute the energy balance of the leaf with the photosynthesis to get those variables. See AbstractEnergy_BalanceModel
for more details.
Examples
using PlantSimEngine
leaf = ModelList(photosynthesis = FvcbRaw(), status = (Tₗ = 25.0, aPPFD = 1000.0, Cᵢ = 400.0))
# NB: we need Tₗ, aPPFD and Cᵢ as inputs (see [`inputs`](@ref))
run!(leaf)
leaf.status.A
leaf.status.Cᵢ
# using several time-steps:
leaf =
ModelList(
photosynthesis = FvcbRaw(),
status = (Tₗ = [20., 25.0], aPPFD = 1000.0, Cᵢ = [380.,400.0])
)
# NB: we need Tₗ, aPPFD and Cᵢ as inputs (see [`inputs`](@ref))
run!(leaf)
DataFrame(leaf) # fetch the leaf status as a DataFrame
References
Baldocchi, Dennis. 1994. « An analytical solution for coupled leaf photosynthesis and stomatal conductance models ». Tree Physiology 14 (7-8‑9): 1069‑79. https://doi.org/10.1093/treephys/14.7-8-9.1069.
Duursma, R. A., et B. E. Medlyn. 2012. « MAESPA: a model to study interactions between water limitation, environmental drivers and vegetation function at tree and stand levels, with an example application to [CO2] × drought interactions ». Geoscientific Model Development 5 (4): 919‑40. https://doi.org/10.5194/gmd-5-919-2012.
Farquhar, G. D., S. von von Caemmerer, et J. A. Berry. 1980. « A biochemical model of photosynthetic CO2 assimilation in leaves of C3 species ». Planta 149 (1): 78‑90.
Leuning, R., F. M. Kelliher, DGG de Pury, et E.D. Schulze. 1995. « Leaf nitrogen, photosynthesis, conductance and transpiration: scaling from leaves to canopies ». Plant, Cell & Environment 18 (10): 1183‑1200.
Lombardozzi, L. D. et al. 2018.« Triose phosphate limitation in photosynthesis models reduces leaf photosynthesis and global terrestrial carbon storage ». Environmental Research Letters 13.7: 1748-9326. https://doi.org/10.1088/1748-9326/aacf68.
PlantSimEngine.run!
— MethodConstant stomatal conductance for CO₂ (mol m-2 s-1).
Note
meteo
or gs_mod
are just declared here for compatibility with the call from photosynthesis (need a constant way of calling the functions).