08.09.2014 Views

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 ...

SHOW MORE
SHOW LESS

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!