DataPDF Available

Appendix 1. Code for manipulable expressions for all equations presented in the Methods and the Results (provided in PDF and Mathematica notebook format).

Authors:
(* set up energy balance constants and saturation
vapor pressure model *)
constants = {ρ1225, cP1.01, γ67, σ5.67 *10^-8}
vpdeqn =
{es[Tair] →
v0 *Exp[(v1 - (Tair -v2)/v3) *
((Tair -v2)/(v4 + (Tair -v2)))] ,
es[Tleaf] →
v0 *Exp[(v1 - (Tleaf -v2)/v3) *
((Tleaf -v2)/(v4 + (Tleaf -v2)))],
es[Tair]->
D[
v0 *Exp[(v1 - (Tair -v2)/v3) *
((Tair -v2)/(v4 + (Tair -v2)))] ,Tair],
es[Tleaf]->
D[
v0 *Exp[(v1 - (Tleaf -v2)/v3) *
((Tleaf -v2) / (v4 + (Tleaf -v2)))] ,Tleaf]} /.
{v0 -> 100 *6.1121, v1 -> 18.678, v2 -> 273.15,
v3 -> 234.5, v4 -> 257.14}
(* define central constants in Table 1 *)
centralvals = {Tair 293, h0.5, Rs800,
Rl400, ϵ0.97, αs0.5, gS0.005, n1,
rH100};
CentralValsDelete[
cv_
,
name_
]:=
Drop[
cv
, First[Position[
#
[[1]] &/@
cv
,
name
]]]
ρ → 1225, cP1.01, γ → 67, σ → 5.67 ×10-8
Appendix 1.nb | 1
es[Tair] →
611.21 18.678-0.00426439 -273.15+Tair -273.15+Tair
-16.01+Tair ,
es[Tleaf] → 611.21
18.678-0.00426439 -273.15+Tleaf -273.15+Tleaf
-16.01+Tleaf , es[Tair] →
611.21 18.678-0.00426439 -273.15+Tair -273.15+Tair
-16.01+Tair
-((18.678 -0.00426439 (-273.15 +Tair))
(-273.15 +Tair))(-16.01 +Tair)2+
18.678 -0.00426439 (-273.15 +Tair)
-16.01 +Tair -
0.00426439 (-273.15 +Tair)
-16.01 +Tair
, es[Tleaf] →
611.21 18.678-0.00426439 -273.15+Tleaf -273.15+Tleaf
-16.01+Tleaf
-((18.678 -0.00426439 (-273.15 +Tleaf))
(-273.15 +Tleaf))(-16.01 +Tleaf)2+
18.678 -0.00426439 (-273.15 +Tleaf)
-16.01 +Tleaf -
0.00426439 (-273.15 +Tleaf)
-16.01 +Tleaf
2 | Appendix 1.nb
(* write out full energy balance *)
energybalance =
FullSimplify
RnC+λE/.C2*cP*ρ/rH* (Tleaf -Tair) /.
λE2*cP*ρ (rH*γ*)*D/.
D-> es[Tleaf]-h*es[Tair] /.γ*-> rV/rH*γ/.
rV-> (rH+rS) / n/.rS-> 1/gS/.
Rnαs*Rs+αl*Rl-ϵ*Rb/.αlϵ/.
Rb2*σ*Tleaf ^4
energybalancefull =
energybalance /.Tleaf -> Tleaf[Tair] /.Rs-> Rs[Tair] /.
gS-> gS[Tair] /.Rl-> Rl[Tair] /.rHrH[Tair] /.
hh[Tair]
ϵRl-2ϵ σ Tleaf
4+Rsαs
2ρcP-Tair +Tleaf
rH+n gS(-h es[Tair] +es[Tleaf])
γ + γ gSrH
(* calculate partial derivatives of Tleaf with
respect to Tair *)
deriveqn =D[energybalancefull, Tair] /.Tleaf[Tair] → β
betaexact =
FullSimplify[β/. First[Solve[deriveqn, β]] /.
Tleaf[Tair] → Tleaf]
Appendix 1.nb | 3
-8β ϵ σ Tleaf[Tair ]3+ ϵ Rl[Tair] +αsRs[Tair] ⩵
2ρcP-1+β
rH[Tair]+
(n gS[Tair] (-es[Tair]h[Tair]-h[Tair]es[Tair] +
βes[Tleaf[Tair]]))(γ + γ gS[Tair]rH[Tair ]) +
n(-h[Tair]es[Tair]+ es[Tleaf[Tair]]) gS[Tair]
γ+γgS[Tair]rH[Tair ]-
(-Tair +Tleaf[Tair]) rH[Tair]
rH[Tair]2-
(n(-h[Tair]es[Tair]+es[Tleaf[Tair]]) gS[Tair]
rH[Tair]gS[Tair] + γ gS[Tair]rH[Tair]))
(γ + γ gS[Tair]rH[Tair])2
4 | Appendix 1.nb
- 2ρcPrH[Tair] ((1+gS[Tair]rH[Tair])
+ gS[Tair]rH[Tair] (γ + n es[Tair]
h[Tair]+n h[Tair]es[Tair])) +
n(h[Tair]es[Tair]- es[Tleaf])
rH[Tair]gS[Tair])+
n(-h[Tair]es[Tair]+es[Tleaf]) gS[Tair]2
rH[Tair]2- γ Tair (1+gS[Tair]rH[Tair])2+
γTleaf (1+gS[Tair]rH[Tair])2rH[Tair]
γ rH[Tair]2(1+gS[Tair]rH[Tair])2 +
ϵ
Rl[
Tair] +
αsRs[Tair] -8
ϵ
σ
Tleaf
3+2
ρ
cP
-1
rH[Tair]-n gS[Tair]es[Tleaf]
γ + γ gS[Tair]rH[Tair]
Appendix 1.nb | 5
ω1== Numerator[betaexact]
ω2== Denominator[betaexact]
ω1⩵ - 1
γrH[Tair]2(1+gS[Tair]rH[Tair])2
2ρcPrH[Tair] ((1+gS[Tair]rH[Tair])
+ gS[Tair]rH[Tair] (γ + n es[Tair]h[Tair] +
n h[Tair]es[Tair]))+ n(h[Tair]
es[Tair] -es[Tleaf]) rH[Tair]gS[Tair])+
n(-h[Tair]es[Tair]+es[Tleaf]) gS[Tair]2
rH[Tair]2- γ Tair (1+gS[Tair]rH[Tair])2+
γTleaf (1+gS[Tair]rH[Tair])2rH[Tair] -
ϵRl[Tair] -αsRs[Tair]
ω2⩵ -8ϵ σ Tleaf
3+2ρcP-1
rH[Tair]-n gS[Tair]es[Tleaf]
γ + γ gS[Tair]rH[Tair]
(* calculate betaconst with no Tair covariances *)
betaconst =
FullSimplify[
betaexact /.Rs'[Tair] → 0/.h[Tair] → 0/.
gS'[Tair] → 0/.rH[Tair] → 0/.Rl'[Tair] → 0/.
gS[Tair] → gS/.h[Tair] h/.rH[Tair] rH]
ρcP(γ+gSrH(γ+hnes[Tair]))
4γϵσrH(1+gSrH)Tleaf
3+ ρ cP(γ+gSrH(γ+n es[Tleaf]))
(* limits with beta_const for different stomatal
scenarios *)
Limit[betaconst, gS0]
Limit[betaconst, gS→ ∞]
ρcP
ρcP+4ϵ σ rHTleaf
3
ρcP+ hnes[Tair])
4γϵσrHTleaf
3+ ρ cP+ n es[Tleaf])
6 | Appendix 1.nb
(* limit for beta with full atmospheric coupling *)
FullSimplify[Limit[Limit[betaexact, rH'[Tair] → 0],
rH[Tair] → 0]]
1
(* limit for beta with infinite convective
resistance *)
FullSimplify[Limit[betaexact, rH[Tair] → ∞]]
ϵRl[Tair] +αsRs[Tair]
8ϵ σ Tleaf
3
(* limit for beta with no stomatal conductance
and infinite convective resistance *)
Limit[Limit[betaexact, gS[Tair] → 0],gS'[Tair] → 0]
nogs =
Limit[Limit[Limit[betaexact, gS[Tair] → 0],
gS'[Tair] → 0],rH'[Tair] → 0]
Simplify[Numerator[nogs] > Denominator[nogs]]
2ρcP(rH[Tair] +(-Tair +Tleaf)rH[Tair]) +
rH[Tair]2Rl[Tair]+ αsRs[Tair])
2 rH[Tair] ρ cP+4ϵ σ Tleaf
3rH[Tair]
2ρcP+rH[Tair] (ϵ Rl[Tair]+ αsRs[Tair])
2ρcP+8ϵ σ Tleaf
3rH[Tair]
rH[Tair] 8ϵ σ Tleaf
3- ϵ Rl[Tair] -αsRs[Tair] < 0
(* limit for beta with infinite conductance
and no boundary layer resistance *)
FullSimplify[
Limit[Limit[Limit[betaexact, gS[Tair] → ∞],
rH'[Tair] → 0],rH[Tair] → 0]]
γ+ n es[Tair]h[Tair]+n h[Tair]es[Tair]
γ+n es[Tleaf]
Appendix 1.nb | 7
(* solve for stomatal conductance *)
gssolnexact =
FullSimplify[gS/. First[Solve[energybalance , gS]]]
-γ 2ρcP(Tair -Tleaf) +rHϵ Rl-2ϵ σ Tleaf
4+Rsαs
rHγ rHϵ Rl-2ϵ σ Tleaf
4+Rsαs+
2ρcPTair - γ Tleaf +hnes[Tair] - n es[Tleaf])
(* determine when numerator and denominator of
gs are zero *)
FullSimplify[
First[Solve[Numerator[gssolnexact] ⩵ 0, Tair]]]
FullSimplify[Denominator[gssolnexact] ⩵ 0,
Assumptions → {rH>0}]
(* find approximate solution for denominator=0*)
ds =
First[FullSimplify[
Solve[
Normal[Series[Denominator[gssolnexact],
{Tair,Tleaf, 1}]] ⩵ 0, Tair]]]
Tair 2ρcPTleaf -rHϵ Rl-2ϵ σ Tleaf
4+Rsαs
2ρcP
γrHϵ Rl-2ϵ σ Tleaf
4+Rsαs+
2ρcPTair - γ Tleaf +hnes[Tair] - n es[Tleaf]) ⩵ 0
Tair -γ rHϵ Rl-2ϵ σ Tleaf
4+Rsαs+2ρcP
(-(-1+h)n es[Tleaf]+Tleaf (γ+hnes[Tleaf]))
(2ρcP(γ+hnes[Tleaf]))
(* examine predictions for beta *)
padding = {{50, 50},{50, 50}};
(* when there is covariance between gS and Tair
and between Rs and Tair*)
betaparameterizedRsgS =
8 | Appendix 1.nb
betaexact /. vpdeqn /. constants /.Rl'[Tair] → 0/.
Rs'[Tair] → Rsprime /.ϵ0.97 /.
αs0.5 /.n1/.gS[Tair] → 0.005 /.
gS'[Tair] → gSprime /.h[Tair] → 0.5 /.
h'[Tair] → 0/.rH[Tair] → 10 /.rH'[Tair] → 0/.
Tleaf 293 /.Tair 293;
cpRsgS =ContourPlot[betaparameterizedRsgS,
{Rsprime, 0, 50},{gSprime,-0.0004, 0.0004},
PlotLegends BarLegend[Range[0.8, 1.2, 0.05],
LabelStyle → {FontSize 12}],
PlotRange → {0.8, 1.2}, ContourLines False,
PlotRangePadding 0, ColorFunctionScaling False,
ColorFunction
(Blend[{{0.8, Blue},{1, White},{1.2, Red}},
#
]&),
FrameLabel → {"", "", ""}, ImageSize → {400, 400},
LabelStyle Directive[Thick, Medium],
Contours 20, ImagePadding padding,
Method → {"TransparentPolygonMesh"True}]
(* when alpha and rH vary with a pre-set non-
zero constant covariance between gS and Tair
and Rs and Tair *)
betaparameterizedalpharH =
betaexact /. vpdeqn /. constants /.Rl'[Tair] → 0/.
Rs'[Tair] → 30 /.ϵ0.97 /.n1/.
gS[Tair] → 0.005 /.gS'[Tair] → -0.0002 /.
h[Tair] → 0.5 /.h'[Tair] → 0/.rH[Tair] → rH /.
rH'[Tair] → 0/.Tleaf 293 /.Tair 293;
cpalpharH =ContourPlot[betaparameterizedalpharH,
{αs, 0, 1},{rH, 0, 50},
PlotLegends BarLegend[Range[0.8, 1.2, 0.05],
LabelStyle → {FontSize 12}],
PlotRange → {0.8, 1.2}, ContourLines False,
PlotRangePadding 0, ColorFunctionScaling False,
ColorFunction
,
Appendix 1.nb | 9
(Blend[{{0.8, Blue},{1, White},{1.2, Red}},
#
]&),
FrameLabel → {"", "", ""}, ImageSize → {400, 400},
LabelStyle Directive[Thick, Medium],
Contours 20,
Prolog
{LightGray, Rectangle[Scaled[{0, 0}],
Scaled[{1, 1}]]}, Contours 20,
ImagePadding padding,
Method → {"TransparentPolygonMesh"True}]
Export["~/Downloads/beta_panelA.png", cpRsgS,
ImageSize 600];
Export["~/Downloads/beta_panelB.png", cpalpharH,
ImageSize 600];
0
10
20
30
40
50
-0.0004
-0.0002
0.0000
0.0002
0.0004
10 | Appendix 1.nb
0.0
0.2
0.4
0.6
0.8
1.0
0
10
20
30
40
50
(* plot thermal operating space in terms of
stomatal conductance *)
gsradiationcoupled =
gssolnexact /. vpdeqn /. constants /.
CentralValsDelete[
CentralValsDelete[
CentralValsDelete[
CentralValsDelete[centralvals, Rl],Rs],gS],
Tair] /.RlRs/.Rs500 +10 * (Tleaf -273) /.
Tleaf TleafC +273 /.Tair TairC +273;
PlotPointsThis =80;
(* graphical resolution of grid *)
Appendix 1.nb | 11
p1 =ContourPlot[gsradiationcoupled, {TairC, 0, 50},
{TleafC, 0, 50}, PlotRange → {0, 0.01},
PlotLegends True, ContourLines False,
FrameLabel → {"", "", ""},
PlotPoints PlotPointsThis,
ColorFunction "AvocadoColors",
PlotRangePadding 0,
Method → {"TransparentPolygonMesh"True}];
p2 =ContourPlot[gsradiationcoupled, {TairC, 0, 50},
{TleafC, 0, 50}, PlotRange → {0.01, 100},
PlotLegends False, ContourLines False,
PlotPoints PlotPointsThis,
ColorFunction Function[{
x
,
y
,
z
},
Hue[280 /360, 1, 1]], PlotRangePadding 0,
Method → {"TransparentPolygonMesh"True}];
rplethal =ContourPlot[TleafC,{TairC, 0, 50},
{TleafC, 0, 50}, BoundaryStyle None,
PlotRange → {45, 50},
ColorFunction Function[{
x
,
y
,
z
},
Hue[0/360, 1, 1, 0.75]], PlotRangePadding 0,
ContourLines False,
Method → {"TransparentPolygonMesh"True}];
rpslow =ContourPlot[TleafC,{TairC, 0, 50},
{TleafC, 0, 50}, BoundaryStyle None,
PlotRange → {35, 45},
ColorFunction Function[{
x
,
y
,
z
},
Hue[30 /360, 1, 1, 0.75]], PlotRangePadding 0,
ContourLines False,
Method → {"TransparentPolygonMesh"True}] ;
il =ListLinePlot[{{0, 0},{60, 60}},
PlotStyle White];
gf =Show[p1, p2, rplethal, rpslow, il]
Export["~/Downloads/gs.png", gf, ImageSize 600];
12 | Appendix 1.nb
Appendix 1.nb | 13
(*write out R function equivalent for beta *)
betaexactrenamed =
betaexact /. vpdeqn /.rHrH /.Tair Tair /.
cPcP /.gSgS /.αsalphaS /.
ρrho /.γgamma /.ϵepsilon /.
σsigma /.Tleaf Tleaf /.h[Tair] → h/.
rH[Tair] → rH /.gS[Tair] → gS /.
gS[Tair] → gSprime /.h[Tair] → hprime /.
Rs[Tair] → Rsprime /.Rl[Tair] → Rlprime /.
rH[Tair] → rHprime;
(* assumes that ToMatlab
(http://
library.wolfram.com/infocenter/MathSource/577/)
is installed *)
<< ToMatLab`
betaR =StringReplace[betaexactrenamed // ToMatlab,
{".*""*", ".^""^", " " -> "", "...\n""",
";"""}]
14 | Appendix 1.nb
(-1)*(2*cP*rho*((-1)*rH^(-1)+(-0.61121E3)*exp(1)^((
0.18678E2+(-0.426439E-2)*((-0.27315E3)+Tleaf))*((-
0.27315E3)+Tleaf)*((-0.1601E2)+Tleaf)^(-1))*gS*n*(
gamma+gamma*gS*rH)^(-1)*((-1)*(0.18678E2+(-0.426439
E-2)*((-0.27315E3)+Tleaf))*((-0.27315E3)+Tleaf)*((-
0.1601E2)+Tleaf)^(-2)+(0.18678E2+(-0.426439E-2)*((-
0.27315E3)+Tleaf))*((-0.1601E2)+Tleaf)^(-1)+(-
0.426439E-2)*((-0.27315E3)+Tleaf)*((-0.1601E2)+
Tleaf)^(-1)))+(-8)*epsilon*sigma*Tleaf^3)^(-1)*(
epsilon*Rlprime+alphaS*Rsprime+2*cP*gamma^(-1)*rH^(
-2)*(1+gS*rH)^(-2)*rho*(rH*(gSprime*((-0.61121E3)*
exp(1)^((0.18678E2+(-0.426439E-2)*((-0.27315E3)+
Tleaf))*((-0.27315E3)+Tleaf)*((-0.1601E2)+Tleaf)^(-
1))+0.61121E3*exp(1)^((0.18678E2+(-0.426439E-2)*((-
0.27315E3)+Tair))*((-0.27315E3)+Tair)*((-0.1601E2)+
Tair)^(-1))*h)*n*rH+(1+gS*rH)*(gamma+gS*rH*(gamma+
0.61121E3*exp(1)^((0.18678E2+(-0.426439E-2)*((-
0.27315E3)+Tair))*((-0.27315E3)+Tair)*((-0.1601E2)+
Tair)^(-1))*hprime*n+0.61121E3*exp(1)^((0.18678E2+(
-0.426439E-2)*((-0.27315E3)+Tair))*((-0.27315E3)+
Tair)*((-0.1601E2)+Tair)^(-1))*h*n*((-1)*(0.18678E2
+(-0.426439E-2)*((-0.27315E3)+Tair))*((-0.27315E3)+
Tair)*((-0.1601E2)+Tair)^(-2)+(0.18678E2+(-0.426439
E-2)*((-0.27315E3)+Tair))*((-0.1601E2)+Tair)^(-1)+(
-0.426439E-2)*((-0.27315E3)+Tair)*((-0.1601E2)+Tair
)^(-1)))))+rHprime*(gS^2*(0.61121E3*exp(1)^((
0.18678E2+(-0.426439E-2)*((-0.27315E3)+Tleaf))*((-
0.27315E3)+Tleaf)*((-0.1601E2)+Tleaf)^(-1))+(-
0.61121E3)*exp(1)^((0.18678E2+(-0.426439E-2)*((-
0.27315E3)+Tair))*((-0.27315E3)+Tair)*((-0.1601E2)+
Tair)^(-1))*h)*n*rH^2+(-1)*gamma*(1+gS*rH)^2*Tair+
gamma*(1+gS*rH)^2*Tleaf)))
Appendix 1.nb | 15

File (1)

Content uploaded by Sean Michaletz
Author content
ResearchGate has not been able to resolve any citations for this publication.
ResearchGate has not been able to resolve any references for this publication.