NetLogo Update Friday July 25th 2008
breed [trees tree]
trees-own [max_age max_diameter max_height b2 b3 g c
light nitrogen DEGDmin DTmin wlMax SaplingMax
annual_mortality_risk treeDiameter treeheight
chunk1 chunk2 chunk3 chunk4 chunk5 deltaDiameter recruitment
NFintolerant NFintermediate NFtolerant tFactor nFactor wiltF LF sQuality
minSaplingLight minGrowthRate tempdiameter
diameter height age life dead]
globals [availLight waterStress degreedays lightFactorST lightFactorSINT line-num data numberTR]
; Shade Tolerance
to setup
clear-all
ask patches [set pcolor black]
create-trees numOfTrees
random-seed 78972837218
file-open treespecies
set data[]
set line-num 0
; Builds a list of the values
while [not file-at-end?]
[
set line-num line-num + 1
let new-line file-read
set data lput new-line data
]
file-close
ask trees
[
set color green
set size 0.1
set max_age item 0 data
set max_diameter item 1 data
set max_height item 2 data
set b2 item 3 data
set b3 item 4 data
set g item 5 data
set c item 6 data
set light item 7 data
set nitrogen item 8 data
set DEGDmax item 9 data
set DEGDmin item 10 data
set DTmin item 11 data
set wlMax item 12 data
set SaplingMax item 13 data
set minSaplingLight item 14 data
set minGrowthRate item 15 data
set annual_mortality_risk 0.1 ;this variable changed in GO procedure
set treeDiameter 0.1
set treeHeight 1
set availLight 0.9999
set life true
set dead false
]
set-default-shape trees item 16 data
end
to setuptrees
set size 1
; *** TREE VARIABLES ***
set diameter 0.1
set age 0
set height 0
set life true
set dead false
end
; Maximum Potential Growth
to-report MaxPotenGrowth
let maxgrow ((g * diameter) * (1 - ((diameter * getHeight) / (max_diameter * max_height)))) / (274 + (3 * b2 * diameter) + (-4 * b3) + (diameter ^ 2))
report maxgrow
end
; Limiting Factors
to-report limitingfactors
report lightfactor * sitequality
end
; Growth
to-report growth
let tempgrowth limitingfactors * MaxPotenGrowth
report tempgrowth
end
; Diameter
to-report getDiameter
set tempdiameter diameter + growth
set diameter tempdiameter
report diameter
end
; Height
to-report getHeight
let tempheight (b3 * (diameter ^ 2)) + (b2 * diameter) + 137
set height tempheight
report tempheight
end
;Age
to treeAge
set age ticks
end
; Light Factor Computation (shade-tolerant)
to-report lightfactorshadetolerant
set lightFactorST 1.0 * (1.0 - (2.718281828459045 ^ (-4.6 * (availLight - 0.05))))
report lightFactorST
end
; Light Factor Computation (shade-intolerant)
to-report lightfactorshadeintolerant
set lightFactorSINT (2.24 * (1.0 - (2.718281828459045 ^ (-1.136 * (availLight - 0.08)))))
report lightFactorSINT
end
; Light Factor From Tree Data Table
to-report lightfactor
ifelse light = 3
[set LF lightfactorshadetolerant]
[set LF lightfactorshadeintolerant]
let templist list (LF) (0)
report max templist
end
;Nitrogen Factor (intolerant)
to-report nitrogenfactorINTOL
set NFintolerant ((-0.6 + (1.0 * (2.79 * (1.0 - (10.0 ^ (-1.0 * 0.00179 * (soilFertility + 219.77))))))) / 2.19)
report NFintolerant
end
;Nitrogen Factor (intermediate)
to-report nitrogenfactorINTER
set NFintermediate ((-1.2 + (1.3 * (2.94 * (1.0 - (10.0 ^ (-1.0 * 0.00234 * (soilFertility + 117.52))))))) / 2.622)
report NFintermediate
end
; Nitrogen Factor (tolerant)
to-report nitrogenfactorTOL
set NFtolerant ((-5.0 + (2.9 * (2.99 * (1.0 - (10.0 ^ (-1.0 * 0.00175 * (soilFertility + 207.43))))))) / 3.671)
report NFtolerant
end
; Nitrogen
to-report nitrogenfactor [NF]
if NF = 1
[set nFactor nitrogenfactorINTOL
report nFactor]
if NF = 2
[set nFactor nitrogenfactorINTER
report nFactor]
if NF = 3
[set nFactor nitrogenfactorTOL
report nFactor]
if NF > 3 or NF < 1
[ set nFactor 1
report nFactor]
end
; Wilt Factor
to-report wiltfactor
set waterstress 0.21828485994546615
let templist list ((1.0 - ((waterstress / wlMax) ^ 2))) (0)
report max (templist)
end
; Temperature Factor
to-report tempfactor
set degreedays 2406
let templist list (((4.0 * (degreedays - DEGDmin) * (DEGDmax - degreedays)) / ((DEGDmax - DEGDmin) ^ 2))) (0)
report max (templist)
end
; Site Quality
to-report sitequality
set sQuality tempfactor * nitrogenfactor nitrogen * wiltfactor
report sQuality
end
to showvalues
ask turtles[
show "***"
show max_age
show max_diameter
show max_height
show "***"
]
end
; main growth
to grow
ask trees [
set size (getDiameter / 10)
]
end
to death
; death equation
ask trees
[
set annual_mortality_risk (4 / max_age) * 100
let x random 100
let y random 1000
if (x < annual_mortality_risk)
[
set life false
die
]
if ( growth < minGrowthRate) and (y < 368)
[
set life false
die
]
]
end
to-report recruit [lite]
; RECRUITMENT
; 3 kinds: shade intolerant, shade intermediate and shade tolerant
; needs: available light, site quality(temp factor* nitrogen factor * wilt factor) , maxSapling
if lite = 1
[ ifelse availLight >= 0.989999 and sitequality > 0.0
[set recruitment random-float 1 * SaplingMax * lightfactor * sitequality]
[set recruitment 0]
]
if lite = 2
[ ifelse minSaplingLight > availLight and availLight < 0.99
[set recruitment random-float 1 * SaplingMax]
[set recruitment 0]
]
if lite = 3
[ ifelse random-float 1 < (lightfactor * sitequality)
[set recruitment random-float 1 * SaplingMax]
[set recruitment 0]
]
report recruitment
end
to plant
hatch-trees recruit light
[
setxy random-xcor random-ycor
setuptrees
]
end
; Allows the user to plant trees anywhere using the cursor
to seed
while [mouse-down?]
[
;; If we don't force the display to update, the user won't
;; be able to see the turtle moving around.
display
;; The SUBJECT primitive reports the turtle being watched.
hatch-trees 1 [
setxy mouse-xcor mouse-ycor
setuptrees
]
]
end
; Initiates the three main equations that drive the growth, birth, and death of all trees in the model
to go
ask turtles
[
plant
grow
treeAge
death
show getDiameter
heightVStreenum
]
tick
end
to heightVStreenum
set-current-plot "heightVStreenum"
set-current-plot-pen "height"
plotxy getHeight count trees
end