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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

244 Appendix<br />

TYPE<br />

Litter = (leafFast, leafMedium, leafSlow, roots, twigs, wood );<br />

VAR<br />

(* Variables l<strong>in</strong>k<strong>in</strong>g <strong>the</strong> submodels *)<br />

(*---------------------------------*)<br />

(* output <strong>of</strong> ForClim-E: *)<br />

uDD, (* annual sum <strong>of</strong> degree-days [°C*days] *)<br />

uDrStr, (* drought stress <strong>in</strong>dex [-] *)<br />

uWiT, (* m<strong>in</strong>imum w<strong>in</strong>ter temperature [°C] *)<br />

uAET: REAL; (* evapotranspiration [mm/yr] *)<br />

(* output <strong>of</strong> ForClim-P: *)<br />

uLitt: ARRAY [ MIN(Litter)..MAX(Litter) ] OF REAL;<br />

(* litter production [t/ha] *)<br />

(* output <strong>of</strong> ForClim-S: *)<br />

uAvN: REAL; (* available nitrogen [kg/ha] *)<br />

(* output <strong>of</strong> ForClim-D: *)<br />

uBrPr: REAL; (* brows<strong>in</strong>g pressure [0…10] *)<br />

(* The follow<strong>in</strong>g procedures serve to declare output variables<br />

as parameters when <strong>the</strong> correspond<strong>in</strong>g model is not present,<br />

i.e. <strong>the</strong> Remove procedure should be called when a model is <strong>in</strong>stalled,<br />

and <strong>the</strong> Declare procedure when it is removed *)<br />

PROCEDURE DeclConstEnvironment; PROCEDURE RemoveConstEnvironment;<br />

PROCEDURE DeclConstPlants; PROCEDURE RemoveConstPlants;<br />

PROCEDURE DeclConstSoil;<br />

PROCEDURE RemoveConstSoil;<br />

PROCEDURE DeclConstBrows<strong>in</strong>g; PROCEDURE RemoveConstBrows<strong>in</strong>g;<br />

(********************************************)<br />

(* Objects required for technical reasons *)<br />

(********************************************)<br />

TYPE<br />

ExperimentType = ( manyRuns, estimEquil );<br />

Experiment = RECORD<br />

type: ExperimentType;<br />

writeState, readState,<br />

<strong>in</strong>BatchMode, doSensAnalysis: BOOLEAN;<br />

outFileName, <strong>in</strong>FileName, batchFileName: ARRAY [0..127] OF CHAR;<br />

nrPo<strong>in</strong>ts, delta: INTEGER; (* for equilibrium estimation *)<br />

startYear, (* for equilibrium estimation *)<br />

nrRuns: REAL; (* for many runs *)<br />

END; (* RECORD *)<br />

VAR<br />

fe, (* ForClim-E *)<br />

fp, (* ForClim-P *)<br />

fs: Model; (* ForClim-S *)<br />

exp: Experiment;<br />

fMenu: Menu; (* ForClim menu *)<br />

configCmd: Command; (* Configure command *)<br />

FCResFileName: ARRAY [0..63] OF CHAR;<br />

PROCEDURE Power( base, exp: REAL ): REAL;<br />

(* straightforward and efficient implementation *)<br />

PROCEDURE Imax( i1,i2: INTEGER ): INTEGER;<br />

PROCEDURE Im<strong>in</strong>( i1,i2: INTEGER ): INTEGER;<br />

PROCEDURE Rmax( x1,x2: REAL ): REAL;<br />

PROCEDURE Rm<strong>in</strong>( x1,x2: REAL ): REAL;<br />

PROCEDURE SetRandomNumberSeeds( x, y, z: INTEGER );<br />

(* use this procedure and NOT SetSeeds from RandGen because <strong>of</strong> consistency<br />

<strong>in</strong> <strong>the</strong> ModelWorks parameter w<strong>in</strong>dow!<br />

*)<br />

PROCEDURE DeclMonitor<strong>in</strong>gProc( p: PROC );<br />

PROCEDURE RemoveMonitor<strong>in</strong>gProc( p: PROC );<br />

(* procedure for ModelWorks client monitor<strong>in</strong>g, must be declared here because<br />

ModelWorks does not support several simultaneous monitor<strong>in</strong>g procedures *)<br />

PROCEDURE DeclStatArrayForOutput( sa: StatArray; labelStr, unitStr: ARRAY OF CHAR;<br />

m<strong>in</strong>V: REAL );<br />

(* if <strong>the</strong> average <strong>of</strong> sa is below m<strong>in</strong>V, this StatArray is not used for<br />

display<strong>in</strong>g <strong>the</strong> equilibrium estimate *)<br />

PROCEDURE RemoveStatArrayFromOutput( sa: StatArray );<br />

(* to declare / remove StatArrays from a list common to all models *)<br />

PROCEDURE WriteStatArraysToFile( fn: ARRAY OF CHAR );<br />

(* writes StatArrays declared by means <strong>of</strong> DeclStatArrayForOutput to a text file *)<br />

PROCEDURE DisplayEquilibriumValues;<br />

PROCEDURE SaveEquilibriumState( fn : ARRAY OF CHAR );<br />

(* if fn is an empty str<strong>in</strong>g, a dialog box is produced prompt<strong>in</strong>g for <strong>the</strong> filename *)<br />

PROCEDURE DeclForestBase;<br />

(* to be be called by master program *)<br />

END ForestBase.<br />

The code <strong>of</strong> <strong>the</strong> implementation module ForestBase is available upon request from <strong>the</strong><br />

author.

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

Saved successfully!

Ooh no, something went wrong!