Hyporheic Exchange Model: Mouse drop

Hyporheic Exchange Model: Mouse drop preview image

4 collaborators

Contact_me Susa Stonedahl (Author)
Aaron Packman (Advisor)
Kevin Roche (Team member)

Tags

bedforms 

Tagged by Susa Stonedahl almost 10 years ago

earth science 

Tagged by Susa Stonedahl almost 10 years ago

flume 

Tagged by Susa Stonedahl almost 10 years ago

groundwater 

Tagged by Susa Stonedahl almost 10 years ago

hyporheic 

Tagged by Susa Stonedahl almost 10 years ago

hyporheic exchange 

Tagged by Susa Stonedahl almost 10 years ago

sediment 

Tagged by Susa Stonedahl almost 10 years ago

soil and water conservation 

Tagged by Susa Stonedahl almost 10 years ago

water 

Tagged by Susa Stonedahl almost 10 years ago

water flow 

Tagged by Susa Stonedahl almost 10 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.2.0 • Viewed 721 times • Downloaded 72 times • Run 0 times
Download the 'Hyporheic Exchange Model: Mouse drop' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

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

Click to Run Model

breed [ particles particle ]

particles-own [ residence-time in-bank? ]
globals [Boundary constant k2 height time-counter time-dx HydrCond2 hm2 Boundary2 xcutoff U2 depth2]

to-report surface-function [ x ]
  report height * sin ( k2 * x ) + Slope * x
end 

to setup
  clear-all
  set-default-shape particles "circle"
  set constant 270 / lambda


  set Boundary BedDepth
  set k2 ( 360 / (constant * lambda ))
  set height ( BedformHeight * constant ) / 2
  set time-counter 0
  set time-dx 100
  set HydrCond2 constant * HydrCond
  set U2 ChannelVelocity * constant
  set depth2 depth * constant
  ifelse (( height * 2 / depth2 ) > .34)
  [set hm2 .28 * ( ( U2 ) ^ 2 ) / ( 2 * 9.8 * constant * 100  ) * (( height * 2 / depth2 ) / .34 ) ^ ( 3 / 2 ) ]
  [set hm2 .28 * ( ( U2 ) ^ 2 ) / ( 2 * 9.8 * constant * 100  ) * (( height * 2 / depth2 ) / .34 ) ^ ( 3 / 8 ) ]

  set Boundary2 constant * Boundary
  set xcutoff constant * lambda * floor( 270 / (constant * lambda))

  ask patches
  [
    ifelse ( pycor < surface-function (pxcor))
    [ set pcolor brown + 2 ] ; sand color
    [ set pcolor blue - 2 ]  ; water color

    if ( pycor < -1 * boundary2 )
    [ set pcolor black ]

    if ( pxcor > xcutoff )
    [ set pcolor black ]


    if ( pxcor < 0 )
    [ set pcolor black ]
  ]

  reset-ticks
end 

to go
  ask particles with [ in-bank? ]
  [
    move
  ]

  ifelse (time-counter = 0 and time1 > 0)
    [ change-color 65 ]
    [
      ifelse (time-counter < time1 * 60 and time-counter + time-dx >= time1 * 60)
      [ change-color 75 ]
      [ifelse (time-counter < time2 * 60 and time-counter + time-dx >= time2 * 60)
        [ change-color 83 ]
        [ifelse (time-counter < time3 * 60 and time-counter + time-dx >= time3 * 60)
          [ change-color 125 ]
          [ifelse (time-counter < time4 * 60 and time-counter + time-dx >= time4 * 60)
            [ change-color 115 ]
            [ifelse (time-counter < time5 * 60 and time-counter + time-dx >= time5 * 60)
              [ change-color 105 ]
              [ if (time-counter < time6 * 60 and time-counter + time-dx >= time6 * 60)
                [ change-color 95 ]
              ]]]]]]

  set time-counter time-counter + time-dx
  tick
end 

to timestep

  ifelse (time-counter < time1 * 60 )

  [
    repeat ((time1 * 60 - time-counter) / time-dx) [go]
  ]

  [ifelse (time-counter < time2 * 60 )
    [
      repeat ((time2 * 60 - time-counter) / time-dx) [go]
    ]
    [ifelse (time-counter < time3 * 60 )
      [
        repeat ((time3 * 60 - time-counter) / time-dx) [go]
      ]
      [ifelse (time-counter < time4 * 60 )
        [
          repeat ((time4 * 60 - time-counter) / time-dx) [go]
        ]
        [ifelse (time-counter < time5 * 60 )
          [
            repeat ((time5 * 60 - time-counter) / time-dx) [go]
          ]
          [ if (time-counter < time6 * 60 )
            [
              repeat ((time6 * 60 - time-counter) / time-dx) [go]
            ]
          ]]]]]
end 

to change-color [newcolor]
  ask particles with [in-bank?] [
    set color newcolor
    stamp
  ]
end 

to move

  let ycor2 ycor - surface-function( xcor )

  let exp1 exp ( k2 * (2 * pi / 360 ) * ycor2 )
  let exp2 exp ( k2 * (2 * pi / 360 ) * (-2 * boundary2 - ycor2 ) )
  let exp3 exp ( k2 * (2 * pi / 360 ) * (-2 * boundary2) )

  let expsum exp1 + exp2

  let yvel  ((-1 * (cos ( xcor * k2 )) * ( ( exp1 - exp2) * (k2 * 2 * pi / 360 )) * hm2)) / (1 + exp3) * HydrCond2 / porosity ;
  let xvel  ((k2 * (2 * pi / 360 ) * ( sin ( xcor * k2 )) * ( expsum )  * hm2 ) ) / (1 + exp3) * HydrCond2 / porosity;


  set xcor xcor +  time-dx * (xvel - HydrCond2 * Slope / (porosity * (1 + Slope ^ 2))) ; / constant

  if (ycor + yvel > max-pycor)
  [ show "big problem -- particle lost above screen" die ]
  if (ycor + yvel < min-pycor)
  [
    ;show "Oh no, I'm lost!"
    die
  ]
  set ycor ycor + time-dx * (yvel - (HydrCond2 * Slope ^ 2) / (porosity * (1 + Slope ^ 2))); + HydrCond2 / porosity );/ constant

  set residence-time residence-time + time-dx

  if xcor >= xcutoff
  [ pen-up
    set ycor ycor - Slope * xcutoff
    set xcor xcor - xcutoff

    if show-paths?
      [pen-down]
  ]

  if xcor <= 0
  [ pen-up
    set ycor ycor + Slope * xcutoff
    set xcor xcor + xcutoff

    if show-paths?
      [pen-down]
  ]

  set in-bank? (ycor <= surface-function xcor)
  if not (in-bank?)
  [
    ; we want them to stamp them right on the function, for better visuals
    set ycor surface-function xcor
    ht
  ]
end 

to mouse-drop
  if mouse-down?
  [
    ask patch mouse-xcor mouse-ycor [
      sprout-particles 1
      [
        set xcor mouse-xcor
        set ycor mouse-ycor
        if any? other particles in-radius 0.24 ; don't let them drop particles too close to each other
          [ die ]
        if (ycor > surface-function xcor) ; don't let them drop particles above the surface
          [ die ]
        set in-bank? true
        set residence-time 0
        set size 2
        set color 65
        if (show-paths?) [ pd ]
      ]
    ]
  ]
end 


;; COMMENTED OUT 10/15/2021 to allow running in NetLogoWeb

;to export-residence-times
;  let file user-new-file
;  if ( file != false )
;  [
;    if ( file-exists? file )
;    [ file-delete file ]
;    file-open file
;  ]
;  let res-time-list [ residence-time ] of particles with [ not in-bank? ]
;  foreach res-time-list
;  [ ?1 ->
;    file-type ?1
;    file-type "\r\n"
;  ]
;  file-close
;
;end

There are 3 versions of this model.

Uploaded by When Description Download
Forrest Stonedahl about 3 years ago Updated to run in NetLogo 6, and fixed advancing to next time step Download this version
Forrest Stonedahl over 9 years ago Minor improvements / fixes / tweaks Download this version
Susa Stonedahl almost 10 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Hyporheic Exchange Model: Mouse drop.png preview Preview for 'Hyporheic Exchange Model: Mouse drop' almost 10 years ago, by Susa Stonedahl Download

This model does not have any ancestors.

This model does not have any descendants.