On the Ecology of Mountainous Forests in a Changing Climate: A ...
On the Ecology of Mountainous Forests in a Changing Climate: A ...
On the Ecology of Mountainous Forests in a Changing Climate: A ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
216 Appendix<br />
PROCEDURE CorrWea<strong>the</strong>rGenerator( VAR rTVect, rPVect: ARRAY OF REAL );<br />
(*<br />
A wea<strong>the</strong>r generator is used which draws samples from <strong>the</strong> jo<strong>in</strong>t distribution<br />
<strong>of</strong> temperature and precipitation. It takes <strong>in</strong>to account <strong>the</strong> correlation between <strong>the</strong><br />
two variates us<strong>in</strong>g <strong>the</strong> modules "Jacobi" and "MultiNormal" developed by<br />
D. Gyalistras, Systems <strong>Ecology</strong>, ETHZ<br />
Assumption <strong>of</strong> normality <strong>of</strong> T and P: see Botk<strong>in</strong> et al. (1972), Fliri (1974);<br />
<strong>the</strong> empirical correction formula for degree-days has been developed by Harald<br />
Bugmann based on SMA data<br />
*)<br />
VAR i: INTEGER;<br />
<strong>in</strong>dx: Month;<br />
valueVect: Vector;<br />
cc: <strong>Climate</strong>;<br />
BEGIN<br />
GetCur<strong>Climate</strong>( cc ); (* current climate from ForestBase *)<br />
CalculateWea<strong>the</strong>rModifiers; (* TableFunctions with climatic change scenario *)<br />
FOR <strong>in</strong>dx := Jan TO Dec DO<br />
i := ORD(<strong>in</strong>dx);<br />
IF (i > 3) AND (i < 10) THEN (* summer *)<br />
tMod := tSuMod; tSDMod := tSDSuMod;<br />
pMod := pSuMod; pSDMod := pSDSuMod;<br />
ELSE (* w<strong>in</strong>ter *)<br />
tMod := tWiMod; tSDMod := tSDWiMod;<br />
pMod := pWiMod; pSDMod := pSDWiMod;<br />
END;<br />
MultiN( cc.mnDistr[<strong>in</strong>dx], valueVect );<br />
rTVect[i] := tMod + cc.mTVect[<strong>in</strong>dx] + tSDMod*cc.sdTVect[<strong>in</strong>dx]*valueVect[1];<br />
rPVect[i] := Rmax( 0.0, pMod + cc.mPVect[<strong>in</strong>dx] + pSDMod*cc.sdPVect[<strong>in</strong>dx]*valueVect[2] );<br />
END; (* FOR *)<br />
END CorrWea<strong>the</strong>rGenerator;<br />
PROCEDURE DegreeDays( VAR uDD: REAL; VAR rTVect: ARRAY OF REAL );<br />
CONST kDTT = 5.5;<br />
VAR<br />
i: INTEGER;<br />
monthlyDD: REAL;<br />
<strong>in</strong>dx: Month;<br />
BEGIN<br />
uDD := 0.0;<br />
FOR <strong>in</strong>dx := Jan TO Dec DO<br />
i := ORD(<strong>in</strong>dx);<br />
monthlyDD := Rmax( (rTVect[i]-kDTT)*kDays, 0.0 ) + Yie(corrDDTab, rTVect[i]);<br />
uDD := uDD + monthlyDD;<br />
END; (* FOR *)<br />
END DegreeDays;<br />
PROCEDURE DeclSoilMoistureParameters;<br />
BEGIN<br />
DeclP( k1, 0.2, 0.0, 1.0, rtc, "k1 (Heat <strong>in</strong>dex multiplier)", "k1" , "--" );<br />
DeclP( k2, 1.514, 0.0, 4.0, rtc, "k2 (Heat <strong>in</strong>dex exponent)", "k2" , "--" );<br />
DeclP( k3, 6.75E-7, 0.0, 1.0, rtc, "k3 (PET exponent coefficient)", "k3" , "--" );<br />
DeclP( k4, -7.71E-5, -1.0, 0.0, rtc, "k4 (PET exponent coefficient)", "k4" , "--" );<br />
DeclP( k5, 0.01792, 0.0, 1.0, rtc, "k5 (PET exponent coefficient)", "k5" , "--" );<br />
DeclP( k6, 0.49239, 0.0, 1.0, rtc, "k6 (PET exponent coefficient)", "k6" , "--" );<br />
DeclP( k7, 4.61E-4, 0.0, 1.0, rtc, "k7 (Reta<strong>in</strong>ed water coefficient)", "k7" , "--" );<br />
DeclP( k8, 1.10559, 0.0, 2.0, rtc, "k8 (Reta<strong>in</strong>ed water coefficient)", "k8" , "--" );<br />
DeclP( kPM, 1.6, 0.0, 3.0, noRtc, 'PET multiplier', 'kPM', '--');<br />
END DeclSoilMoistureParameters;<br />
PROCEDURE SoilMoisture( VAR uDrStr, uAET: REAL; rTVect, rPVect: ARRAY OF REAL );<br />
(* this simple calculation <strong>of</strong> <strong>the</strong> soil moisture balance is based on <strong>the</strong> model by<br />
Thornthwaite & Ma<strong>the</strong>r (1957) as modified by Pastor & Post (1984, 1985).<br />
It has been described <strong>in</strong> detail by Fischl<strong>in</strong> et al. (1993), <strong>in</strong>clud<strong>in</strong>g <strong>the</strong> new<br />
drought stress <strong>in</strong>dex which is based on Prentice & Helmisaari (1991).<br />
*)<br />
VAR accPWL, aa, heatIndx, prevWater, currDay, prevDay, PET, pWL,<br />
cSM, latPtr: REAL;<br />
k: Month;<br />
<strong>in</strong>dx: CARDINAL;<br />
BEGIN<br />
uAET := 0.0;<br />
uPET := 0.0;<br />
accPWL := 0.0;<br />
heatIndx := 0.0;<br />
FOR k:= Jan TO Dec DO (* calculate temperature efficiency <strong>in</strong>dex *)<br />
heatIndx := heatIndx + Power( k1*Rmax(0.0,rTVect[ORD(k)]), k2);<br />
END; (* FOR *)<br />
aa := k3*Power(heatIndx,3.0) + k4*heatIndx*heatIndx + k5*heatIndx + k6;<br />
prevDay := 0.0;<br />
currDay := 15.0;<br />
FOR k:= Jan TO Dec DO (* ma<strong>in</strong> loop for annual water balance calculation *)<br />
<strong>in</strong>dx := ORD(k);<br />
prevWater := currWater; (* help variable for previous month's water *)<br />
latPtr := a[k] + b[k]*site.kLat;<br />
PET := kPMod * kPM * Power( 10.0*Rmax(0.0,rTVect[<strong>in</strong>dx])/heatIndx, aa ) * latPtr;<br />
uPET := uPET + PET;<br />
pWL := rPVect[<strong>in</strong>dx] - PET; (* potential water loss pWL *)<br />
IF pWL < 0.0 THEN (* ra<strong>in</strong> does not satisfy PET, draw on soil water *)<br />
accPWL := accPWL + pWL;<br />
currWater := Rmax( 0.0, site.kFC*( Exp((k7 - k8/10.0/site.kFC)*(-10.0*accPWL)) ) );<br />
cSM := currWater - prevWater; (* change <strong>in</strong> soil moisture *)<br />
uAET := uAET + rPVect[<strong>in</strong>dx] - cSM;<br />
ELSE (* ra<strong>in</strong> satisfies PET *)<br />
currWater := Rm<strong>in</strong>( site.kFC, prevWater + pWL);<br />
cSM := currWater - prevWater;<br />
accPWL := accPWL + cSM;<br />
IF currWater >= site.kFC THEN accPWL := 0.0 END;<br />
uAET := uAET + PET;