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.

Appendix 237<br />

Purpose Simulation model for soil organic mass & nitrogen dynamics<br />

Remarks Based on <strong>the</strong> model by Pastor & Post (1985, 1986)<br />

Implementation and Revisions:<br />

============================<br />

Author Date Description<br />

------ ---- -----------<br />

hb 5. 2.1992 First implementation (DM 2.2, MacMETH 3.2)<br />

hb 7. 2.1992 Major bugs fixed; rewritten with mass as state var<br />

hb 9. 2.1992 Rewritten (dynamic lists)<br />

hb 19. 2.1992 Implementation f<strong>in</strong>ished<br />

hb 23. 3.1992 Model renamed to FORCLIM-S<br />

hb 23.12.1992 adapted for 6 litter types (usage with<strong>in</strong> ForClim)<br />

reverted to mass dynamics <strong>in</strong>stead <strong>of</strong> mass<br />

hb 5. 3.1993 adapted for output <strong>of</strong> statistical data<br />

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

FROM SimMaster<br />

FROM SimBase<br />

FROM DMSystem<br />

FROM DMMenus<br />

IMPORT CurrentSimNr, ExperimentRunn<strong>in</strong>g, ExperimentAborted;<br />

IMPORT DeclM, IntegrationMethod, DeclSV, RTCType, DeclP,<br />

StashFil<strong>in</strong>g, DeclMV, Tabulation, NoAbout, Graph<strong>in</strong>g,<br />

GetGlobSimPars, RemoveM, MDeclared, CurrentTime;<br />

IMPORT CurrentDMLevel, InstallTermProc;<br />

IMPORT Command, AccessStatus, Mark<strong>in</strong>g, Separator, InstallCommand,<br />

DisableCommand, EnableCommand, InstallSeparator,<br />

RemoveSeparatorAtCommand, RemoveCommand, SeparatorPosition;<br />

FROM DMEntryForms IMPORT FormFrame, WriteLabel, RadioButtonID,<br />

Def<strong>in</strong>eRadioButtonSet, RadioButton, CheckBox, UseEntryForm;<br />

FROM DMMessages IMPORT Warn, Abort;<br />

FROM DMStorage IMPORT Allocate, Deallocate;<br />

FROM ForestBase IMPORT fs, Litter, uLitt, uAvN, uAET, DeclConstSoil,<br />

RemoveConstSoil, fMenu, exp, ExperimentType,<br />

DeclStatArrayForOutput, DeclMonitor<strong>in</strong>gProc,<br />

RemoveMonitor<strong>in</strong>gProc, Rmax, Rm<strong>in</strong>;<br />

FROM StochStat IMPORT StatArray, Prob2Tail, DeclStatArray, notExist<strong>in</strong>gStatArray,<br />

DeclDispMV, DisplayArray, PutValue;<br />

FROM SimGraphUtils IMPORT timeIsIndep;<br />

CONST<br />

modIdent = "ForClim-S";<br />

modDescr = "ForClim-S: Soil C/N turnover model";<br />

TYPE<br />

LitterPtr = POINTER TO LitterNode;<br />

LitterNode = RECORD<br />

LOM, (* litter organic matter *)<br />

LOMNew,<br />

LOM<strong>in</strong>it, (* <strong>in</strong>itial LOM *)<br />

LN, (* litter nitrogen *)<br />

LNNew,<br />

gLign : REAL; (* lign<strong>in</strong> content *)<br />

type: Litter; (* litter type *)<br />

next: LitterPtr; (* po<strong>in</strong>ter for list management *)<br />

END;<br />

VAR<br />

startupLevel: CARDINAL;<br />

first, prev: LitterPtr;<br />

type: Litter;<br />

statArrAvN, statArrLitM, statArrHumM : StatArray;<br />

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

kNC, kLignA, kLignB,<br />

gNMR, decMlt, kAET, kM<strong>in</strong>,<br />

k1, k2, k3, k4, k5, k6, mLoss, kLeach, litterM, litterN, totSOM,<br />

litterCO2, gLNC, gAETM, humusNM<strong>in</strong>, HOM, HOMNew, humCN,<br />

HN, HNNew, gImmob, totCO2, totNimmob, totNM<strong>in</strong>, kNAtm,<br />

meanAvN, meanLitM, meanHumM,<br />

tzero, hm: REAL;<br />

ok, allTypes, everyYear: BOOLEAN;<br />

fcsCmd, litterCmd: Command;<br />

PROCEDURE EmptyProc; BEGIN END EmptyProc;<br />

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

(* Procedures for list management *)<br />

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

PROCEDURE CreateLitterCohort( VAR first: LitterPtr; m: REAL;<br />

type: Litter );<br />

VAR litter: LitterPtr;<br />

BEGIN<br />

Allocate( litter, SIZE(LitterNode) );<br />

IF litter = NIL THEN Abort( "", "Insufficient memory!", "" ) END;<br />

litter^.next := first;<br />

litter^.LOM := m;<br />

litter^.LOMNew := m;<br />

litter^.LOM<strong>in</strong>it := m;

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

Saved successfully!

Ooh no, something went wrong!