Content uploaded by Sean Michaletz
Author content
All content in this area was uploaded by Sean Michaletz on Aug 01, 2018
Content may be subject to copyright.
(* set up energy balance constants and saturation
vapor pressure model *)
constants = {ρ→1225, cP→1.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, h→0.5, Rs→800,
Rl→400, ϵ→0.97, αs→0.5, gS→0.005, n→1,
rH→100};
CentralValsDelete[
cv_
,
name_
]:=
Drop[
cv
, First[Position[
#
[[1]] &/@
cv
,
name
]]]
ρ → 1225, cP→1.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
Rn⩵C+λE/.C→2*cP*ρ/rH* (Tleaf -Tair) /.
λE→2*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→ϵ/.
Rb→2*σ*Tleaf ^4
energybalancefull =
energybalance /.Tleaf -> Tleaf[Tair] /.Rs-> Rs[Tair] /.
gS-> gS[Tair] /.Rl-> Rl[Tair] /.rH→rH[Tair] /.
h→h[Tair]
ϵRl-2ϵ σ Tleaf
4+Rsαs⩵
2ρcP-Tair +Tleaf
rH+n gS(-h es[Tair] +es[Tleaf])
γ + γ gSrH
ϵRl[Tair]+αsRs[Tair]-2ϵ σ Tleaf[Tair ]4⩵
2ρcP
n(-h[Tair]es[Tair]+es[Tleaf[Tair]]) gS[Tair]
γ+γgS[Tair]rH[Tair ]+
-Tair +Tleaf[Tair]
rH[Tair]
(* 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, gS→0]
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]2(ϵ Rl′[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ρcP(γ Tair - γ 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ρcP(γ Tair - γ 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 /.
αs→0.5 /.n→1/.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 /.n→1/.
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] /.Rl→Rs/.Rs→500 +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 /.rH→rH /.Tair →Tair /.
cP→cP /.gS→gS /.αs→alphaS /.
ρ→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