Skip to contents

photosynthesis: simulate C3 photosynthesis over multiple parameter sets

photo: simulate C3 photosynthesis over a single parameter set

Usage

photosynthesis(
  leaf_par,
  enviro_par,
  bake_par,
  constants,
  use_tealeaves,
  progress = TRUE,
  quiet = FALSE,
  assert_units = TRUE,
  check = TRUE,
  parallel = FALSE,
  use_legacy_version = FALSE
)

photo(
  leaf_par,
  enviro_par,
  bake_par,
  constants,
  use_tealeaves,
  quiet = FALSE,
  assert_units = TRUE,
  check = TRUE,
  prepare_for_tleaf = use_tealeaves,
  use_legacy_version = FALSE
)

Arguments

leaf_par

A list of leaf parameters inheriting class leaf_par. This can be generated using the make_leafpar function.

enviro_par

A list of environmental parameters inheriting class enviro_par. This can be generated using the make_enviropar function.

bake_par

A list of temperature response parameters inheriting class bake_par. This can be generated using the make_bakepar function.

constants

A list of physical constants inheriting class constants. This can be generated using the make_constants function.

use_tealeaves

Logical. Should leaf energy balance be used to calculate leaf temperature (T_leaf)? If TRUE, tleaf() calculates T_leaf. If FALSE, user-defined T_leaf is used. Additional parameters and constants are required, see make_parameters().

progress

Logical. Should a progress bar be displayed?

quiet

Logical. Should messages be displayed?

assert_units

Logical. Should parameter units be checked? The function is faster when FALSE, but input must be in correct units or else results will be incorrect without any warning.

check

Logical. Should arguments checks be done? This is intended to be disabled when photo() is called from photosynthesis() Default is TRUE.

parallel

Logical. Should parallel processing be used via furrr::future_map()?

use_legacy_version

Logical. Should legacy model (<2.1.0) be used? See NEWS for further information. Default is FALSE.

prepare_for_tleaf

Logical. Should arguments additional calculations for tleaf()? This is intended to be disabled when photo() is called from photosynthesis(). Default is use_tealeaves.

Value

A data.frame with the following units columns

Inputs:

SymbolRDescriptionUnitsDefault
\(D_{\mathrm{c},0}\)D_c0diffusion coefficient for CO2 in air at 0 °Cm\(^2\) / s\(1.29\times 10^{-5}\)
\(D_{\mathrm{h},0}\)D_h0diffusion coefficient for heat in air at 0 °Cm\(^2\) / s\(1.90\times 10^{-5}\)
\(D_{\mathrm{m},0}\)D_m0diffusion coefficient for momentum in air at 0 °Cm\(^2\) / s\(1.33\times 10^{-5}\)
\(D_{\mathrm{w},0}\)D_w0diffusion coefficient for water vapor in air at 0 °Cm\(^2\) / s\(2.12\times 10^{-5}\)
\(\epsilon\)epsilonratio of water to air molar massesnone0.622
\(G\)Ggravitational accelerationm / s\(^2\)9.8
\(eT\)eTexponent for temperature dependence of diffusionnone1.75
\(R\)Rideal gas constantJ / mol / K8.31
\(\sigma\)sigmaStephan-Boltzmann constantW / m\(^2\) / K\(^4\)\(5.67\times 10^{-8}\)
\(f_\mathrm{Sh}\)f_shfunction to calculate constant(s) for Sherwood numbernoneNA
\(f_\mathrm{Nu}\)f_nufunction to calculate constant(s) for Nusselt numbernoneNA
\(D_\mathrm{s,gmc}\)Ds_gmcempirical temperature response parameterJ / mol / K487
\(D_\mathrm{s,Jmax}\)Ds_Jmaxempirical temperature response parameterJ / mol / K388
\(E_\mathrm{a,\Gamma *}\)Ea_gammastarempirical temperature response parameterJ / mol24500
\(E_\mathrm{a,gmc}\)Ea_gmcempirical temperature response parameterJ / mol68900
\(E_\mathrm{a,Jmax}\)Ea_Jmaxempirical temperature response parameterJ / mol56100
\(E_\mathrm{a,KC}\)Ea_KCempirical temperature response parameterJ / mol81000
\(E_\mathrm{a,KO}\)Ea_KOempirical temperature response parameterJ / mol23700
\(E_\mathrm{a,Rd}\)Ea_Rdempirical temperature response parameterJ / mol40400
\(E_\mathrm{a,Vcmax}\)Ea_Vcmaxempirical temperature response parameterJ / mol52200
\(E_\mathrm{a,Vtpu}\)Ea_Vtpuempirical temperature response parameterJ / mol52200
\(E_\mathrm{d,gmc}\)Ed_gmcempirical temperature response parameterJ / mol149000
\(E_\mathrm{d,Jmax}\)Ed_Jmaxempirical temperature response parameterJ / mol121000
\(C_\mathrm{air}\)C_airatmospheric CO2 concentrationumol/mol420
\(O\)Oatmospheric O2 concentrationmol/mol0.21
\(P\)Patmospheric pressurekPa101
\(\mathrm{PPFD}\)PPFDphotosynthetic photon flux densityumol / m\(^2\) / s1500
\(\mathrm{RH}\)RHrelative humiditynone0.5
\(u\)windwindspeedm / s2
\(d\)leafsizeleaf characteristic dimensionm0.1
\(\Gamma*_{25}\)gamma_star25chloroplastic CO2 compensation point (25 °C)umol/mol37.9
\(g_\mathrm{mc,25}\)g_mc25mesophyll conductance to CO2 (25 °C)mol / m\(^2\) / s0.4
\(g_\mathrm{sc}\)g_scstomatal conductance to CO2mol / m\(^2\) / s0.4
\(g_\mathrm{uc}\)g_uccuticular conductance to CO2mol / m\(^2\) / s0.01
\(J_\mathrm{max,25}\)J_max25potential electron transport (25 °C)umol / m\(^2\) / s200
\(k_\mathrm{mc}\)k_mcpartition of g_mc to lower mesophyllnone1
\(k_\mathrm{sc}\)k_scpartition of g_sc to lower surfacenone1
\(k_\mathrm{uc}\)k_ucpartition of g_uc to lower surfacenone1
\(K_\mathrm{C,25}\)K_C25Michaelis constant for carboxylation (25 °C)umol / mol268
\(K_\mathrm{O,25}\)K_O25Michaelis constant for oxygenation (25 °C)umol / mol165000
\(\phi_J\)phi_Jinitial slope of the response of J to PPFDnone0.331
\(R_\mathrm{d,25}\)R_d25nonphotorespiratory CO2 release (25 °C)umol / m\(^2\) / s2
\(\theta_J\)theta_Jcurvature factor for light-response curvenone0.825
\(T_\mathrm{leaf}\)T_leafleaf temperatureK298
\(V_\mathrm{c,max,25}\)V_cmax25maximum rate of carboxylation (25 °C)umol / m\(^2\) / s150
\(V_\mathrm{tpu,25}\)V_tpu25rate of triose phosphate utilization (25 °C)umol / m\(^2\) / s200
\(\delta_\mathrm{ias,lower}\)delta_ias_lowereffective distance through lower internal airspaceumNA
\(\delta_\mathrm{ias,upper}\)delta_ias_uppereffective distance through upper internal airspaceumNA
\(A_\mathrm{mes} / A\)A_mes_Amesophyll surface area per unit leaf areanoneNA
\(g_\mathrm{liq,c,25}\)g_liqc25liquid-phase conductance to CO2 (25 °C)mol / m\(^2\) / sNA

Baked Inputs:

SymbolRDescriptionUnitsDefault
\(\Gamma*\)gamma_starchloroplastic CO2 compensation point (T_leaf)umol/molNA
\(g_\mathrm{mc}\)g_mcmesophyll conductance to CO2 (T_leaf)mol / m\(^2\) / sNA
\(J_\mathrm{max}\)J_maxpotential electron transport (T_leaf)umol / m\(^2\) / sNA
\(K_\mathrm{C}\)K_CMichaelis constant for carboxylation (T_leaf)umol / molNA
\(K_\mathrm{O}\)K_OMichaelis constant for oxygenation (T_leaf)umol / molNA
\(R_\mathrm{d}\)R_dnonphotorespiratory CO2 release (T_leaf)umol / m\(^2\) / sNA
\(V_\mathrm{c,max}\)V_cmaxmaximum rate of carboxylation (T_leaf)umol / m\(^2\) / sNA
\(V_\mathrm{tpu}\)V_tpurate of triose phosphate utilisation (T_leaf)umol / m\(^2\) / sNA
\(g_\mathrm{liq,c}\)g_liqcliquid-phase conductance to CO2 (T_leaf)mol / m\(^2\) / sNA
\(g_\mathrm{ias,c,lower}\)g_iasc_lowerinternal airspace conductance to CO2 in lower part of leaf (T_leaf)mol / m\(^2\) / sNA
\(g_\mathrm{ias,c,upper}\)g_iasc_upperinternal airspace conductance to CO2 in upper part of leaf (T_leaf)mol / m\(^2\) / sNA
Output:
A
photosynthetic rate at C_chl (\(\mu\)mol CO2 / m\(^2\) / s)C_chl
chloroplastic CO2 concentration where A_supply intersects A_demand (\(mu\)mol / mol)C_i
intercellular CO2 concentration where A_supply intersects A_demand (\(mu\)mol / mol)g_tc
total conductance to CO2 at T_leaf (mol / m\(^2\) / s))value
A_supply - A_demand (\(\mu\)mol / (m\(^2\) s)) at C_chlconvergence

Details

photo: This function takes simulates photosynthetic rate using the Farquhar-von Caemmerer-Berry (FvCB()) model of C3 photosynthesis for single combined set of leaf parameters (leaf_par()), environmental parameters (enviro_par()), and physical constants (constants()). Leaf parameters are provided at reference temperature (25 °C) and then "baked" to the appropriate leaf temperature using temperature response functions (see bake()).

photosynthesis: This function uses photo to simulate photosynthesis over multiple parameter sets that are generated using cross_df().

Examples

# Single parameter set with 'photo'

bake_par = make_bakepar()
constants = make_constants(use_tealeaves = FALSE)
enviro_par = make_enviropar(use_tealeaves = FALSE)
leaf_par = make_leafpar(use_tealeaves = FALSE)
photo(leaf_par, enviro_par, bake_par, constants,
  use_tealeaves = FALSE
)
#> 
#>             
#>   As of version 2.1.0, the CO2 conductance model changed slightly. 
#>   To implement legacy version, use:
#>   
#>   `> photosynthesis(..., use_legacy_version = TRUE)`.
#> 
#> Solving for C_chl ...
#>  done
#>                 C_chl         value convergence                  g_tc
#> 1 258.1218 [umol/mol] -1.363227e-06           0 0.1726157 [mol/m^2/s]
#>                       A            J_max          J_max25              K_C
#> 1 27.94273 [umol/m^2/s] 200 [umol/m^2/s] 200 [umol/m^2/s] 268.3 [umol/mol]
#>              K_C25                 K_O               K_O25            R_d
#> 1 268.3 [umol/mol] 165084.2 [umol/mol] 165084.2 [umol/mol] 2 [umol/m^2/s]
#>            R_d25     T_leaf           V_cmax         V_cmax25            V_tpu
#> 1 2 [umol/m^2/s] 298.15 [K] 150 [umol/m^2/s] 150 [umol/m^2/s] 200 [umol/m^2/s]
#>            V_tpu25            g_mc          g_mc25            g_sc
#> 1 200 [umol/m^2/s] 0.4 [mol/m^2/s] 0.4 [mol/m^2/s] 0.4 [mol/m^2/s]
#>               g_uc         gamma_star       gamma_star25  k_mc  k_sc  k_uc
#> 1 0.01 [mol/m^2/s] 37.9258 [umol/mol] 37.9258 [umol/mol] 1 [1] 1 [1] 1 [1]
#>   leafsize     phi_J   theta_J          C_air              O              P
#> 1  0.1 [m] 0.331 [1] 0.825 [1] 420 [umol/mol] 0.21 [mol/mol] 101.3246 [kPa]
#>                PPFD      RH    wind          Ds_Jmax           Ds_gmc
#> 1 1500 [umol/m^2/s] 0.5 [1] 2 [m/s] 388.04 [J/K/mol] 487.29 [J/K/mol]
#>            Ea_Jmax            Ea_KC            Ea_KO            Ea_Rd
#> 1 56095.18 [J/mol] 80989.78 [J/mol] 23719.97 [J/mol] 40446.75 [J/mol]
#>           Ea_Vcmax          Ea_Vtpu     Ea_gammastar           Ea_gmc
#> 1 52245.78 [J/mol] 52245.78 [J/mol] 24459.97 [J/mol] 68901.56 [J/mol]
#>            Ed_Jmax           Ed_gmc             D_c0            D_h0
#> 1 121244.8 [J/mol] 148788.6 [J/mol] 1.29e-05 [m^2/s] 1.9e-05 [m^2/s]
#>               D_m0             D_w0           G                 R       eT
#> 1 1.33e-05 [m^2/s] 2.12e-05 [m^2/s] 9.8 [m/s^2] 8.31446 [J/K/mol] 1.75 [1]
#>     epsilon                sigma                 C_i
#> 1 0.622 [1] 5.67e-08 [W/K^4/m^2] 350.1432 [umol/mol]

# Multiple parameter sets with 'photosynthesis'

leaf_par = make_leafpar(
  replace = list(
    T_leaf = set_units(c(293.14, 298.15), "K")
  ), use_tealeaves = FALSE
)
photosynthesis(leaf_par, enviro_par, bake_par, constants,
  use_tealeaves = FALSE
)
#> 
#>             
#>   As of version 2.1.0, the CO2 conductance model changed slightly. 
#>   To implement legacy version, use:
#>   
#>   `> photosynthesis(..., use_legacy_version = TRUE)`.
#> Solving for photosynthetic rate from 2 parameter sets ...
#>                 C_chl         value convergence                  g_tc
#> 1 269.8118 [umol/mol] -3.407982e-06           0 0.1498162 [mol/m^2/s]
#> 2 258.1218 [umol/mol] -1.363227e-06           0 0.1726157 [mol/m^2/s]
#>                       A                 J_max          J_max25
#> 1 22.50062 [umol/m^2/s] 143.6921 [umol/m^2/s] 200 [umol/m^2/s]
#> 2 27.94273 [umol/m^2/s] 200.0000 [umol/m^2/s] 200 [umol/m^2/s]
#>                  K_C            K_C25                 K_O               K_O25
#> 1 153.505 [umol/mol] 268.3 [umol/mol] 140179.2 [umol/mol] 165084.2 [umol/mol]
#> 2 268.300 [umol/mol] 268.3 [umol/mol] 165084.2 [umol/mol] 165084.2 [umol/mol]
#>                   R_d          R_d25     T_leaf                V_cmax
#> 1 1.5133 [umol/m^2/s] 2 [umol/m^2/s] 293.14 [K] 104.6304 [umol/m^2/s]
#> 2 2.0000 [umol/m^2/s] 2 [umol/m^2/s] 298.15 [K] 150.0000 [umol/m^2/s]
#>           V_cmax25                 V_tpu          V_tpu25                  g_mc
#> 1 150 [umol/m^2/s] 139.5072 [umol/m^2/s] 200 [umol/m^2/s] 0.2844658 [mol/m^2/s]
#> 2 150 [umol/m^2/s] 200.0000 [umol/m^2/s] 200 [umol/m^2/s] 0.4000000 [mol/m^2/s]
#>            g_mc25            g_sc             g_uc          gamma_star
#> 1 0.4 [mol/m^2/s] 0.4 [mol/m^2/s] 0.01 [mol/m^2/s] 32.04034 [umol/mol]
#> 2 0.4 [mol/m^2/s] 0.4 [mol/m^2/s] 0.01 [mol/m^2/s] 37.92580 [umol/mol]
#>         gamma_star25  k_mc  k_sc  k_uc leafsize     phi_J   theta_J
#> 1 37.9258 [umol/mol] 1 [1] 1 [1] 1 [1]  0.1 [m] 0.331 [1] 0.825 [1]
#> 2 37.9258 [umol/mol] 1 [1] 1 [1] 1 [1]  0.1 [m] 0.331 [1] 0.825 [1]
#>            C_air              O              P              PPFD      RH
#> 1 420 [umol/mol] 0.21 [mol/mol] 101.3246 [kPa] 1500 [umol/m^2/s] 0.5 [1]
#> 2 420 [umol/mol] 0.21 [mol/mol] 101.3246 [kPa] 1500 [umol/m^2/s] 0.5 [1]
#>      wind          Ds_Jmax           Ds_gmc          Ea_Jmax            Ea_KC
#> 1 2 [m/s] 388.04 [J/K/mol] 487.29 [J/K/mol] 56095.18 [J/mol] 80989.78 [J/mol]
#> 2 2 [m/s] 388.04 [J/K/mol] 487.29 [J/K/mol] 56095.18 [J/mol] 80989.78 [J/mol]
#>              Ea_KO            Ea_Rd         Ea_Vcmax          Ea_Vtpu
#> 1 23719.97 [J/mol] 40446.75 [J/mol] 52245.78 [J/mol] 52245.78 [J/mol]
#> 2 23719.97 [J/mol] 40446.75 [J/mol] 52245.78 [J/mol] 52245.78 [J/mol]
#>       Ea_gammastar           Ea_gmc          Ed_Jmax           Ed_gmc
#> 1 24459.97 [J/mol] 68901.56 [J/mol] 121244.8 [J/mol] 148788.6 [J/mol]
#> 2 24459.97 [J/mol] 68901.56 [J/mol] 121244.8 [J/mol] 148788.6 [J/mol]
#>               D_c0            D_h0             D_m0             D_w0
#> 1 1.29e-05 [m^2/s] 1.9e-05 [m^2/s] 1.33e-05 [m^2/s] 2.12e-05 [m^2/s]
#> 2 1.29e-05 [m^2/s] 1.9e-05 [m^2/s] 1.33e-05 [m^2/s] 2.12e-05 [m^2/s]
#>             G                 R       eT   epsilon                sigma
#> 1 9.8 [m/s^2] 8.31446 [J/K/mol] 1.75 [1] 0.622 [1] 5.67e-08 [W/K^4/m^2]
#> 2 9.8 [m/s^2] 8.31446 [J/K/mol] 1.75 [1] 0.622 [1] 5.67e-08 [W/K^4/m^2]
#>                   C_i
#> 1 363.7484 [umol/mol]
#> 2 350.1432 [umol/mol]