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