Climate-driven Bark Beetle Outbreaks
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This model simulates climate-driven bark beetle outbreaks. Compared to the basic "Bark Beetle Epidemic" model, which presents students with the impact of temperature and droughts on bark beetle outbreaks, this model separates the effects of rising temperatures on beetle reproduction and survival. This model also allows students to explore the impacts of sanitation cutting, salvage cutting, and thinning on beetle outbreak.
HOW IT WORKS
Agents:
There are two types of agents: beetles and host trees.
Model Rules:
The model has 289 patches (light brown squares). Each patch may grow one pine tree.
Bark beetles follow pheromone to find their host tree. They always first infest the tree with the strongest pheromone (i.e., max pheromone) and are not fully occupied (i.e., attack < 50).
If no pheromone is sensed, bark beetles attack a mature tree (i.e., with a size no smaller than 1.75) nearby and release pheromones to attract other dispersing beetles.
Once infesting a tree, each bark beetle produces 2 offspring beetles and counts as 2 attacks on the tree. When the average temperature rises in summer, some beetles may produce another 2 offspring beetles.
Beetles may live two hypothetical years and die after reproduction. Each year, 49% of the beetles die during winter. When the average temperature rises in winter, fewer beetles die.
Trees become reddish after receiving 35 attacks and die after getting 50 attacks. Droughts will lower the tree defense threshold from 50 to 45, 40, or 35.
Every empty patch grows a new pine tree at a chance of 5% each year.
HOW TO USE IT
Use the slider Starting-number-of-beetles to set up the starting beetle population. Click Start/Reset to confirm the settings.
Put a number in years to define when the model ends.
Click Run/Pause to run or pause the model. Good for gaining an overview and a long-term result.
Click Run a year to run the model for a hypothetical year. Good for systematically collecting data.
Use sliders to define the temperature increases and the severity of droughts.
Use switch * Cut-down-trees? * to choose whether and how to cut down trees to mitigate the outbreak.
Use the slider Thinning to set up how many percent of mature trees to be cut down for thinning the forest. These trees include the infected and the uninfested.
THINGS TO NOTICE & TRY
Can you identify an outbreak in the model? How?
How many outbreaks may occur over 150 years when there are no droughts and no increases in temperatures?
How many outbreaks may occur over 150 years when there are droughts and increases in temperatures?
How do droughts and/or rising temperatures affect the number of dead trees?
How does cutting down infested trees affect the outbreak occurrences and tree loss?
How does thinning forests affect the outbreak occurrences?
CREDITS AND REFERENCES
Dr. Lin Xiang created this module at the University of Kentucky in 2022. If you mention this model in a publication, we ask that you include the citations below.
Xiang, L. (2022). Climate-driven Bark Beetle Outbreaks. Department of STEM Education, University of Kentucky, Lexington, KY.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/.
Comments and Questions
breed [trees tree] breed [beetles beetle] beetles-own [age] trees-own [attack pheromone] globals [dead-trees forest-lost total-dead-trees max-dead-trees max-b-population b-population cut-down-trees] to setup clear-all setup-beetles setup-trees setup-patches reset-ticks end to setup-trees ask patches [if not any? trees-here [if random 100 < 80 [sprout-trees 1 [set color 54 set size 1.5 + random-float 1 set shape "pine" set attack 0 set pheromone 0] ]]] end to setup-beetles create-beetles Starting-number-of-beetles [set color 0 set size 0.5 set shape "bark-beetle" set age 0 setxy random-xcor random-ycor ] end to setup-patches ask patches [set pcolor 37 + random-float 1] end to go if ticks >= years [stop] ;if not any? beetles [stop] move-infest attacking beetle-mortality beetle-flight tree-sapling tree-grow count-dead-trees clean-pheromone thinning-trees forest-management tick end to forest-management (ifelse Cut-down-trees? = "never" [] Cut-down-trees? = "when they are lightly infested" [ask trees with [attack > 5] [ask beetles-here [die] set cut-down-trees cut-down-trees + 1 die]] Cut-down-trees? = "only when they are heavily infested" [ask trees with [attack > 35 - (drought-severity * 5)] [ask beetles-here [die] set cut-down-trees cut-down-trees + 1 die]] ) end to thinning-trees ask trees with [size >= 1.75] [if random 100 < Thinning [set cut-down-trees cut-down-trees + 1 die]] end to clean-pheromone ask trees [set pheromone 0] end to beetle-flight ;mature beetle flight for new trees ask beetles [right random 360 forward 1 + random-float 2] end to count-dead-trees set total-dead-trees dead-trees if total-dead-trees > max-dead-trees [set max-dead-trees total-dead-trees] set dead-trees 0 set b-population count beetles if b-population > max-b-population [set max-b-population b-population] end to tree-sapling ask patches [if not any? trees-here [if random 100 < 5 [sprout-trees 1 [set color 54 set size 1 set shape "pine" set attack 0 set pheromone 0]]]] end to tree-grow ask trees [if size <= 2.5 [set size size + 0.05]] end to beetle-mortality ask beetles [ if age >= 2 [die] if random 100 < 49 - avg-winter-temperature-increase * 2 [die] ] end to attacking ask trees [(ifelse attack > 35 - (drought-severity * 5) and attack < 50 - (drought-severity * 5) [set color 26] attack >= 50 - (drought-severity * 5) [set dead-trees dead-trees + 1 set forest-lost forest-lost + 1 die ])] end to move-infest ask beetles [ifelse any? trees with [pheromone > 0 and attack < 50 - (drought-severity * 5)] in-radius 5 ;if there are trees with pheromone and not fully-occupied in a radius of 5 [let candidate-trees trees with [pheromone > 0 and attack < 50 - (drought-severity * 5)] in-radius 5 ;if so, let these trees to be the candidate trees let my-tree one-of candidate-trees with-max [pheromone] ; let one of candidate trees with the max pheromone be my tree move-to my-tree ;infest the tree and reproduce and die hatch 2 [set age 0] ask my-tree [set attack attack + 2 set pheromone pheromone + 1] if random 100 < avg-summer-temperature-increase * 4 ;effect of rising temperature [hatch 2 [set age 0] ask my-tree [set attack attack + 2 set pheromone pheromone + 1]] die] [ifelse any? trees with [size >= 1.75 and pheromone <= 0 ] in-radius 2 ;otherwise, if there are mature non-infested trees in a radius of 2 [let candidate-trees trees with [size >= 1.75 and pheromone <= 0 ] in-radius 2 ; if so, let these trees to be the candidate trees let my-tree one-of candidate-trees ; let one of candidate trees be my tree move-to my-tree ;infest the tree and reproduce and die hatch 2 [set age 0] ask my-tree [set attack attack + 2 set pheromone pheromone + 1] if random 100 < avg-summer-temperature-increase * 4 ;effect of rising temperature [hatch 2 [set age 0] ask my-tree [set attack attack + 2 set pheromone pheromone + 1]] die] [right random 360 forward 1 + random-float 2 set age age + 1] ;otherwise, randomly move and increase age ]] end
There are 4 versions of this model.
This model does not have any ancestors.
This model does not have any descendants.