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.
224 Appendix<br />
sp := firstSp;<br />
WHILE sp NIL DO (* declare numbers *)<br />
sp^.statArrN := notExist<strong>in</strong>gStatArray;<br />
DeclStatArray( sp^.statArrN, arrLen );<br />
DeclDispMV( sp^.statArrN, fp, sp^.meanNr, fp, timeIsIndep );<br />
IF withNr THEN<br />
DeclStatArrayForOutput( sp^.statArrN, sp^.longDescNr, "#/ha", m<strong>in</strong>ValNr );<br />
END;<br />
sp := sp^.next;<br />
END;<br />
statArrLAI := notExist<strong>in</strong>gStatArray;<br />
DeclStatArray( statArrLAI, arrLen );<br />
DeclDispMV( statArrLAI, fp, meanLAI, fp, timeIsIndep );<br />
DeclStatArrayForOutput( statArrLAI, "Leaf area <strong>in</strong>dex", "m^2/m^2", 0.0 );<br />
statArrTotBio := notExist<strong>in</strong>gStatArray;<br />
DeclStatArray( statArrTotBio, arrLen );<br />
DeclDispMV( statArrTotBio, fp, meanTotBio, fp, timeIsIndep );<br />
DeclStatArrayForOutput( statArrTotBio, "Total biomass", "t/ha", 0.0 );<br />
statArrTotNr := notExist<strong>in</strong>gStatArray;<br />
DeclStatArray( statArrTotNr, arrLen );<br />
DeclDispMV( statArrTotNr, fp, meanTotNr, fp, timeIsIndep );<br />
DeclStatArrayForOutput( statArrTotNr, "Total number", "#/ha", 0.0 );<br />
FOR i:= MIN(Litter) TO MAX(Litter) DO<br />
statArrLitt[i] := notExist<strong>in</strong>gStatArray;<br />
DeclStatArray( statArrLitt[i], arrLen );<br />
DeclDispMV( statArrLitt[i], fp, meanLitt[i], fp, timeIsIndep );<br />
END;<br />
DeclStatArrayForOutput( statArrLitt[leafFast], "Litterfall (foliage fast)", "t/ha", 0.0 );<br />
DeclStatArrayForOutput( statArrLitt[leafMedium], "Litterfall (foliage medium)", "t/ha", 0.0 );<br />
DeclStatArrayForOutput( statArrLitt[leafSlow], "Litterfall (foliage slow)", "t/ha", 0.0 );<br />
DeclStatArrayForOutput( statArrLitt[twigs], "Litterfall (twigs)", "t/ha", 0.0 );<br />
DeclStatArrayForOutput( statArrLitt[roots], "Litterfall (f<strong>in</strong>e roots)", "t/ha", 0.0 );<br />
DeclStatArrayForOutput( statArrLitt[wood], "Litterfall (wood)", "t/ha", 0.0 );<br />
END DeclareStatArrays;<br />
PROCEDURE DisplayStatArrays;<br />
VAR i: Litter;<br />
BEGIN<br />
IF NOT ExperimentAborted() THEN<br />
sp := firstSp;<br />
WHILE sp NIL DO<br />
DisplayArray( sp^.statArrB, TRUE, prob950 );<br />
DisplayArray( sp^.statArrN, TRUE, prob950 );<br />
sp := sp^.next;<br />
END;<br />
DisplayArray( statArrLAI, TRUE, prob950 );<br />
DisplayArray( statArrTotBio, TRUE, prob950 );<br />
DisplayArray( statArrTotNr, TRUE, prob950 );<br />
FOR i:= MIN(Litter) TO MAX(Litter) DO<br />
DisplayArray( statArrLitt[i],TRUE, prob950 );<br />
END;<br />
END;<br />
END DisplayStatArrays;<br />
(***********************************)<br />
(* Procedures for model dynamics *)<br />
(***********************************)<br />
PROCEDURE Initialize;<br />
VAR j, x0New, y0New, z0New, arrLen: INTEGER;<br />
tend, c, h, er: REAL;<br />
ok: BOOLEAN;<br />
(*<br />
PROCEDURE SetImmigPar( desc: ARRAY OF CHAR; kImmYrNew: REAL );<br />
VAR found: BOOLEAN;<br />
BEGIN<br />
found := FALSE;<br />
sp := firstSp;<br />
WHILE (sp NIL) AND NOT found DO<br />
IF CompareStr<strong>in</strong>gs( sp^.shortDescBio, desc ) = equal THEN<br />
found := TRUE;<br />
sp^.p.kImmYr := kImmYrNew;<br />
END;<br />
sp := sp^.next;<br />
END; (* WHILE *)<br />
IF NOT found THEN HALT END;<br />
END SetImmigPar;<br />
*)<br />
PROCEDURE SetSpeciesParameter( VAR sensSp, modelSp: SpeciesPtr; nrRun: INTEGER );<br />
VAR par: INTEGER;<br />
BEGIN<br />
par := nrRun MOD 14;<br />
ResetAllSpeciesParameters;<br />
IF (par = 1) AND (nrRun 1) THEN (* move to a new species *)<br />
sensSp := sensSp^.next;<br />
modelSp := modelSp^.next;<br />
END;<br />
(* now assign a new species parameter *)<br />
IF par = 1 THEN<br />
modelSp^.p.kA1 := sensSp^.p.kA1;<br />
modelSp^.p.kA2 := sensSp^.p.kA2;<br />
modelSp^.p.kC1 := sensSp^.p.kC1;<br />
modelSp^.p.kC2 := sensSp^.p.kC2;<br />
ELSIF par = 2 THEN<br />
modelSp^.p.kDm := sensSp^.p.kDm;<br />
modelSp^.p.kB2 := 2.0*(modelSp^.p.kHm - 137.0) / modelSp^.p.kDm;<br />
modelSp^.p.kB3 := modelSp^.p.kB2 / 2.0 / modelSp^.p.kDm;<br />
ELSIF par = 3 THEN