![]() |
PyHelios 0.1.11
|
| Dependencies | None |
|---|---|
| Python Import | from pyhelios import StomatalConductanceModel |
| Main Class | StomatalConductanceModel |
StomatalConductanceModel provides comprehensive stomatal conductance modeling and gas exchange calculations using validated stomatal response models. This plugin enables accurate simulation of plant-atmosphere interactions and water-carbon coupling in plant physiological studies.
The plugin implements several different stomatal conductance models. A brief description of the theory behind each model is given below, along with coefficients obtained from several example species.
The default model is the Buckley, Mott, Farquhar model (see Buckley, Mott, Farquhar (2003) Model (simplified version given in Buckley, Turnbull, and Adams 2012)).
| Dependencies | None |
|---|---|
| Platforms | Windows, Linux, macOS |
| GPU | Not required |
| Primitive Data Label | Symbol | Units | Data Type | Description | Applicable model(s) | Available Plug-ins | Default Value |
|---|---|---|---|---|---|---|---|
| radiation_flux_PAR | \(Q\) | W/m2 | float | PAR photon flux density. Note W/m2 is automatically converted to \(\mu\)mol/m2/s using a factor of 4.57. | BMF | Can be computed by RadiationModel plug-in. | 0 |
| temperature | \(T_s\) | Kelvin | float | Primitive surface temperature. | All | Can be computed by EnergyBalanceModel plug-in. | 300 K |
| air_pressure | \(p_{atm}\) | Pascals | float | Atmospheric pressure. | All | N/A | 101,000 Pa |
| air_temperature | \(T_a\) | Kelvin | float | Temperature of air outside of primitive boundary-layer. | All | N/A | 300 K |
| air_humidity | \(h\) | Unitless | float | Relative humidity of air outside of primitive boundary-layer. | All | N/A | 0.5 |
| boundarylayer_conductance** | \(g_H\) | mol air/m2-s | float | Boundary-layer conductance to heat. (Assumed that b.l. conductance to moisture is 1.08 that of heat.) | All | Can be computed by BLConductanceModel plug-in, or by EnergyBalanceModel plug-in if optional output primitive data "boundarylayer_conductance_out" is enabled. | 0.1 mol/m2-s |
| beta_soil | \(\beta\) | unitless | float | Soil moisture factor, defined as \((\theta-\theta_w)/(\theta_f-\theta_w)\), with \(\theta,\,\theta_f,\,\theta_w\) being the effective soil water content, water content at field capacity, and water content at the wilting point. | All | N/A | 1.0 |
| net_photosynthesis | \(A\) | \(\mu\)mol/m2-s | float | Net CO2 (photosynthetic) flux. | BWB, BBL, Mopt | Can be computed by PhotosynthesisModel plug-in. | 0 |
| air_CO2 | \(C_a\) | \(\mu\)mol/mol | float | CO2 concentration of air outside primitive boundary-layer. | BWB, BBL, Mopt | N/A | 400 \(\mu\)mol/mol |
| Gamma_CO2 | \(\Gamma\) | \(\mu\)mol/mol | float | CO2 compensation point of photosynthesis including dark respiration. (Note: only used for Ball-Berry models.) | BBL | Can be computed by PhotosynthesisModel plug-in (need to enable optional primitive data output). | 100 \(\mu\)mol/mol |
**The stomatal conductance model will also check for primitive data "boundarylayer_conductance_out" if "boundarylayer_conductance" does not exist. If you are using the energy balance model to calculate the boundary-layer conductance, you should enable optional output primitive data "boundarylayer_conductance_out" so that other plug-ins can use it.
| Primitive Data Label | Symbol | Units | Data Type | Description |
|---|---|---|---|---|
| moisture_conductance | \(g_s\) | mol air/m2-sec | float | Conductance of water vapor through stomata. |
Optional output primitive data can be written to the context by calling optionalOutputPrimitiveData(), with an argument of one of the primitive data labels given in the table below.
| Primitive Data Label | Units | Data Type | Description |
|---|---|---|---|
| vapor_pressure_deficit | mmol/mol | float | Vapor pressure deficit between the stomatal cavity and leaf surface. Only applicable for BMF model. |
| model_parameters | N/A | std::string | Model parameters for each primitive. See table below for the actual primitive data labels that are created. |
If you enable the optional output primitive data "model_parameters", different primitive data will be created based on the selected model corresponding to each model parameter.
| Model | Model Parameter | Output Primitive Data Label |
|---|---|---|
| Ball-Woodrow-Berry | \(g_{s,0}\) | gs0_BWB |
| \(a_1\) | a1_BWB | |
| Ball-Berry-Leuning | \(g_{s,0}\) | gs0_BBL |
| \(a_1\) | a1_BBL | |
| \(D_0\) | D0_BBL | |
| Medlyn Optimality | \(g_{s,0}\) | gs0_MOPT |
| \(g_1\) | g1_MOPT | |
| Buckley-Mott-Farquhar | \(E_m\) | Em_BMF |
| \(i_0\) | i0_BMF | |
| \(k\) | k_BMF | |
| \(b\) | b_BMF |
This plugin implements several different stomatal conductance models. A brief description of the theory behind each model is given below, along with coefficients obtained from several example species.
The default model is the Buckley, Mott, Farquhar model (see Buckley, Mott, Farquhar (2003) Model (simplified version given in Buckley, Turnbull, and Adams 2012)).
The Ball, Woodrow, and Berry (1987) model is based on the empirical observation that stomatal conductance various roughly linearly with the net photosynthetic flux \(A\) and relative humidity at the leaf surface \(h_s\). They proposed the relationship:
\[g_s = g_{s,0}+a_1A\beta\frac{h_s}{C_s},\]
where \(C_s\) is the air CO2 concentration at the leaf surface, and \(g_{s,0}\) and \(a_1\) are empirical parameters. \(\beta\) is a factor to account for reduction in stomatal conductance with soil drying and is defined as
\[\beta = \frac{\theta-\theta_w}{\theta_f-\theta_w},\]
where \(\theta,\,\theta_f,\,\theta_w\) are the effective soil water content, water content at field capacity, and water content at the wilting point. By default, it is assumed that \(\beta=1\).
This model is at odds with several more recent observation of stomatal function, including: 1) stomata have been shown to respond to the intercellular CO2 concentration \(C_i\) and not the concentration outside of the leaf (Mott 1988); 2) stomata respond to the rate of evaporation, not humidity itself (Mott and Parkhurst 1991); 3) the predicted \(g_s\) value could become negative; 4) the predicted value of \(g_s\) approaches infinity as \(C_s\rightarrow \infty\); 5) the predicted value of \(g_s\) does not respond to soil drying. Another more practical limitation is that photosynthesis must also be modeled in order to calculate stomatal conductance. Nonetheless, this model is one of the most commonly used models of stomatal conductance.
The CO2 concentration at the leaf surface is calculated as
\[C_s = C_a-\frac{A}{0.75g_{bw}},\]
where \(0.75g_{bw}\) is the boundary-layer conductance to CO2 (assuming the diffusivity of CO2 in air is 0.75 that of water vapor), and \(C_a\) is the air CO2 concentration outside of the leaf boundary-layer.
The relative humidity at the leaf surface is calculated by setting up a water vapor flux balance at the leaf surface and iteratively solving for the humidity at the leaf surface:
\[g_s*e_{sat}(T_L)*(1-h_s) = g_{bw}*(e_{sat}(T_L)h_s-e_{sat}(T_a)h_a),\]
where \(e_{sat}(T_L)\) and \(e_{sat}(T_a)\) are the saturated vapor pressure evaluated respectively at the leaf surface and air temperature (calculated according to the Tetens equation), and \(h_a\) is the air relative humidity outside the leaf boundary-layer.
Below are example parameter values for several different tree crop species (a description of how calibration data was collected is given in the section below). Note that, as mentioned above, in order to apply the model photosynthesis must also be modeled - coefficients for these species are also given in the photosynthesis model documentation.
| Species | \(g_{s,0}\) (mol air/m2-s) | \(a_1\) (unitless) | \(R^2\) of fit |
|---|---|---|---|
| Almond (default) | 0.0733 | 9.422 | 0.976 |
| Apple | 0.0444 | 7.681 | 0.809 |
| Cherry | 0.0939 | 5.226 | 0.839 |
| Prune | 0.0425 | 7.120 | 0.917 |
| Pear | 0.0775 | 8.298 | 0.928 |
| Pistachio (female) | 0.0647 | 10.732 | 0.956 |
| Pistachio (male) | 0.0419 | 7.580 | 0.953 |
| Walnut | 0.1253 | 5.527 | 0.962 |
Leuning et al. (1990,1995) revised the original Ball, Woodrow, Berry model to overcome some of it's original limitations, namely the fact that \(g_s\) approaches infinity as \(C_s\rightarrow \infty\) by calculating stomatal conductance as
\[g_s = g_{s,0}+\frac{a_1A\beta}{\left(C_s-\Gamma\right)\left(1+\frac{D_s}{D_0}\right)},\]
where \(D_s\) is the vapor pressure deficit between the sub-stomatal cavity and the leaf surface, \(\Gamma\) is the CO2 compensation point of photosynthesis (including dark respiration), and \(D_0\) (mmol/mol) is an additional empirical parameter.
\(D_s\) is calculated by first determining the surface relative humidity as described above for the Ball, Woodrow, Berry model, then calculating the surface vapor pressure deficit as \(D_s=\frac{e_{sat}(T_L)(1-h_s)}{p_{atm}}\) ( \(p_{atm}\) is atmospheric pressure).
Below are example parameter values for several different tree crop species (a description of how calibration data was collected is given in the section below). Note that, as mentioned above, in order to apply the model photosynthesis must also be modeled - coefficients for these species are also given in the photosynthesis model documentation.
| Species | \(g_{s,0}\) (mol air/m2-s) | \(a_1\) (unitless) | \(D_0\) (mmol/mol) | \(R^2\) of fit |
|---|---|---|---|---|
| Almond (default) | 0.0743 | 4.265 | 14570.0 | 0.984 |
| Apple | 0.0405 | 3.511 | 32950.2 | 0.869 |
| Cherry | 0.0881 | 2.485 | 1578689.7 | 0.947 |
| Prune | 0.0425 | 3.185 | 30488.1 | 0.846 |
| Pear | 0.0814 | 3.718 | 61725.6 | 0.894 |
| Pistachio (female) | 0.0675 | 4.743 | 1566202.4 | 0.971 |
| Pistachio (male) | 0.0465 | 3.370 | 26990.8 | 0.934 |
| Walnut | 0.1248 | 4.548 | 21.4 | 0.977 |
The stomatal conductance mode of Medlyn et al. (2011) combines the empirical modeling approach with the hypothesis that stomata should act should act to optimally minimize the amount of water used per unit carbon gained.
\[g_s = g_{s,0}+1.6\left(1+\frac{g_1\sqrt{\beta}}{\sqrt{D_s P_{atm}}}\right)\frac{A}{C_s},\]
where \(D_s\) is in units of mol/mol, and \(P_{atm}\) is atmospheric pressure in kPa. Note that there are a couple of deviations of this equation from that presented in Medlyn et al. (2011): 1) The factor of 1.6 is needed for the resulting conductance to be that of water vapor, 2) We express \(D_s\) in units of mol/mol, and thus multiplication by the atmospheric pressure is needed to get units of kPa, 3) We use surface values for VPD and CO2 concentration, which allows for incorporation of boundary-layer effects.
One issue with this model is that stomatal conductance blows up to infinity as \(D_s\rightarrow 0\). Our implementation imposes an arbitrary minimum \(D_s\) value of 0.00001 mol/mol.
Below are example parameter values for several different tree crop species (a description of how calibration data was collected is given in the section below). Note that, as mentioned above, in order to apply the model photosynthesis must also be modeled - coefficients for these species are also given in the photosynthesis model documentation.
| Species | \(g_{s,0}\) (mol air/m2-s) | \(g_1\) ( \(\sqrt{kPa}\)) | \(R^2\) of fit |
|---|---|---|---|
| Almond (default) | 0.0825 | 2.637 | 0.941 |
| Apple | 0.0426 | 2.160 | 0.864 |
| Cherry | 0.0936 | 1.043 | 0.893 |
| Prune | 0.0412 | 1.863 | 0.949 |
| Pear | 0.0775 | 2.418 | 0.966 |
| Pistachio (female) | 0.0756 | 3.252 | 0.902 |
| Pistachio (male) | 0.0434 | 2.039 | 0.941 |
| Walnut | 0.1246 | 1.167 | 0.973 |
The stomatal conductance model of Buckley, Turnbull, and Adams (2012) is a simplification of the hydromechanical/biochemical model orignially proposed by Buckley, Mott, and Farquhar (2003). The original model is highly complex with many parameters, but with the simplifications described by Buckley, Turnbull, and Adams (2003), an explicit expression for stomatal conductance can be written as
\[g_s = \frac{E_m\beta(Q+i_0)}{k+bQ+(Q+i_0)D_s},\]
where \(Q\) is the photosynthetic photon flux density, \(D_s\) is defined and calculated as described for other models above, \(E_m,\,i_0,\,k,\) and \(b\) are semi-empirical parameters. Note that the photosynthetic flux that is input to the plug-in is in units of energy flux (W/m2), but \(Q\) in this equation is photon flux density ( \(\mu\)mol/m2-s). This is because the primitive data value output from the radiation model is in energy flux. The stomatal conductance plug-in automatically converts energy flux to photon flux density using a factor of 4.57 \(\mu\)mol/W.
Below are example parameter values for several different tree crop species (a description of how calibration data was collected is given in the section below).
| Species | \(E_m\) (mmol/m2-s) | \(i_0\) ( \(\mu\)mol/m2-s) | \(k\) ( \(\mu\)mol/m-2s-1 mmol mol-1) | \(b\) (mmol/mol) | \(R^2\) of fit |
|---|---|---|---|---|---|
| Almond (default) | 865.52 | 38.65 | 780320.1 | 2086.07 | 0.991 |
| Apple | 24.82 | 182.86 | 109688.7 | 21.30 | 0.986 |
| Cherry | 138.03 | 154.24 | 262462.7 | 545.59 | 0.963 |
| Prune | 5.47 | 115.73 | 12280.2 | 6.10 | 0.993 |
| Pear | 13.06 | 167.89 | 25926.4 | 9.81 | 0.960 |
| Pistachio (female) | 24865.61 | 171.52 | 63444078.5 | 22428.01 | 0.968 |
| Pistachio (male) | 236.89 | 272.74 | 1224393.7 | 257.26 | 0.964 |
| Walnut | 29.12 | 68.03 | 19778.8 | 75.26 | 0.972 |
Each model has a data structure containing member variables for each of the model parameters. These are listed in the table below.
| Model | Parameter Structure |
|---|---|
| Ball, Woodrow, Berry | BWBcoefficients |
| Ball, Berry, Leuning | BBLcoefficients |
| Medlyn et al. Optimality | MOPTcoefficients |
| Buckley, Mott, Farquhar | BMFcoefficients |
In order to modify model coefficients from the default values, one should 1) declare and instance of the coefficient structure, 2) modify the appropriate data elements of the data structure, and 3) pass the data structure to the model-specific coefficient setting function (e.g., setBMFCoefficients()). Model coefficients can be set to the same value for all primitives, or differently for a subset of primitives based on a vector of UUIDs. Example code is given below
PyHelios uses a UUID-based approach for setting coefficients to specific primitives. Coefficients can be applied to all primitives or to a subset specified by their UUIDs.
Setting coefficients for different species:
You can also set custom coefficients for specific primitives:
There are two possible functions to run the model: one to run the model for all primitives in the Context (see run()), and another to run the model only for a subset of primitives given their UUIDs (see run()).
Any of the above steady-state models can be run in dynamic mode by specifying a timestep and response time constants, which will delay stomatal response to environmental stimuli. When environmental conditions are changed, the stomatal conductance will exponentially relax toward the steady-state value, which is calculated according to any of the above models.
Let the steady-state stomatal conductance value calculated according to any of the above models be denoted by \(g_{s,ss}\). Then the dynamic stomatal conductance is calculated according to the following equation
\[\dfrac{d g_s}{dt} = \dfrac{g_{s,ss} - g_s}{\tau},\]
where
\(\tau\) is the time constant for stomatal response to a change in environmental conditions, and \(\tau = \tau_{open}\) if stomata are opening, and \(\tau = \tau_{close}\) if stomata are closing.
The above equation can be discretized using a forward Euler scheme to update the stomatal conductance after each timestep \(\Delta t\) as
\[g_s^{new} = g_s^{old} + \dfrac{g_{s,ss} - g_s^{old}}{\tau}\Delta t.\]
The response time constants \(\tau_{open}\) and \(\tau_{close}\) are specified using the setDynamicTimeConstants() method. If time constants are not defined, a warning will be issued and the model will run in steady-state mode.
The model also requires an initial stomatal conductance value, which is specified by setting primitive data "moisture_conductance". If this primitive data is not defined, the model will run in steady-state mode for the first timestep, and this steady-state value will become the initial value for running in dynamic mode.
Below is and example of running the model in dynamic mode.