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.
238 Appendix<br />
litter^.LN := kInitN[type] * m;<br />
litter^.LNNew := kInitN[type] * m;<br />
litter^.gLign := kLignA + kLignB;<br />
litter^.type := type;<br />
first := litter;<br />
END CreateLitterCohort;<br />
PROCEDURE DeleteLitterCohort( VAR first, cohort, prev: LitterPtr );<br />
(* for efficiency reasons, cohort = NIL is not tested *)<br />
BEGIN<br />
IF prev = NIL THEN (* first element to be deleted *)<br />
first := cohort^.next;<br />
Deallocate( cohort );<br />
cohort := first;<br />
ELSE<br />
prev^.next := cohort^.next;<br />
Deallocate( cohort );<br />
cohort := prev^.next;<br />
END;<br />
END DeleteLitterCohort;<br />
PROCEDURE DeleteAllCohorts( VAR first: LitterPtr );<br />
VAR coh: LitterPtr;<br />
BEGIN<br />
coh := first;<br />
WHILE coh NIL DO<br />
first := coh^.next;<br />
Deallocate( coh );<br />
coh := first;<br />
END; (* WHILE *)<br />
END DeleteAllCohorts;<br />
(*****************************************************)<br />
(* Procedures for decomposition and m<strong>in</strong>eralization *)<br />
(*****************************************************)<br />
PROCEDURE TransferLitterToHumus( VAR litter: LitterPtr );<br />
BEGIN<br />
HNNew := HNNew + litter^.LNNew;<br />
HOMNew := HOMNew + litter^.LOMNew;<br />
DeleteLitterCohort( first, litter, prev );<br />
END TransferLitterToHumus;<br />
PROCEDURE Immobilization;<br />
VAR lignToN, litMDelta, gLeach: REAL;<br />
litter: LitterPtr;<br />
BEGIN<br />
prev := NIL;<br />
litter := first;<br />
WHILE litter NIL DO<br />
WITH litter^ DO<br />
IF (type = wood) OR (type = twigs) THEN<br />
IF type = wood THEN mLoss := 0.03;<br />
ELSE mLoss := 0.2;<br />
END;<br />
litMDelta := mLoss * LOM;<br />
gImmob := kNC * litMDelta; (* nitrogen immobilization *)<br />
litterCO2 := litMDelta; (* CO2 evolution from litter *)<br />
totCO2 := totCO2 + litterCO2;<br />
LOMNew := LOM - litMDelta; (* update state variables *)<br />
LNNew := LN + gImmob; (* no nitrogen leach<strong>in</strong>g *)<br />
totNimmob := totNimmob + gImmob; (* net N immobilization *)<br />
gNMR := (LN + gImmob) / (LOM - litMDelta); (* new nitrogen conc. *)<br />
ELSE<br />
gLeach := kLeach * LN; (* nitrogen leach<strong>in</strong>g *)<br />
gNMR := LN / LOM; (* nitrogen concentration *)<br />
gLign := kLignA + kLignB * LOM/LOM<strong>in</strong>it;<br />
lignToN := gLign/gNMR;<br />
IF lignToN > k2/k4 THEN<br />
lignToN := k2/k4; (* avoid unreasonable decomposition *)<br />
Warn( "", "Lign<strong>in</strong>:N ratio is unrealistically high!", "" );<br />
END;<br />
mLoss := ( k1 + k2*uAET - (k3 + k4*uAET)*lignToN )/100.0 * decMlt;<br />
IF mLoss < 0.0 THEN Warn("","Negative decomposition!","") END;<br />
litMDelta := mLoss * LOM; (* LOM change *)<br />
gImmob := kNC * litMDelta; (* nitrogen immobilization *)<br />
gNMR := (LN - gLeach + gImmob) / (LOM-litMDelta); (* new N conc. *)<br />
IF gNMR >= kCritN[type] THEN (* recalculate weight loss *)<br />
mLoss := (kCritN[type] - LN/LOM)<br />
/ (gNMR - LN/LOM) * mLoss;<br />
litMDelta := mLoss * LOM;<br />
gImmob := kNC * litMDelta; (* nitrogen immobilization *)<br />
END;<br />
litterCO2 := litMDelta; (* CO2 evolution from litter *)<br />
totCO2 := totCO2 + litterCO2;<br />
LOMNew := LOM - litMDelta; (* state variables *)<br />
LNNew := LN - gLeach + gImmob;<br />
totNimmob := totNimmob - gLeach + gImmob; (* net N immobilization *)<br />
END;<br />
IF gNMR >= kCritN[type] THEN<br />
TransferLitterToHumus( litter );<br />
ELSE<br />
prev := litter; (* po<strong>in</strong>ter management *)<br />
litter := litter^.next;<br />
END;<br />
END; (* WITH *)<br />
END; (* WHILE *)