Feedback Loop Example: Vegetation Patch Growth
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This model illustrates a positive 'growth' feedback loop described in Millington (2013) in which the areal extent of an entity increases through time. In this case the entity is a patch of vegetation. Growth of plants is controlled by the availability of water in the soil. In turn, the availability of water in the soil is determined by the density of plants nearby, as plants facilitate infiltration. Consequently, conditions for plant establishment are better near existing patches of vegetation, leading to the growth of the vegetation patch. This feedback loop is described in more detail in HilleRisLambers et al. (2001).
Green dots indicate vegetation, blue squares indicate soil water availability (darker, more water), brown areas are dry soil not suitable for vegetation. Through time the shape of the vegetation patch influences soil water conditions at the periphery which facilitates vegetation establishment (and therefore patch growth).
HOW IT WORKS
At each time step in the model water infiltration (and therefore water availability in the soil) is calculated based upon the location and density of plants. One new plant establishes on a patch with water available during each time step (except the initial timestep in which a plant is established regardless of water availability - this is assumed to be an initial condition not controlled by the rules of the model). Plants can only establish on patches that do not contain other plants.
One of three rules can be used to determine where a new plant will grow in each timestep (establishment):
- Wettest: on one of the patches with the greatest water availability that doesn't already have a plant growing there
- Wetter: more likely to establish on patches with greater water availability (and no existing plants) but potentially could establish on any patch with sufficient water availability
- Random: could establish randonly with equal probability on any patch with sufficient water availability (and no existing plants)
One of two rules can be used to determine where the inital plant locates (initial-veg):
- Random: at a uniformly random location
- Centre: at the very centre of the simulated environemnt
HOW TO USE IT
First, decide which of the establishment and initial-veg rules you wish to use. Next decide if you wish the colour of plants to reflect the point in time at which they establish (lighter color is later in the simulation) by switching age-colours? on or off. To vary patterns between simulation runs change the random number-seed. Decide how long you want to pause simulation between each timestep by setting pause-duration.
When you are ready to go, click setup, then go (if you wish to run one timestep at a time click step instead of go).
THINGS TO NOTICE
Note how the pattern of growth changes for the different establishment rules.
THINGS TO TRY
See how patterns vary for different random number generator seeds (i.e., different values of number-seed).
CREDITS AND REFERENCES
HilleRisLambers, R., Rietkerk, M., van den Bosch, F., Prins, H. H., & de Kroon, H. (2001). Vegetation pattern formation in semi-arid grazing systems. Ecology, 82(1), 50-61
Millington, J.D.A. (2013) Three types of spatial feedback loop in coupled human and natural systems. Ecology and Society [URL HERE]
Code licenced by James D.A. Millington (http://www.landscapemodelling.net) under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License (see http://creativecommons.org/licenses/by-nc-sa/3.0/)
Model and documentation available from http://openabm.org
Comments and Questions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; Feedback Loop Example: Vegetation Patch Growth December 2012 ;; ;; ;; ;; Code licenced by James D.A. Millington (http://www.landscapemodelling.net) ;; ;; under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 ;; ;; Unported License (see http://creativecommons.org/licenses/by-nc-sa/3.0/) ;; ;; ;; ;; Model and documentation available from http://openabm.org ;; ;; ;; ;; Model used in: ;; ;; Millington, J.D.A. (2013) Three types of spatial feedback loop in coupled ;; ;; human and natural systems. Ecology and Society [URL HERE] ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; globals [ age-colour ] breed [plants plant] patches-own [ water-infiltration plant-density ] to setup ca random-seed number-seed reset-ticks ask patches [ set pcolor brown ] set age-colour 51 end to go ;if there are no plants, set the intial plant location and grow ifelse(not any? plants) [ let initial-veg-location nobody if(initial-veg = "Random") [set initial-veg-location one-of patches] ;random initial veg location if(initial-veg = "Centre") [set initial-veg-location patch 0 0] ask initial-veg-location [ sprout-plants 1 [ set shape "circle" ifelse(age-colours?) [ set color age-colour ] [ set color 52 ] ] ] ] ;otherwise, grow veg patch [ ;first determine location new plant will grow at (grow-location) let grow-location nobody if(establishment = "Random") [ set grow-location one-of patches with [not any? plants-here and water-infiltration > 0]] if(establishment = "Wettest") [ set grow-location max-one-of patches with [not any? plants-here and count plants-on neighbors > 0] [ water-infiltration ]] if(establishment = "Wetter") [ let possible-grow-locations patches with [not any? plants-here and water-infiltration > 0] set possible-grow-locations sort-on [water-infiltration] possible-grow-locations foreach possible-grow-locations [ if(grow-location != nobody) ;if = nobody we still have not selected a grow-location (if we have we don't want to run commands) [ let r random-float 1 if(r < 0.5) [ set grow-location ? ] ] ] ;if we still haven't set the grow-location, set to wettest location if(grow-location = nobody) [ set grow-location max-one-of patches with [not any? plants-here and count plants-on neighbors > 0] [ water-infiltration ]] ] ;grow the new plant ask grow-location [ sprout-plants 1 [ set shape "circle" ifelse(age-colours?) [ set age-colour age-colour + 0.1 set color age-colour ] [ set color 52 ] ] ] ] ;update soil conditions ask patches [ calc-density ] ask patches [ calc-infiltration set-patch-colours ] tick if(pause-duration > 0) [ wait pause-duration ] ;pause to view growth easier ;stopping rules if(count turtles >= 80) [ stop ] if(not any? patches with [not any? plants-here]) [ stop ] ;shouldn't need this but just in case... end to calc-infiltration set water-infiltration 100 * plant-density end to calc-density let neighbour-plants plants-on neighbors let count-neighbour-plants count neighbour-plants if any? plants-here [ set count-neighbour-plants count-neighbour-plants + 1 ] ifelse (count-neighbour-plants > 0) [ set plant-density count-neighbour-plants / 9 ] [ set plant-density 0 ] end to set-patch-colours ifelse(water-infiltration > 0) [ let val water-infiltration / 100 set pcolor 100 - (val * 10) ] [ set pcolor brown ] end
There is only one version of this model, created about 12 years ago by James Millington.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Feedback Loop Example: Vegetation Patch Growth.png | preview | Preview for 'Feedback Loop Example: Vegetation Patch Growth' | over 11 years ago, by James Millington | Download |
This model does not have any ancestors.
This model does not have any descendants.