Functions

Index

API documentation

PlantBiophysics.AbstractEnergy_BalanceModelType

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

meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
scene = leaf_scene(
    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; scale=:Leaf))
(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.

source
PlantBiophysics.AbstractLight_InterceptionModelType

light_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.

Two Beer-Lambert models are implemented in the package:

  • Beer: the Beer-Lambert law of light extinction
  • BeerShortwave: Beer-Lambert interception for PAR and NIR

Both models publish canopy radiation per unit ground area. Use GroundToMeanLeafPPFD or GroundToMeanLeafShortwave to make the LAI conversion explicit before leaf-scale physiology.

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(
    Object(:plant; scale=:Plant, status=Status(LAI=2.0));
    applications=(
        ModelSpec(Beer(0.5); name=:canopy_light, on=One(scale=:Plant)),
    ),
    environment=meteo,
)
run!(scene)
model_object(scene, :plant).status.aPPFD
source
PlantBiophysics.AbstractPhotosynthesisModelType

photosynthesis 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

meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)

scene = leaf_scene(
    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; scale=: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).

source
PlantBiophysics.AbstractRadiation_Basis_ConversionModelType

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 radiation to the botanical leaf-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).

Use RadiativeMeshToLeafPPFD or RadiativeMeshToLeafShortwave for an organ flux normalized by its radiative mesh area. Those conversions require both radiative and botanical areas and preserve the absorbed quantity.

source
PlantBiophysics.AbstractStomatal_ConductanceModelType

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
environment = Atmosphere(T = 22.0, Wind = 0.8333, P = 101.325, Rh = 0.4490995)

# Using a constant value for Gs:

scene = leaf_scene(
    Medlyn(0.03,12.0);
    status=Status(A=20.0, Cₛ=380.0, Dₗ=environment.VPD),
    environment=environment,
)
run!(scene)
only(model_objects(scene; scale=:Leaf)).status.Gₛ
source
PlantBiophysics.BeerType
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.

source
PlantBiophysics.BeerShortwaveType
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(
    Object(:plant; scale=:Plant, status=Status(LAI=2.0));
    applications=(
        ModelSpec(BeerShortwave(0.5); name=:canopy_light, on=One(scale=:Plant)),
    ),
    environment=environment,
)
run!(scene)
plant = model_object(scene, :plant)
(plant.status.aPPFD, plant.status.Ra_SW_f, plant.status.Ra_PAR_f, plant.status.Ra_NIR_f)
source
PlantBiophysics.ConstantAGsType

Constant (forced) assimilation, given in $μmol\ m^{-2}\ s^{-1}$, coupled with a stomatal conductance model that helps computing Cᵢ.

Examples

ConstantAGs(30.0)
source
PlantBiophysics.ConstantGsType

Constant 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)

source
PlantBiophysics.FvcbType

Farquhar–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

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ₐᵥ
source
PlantBiophysics.FvcbIterType

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".

source
PlantBiophysics.FvcbRawType

Farquhar–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

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ₐᵥ
source
PlantBiophysics.GroundToMeanLeafPPFDType
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.

source
PlantBiophysics.GroundToMeanLeafShortwaveType
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.

source
PlantBiophysics.MedlynType

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
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)

leaf =
    leaf_scene(
        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.

  1. « 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.

source
PlantBiophysics.MonteithType

Struct 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 chamber
source
PlantBiophysics.RadiativeMeshToLeafPPFDType
RadiativeMeshToLeafPPFD()

Convert an organ PPFD normalized by its radiative mesh area to the botanical leaf-area basis used by photosynthesis:

\[aPPFD_{leaf} = aPPFD_{radiative} * A_{radiative} / A_{botanical}.\]

The conversion preserves absorbed photons. Both areas must be finite and strictly positive. The raw PPFD must be finite and non-negative.

source
PlantBiophysics.RadiativeMeshToLeafShortwaveType
RadiativeMeshToLeafShortwave()

Convert an organ shortwave irradiance normalized by its radiative mesh area to the botanical leaf-area basis used by energy balance. The conversion preserves absorbed energy:

\[Ra_SW_f_{leaf} = Ra_SW_f_{radiative} * A_{radiative} / A_{botanical}.\]

Both areas must be finite and strictly positive. The raw irradiance must be finite and non-negative.

source
PlantBiophysics.TuzetType

Tuzet 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
meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)

scene = leaf_scene(
    Tuzet(0.03, 12.0, -1.5, 2.0, 30.0);
    status=Status(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.

source
PlantBiophysics.Fvcb_net_assimilationMethod
Fvcb_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)

source
PlantBiophysics.arrheniusFunction
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)
source
PlantBiophysics.arrheniusFunction
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.Δₛᵥ)
source
PlantBiophysics.black_bodyMethod
black_body(T, K₀, σ)
black_body(T)

Thermal infrared, i.e. longwave radiation emitted from a black body at temperature T.

Note

K₀ and σ are taken from PlantMeteo.Constants if not provided.

source
PlantBiophysics.gbh_to_gbwFunction
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.

source
PlantBiophysics.gbₕ_forcedMethod
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.

source
PlantBiophysics.gbₕ_freeFunction
gbₕ_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.

source
PlantBiophysics.get_CᵢᵥMethod

Analytic 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}$)
source
PlantBiophysics.get_CᵢⱼMethod

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

source
PlantBiophysics.get_DₕFunction
get_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.

source
PlantBiophysics.get_JMethod

Rate 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_{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.5715752671342
source
PlantBiophysics.get_kmFunction

Compute 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)
source
PlantBiophysics.grey_bodyMethod

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.

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)
source
PlantBiophysics.gs_closureFunction
gs_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ₛ - Γ)) * FPSIF

where Γ is the CO₂ compensation point.

source
PlantBiophysics.gs_closureFunction

Constant stomatal closure. Usually called from a photosynthesis model.

Note

environment is just declared here for compatibility with other formats of calls.

source
PlantBiophysics.gs_closureFunction
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.A

Arguments

  • ::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

meteo = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)

A = 20 # example assimilation (μmol m-2 s-1)
scene = leaf_scene(
    Medlyn(0.03, 12.0);
    status=Status(A=A, Cₛ=380.0, Dₗ=meteo.VPD),
    environment=meteo,
)
run!(scene)
only(model_objects(scene; scale=:Leaf)).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.

  1. « 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.

source
PlantBiophysics.gsc_to_gswFunction
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.

source
PlantBiophysics.gsw_to_gscFunction
gsw_to_gsc(Gₛ, Gsc_to_Gsw = PlantMeteo.Constants().Gsc_to_Gsw)

Conversion of a stomatal conductance for H₂O into stomatal conductance for CO₂.

source
PlantBiophysics.latent_heatMethod
latent_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)
source
PlantBiophysics.mol_to_msMethod
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.

source
PlantBiophysics.ms_to_molMethod
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.

source
PlantBiophysics.net_longwave_radiationMethod
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.

source
PlantBiophysics.read_ciras4Method
read_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=',').
source
PlantBiophysics.read_ess_diveMethod
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

source
PlantBiophysics.read_licor6400Method
read_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=',').
source
PlantBiophysics.read_licor6800Method
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

source
PlantBiophysics.read_walzMethod
read_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.source
source
PlantBiophysics.sensible_heatMethod
sensible_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)
source
PlantBiophysics.Γ_starFunction
Γ_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.

source

Un-exported functions

PlantBiophysics._leaf_scene_numeric_prototypeMethod
leaf_scene(models...; status=Status(), environment=(duration=Dates.Hour(1),),
           timestep=nothing, type_promotion=nothing, status_transform=nothing)

Build a one-leaf PlantSimEngine.CompositeModel using PlantBiophysics model kernels. The returned scene can be combined with the regular scene/object inspection and execution APIs.

Hard dependencies declared by the models are resolved on the leaf object. Use timestep to override the application clock for every supplied model. Use type_promotion for scenario-wide status type conversion and status_transform for variable-specific conversion. Both policies are passed directly to PlantSimEngine.CompositeModel.

source
PlantBiophysics.f_ms_to_molMethod

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
source
PlantBiophysics.locf!Method
locf!(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.

source
PlantBiophysics.negative_rootMethod

Negative 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).

source
PlantBiophysics.positive_rootMethod

Positive 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).

source
PlantBiophysics.read_fileMethod
read_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=',').
source
PlantBiophysics.γ_starMethod

γ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
PlantBiophysics.λE_to_EFunction
λ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.

source
PlantSimEngine.fitMethod
Evaluation.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(
    Object(:plant; scale = :Plant, status = Status(LAI = df.LAI[1]));
    applications = (
        ModelSpec(
            Beer(fitted.k);
            name = :canopy_light,
            on = One(scale = :Plant),
        ),
    ),
    environment = meteo,
)
run!(scene)
model_object(scene, :plant).status.aPPFD
source
PlantSimEngine.fitMethod
Evaluation.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) * 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, PlantSimEngine, PlantSimEngine.Evaluation, 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 = Evaluation.fit(Medlyn, df)

# Re-simulating Gₛ using the newly fitted parameters:
gs_sim = map(eachrow(df)) do row
    scene = leaf_scene(
        Medlyn(g0, g1);
        status = Status(A = row.A, Cₛ = row.Cₐ, Dₗ = row.Dₗ),
    )
    run!(scene)
    only(model_objects(scene; scale = :Leaf)).status.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.
source
PlantSimEngine.fitMethod
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

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 = leaf_scene(
        FvcbRaw(VcMaxRef = VcMaxRef, JMaxRef = JMaxRef, RdRef = RdRef, TPURef = TPURef);
        status = Status(Tₗ = row.Tₗ, aPPFD = row.aPPFD, Cᵢ = row.Cᵢ),
    )
    run!(scene)
    only(model_objects(scene; scale = :Leaf)).status.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)
    scene = leaf_scene(
        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,
    )
    run!(scene)
    only(model_objects(scene; scale = :Leaf)).status.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ᵢ)
source
PlantSimEngine.run!Function
run!(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 botanical leaf-area basis. Convert canopy or radiative-mesh outputs explicitly before coupling them here.
    • 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
environment = Atmosphere(T = 22.0, Wind = 0.8333, P = 101.325, Rh = 0.4490995)
scene = leaf_scene(
    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; scale=:Leaf))
(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.

source
PlantSimEngine.run!Function
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 on the botanical leaf-area basis
    • 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
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
scene = leaf_scene(
    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; scale=:Leaf))
(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.

source
PlantSimEngine.run!Function
run!(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(
    Object(:plant; scale=:Plant, status=Status(LAI=2.0));
    applications=(
        ModelSpec(Beer(0.5); name=:canopy_light, on=One(scale=:Plant)),
    ),
    environment=environment,
)
run!(scene)
model_object(scene, :plant).status.aPPFD
source
PlantSimEngine.run!Function

Constant 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).

source
PlantSimEngine.run!Function
run!(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 on the botanical leaf-area basis
    • 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
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
scene = leaf_scene(
    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; scale=:Leaf))
(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.

source
PlantSimEngine.run!Function
run!(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
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
scene = leaf_scene(ConstantA(26.0); environment=environment)
run!(scene)
only(model_objects(scene; scale=:Leaf)).status.A
source
PlantSimEngine.run!Function
run!(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
environment = Atmosphere(T = 20.0, Wind = 1.0, P = 101.3, Rh = 0.65)
scene = leaf_scene(
    ConstantAGs(),
    Medlyn(0.03, 12.0);
    status=Status(Cₛ=400.0, Dₗ=2.0),
    environment=environment,
)
run!(scene)
leaf = only(model_objects(scene; scale=:Leaf))
(leaf.status.A, leaf.status.Cᵢ)
source
PlantSimEngine.run!Function
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 on the botanical leaf-area basis
    • 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
scene = leaf_scene(
    FvcbRaw();
    status=Status(Tₗ=25.0, aPPFD=1000.0, Cᵢ=400.0),
)
run!(scene)
only(model_objects(scene; scale=:Leaf)).status.A

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.

source