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