Feedback Loop Example: Vegetation Patch Growth

Feedback Loop Example: Vegetation Patch Growth preview image

1 collaborator

Jm1_vsm James Millington (Author)

Tags

e&s_chansfeedback 

Tagged by James Millington over 11 years ago

feedback loop 

Tagged by James Millington over 11 years ago

growth 

Tagged by James Millington over 11 years ago

vegetation 

Tagged by James Millington over 11 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0 • Viewed 1182 times • Downloaded 38 times • Run 0 times
Download the 'Feedback Loop Example: Vegetation Patch Growth' modelDownload this modelEmbed this model

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):

  1. Wettest: on one of the patches with the greatest water availability that doesn't already have a plant growing there
  2. 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
  3. 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):

  1. Random: at a uniformly random location
  2. 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

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                              ;;
;;        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 over 11 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' almost 11 years ago, by James Millington Download

This model does not have any ancestors.

This model does not have any descendants.