Use this page to look up model constructors, their parameters, and helper functions. For explanations and runnable workflows, start with Design or First simulation.
PlantBiophysics.AbstractEnergy_BalanceModelPlantBiophysics.AbstractLight_InterceptionModelPlantBiophysics.AbstractPhotosynthesisModelPlantBiophysics.AbstractRadiation_Basis_ConversionModelPlantBiophysics.AbstractStomatal_ConductanceModelPlantBiophysics.BeerPlantBiophysics.BeerShortwavePlantBiophysics.ConstantAPlantBiophysics.ConstantAGsPlantBiophysics.ConstantAbsorptionPlantBiophysics.ConstantGsPlantBiophysics.FvcbPlantBiophysics.FvcbIterPlantBiophysics.FvcbRawPlantBiophysics.GroundToMeanLeafPPFDPlantBiophysics.GroundToMeanLeafShortwavePlantBiophysics.MedlynPlantBiophysics.MonteithPlantBiophysics.TuzetPlantBiophysics.Fvcb_net_assimilationPlantBiophysics.Fvcb_net_assimiliationPlantBiophysics.arrheniusPlantBiophysics.arrheniusPlantBiophysics.black_bodyPlantBiophysics.error_on_xlsxPlantBiophysics.f_ms_to_molPlantBiophysics.gbh_to_gbwPlantBiophysics.gbₕ_forcedPlantBiophysics.gbₕ_freePlantBiophysics.get_CᵢᵥPlantBiophysics.get_CᵢⱼPlantBiophysics.get_DₕPlantBiophysics.get_JPlantBiophysics.get_kmPlantBiophysics.grey_bodyPlantBiophysics.gs_closurePlantBiophysics.gs_closurePlantBiophysics.gs_closurePlantBiophysics.gsc_to_gswPlantBiophysics.gsw_to_gscPlantBiophysics.latent_heatPlantBiophysics.locf!PlantBiophysics.max_rootPlantBiophysics.mol_to_msPlantBiophysics.ms_to_molPlantBiophysics.negative_rootPlantBiophysics.net_longwave_radiationPlantBiophysics.positive_rootPlantBiophysics.read_ciras4PlantBiophysics.read_ess_divePlantBiophysics.read_filePlantBiophysics.read_licor6400PlantBiophysics.read_licor6800PlantBiophysics.read_walzPlantBiophysics.sensible_heatPlantBiophysics.Γ_starPlantBiophysics.γ_starPlantBiophysics.λE_to_EPlantSimEngine.fitPlantSimEngine.fitPlantSimEngine.fitPlantSimEngine.run!PlantSimEngine.run!PlantSimEngine.run!PlantSimEngine.run!PlantSimEngine.run!PlantSimEngine.run!PlantSimEngine.run!PlantSimEngine.run!energy_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 variables not produced by another application. For example, Monteith requires Ra_SW_f, d, and sky_fraction.
Examples
using PlantMeteo, PlantSimEngine, PlantBiophysics, Dates
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
scene = CompositeModel(
Monteith(),
Fvcb(),
Medlyn(0.03, 12.0);
status=Status(Ra_SW_f=13.747, sky_fraction=1.0, aPPFD=1500.0, d=0.03),
environment=meteo,
)
run!(scene)
leaf = only(model_objects(scene))
(leaf.status.Rn, leaf.status.A, leaf.status.Cᵢ)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.
sourcelight_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.
The package provides:
ConstantAbsorption: fixed fractions of incident PAR and NIR, on the same surface area
Beer: the Beer-Lambert law of light extinction
BeerShortwave: Beer-Lambert interception for PAR and NIR
The Beer-Lambert models publish canopy radiation per unit ground area. Use GroundToMeanLeafPPFD or GroundToMeanLeafShortwave to make the LAI conversion explicit before leaf-scale physiology.
ConstantAbsorption can be applied directly to a leaf without LAI.
Geometrically explicit light interception belongs to a light package such as ArchimedLight. Its outputs are coupled to PlantBiophysics through PlantSimEngine.
Examples
using PlantSimEngine, PlantBiophysics, PlantMeteo
meteo = Atmosphere(T=20.0, Wind=1.0, P=101.3, Rh=0.65, Ri_PAR_f=300.0)
scene = CompositeModel(
Beer(0.5);
status=Status(LAI=2.0),
environment=meteo,
)
run!(scene)
only(model_objects(scene)).status.aPPFDphotosynthesis 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 selected as scene applications. For example, use Fvcb for photosynthesis and Medlyn for its stomatal-conductance hard dependency.
Examples
using PlantSimEngine, PlantMeteo, PlantBiophysics, Dates
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
scene = CompositeModel(
Fvcb(),
Medlyn(0.03, 12.0);
status=Status(Tₗ=25.0, aPPFD=1000.0, Cₛ=400.0, Dₗ=meteo.VPD),
environment=meteo,
)
run!(scene)
only(model_objects(scene)).status.ANote 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).
radiation_basis_conversion process abstract model.
All models implemented to simulate the radiation_basis_conversion process must be a subtype of this type, e.g. struct MyRadiation_Basis_ConversionModel <: AbstractRadiation_Basis_ConversionModel end.
You can list all models implementing this process using subtypes:
Examples
subtypes(AbstractRadiation_Basis_ConversionModel)Explicit conversion of canopy radiation to the mean leaf surface-area basis.
Use GroundToMeanLeafPPFD or GroundToMeanLeafShortwave between a Beer-Lambert canopy model and a leaf-scale physiology model. The conversion divides the ground-based flux by a finite, strictly positive leaf area index (LAI).
Geometry-resolved light uses the represented mesh surface as the reference area and couples directly to leaf physiology with the :surface_area contract.
stomatal_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,environment) * leaf.status.A
where gsclosure(leaf,environment) computes the stomatal closure, and must be implemented for the type of `leaf.stomatalconductance. The stomatal conductance is not allowed to go belowleaf.stomatalconductance.gsmin`.
Arguments
Gs::Gsm: a stomatal conductance model, usually the leaf model (i.e. leaf.stomatal_conductance)
status::Status: A status, usually the leaf status (i.e. leaf.status)
gs_mod: the output from a gs_closure implementation (the conductance models
generally only implement this function)
environment<:PlantMeteo.AbstractAtmosphere: environment data, see Atmosphere
Examples
using PlantMeteo, PlantSimEngine, PlantBiophysics, Dates
environment = Atmosphere(T = 22.0, Wind = 0.8333, P = 101.325, Rh = 0.4490995, duration = Hour(1))
# Using a constant value for Gs:
scene = CompositeModel(
Medlyn(0.03,12.0);
status=Status(A=20.0, Cₛ=380.0, Dₗ=environment.VPD),
environment=environment,
)
run!(scene)
only(model_objects(scene)).status.GₛBeer(k)Beer-Lambert law for light interception.
Required inputs: LAI in m[leaf]² m[ground]⁻². Required meteorology data: Ri_PAR_f, the incident flux of atmospheric radiation in the PAR, in W m[ground]⁻² (== J m[ground]⁻² s⁻¹).
Output: aPPFD, the canopy-absorbed Photosynthetic Photon Flux Density in μmol[PAR] m[ground]⁻² s⁻¹. Use GroundToMeanLeafPPFD before coupling this output to a leaf-scale photosynthesis model.
BeerShortwave(k_PAR, k_NIR)
BeerShortwave(k)The Beer-Lambert law for light interception for the shortwave radiation.
Arguments
k_PAR: extinction coefficient for the PAR
k_NIR: extinction coefficient for the NIR. The one-argument constructor preserves the historical default k_NIR = 0.48; pass both coefficients to choose another NIR value.
Required inputs
LAI: the leaf area index (m[leaf]² m[ground]⁻²)
Ri_PAR_f: (from meteorology) the incident flux of atmospheric radiation in the PAR, in W m[ground]⁻² (== J m[ground]⁻² s⁻¹).
Ri_NIR_f: (from meteorology) the incident flux of atmospheric radiation in the NIR, in W m[ground]⁻² (== J m[ground]⁻² s⁻¹).
Outputs
aPPFD: canopy-absorbed Photosynthetic Photon Flux Density in μmol[PAR] m[ground]⁻² s⁻¹.
Ra_PAR_f: canopy-absorbed PAR in W m[ground]⁻².
Ra_NIR_f: canopy-absorbed NIR in W m[ground]⁻².
Ra_SW_f: canopy-absorbed shortwave radiation in W m[ground]⁻².
Use GroundToMeanLeafPPFD and GroundToMeanLeafShortwave before coupling these canopy outputs to leaf-scale physiology models.
Examples
using PlantSimEngine, PlantBiophysics, PlantMeteo
environment = Atmosphere(T=20.0, Wind=1.0, P=101.3, Rh=0.65, Ri_PAR_f=300.0, Ri_NIR_f=280.0)
scene = CompositeModel(
BeerShortwave(0.5);
status=Status(LAI=2.0),
environment=environment,
)
run!(scene)
plant = only(model_objects(scene))
(plant.status.aPPFD, plant.status.Ra_SW_f, plant.status.Ra_PAR_f, plant.status.Ra_NIR_f)Constant (forced) assimilation, given in \(μmol\ m^{-2}\ s^{-1}\).
See also ConstantAGs.
Examples
ConstantA(30.0)Constant (forced) assimilation, given in \(μmol\ m^{-2}\ s^{-1}\), coupled with a stomatal conductance model that helps computing Cᵢ.
Examples
ConstantAGs(30.0)ConstantAbsorption(; α_PAR, α_NIR)
ConstantAbsorption(α_PAR, α_NIR)Absorb fixed fractions of the incident PAR and near-infrared (NIR) radiation. Both fractions must be finite and between 0 and 1. Supply them explicitly for the surface and light source being simulated; there is no universal leaf value.
The environment supplies Ri_PAR_f and Ri_NIR_f in W m⁻² of the represented surface. Outputs use the same area: Ra_PAR_f, Ra_NIR_f, and their sum Ra_SW_f are in W m⁻²; aPPFD is in µmol photons m⁻² s⁻¹. The conversion from absorbed PAR energy to photons uses constants.J_to_umol, which should match the light spectrum when reproducing chamber measurements.
No LAI, geometry, or timestep duration is needed. Absorbed radiation follows the current incident radiation, while the fractions stay constant. These are instantaneous fluxes, not energy totals over the timestep. The model can run on any object whose incoming radiation is expressed per its represented surface area; it does not convert ground-area fluxes to leaf-area fluxes or calculate shading. On a leaf it couples directly to Fvcb and Monteith.
Example
The fractions below are illustrative, not calibrated to a particular leaf.
using PlantBiophysics, PlantSimEngine, PlantMeteo
scene = CompositeModel(
ConstantAbsorption(α_PAR=0.8, α_NIR=0.2),
Monteith(), Fvcb(), Medlyn(0.03, 12.0);
status=Status(sky_fraction=1.0, d=0.03),
environment=Atmosphere(
T=25.0, Wind=1.0, P=101.3, Rh=0.6,
Ri_PAR_f=300.0, Ri_NIR_f=350.0,
),
)
run!(scene)
only(model_objects(scene)).status.AConstant 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)
sourceFarquhar–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 measured
VcMaxRef: 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 for J~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 resolution
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ₐᵥFarquhar–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 measured
VcMaxRef: 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 for J~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".
sourceFarquhar–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 measured
VcMaxRef: 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 for J~aPPFD. See also eq. 4 of
Medlyn et al. (2002) and its implementation in get_J
See also
Fvcb for the coupled assimilation / conductance model
FvcbIter for the coupled assimilation / conductance model with an iterative resolution
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ₐᵥGroundToMeanLeafPPFD()Convert absorbed photosynthetic photon flux density from μmol[photon] m[ground]⁻² s⁻¹ to the canopy mean in μmol[photon] m[leaf]⁻² s⁻¹ by dividing aPPFD_ground by LAI.
The output is named aPPFD_leaf_mean so a scenario must explicitly map it to the aPPFD input of a leaf-scale photosynthesis model. LAI must be finite and positive; aPPFD_ground must be finite and non-negative.
GroundToMeanLeafShortwave()Convert absorbed shortwave irradiance from W m[ground]⁻² to the canopy mean in W m[leaf]⁻² by dividing Ra_SW_f_ground by LAI.
The output is named Ra_SW_f_leaf_mean so a scenario must explicitly map it to the Ra_SW_f input of a leaf-scale energy-balance model. LAI must be finite and positive; Ra_SW_f_ground must be finite and non-negative.
Medlyn et al. (2011) stomatal conductance model for CO₂.
Arguments
g0: intercept, it is the minimal stomatal conductance.
g1: slope.
gs_min = 0.001: residual conductance. We consider the residual conductance being different from g0 because in practice g0 can be negative when fitting real-world data.
Examples
using PlantMeteo, PlantSimEngine, PlantBiophysics, Dates
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
leaf =
CompositeModel(
Medlyn(0.03, 12.0);
status=Status(A=20.0, Cₛ=380.0, Dₗ=meteo.VPD),
environment=meteo,
)
run!(leaf)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.
sourceStruct 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 fluxes
aₛᵥ = 1: number of faces of the object that exchange latent heat fluxes (hypostomatous => 1)
ε = 0.955: emissivity of the object
maxiter = 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 chamberTuzet et al. (2003) stomatal conductance model for CO₂.
Arguments
g0: intercept (μmol m⁻² s⁻¹).
g1: slope.
Ψᵥ: leaf water potential at which stomatal conductance is halved (MPa).
sf: sensitivity factor for stomatal closure.
Γ: CO₂ compensation point (mol mol⁻¹).
gs_min: residual conductance (μmol m⁻² s⁻¹).
Variables
Ψₗ: leaf water potential (MPa).
Cₛ: CO₂ concentration at the leaf surface (μmol mol⁻¹).
A: CO₂ assimilation rate (μmol m⁻² s⁻¹).
Gₛ: stomatal conductance (μmol m⁻² s⁻¹).
Note
The CO₂ compensation point represents the concentration of CO₂ at which photosynthesis and respiration are balanced, and it is typically a small positive value around 30–50 μmol mol⁻¹ under normal atmospheric conditions.
This implementation uses Cₛ instead of Cᵢ.
Examples
using PlantMeteo, PlantSimEngine, PlantBiophysics, Dates
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
scene = CompositeModel(
Tuzet(0.03, 12.0, -1.5, 2.0, 30.0);
# Prescribe assimilation (µmol CO₂ m⁻² s⁻¹) for this standalone model.
status=Status(A=20.0, Cₛ=380.0, Ψₗ=-1.0),
environment=meteo,
)
run!(scene)References
Tuzet, A., Perrier, A., & Leuning, R. (2003). A coupled model of stomatal conductance, photosynthesis and transpiration. Plant, Cell & Environment, 26(7), 1097-1116.
sourceFvcb_net_assimilation(Cᵢ, Vⱼ, Γˢ, VcMax, Km, Rd, TPU)Net assimilation following the Farquhar–von Caemmerer–Berry (FvCB) model for C3 photosynthesis (Farquhar et al., 1980; von Caemmerer and Farquhar, 1981)
sourceFvcb_net_assimiliation(Cᵢ, Vⱼ, Γˢ, VcMax, Km, Rd, TPU)Deprecated misspelling of Fvcb_net_assimilation. This compatibility boundary will be removed in PlantBiophysics v0.20.
arrhenius(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 reaction
Eₐ: activation energy for the reaction (\(J\ mol^{-1}\))
Tₖ: temperature (Kelvin)
Tᵣₖ: reference temperature (Kelvin) at which A was measured
R: 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)arrhenius(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 reaction
Eₐ: 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 measured
Hd: rate of decrease of the function above the optimum (called EDVJ in
MAESPA and plantecophys)
Δₛ: entropy factor
R: 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.Δₛᵥ)
black_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 degree
K₀: absolute zero (°C)
σ (\(W\ m^{-2}\ K^{-4}\)) Stefan-Boltzmann constant
Note
K₀ and σ are taken from PlantMeteo.Constants if not provided.
gbh_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.
gbₕ_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 speed
d (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.
sourcegbₕ_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 temperature
Tₗ (°C): leaf temperature
d (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.
sourceAnalytic 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}\))
Analytic 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
sourceget_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): temperature
Dₕ₀: molecular diffusivity for heat at base temperature. Use value from PlantMeteo.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.
sourceRate 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 * JMaxNB: 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_{leaf}^{-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.5715752671342Compute 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)Thermal 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)gs_closure(model::Medlyn, status, environment, constants=nothing, context=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.AArguments
::Medlyn: an instance of the Medlyn model type
status: A status struct holding the variables for the models.
environment: sampled environment, see Atmosphere. Is not used in this model.
constants: A constants struct holding the constants for the models. Is not used in this model.
context: PlantSimEngine runtime context. It is not used in this model.
Details
Use variables(Medlyn(...)) to inspect the model contract. Variables not provided by another application must be initialized in the target Status.
Notes
Cₛ is used instead of Cₐ 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
using PlantMeteo, PlantSimEngine, PlantBiophysics, Dates
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
A = 20 # example assimilation (μmol m-2 s-1)
scene = CompositeModel(
Medlyn(0.03, 12.0);
status=Status(A=A, Cₛ=380.0, Dₗ=meteo.VPD),
environment=meteo,
)
run!(scene)
only(model_objects(scene)).status.Gₛ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.
sourcegs_closure(model::Tuzet, status, environment, constants=nothing, context=nothing)Stomatal closure for CO₂ according to Tuzet et al. (2003).
Arguments
::Tuzet: an instance of the Tuzet model type.
status: A status struct holding the variables for the models.
environment: sampled environment, see Atmosphere. Is not used in this model.
constants: A constants struct holding the constants for the models. Is not used in this model.
context: PlantSimEngine runtime context. It is not used in this model.
Details
The stomatal conductance is calculated as:
FPSIF = (1 + exp(sf * psiv)) / (1 + exp(sf * (psiv - Ψₗ)))
GSDIVA = g0 + (g1 / (Cₛ - Γ)) * FPSIFwhere Γ is the CO₂ compensation point.
Constant stomatal closure. Usually called from a photosynthesis model.
Note
environment is just declared here for compatibility with other formats of calls.
gsc_to_gsw(Gₛ, Gsc_to_Gsw = PlantMeteo.Constants().Gsc_to_Gsw)Conversion of a stomatal conductance for CO₂ into stomatal conductance for H₂O.
sourcegsw_to_gsc(Gₛ, Gsc_to_Gsw = PlantMeteo.Constants().Gsc_to_Gsw)Conversion of a stomatal conductance for H₂O into stomatal conductance for CO₂.
sourcelatent_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 radiation
VPD (kPa): air vapor pressure deficit
γˢ (kPa K−1): apparent value of psychrometer constant (see PlantMeteo.γ_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 (see PlantMeteo.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)ms_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}\)): conductance
T (°C): air temperature
P (kPa): air pressure
R (\(J\ mol^{-1}\ K^{-1}\)): universal gas constant.
K₀ (°C): absolute zero
See also
ms_to_mol for the inverse process.
ms_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}\)): conductance
T (°C): air temperature
P (kPa): air pressure
R (\(J\ mol^{-1}\ K^{-1}\)): universal gas constant.
K₀ (°C): absolute zero
See also
mol_to_ms for the inverse process.
net_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 emissivity
F₁: 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.
sourceread_ciras4(file; abs=0.85, column_names_start=1, data_start=column_names_start + 1, kwargs...)Read PPSystem CIRAS-4 data and return a DataFrame.
Arguments
file: The path to the CIRAS-4 data file, or vector of file paths.
abs: The absorptance of the leaf. Default is 0.85 (von Caemmerer et al., 2009).
column_names_start: The row number where column names start (default is 1).
data_start: The row number where data starts (default is columnnamesstart + 1).
kwargs: Additional keyword arguments to pass to the CSV reader (e.g., decimal=',').
read_ess_dive(file; abs=0.85, column_names_start=1, data_start=column_names_start + 1, kwargs...)Import data from the ESS-DIVE database 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).
column_names_start=1: the row number to start reading column names from. Default is 1.
data_start=column_names_start+1: the row number to start reading data from. Default is 2 (column_names_start+1).
kwargs...: additional keyword arguments to pass to the CSV reader (e.g., decimal=',').
Details
ESS-DIVE files are expected to have the following columns:
SampleID: identifier for the sample
Record: identifier for the record
A: net photosynthesis rate (µmol m⁻² s⁻¹)
Ci: intercellular CO2 concentration (ppm == µmol mol⁻¹)
CO2s: CO2 concentration inside the leaf chamber (ppm)
gsw: stomatal conductance to water vapor per leaf area (mmol m⁻² s⁻¹)
Patm: atmospheric pressure (kPa)
Qin: In-chamber photosynthetic flux density (PPFD, µmol m⁻² s⁻¹) incident on the leaf, not absorbed
RHs: relative humidity in the leaf chamber (%)
Tleaf: leaf surface temperature (Celsius)
See here for more information: https://ess-dive.gitbook.io/leaf-level-gas-exchange/1a_definedvariables
Returns
A DataFrame containing the data read and transformed from the file(s). The units are the same than in the ESS-DIVE output file, except for:
Dₗ: kPa
Rh: fraction (0-1)
VPD: kPa
Gₛ: mol[CO₂] m⁻² s⁻¹
Notes
Read the ESS dive paper here: https://www.sciencedirect.com/science/article/pii/S1574954121000236?via%3Dihub Access the ESS-DIVE documentation here: https://ess-dive.gitbook.io/leaf-level-gas-exchange Access the ESS-DIVE database here: https://data.ess-dive.lbl.gov/view/doi:10.15485/1659484
References
Ely K.S., Rogers A, Crystal-Ornelas R (2020). ESS-DIVE reporting format for leaf-level gas exchange data and metadata. Environmental Systems Science Data Infrastructure for a Virtual Ecosystem (ESS-DIVE), ESS-DIVE repository. Dataset. https://data.ess-dive.lbl.gov/datasets/doi:10.15485/1659484 Ely K.S. et al (2021). A reporting format for leaf-level gas exchange data and metadata. Ecological Informatics. Volume 61. https://doi.org/10.1016/j.ecoinf.2021.101232
sourceread_licor6400(file; abs=0.85, column_names_start=nothing, data_start=nothing, kwargs...)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).
column_names_start: the row number to start reading column names from. If not provided, it is auto-detected from the $STARTOFDATA$ marker (set to the line after the marker). Falls back to 3 if not found.
data_start: the row number to start reading data from. If not provided, it is auto-detected from the $STARTOFDATA$ marker (set to two lines after the marker), or defaults to column_names_start + 1.
kwargs...: additional keyword arguments to pass to the CSV reader (e.g., decimal=',').
read_licor6800(file; column_names_start=nothing, data_start=nothing, kwargs...)Import Licor6800 data from CSV or text file 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.
column_names_start: the row number to start reading column names from. If not provided, it is auto-detected as the first row that starts with obs (case-sensitive). Falls back to 14 if not found.
data_start: the row number to start reading data from. If not provided, it is set to column_names_start + 2 by default.
kwargs...: additional keyword arguments to pass to the CSV reader (e.g., decimal=',').
The reference for the variables are found on the Licor 6800 website: See reference here: https://www.licor.com/support/LI-6800/topics/symbols.html
sourceread_walz(file; abs=0.85, column_names_start=1, data_start=column_names_start + 2, kwargs...)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).
column_names_start=1: the row number to start reading column names from. Default is 1.
data_start=column_names_start+2: the row number to start reading data from. Default is 3 (column_names_start+2).
kwargs...: additional keyword arguments to pass to the CSV reader (e.g., decimal=',').
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.sourcesensible_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 radiation
VPD (kPa): air vapor pressure deficit
γˢ (kPa K−1): apparent value of psychrometer constant (see PlantMeteo.γ_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 (see PlantMeteo.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)Γ_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 temperature
Tᵣₖ (Kelvin): reference temperature at which A was measured
R (\(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.
sourceThese functions support the implementation. They are generally unnecessary for setting up a simulation.
Conversion factor between conductance in \(m\ s^{-1}\) to \(mol\ m^{-2}\ s^{-1}\).
Arguments
T (°C): air temperature
P (kPa): air pressure
R (\(J\ mol^{-1}\ K^{-1}\)): universal gas constant.
K₀ (°C): absolute zero
Maximum value between two roots of a quadratic equation.
sourceNegative 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).
sourcePositive 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).
sourceread_file(file; column_names_start=1, data_start=column_names_start + 1, kwargs...)Reads one or multiple CSV file(s) and returns a DataFrame.
Arguments
file: a string or a vector of strings containing the path to the file(s) to read.
column_names_start=1: the row number to start reading column names from. Default is 1.
data_start=column_names_start+1: the row number to start reading data from. Default is 2 (column_names_start+1).
kwargs...: additional keyword arguments to pass to the CSV reader (e.g., decimal=',').
γstar(γ, ash, a_s, rbv, Rsᵥ, Rbₕ)
γ∗, the apparent value of psychrometer constant (kPa K−1).
Arguments
γ (kPa K−1): psychrometer constant
aₛₕ (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 vapor
Rsᵥ (s m-1): stomatal resistance to water vapor
Rbₕ (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.
sourceλ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 vaporization
Mₕ₂ₒ = 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.
sourceEvaluation.fit(::Type{Beer}, df; J_to_umol=PlantMeteo.Constants().J_to_umol)Estimate k, the coefficient of the Beer-Lambert law of light extinction, by inverting the absorbed fraction in each observation:
f_abs = aPPFD / (Ri_PAR_f * J_to_umol) and k = -log1p(-f_abs) / LAI.
Arguments
df: a DataFrame with columns Ri_PAR_f (incoming PAR in W m[ground]⁻²), aPPFD (absorbed PAR in μmol[PAR] m[ground]⁻² s⁻¹), and LAI (m[leaf]² m[ground]⁻²), where each row is an observation. Ri_PAR_f and aPPFD therefore use the same ground-area basis; aPPFD is not expressed per unit leaf area here. Column names must match exactly.
LAI, each Ri_PAR_f, and J_to_umol must independently be finite and strictly positive. Their converted incident PAR must remain finite and positive, and the implied absorbed fraction must satisfy 0 ≤ f_abs < 1. An empty table throws ArgumentError; invalid observations throw a DomainError identifying the row and quantity.
Examples
using PlantSimEngine, PlantSimEngine.Evaluation, 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 parameter value:
fitted = Evaluation.fit(Beer, df)
# Re-simulating the first observation using the newly fitted parameter:
meteo = Atmosphere(
T = df.T[1],
Rh = df.Rh[1],
Wind = df.Wind[1],
Ri_PAR_f = df.Ri_PAR_f[1],
)
scene = CompositeModel(
Beer(fitted.k);
status = Status(LAI = df.LAI[1]),
environment = meteo,
)
final_state(run!(scene)).aPPFDEvaluation.fit(::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) * Rhwith 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, PlantSimEngine, PlantSimEngine.Evaluation, PlantMeteo, Plots, DataFrames, Dates
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 = Evaluation.fit(Medlyn, df)
# Re-simulating Gₛ using the newly fitted parameters:
gs_sim = map(eachrow(df)) do row
scene = CompositeModel(
Medlyn(g0, g1);
status = Status(A = row.A, Cₛ = row.Cₐ, Dₗ = row.Dₗ),
environment = (duration = Hour(1),),
)
final_state(run!(scene)).Gₛ
end
# Visualising the results:
gsAvpd = PlantBiophysics.GsADₗ(g0, g1, df.Gₛ, df.Dₗ, df.A, df.Cₐ, gs_sim)
plot(gsAvpd,leg=:bottomright)
# As in [`Medlyn`](@ref) reference paper, linear regression is also plotted.Evaluation.fit(
::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 measured
VcMaxRef: 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 for J~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, PlantSimEngine.Evaluation, PlantMeteo, Plots, DataFrames, Dates
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 = Evaluation.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:
A_sim = map(eachrow(df)) do row
scene = CompositeModel(
FvcbRaw(VcMaxRef = VcMaxRef, JMaxRef = JMaxRef, RdRef = RdRef, TPURef = TPURef);
status = Status(Tₗ = row.Tₗ, aPPFD = row.aPPFD, Cᵢ = row.Cᵢ),
environment = (duration = Hour(1),),
)
final_state(run!(scene)).A
end
# Visualising the results:
ACi_struct = PlantBiophysics.ACi(VcMaxRef, JMaxRef, RdRef, df.A, A_sim, df[:,: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
A_sim2 = map(eachrow(df)) do row
meteo = Atmosphere(T = row.T, P = row.P, Rh = row.Rh, Cₐ = row.Cₐ, Wind = 10.0, duration = Hour(1))
scene = CompositeModel(
Fvcb(VcMaxRef = VcMaxRef, JMaxRef = JMaxRef, RdRef = RdRef, Tᵣ = 25.0, TPURef = TPURef),
Medlyn(0.03, 12.0);
status = Status(Tₗ = row.Tₗ, aPPFD = row.aPPFD, Cₛ = row.Cₐ, Dₗ = 0.1),
environment = meteo,
)
final_state(run!(scene)).A
end
# And finally we plot the results:
ACi_struct_full = PlantBiophysics.ACi(VcMaxRef, JMaxRef, RdRef, df.A, A_sim2, df[:,: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ᵢ)run!(model::FvcbRaw, status, environment=nothing, constants=Constants(), context=nothing)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)
The target status provides initial values for:
Tₗ (°C): leaf temperature
aPPFD (μmol[photon] m[leaf]⁻² s⁻¹): absorbed Photosynthetic Photon Flux Density per unit reference leaf surface area. For geometry-resolved light, this is the represented mesh surface area (:surface_area).
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. See PlantMeteo.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, PlantSimEngine, Dates
scene = CompositeModel(
FvcbRaw();
status=Status(Tₗ=25.0, aPPFD=1000.0, Cᵢ=400.0),
environment=(duration=Hour(1),),
)
run!(scene)
only(model_objects(scene)).status.AReferences
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.
sourcerun!(object, environment, 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)
status: leaf state, with LAI initialized in m² m⁻².
environment: meteorology structure, see Atmosphere
constants = PlantMeteo.Constants(): physical constants. See PlantMeteo.Constants for more details
Examples
using PlantSimEngine, PlantBiophysics, PlantMeteo
environment = Atmosphere(T=20.0, Wind=1.0, P=101.3, Rh=0.65, Ri_PAR_f=300.0)
scene = CompositeModel(
Beer(0.5);
status=Status(LAI=2.0),
environment=environment,
)
run!(scene)
only(model_objects(scene)).status.aPPFDrun!(model::Monteith, status, environment, constants=Constants(), context=nothing)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
model::Monteith: the selected energy-balance model.
the declared photosynthesis hard-call target owns its coupled model parameters.
status: the state shared by the coupled leaf applications, including:
Ra_SW_f (W m[leaf]⁻²): net shortwave radiation (PAR + NIR) on the reference leaf surface-area basis (:surface_area). Geometry-resolved light uses the same mesh surface area and couples directly; canopy radiation requires an explicit ground-to-mean-leaf conversion.
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).
environment: meteorology structure, see Atmosphere
constants = PlantMeteo.Constants(): physical constants. See PlantMeteo.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
using PlantBiophysics, PlantMeteo, PlantSimEngine, Dates
environment = Atmosphere(T = 22.0, Wind = 0.8333, P = 101.325, Rh = 0.4490995, duration = Hour(1))
scene = CompositeModel(
Monteith(),
Fvcb(),
Medlyn(0.03, 12.0);
status=Status(Ra_SW_f=13.747, sky_fraction=1.0, aPPFD=1500.0, d=0.03),
environment=environment,
)
run!(scene)
leaf = only(model_objects(scene))
(leaf.status.Rn, leaf.status.Ra_LW_f, leaf.status.A)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.
sourcerun!(model::ConstantAGs, status, environment, constants=Constants(), context=nothing)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 model
The declared stomatal-conductance call target shares status 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)
environment: meteorology structure, see Atmosphere
constants = PlantMeteo.Constants(): physical constants. See PlantMeteo.Constants for more details
Examples
using PlantBiophysics, PlantMeteo, PlantSimEngine, Dates
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
scene = CompositeModel(
ConstantAGs(),
Medlyn(0.03, 12.0);
status=Status(Cₛ=400.0, Dₗ=2.0),
environment=environment,
)
run!(scene)
leaf = only(model_objects(scene))
(leaf.status.A, leaf.status.Cᵢ)run!(model::Fvcb, status, environment, constants=Constants(), context=nothing)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
model::Fvcb: the Farquhar–von Caemmerer–Berry (FvCB) model
the declared stomatal-conductance hard-call target owns its model parameters; the shared status provides initial values for:
Tₗ (°C): leaf temperature
aPPFD (μmol[photon] m[leaf]⁻² s⁻¹): absorbed Photosynthetic Photon Flux Density per unit reference leaf surface area. For geometry-resolved light, this is the represented mesh surface area (:surface_area).
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)
environment: meteorology structure, see Atmosphere
constants = PlantMeteo.Constants(): physical constants. See PlantMeteo.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, PlantSimEngine, Dates
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
scene = CompositeModel(
Fvcb(),
Medlyn(0.03, 12.0);
status=Status(Tₗ=25.0, aPPFD=1000.0, Cₛ=400.0, Dₗ=environment.VPD),
environment=environment,
)
run!(scene)
leaf = only(model_objects(scene))
(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.
sourcerun!(model::ConstantA, status, environment, constants=Constants(), context=nothing)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 model
status: A status, usually the leaf status (i.e. leaf.status)
environment: meteorology structure, see Atmosphere
constants = PlantMeteo.Constants(): physical constants. See PlantMeteo.Constants for more details
Examples
using PlantBiophysics, PlantMeteo, PlantSimEngine, Dates
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
scene = CompositeModel(ConstantA(26.0); environment=environment)
run!(scene)
only(model_objects(scene)).status.Arun!(model::FvcbIter, status, environment, constants=Constants(), context=nothing)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
model::FvcbIter: Farquhar–von Caemmerer–Berry (FvCB) model with iterative resolution.
the declared stomatal-conductance hard-call target owns its model parameters; the shared status provides initial values for:
Tₗ (°C): leaf temperature
aPPFD (μmol[photon] m[leaf]⁻² s⁻¹): absorbed Photosynthetic Photon Flux Density per unit reference leaf surface area. For geometry-resolved light, this is the represented mesh surface area (:surface_area).
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)
environment: meteorology structure, see Atmosphere
constants = PlantMeteo.Constants(): physical constants. See PlantMeteo.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, PlantSimEngine, Dates
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65, duration = Hour(1))
scene = CompositeModel(
FvcbIter(),
Medlyn(0.03, 12.0);
status=Status(Tₗ=25.0, aPPFD=1000.0, Gbc=0.67, Dₗ=environment.VPD),
environment=environment,
)
run!(scene)
leaf = only(model_objects(scene))
(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.
sourceConstant stomatal conductance for CO₂ (mol m-2 s-1).
Note
environment or gs_mod are just declared here for compatibility with the call from photosynthesis (need a constant way of calling the functions).