-
Notifications
You must be signed in to change notification settings - Fork 9
/
photosynthesis.py
49 lines (40 loc) · 1.47 KB
/
photosynthesis.py
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
from yggdrasil.interface import YggInput, YggOutput
def calc_photosynthesis_rate(T, CO2, light):
r"""Calculate the rate of photosynthesis from environment properties.
Args:
T (float): Temperature.
CO2 (float): CO2 concentration.
light (float): Light intensity.
Returns:
float: Photosynthesis rate.
"""
return light * CO2 / T
if __name__ == '__main__':
in_temp = YggInput('temperature')
in_co2 = YggInput('co2')
in_light = YggInput('light_intensity')
out_photo = YggOutput('photosynthesis_rate', '%lf\n')
# Receive temperature & CO2 concentration of environment
flag, msg = in_temp.recv()
if not flag:
raise RuntimeError("photosynthesis: Failed to receive temperature.")
T = msg[0]
print("photosynthesis: T = %f" % T)
flag, msg = in_co2.recv()
if not flag:
raise RuntimeError("photosynthesis: Failed to receive CO2 concentration.")
CO2 = msg[0]
print("photosynthesis: CO2 = %f" % CO2)
# Loop over light intensities
while True:
flag, msg = in_light.recv()
if not flag:
print("photosynthesis: No more input.")
break
LI = msg[0]
PR = calc_photosynthesis_rate(T, CO2, LI)
print("photosynthesis: light intensity = %f " % LI
+ "--> photosynthesis rate = %f" % PR)
flag = out_photo.send(PR)
if not flag:
raise RuntimeError("photosynthesis: Failed to send output.")