TESTATEWORLDWORKS2011!

TESTATEWORLDWORKS2011! preview image

1 collaborator

Default-person Travis Andrews (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 4.1.3 • Viewed 270 times • Downloaded 32 times • Run 0 times
Download the 'TESTATEWORLDWORKS2011!' 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 simulates the community dynamics of living testate amoebae and monitors the asssocaited preserved tests in the top of an accumulating sphagnum bog. The ecology of testate amoebae is poorly understood; however, relationships to watertable depth are observed. Testates with different watertable depth (WTD) preference are represented by triangle shaped turtles pointing in different directions with different sizes. For more information read the associated paper posted on my website:

https://sites.google.com/a/lehigh.edu/wanderswest/home/current-research

HOW IT WORKS

One theory proposed to explain differences between variable and stable WTD loving testate amoebae suggests they may exhibit traits of r-selection and K-selection respectively. Aspects of the ecological principle of r/K selection suggest that r-selected species reproduce quickly with less energy and persist in unfavorable conditions longer. Species that are K-selected take longer to reproduce but are better at competing for resources. This principle has not been previously tested with testate amoebae. The goal of this study is to apply r/K selection traits to three types of amoebae, then determine which environments each prefer. The three groups are: 1) K-selected species with ideal WTD ranging from dry to neutral (termed _D-species_in this model); 2) K-selected species with ideal WTD of neutral to wet (_W-species_; 3) r-selected species with ideal WTD circumneutral (_-species_. Note, KD and KW-species are separated for model testing but should function as one K-type species with a wide range of ideal WTD. This model seeks to answer the question: what testate amoebae characteristics allow species to dominate during variable conditions?

THINGS TO NOTICE

The goal of this study is to test whether r-selected species dominate the communities during variable climate. To this end, the following objectives were completed using Netlogo modeling software:

1. Create a simplified bog-like habitat with hydrology that responds to precipitation, peat hydraulic conductivity, and regional groundwater levels (termed _asin-hydrology_in the model).

2. Create an adjustable climate that uses randomly generated weather to produce consistent stable wet, stable dry, and variable conditions.

3. Use the turtles feature of Netlogo to represent testate amoebae with characteristics summarized in Table 1.

4. Verify the model by simulating stable wet, stable dry, stable intermediate, and variable conditions such that WTD remains high, low, circumneutral, or fluctuates over a period of a few months respectively.

5. Verify KD or KW-species dominate during stable dry, stable wet, and intermediate conditions.

6. Verify R-species do not dominate during stable conditions at any WTD.

7. Simulate variable conditions and see how testate amoebae respond!

EXTENDING THE MODEL

This project was written from scratch using open source code that allows the opportunity to add variables, such as humidity, and increasing levels of complexity. To further improve the model, better ecological equations for things like competition and reproduction energy cost should be integrated. One potential use would be to adjust climate to simulate the typical seasonality in region of interest. The model may also support future research identifying the importance of frequency and amplitude of external forcing on ecosystems.

CREDITS AND REFERENCES

Travis Andrews. 2011. TESTATEWORLDWORKS2011!. Lehigh University, Bethlehem PA.

Comments and Questions

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

Click to Run Model

breed [suns sun]
breed [clouds cloud]
breed [raindrops raindrop]
breed [winds wind]
breed [amoebaeR amoebaR]
breed [amoebaeKW amoebaKW]
breed [amoebaeKD amoebaKD]

raindrops-own [
  location          
  amount-of-water]
winds-own [          
  evaporation]
clouds-own [
  moisture]
patches-own [
  SurfMoist ;surface moisture (diffuses faster)
  SMoist ;Sphagnum Moisture
  WTD]
amoebaeR-own [
  locationA
  Ideal
  cyst-energy
  energy
  birth-energy
  decay
  ]
amoebaeKD-own [
  locationA
  Ideal
  cyst-energy
  energy
  birth-energy
  decay
  ]
amoebaeKW-own [
  locationA
  Ideal
  cyst-energy
  energy
  birth-energy
  decay
  ]

globals [
  surface
  sphagnum  
  peat       
  WTDstart
]
;****SETUP**********************************************  

to setup
  clear-all
  do-plots
  set surface min-pycor + 11
  set sphagnum min-pycor + 10
  set peat min-pycor + 5
  set-default-shape raindrops "drop"
  set-default-shape clouds "cloud"
  set-default-shape winds "line2"
  set-default-shape amoebaeR "amoebaer"
  set-default-shape amoebaeKD "amoebaekd"
  set-default-shape amoebaeKW "amoebaekw"
     
 ;; On the first day....
create-suns 1 [
    setxy max-pxcor - 2
          max-pycor - 3
     set color yellow 
     set shape "circle" 
     set size 4]

 ;; And on the second day...Create sky and grass 
ask patches [if pycor > 11 [  
    set pcolor 98]] ;sky
ask patches [if pycor < 11 and pycor > 1 [  
    set pcolor 54]] ;sphagnum
ask patches [if pycor = 11  [ 
    set pcolor green]] ;surface
ask patches [if pycor < 5 [
    set pcolor 33]] ;peat
end     

;*****GO>>>>GO>>>>>GO!!!!!*********************************************

to go
  make-wind-blow
  make-rain-fall
  make-clouds
  make-groundwater
  display-labels
  update-world
  breed-amoebaeR
  make-live-amoebaeR
  hatch-ameobaeR
  breed-amoebaeKD
  make-live-amoebaeKD
  hatch-ameobaeKD
  breed-amoebaeKW
  make-live-amoebaeKW
  hatch-ameobaeKW
  tick
  do-plots
end 

;********And on the third day....*****************************************************
;;make clouds that make rain

to make-clouds
   if random-float 730 < (2.5 * Climate) and Climate-Variability = 1
    ;; add climate and variability to cloudyness ; make clouds when cloudy
   and Cloudy [create-clouds (random-float 10) [
     setxy (random-float 40) (random-float 9 + 11)  
     set heading 90
     set size 4
     set color white
     set moisture random-float 3
     ask clouds [fd random 0.8 + 0.05]
     ;;ask clouds [set label moisture]
     ask clouds [if count clouds > 10 [die]]
   ]]
  if random-float 730 < (Climate) and Climate-Variability > 1
    ;; add climate and variability to cloudyness ; make clouds when cloudy
   and Cloudy and (Climate-Variability) < ((count clouds / 4) + random-normal 2 1) [create-clouds (random-float 10) [
     setxy (random-float 40) (random-float 9 + 11)  
     set heading 90
     set size 4
     set color white
     set moisture random-float 3
     ask clouds [fd random 0.8 + 0.05]
     ;;ask clouds [set label moisture]
     ask clouds [if count clouds > 10 [die]]
   ]]
  ask clouds with [pycor > 10 ] [ 
    fd 2 ]
  ask clouds at-points [[40 11] [40 12] [40 13] [40 14] [40 15] [40 16] [40 17] [40 18] [40 19] [40 20]]
    [die]
 if not Cloudy [ask clouds [fd 2]
    ask clouds at-points [[40 11] [40 12] [40 13] [40 14] [40 15] [40 16] [40 17] [40 18] [40 19] [40 20]]
    [die]]
end 
 
 ;; Create new rain

to make-rain-fall
if random-float 730 < (8 * Climate) and random-float 3 <= Climate-Variability [create-raindrops random-normal 100 50 [
    setxy random-xcor max-pycor
    set heading 180
    set color blue
    set location "falling"
    set amount-of-water ((count clouds) * (Climate-Variability ^ 2)) ;make raindrops same size per event!! ; make climate variable! by raindrop size
    set size (0.1 * amount-of-water)
  ]]
ask raindrops with [location = "falling"] [ 
    fd 1 ]
ask raindrops [if count clouds = 0 [ die]]
end  
 
;;Create WTD ; starts with no groundwater -> takes few days to equilibrate. 

to make-groundwater
  ask raindrops with [location = "falling"][ 
  if pycor = 10 [ 
  set pcolor 84
  set SurfMoist amount-of-water
    die]]
  
;ask patches [if pcolor = 84 [
 ;    set SMoist random-float 10
  ;   ]]
ask patches [if pycor = (13 + (count clouds / 3)) [ ;max 10 clouds, slows down evaporation
    set SurfMoist 0]]
ask patches [if pycor = 11 [
    set Smoist SurfMoist]]  ;convert surface water to ground water doing down, no converstion going up. 

;;make groundwater leave
ask patches [if pycor = 12 [
    set SMoist 0]]
ask patches [if pycor = 1 [
    set SMoist (6 + Basin-hydrology)]] ;;if mega drought, set to -5 to simulate lower regional groundwater table

diffuse SurfMoist .2 ; make surface water diffuse quicker than groundwater 
diffuse SMoist Conductivity  ;;make groundwater behave 
end 

to update-world ;make things look correct
ask patches [if pycor < 11 and pycor > 4 and SMoist > 5 [  
    set pcolor 93]]
ask patches [if pycor < 11 and pycor > 4 and SMoist < 4 [ 
    set pcolor 54]]
ask patches [if pycor = 11 and SMoist < 4 [ 
    set pcolor green]]
ask patches [if pycor > 9 and SMoist > 5 [
    set pcolor 85]]
ask patches [if pycor <= 4 [
    set pcolor 33]]
ask patches [if pycor > 11 and SMoist < 4 [ 
    set pcolor 98]]  
end 

to display-labels  ;;display groundwater values;; values >5 are saturated?
 ask patches [set plabel ""]
if Labels [ask patches [ 
  set plabel round SMoist]]
end 

 ;;WIND and Evaporation

to make-wind-blow
 if random-float 100 < Windy-days and Windy [ create-winds random-float 10 [
      setxy 0 14 - random-float 4
      set heading 90 
      set size 1
      set color cyan]]
 
      ask winds [fd 1]
      ask winds at-points [[40 10] [40 11] [40 12] [40 13] [40 14]]
        [die]
;;have wind remove SurfMoist and Smoist at surface
ask winds [if SurfMoist > 0 [
    set SurfMoist (SurfMoist - 0.5)]]
ask winds [if SMoist > 0 [
    set SMoist (SMoist - 0.5)]]
if not Windy [ 
      ask winds [die]]
end   

;**********MAKE AmoebaeR!***************************************************************

to breed-amoebaeR ;ameobae input from atmosphere, then rain, not recycled
if random-float 730 < Amoebae-Input [create-amoebaeR 1 [
     set size random-normal 0.75 0.5 
     setxy (random-float 40) (20 - random-float 5)
    ; set color scale-color red Ideal -6 6 ;; "???-------------------------------
     set heading 90 
     set locationA "atmosphere"
     set energy (size + 0.5 )
     set Ideal (random-float 4 + 3) ;make variable 
     set cyst-energy 0.0005 ;make variable? or initial energy?----------------------------------
     set birth-energy ((size + 1) * 1.15) ]]
  ask amoebaeR with [locationA = "atmosphere"] 
     [ set heading (heading + random-normal 0 75 )
       fd random-normal 0.75 0.2]
  ask amoebaeR with [locationA = "atmosphere"] 
     [if count raindrops < 50 [
     set heading 90]]
  ask amoebaeR with [locationA = "atmosphere"] [if count raindrops >= 50 [
    set heading 180
    fd (random-float 5)]]
  ask amoebaeR at-points [[40 11] [40 12] [40 13] [40 14] [40 15] [40 16] [40 17] [40 18] [40 19] [40 20]]
        [die]  
  ask amoebaeR with [pycor < 12 and pycor > 4][
    set locationA "sphagnum" ]
        ;set variables such as cyst time with countdown till die
        ;set shape based on r vs. k variables ?
end 

to make-live-amoebaeR
  ask-concurrent amoebaeR with [locationA = "sphagnum"] [if SMoist <= Ideal + 2 and SMoist >= Ideal - 5 [
    set heading random-float 360
    fd 0.1
    set energy (energy + (size / 25) - ((12 - pycor) / 100))]]  ;add energy in ideal conditions realitive to size, less energy deeper
  ;make amoebae move toward ideal - NO!
  ;Cysting takes initial energy plus time
  ask-concurrent amoebaeR with [locationA = "sphagnum"] [if SMoist > Ideal + 5 or SMoist < Ideal - 2  [ ;or not AND!
    fd 0
    set energy (energy - cyst-energy - ((12 - pycor) / 100))]] 
  ;kill amoebae
  ask-concurrent amoebaeR with [pycor < 12 and pycor > 4][if energy <= 0 [ 
      set heading 180
      fd 2]] ;dead amoebae move to peat
  
;Accumulate dead amoebae in peat   
ask amoebaeR [if pycor <= 4 and locationA = "sphagnum" [
  set locationA "peat"
  set energy 0
  set decay 365 ]]
ask amoebaeR with [locationA = "peat"] [
  set heading 180
  fd 0.003
  set decay (decay - (1 / (decay-rate + 0.1)))]
ask amoebaeR with [locationA = "peat"] [
  if decay <= 0 [die]]

ask amoebaeR [if pycor > 11 [
   set locationA "atmosphere"]]
;limit # of ameobae per patch (intraspecific competition)
ask amoebaeR [if (count amoebaeR-here > 2) [ 
    set energy (energy - 0.2) ]]
;interspecific competition dominates R species
ask amoebaeR [if (count amoebaeKD-here > 0) [ 
    set energy (energy - 0.4) ]]
ask amoebaeR [if (count amoebaeKW-here > 0) [ 
    set energy (energy - 0.4) ]]
end 

to hatch-ameobaeR
  ;; give birth to a new amoebaeR that inherits SAME variables of parent, but takes lots energy
  ask-concurrent amoebaeR with [locationA = "sphagnum"] [if energy > birth-energy
    [ set energy ((energy - 0.5) / 2)
     hatch 1 [ 
     set energy (size)
     fd 1
     set cyst-energy 0.0005 ;make variable
     set birth-energy ((size + 1) * 1.15) ]]]
end 

;*********;MAKE AmoebaeKD!********************************************************

to breed-amoebaeKD ;ameobae input from atmosphere, then rain, not recycled
if random-float 730 < Amoebae-Input [create-amoebaeKD 1 [
     set size random-normal 0.75 0.5 
     setxy (random-float 40) (20 - random-float 5)
     set heading 90 
     set locationA "atmosphere"
     set energy (size + 1)
     set Ideal (random-float 1 + 2) ;make variable 
     set cyst-energy 0.05 ;make variable
     set birth-energy ((size + 1) * 4) ]]
  ask amoebaeKD with [locationA = "atmosphere"] 
     [ set heading (heading + random-normal 0 75 )
       fd random-normal 0.75 0.2]
  ask amoebaeKD with [locationA = "atmosphere"] 
     [if count raindrops < 50 [
     set heading 90]]
  ask amoebaeKD with [locationA = "atmosphere"] [if count raindrops >= 50 [
    set heading 180
    fd (random-float 5)]]
  ask amoebaeKD at-points [[40 11] [40 12] [40 13] [40 14] [40 15] [40 16] [40 17] [40 18] [40 19] [40 20]]
        [die]  
  ask amoebaeKD with [pycor < 12 and pycor > 4][
    set locationA "sphagnum" ]
        ;set variables such as cyst time with countdown till die
        ;set shape based on r vs. k variables ?
end 

to make-live-amoebaeKD
  ask-concurrent amoebaeKD with [locationA = "sphagnum"] [if SMoist <= (Ideal + 1.5) and SMoist >= (Ideal - 1.5) [
    set heading random-float 360
    fd 0.1
    set energy (energy + (size / 10) - ((12 - pycor) / 100))]] 
  ;make amoebae move toward ideal - NO!
  ask-concurrent amoebaeKD with [locationA = "sphagnum"] [if SMoist > Ideal + 1.5 or SMoist < Ideal + -1.5  [ ;or not AND!
    fd 0
   ;Cysting takes energy
    set energy (energy - cyst-energy  - ((12 - pycor) / 100))]] 
  ;kill amoebae
  ask-concurrent amoebaeKD with [pycor < 12 and pycor > 4][if energy <= 0 [ 
      set heading 180
      fd 2]] ;dead amoebae move to peat
  
;Accumulate dead amoebae in peat   
ask amoebaeKD [if pycor <= 4 and locationA = "sphagnum" [
  set locationA "peat"
  set energy 0
  set decay 365 ]]
ask amoebaeKD with [locationA = "peat"] [
  set heading 180
  fd 0.003
  set decay (decay - (1 / (decay-rate + 0.1)))]
ask amoebaeKD with [locationA = "peat"] [
  if decay <= 0 [die]]

;amoebae hatched in air float away
ask-concurrent amoebaeKD [if pycor > 11 [
   set locationA "atmosphere"]]
;limit # of ameobae per patch (intraspecific competition)
ask-concurrent amoebaeKD [if (count amoebaeKD-here > 1) [ 
   set energy (energy - 0.5) ]]
;intraspecific competition dominates R species
ask-concurrent amoebaeKD [if (count amoebaeR-here > 1) [ 
   set energy (energy - 0.3) ]]
ask-concurrent amoebaeR [if (count amoebaeKW-here > 1) [ 
    set energy (energy - 0.5) ]]
end 

to hatch-ameobaeKD
  ;; give birth to a new amoebaeR that inherits SAME variables of parent, but takes lots energy
  ask-concurrent amoebaeKD with [locationA = "sphagnum"] [if energy > birth-energy
    [ set energy ((energy - 0.5) / 2)
     hatch 1 [ 
     set energy (size + 1)
     fd 1
     set cyst-energy 0.005 ;make variable
     set birth-energy ((size + 1) * 4) ]]]
end 

;;
;*********;MAKE AmoebaeKW!***********************************************

to breed-amoebaeKW ;ameobae input from atmosphere, then rain, not recycled
if random-float 730 < Amoebae-Input [create-amoebaeKW 1 [
     set size random-normal 0.75 0.5 
     setxy (random-float 40) (20 - random-float 5)
     set heading 90 
     set locationA "atmosphere"
     set energy (size + 1)
     set Ideal (random-float 2 + 4) ;make variable 
     set cyst-energy 0.05 ;make variable
     set birth-energy ((size + 1) * 4) ]]
  ask amoebaeKW with [locationA = "atmosphere"] 
     [ set heading (heading + random-normal 0 75 )
       fd random-normal 0.75 0.2]
  ask amoebaeKW with [locationA = "atmosphere"] 
     [if count raindrops < 50 [
     set heading 90]]
  ask amoebaeKW with [locationA = "atmosphere"] [if count raindrops >= 50 [
    set heading 180
    fd (random-float 5)]]
  ask amoebaeKW at-points [[40 11] [40 12] [40 13] [40 14] [40 15] [40 16] [40 17] [40 18] [40 19] [40 20]]
        [die]  
  ask amoebaeKW with [pycor < 12 and pycor > 4][
    set locationA "sphagnum" ]
        ;set variables such as cyst time with countdown till die
        ;set shape based on r vs. k variables ?
end 

to make-live-amoebaeKW
  ask-concurrent amoebaeKW with [locationA = "sphagnum"] [if SMoist > (Ideal) [
    set heading random-float 360
    fd 0.1
    set energy (energy + (size / 10) - ((12 - pycor) / 100)) ]]
  ;make amoebae move toward ideal - NO!
  ;Cysting takes energy
  ask-concurrent amoebaeKW with [locationA = "sphagnum"] [if  SMoist < (Ideal)  [ ;or not AND!
    fd 0
    set energy (energy - cyst-energy - ((12 - pycor) / 100))]] 
  ;kill amoebae
  ask-concurrent amoebaeKW with [pycor < 12 and pycor > 4][if energy <= 0 [ 
      set heading 180
      fd 2]] ;dead amoebae move to peat
  
;Accumulate dead amoebae in peat for 3 year  
ask amoebaeKW [if pycor <= 4 and locationA = "sphagnum" [
  set locationA "peat"
  set energy 0
  set decay 365]]
ask amoebaeKW with [locationA = "peat"] [
  set heading 180
  fd 0.003
  set decay (decay - (1 / (decay-rate + 0.1)))]
ask amoebaeKW with [locationA = "peat"] [
  if decay <= 0 [die]]

ask-concurrent amoebaeKW [if pycor > 11 [
   set locationA "atmosphere"]]
;limit # of ameobae per patch (intraspecific competition)
ask-concurrent amoebaeKW [if (count amoebaeKW-here > 1) [ 
   set energy (energy - 0.5) ]]
;intraspecific competition dominates R species
ask-concurrent amoebaeKW [if (count amoebaeR-here > 1) [ 
   set energy (energy - 0.3) ]]
ask-concurrent amoebaeKW [if (count amoebaeKD-here > 1) [ 
   set energy (energy - 0.5) ]]
end 

to hatch-ameobaeKW
  ;; give birth to a new amoebaeKW that inherits SAME variables of parent, but takes lots energy
  ask-concurrent amoebaeKW with [locationA = "sphagnum"] [if energy > birth-energy
    [ set energy ((energy - 0.5) / 2)
     hatch 1 [ 
     set energy (size + 1)
     fd 1
     set cyst-energy 0.005 ;make variable
     set birth-energy ((size + 1) * 4) ]]]
end 

 
 ;*************DISPLAY DATA************************************** 

to do-plots
  set-current-plot "Plot"
  set-current-plot-pen "AmoebaeR"
  plot count amoebaeR
  set-current-plot-pen "AmoebaeKD"
  plot count amoebaeKD
  set-current-plot-pen "AmoebaeKW"
  plot count amoebaeKW
  ask patches [if (pycor = 7) and (pxcor = 10)[
  set-current-plot-pen "WTD"
  plot  (SMoist *  50) ]]
end 
 
 ;histogram
;Differences btw R, KW, and KD variables table needed!

There is only one version of this model, created over 12 years ago by Travis Andrews.

Attached files

File Type Description Last updated
TESTATEWORLDWORKS2011!.png preview Preview for 'TESTATEWORLDWORKS2011!' about 12 years ago, by Travis Andrews Download

This model does not have any ancestors.

This model does not have any descendants.