Appendix A:

StarLogo programming code

 

globals [aps pnm dr winddist pnmx pnmy apsx apsy drx dry diff windx windy]

patches-own [newso2 so2]

to setup

 clearall

; draw shiprock

draw-map

 ask-patches [setso2 0]

 ;set the so2 production rate

  setaps 96

  setpnm 41

 ; set the diffusion rate

 setdiff 5

 ; set the wind distribution

 ; using the unbiased distribution for now

  set windx [0 1 1 1 0 -1 -1 -1]

  set windy [1 1 0 -1 -1 -1 0 1]

 

end

 

to draw-map

  setapsx 3

  setapsy -3

  setpnmx 7

  setpnmy 3

 create-turtles-and-do 1 [ setxy 0 0 setc blue ]; shiprock

 create-turtles-and-do 1 [ setxy pnmx pnmy setc brown ]; pnm

 create-turtles-and-do 1 [ setxy apsx apsy setc brown ]; aps

end

 

 ; new plant

to newplant

create-turtles-and-do 1 [ setxy drx dry setc brown ]; dr

   setdrx 0

   setdry -15

   ask-patches [setso2 0]

   setdr 14

   setdiff 5

end

 

to go

   ; pump out so2 from plants

   ask-patch-at apsx apsy [ set so2 ( aps + so2) ]

   ask-patch-at pnmx pnmy [ set so2 ( pnm + so2 ) ]

   ask-patch-at drx dry [ set so2 ( dr + so2 ) ]

  ; difuse so2 down the gradient

  ; but don't wrap around the screen edges

  ask-patches-with [ xcor = screen-half-width ] [setso2 0]

  ask-patches-with [ ycor = screen-half-height ] [setso2 0]

  ask-patches-with [ xcor = (0 - screen-half-width) ] [ setso2 0]

  ask-patches-with [ ycor = (0 - screen-half-height) ] [ setso2 0]

  diffuse so2 (diff / 100)

  ; let wind move theso2 down wind

  ; choose-wind -use the sliders

  ; this code simply moves all of the so2 down wind

  ;ask-patches [setnewso2 so2-towards winddir windspd]

 ; ask-patches [setso2 newso2]

  blow-wind item (1 + winddir) windx item (1 + winddir) windy (windspd / 50)

  ;scale the patch color to grey

  ask-patches [ scale-pc brown so2 0 50]

 end

 

to blow-wind :x :y :fraction

   ask-patches [setnewso2 0]

   ask-patches [setnewso2 (newso2 + :fraction * (so2-at :x :y))]

   ask-patches [setnewso2 (newso2 + (1 - :fraction) * so2)]

   ask-patches [setso2 newso2]

end

 

to choose-wind

 ; this is an even distribution of directions and speeds

 ; with no bias to preserve direction or speed

  set winddir 45 * (random 8)

  set windspd 5 * (random 8)

end