UserPreferences

MonoLakeExampleCode


  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 
 84 
 85 
 86 
 87 
 88 
 89 
 90 
 91 
 92 
 93 
 94 
 95 
 96 
 97 
 98 
 99 
100 
101 
102 
103 
104 
105 
106 

from Tkinter import *

MAXVOL = 8000.0
INIT_VOLUME = 6500.0
MAXTIME = 70
RUNOFF = 150.0
EXPORT = 100.0
PRECIP = 0.667
OTHER_IN = 47.4
OTHER_OUT = 33.6
EVAP_RATE = 3.75

# --------------------------------------------
# GRAPHICS STUFF
win = Tk()
can = Canvas(win, width = 600, height = 400, background = "white")
yax = can.create_line(20,20,20,380, width=2,fill='black')
xax = can.create_line(20,380,580,380, width=2,fill='black')
for i in range(0,MAXVOL,500):
        can.create_text(20,380-((float(i)/MAXVOL)*380),text=str(i))
for i in range(0,MAXTIME,50):
        can.create_text(20+(float(i)/float(MAXTIME))*580, 390,text=str(i))


can.pack()

def graph_volume(t, v):
        x = ((float(t) / float(MAXTIME)) * 580) + 20
        y = 380 - ((float(v) / MAXVOL)*380 + 20)
        can.create_rectangle(x-1,y-1,x+2,y+2,width=0,fill='blue')
        can.pack()

# GRAPHICS STUFF
# --------------------------------------------

def runoff():
        return RUNOFF

def export(t,sw,newex):
        if t < sw:
                return EXPORT
        else:
                return newex

def  linear_interpolate(lowx,lowy,highx,highy,thex):
        m = (highy-lowy)/(highx-lowx)
        y = m*(thex - highx) + highy
        return y


def precip():
        return PRECIP


def other_in():
        return OTHER_IN

def other_out():
        return OTHER_OUT

def surface_area(vol):
        #Kacres
        if vol == 0:
                ans = 0.0
        elif vol <= 1000.0:
                ans = linear_interpolate(0.0,0.0,1000.0,24.7,vol)
        elif vol <= 2000.0:
                ans = linear_interpolate(0.0,0.0,1000.0,35.3,vol)
        elif vol <= 3000.0:
                ans = linear_interpolate(0.0,0.0,1000.0,48.6,vol)
        elif vol <= 4000.0:
                ans = linear_interpolate(0.0,0.0,1000.0,54.3,vol)
        elif vol <= 5000.0:
                ans = linear_interpolate(0.0,0.0,1000.0,57.2,vol)
        elif vol <= 6000.0:
                ans = linear_interpolate(0.0,0.0,1000.0,61.6,vol)
        elif vol <= 7000.0:
                ans = linear_interpolate(0.0,0.0,1000.0,66.0,vol)
        else:
                ans = linear_interpolate(0.0,0.0,1000.0,69.8,vol)
        return ans



def evap(vol):
        return surface_area(vol) * EVAP_RATE

switchtime = input("Enter switch time.  ")
newexport = input("Enter new export rate.  ")

lake_volume = INIT_VOLUME
for t in range(0,MAXTIME):

        new_vol = lake_volume
        new_vol += runoff()
        new_vol -= export(t,switchtime,newexport)
        new_vol += precip()
        new_vol += other_in()
        new_vol -= other_out()
        new_vol -= evap(lake_volume)

        lake_volume = new_vol
        graph_volume(t, lake_volume)

win.mainloop()