![Page 1: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/1.jpg)
1
Introducing DEVS for CollaborativeBuilding Simulation Development
Rhys Goldstein and Azam Khan
Autodesk Research
![Page 2: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/2.jpg)
2
Introducing DEVS for CollaborativeBuilding Simulation Development
Rhys Goldstein and Azam Khan
Autodesk Research
![Page 3: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/3.jpg)
3
Simulation Use
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 4: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/4.jpg)
Simulation Use
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 5: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/5.jpg)
5
Simulation Use
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 6: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/6.jpg)
6
Simulation Use
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 7: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/7.jpg)
7
Simulation Use
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 8: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/8.jpg)
8
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 9: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/9.jpg)
9
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 10: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/10.jpg)
10
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 11: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/11.jpg)
11
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 12: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/12.jpg)
12
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 13: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/13.jpg)
13
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
Outdoor Climate Simulation
![Page 14: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/14.jpg)
14
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
Outdoor Climate Simulation
MODEL PARAMETERS
![Page 15: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/15.jpg)
15
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
Outdoor Climate Simulation
INITIALSTATE
![Page 16: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/16.jpg)
16
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
Outdoor Climate Simulation
SIMULATION LOOP
![Page 17: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/17.jpg)
17
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
Outdoor Climate Simulation
STATETRANSITION
![Page 18: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/18.jpg)
18
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
Outdoor Climate Simulation
SIMULATIONOUTPUT
![Page 19: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/19.jpg)
19
Outdoor Climate Simulation
![Page 20: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/20.jpg)
20
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
Outdoor Climate Simulation → Indoor Climate Simulation
![Page 21: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/21.jpg)
21
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() wall_rate = 0.1 time = start_time outdoor_temperature = weather_data[int(start_time)] indoor_temperature = weather_data[int(start_time)] lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 while time < end_time: outdoor_transition_time = int(time) + 1
rate = wall_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_time = infty else: indoor_transition_time = time + (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) if indoor_transition_time < outdoor_transition_time: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 time = indoor_transition_time else: dt = outdoor_transition_time - time indoor_temperature = target_temperature - dT*exp(-rate*dt) time = outdoor_transition_time outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature]) output(time, ["indoor_temperature", indoor_temperature])
Outdoor Climate Simulation → Indoor Climate Simulation
![Page 22: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/22.jpg)
22
Outdoor Climate Simulation → Indoor Climate Simulation
![Page 23: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/23.jpg)
23
Outdoor Climate Simulation → Indoor Climate Simulation
![Page 24: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/24.jpg)
24
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() wall_rate = 0.1 time = start_time outdoor_temperature = weather_data[int(start_time)] indoor_temperature = weather_data[int(start_time)] lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 while time < end_time: outdoor_transition_time = int(time) + 1
rate = wall_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_time = infty else: indoor_transition_time = time + (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) if indoor_transition_time < outdoor_transition_time: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 time = indoor_transition_time else: dt = outdoor_transition_time - time indoor_temperature = target_temperature - dT*exp(-rate*dt) time = outdoor_transition_time outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature]) output(time, ["indoor_temperature", indoor_temperature])
Indoor Climate Simulation → Heating System Simulation
![Page 25: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/25.jpg)
25
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() wall_rate = 0.1 heater_rate = 0.4 heater_temperature = 100 lower_sensor_threshold = 70 upper_sensor_threshold = 75 time = start_time outdoor_temperature = weather_data[int(start_time)] indoor_temperature = weather_data[int(start_time)] lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 heater_is_on = False while time < end_time: outdoor_transition_time = int(time) + 1 if heater_is_on: rate = wall_rate + heater_rate target_temperature = (wall_rate*outdoor_temperature + heater_rate*heater_temperature)/float(rate) else: rate = wall_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_time = infty else: indoor_transition_time = time + (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) if indoor_transition_time < outdoor_transition_time: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 if indoor_temperature <= lower_sensor_threshold: heater_is_on = True elif indoor_temperature >= upper_sensor_threshold: heater_is_on = False time = indoor_transition_time else: dt = outdoor_transition_time - time indoor_temperature = target_temperature - dT*exp(-rate*dt) time = outdoor_transition_time outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature]) output(time, ["indoor_temperature", indoor_temperature])
Indoor Climate Simulation → Heating System Simulation
![Page 26: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/26.jpg)
26
Indoor Climate Simulation → Heating System Simulation
![Page 27: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/27.jpg)
27
Indoor Climate Simulation → Heating System Simulation
![Page 28: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/28.jpg)
28
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() wall_rate = 0.1 heater_rate = 0.4 heater_temperature = 100 lower_sensor_threshold = 70 upper_sensor_threshold = 75 time = start_time outdoor_temperature = weather_data[int(start_time)] indoor_temperature = weather_data[int(start_time)] lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 heater_is_on = False while time < end_time: outdoor_transition_time = int(time) + 1 if heater_is_on: rate = wall_rate + heater_rate target_temperature = (wall_rate*outdoor_temperature + heater_rate*heater_temperature)/float(rate) else: rate = wall_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_time = infty else: indoor_transition_time = time + (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) if indoor_transition_time < outdoor_transition_time: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 if indoor_temperature <= lower_sensor_threshold: heater_is_on = True elif indoor_temperature >= upper_sensor_threshold: heater_is_on = False time = indoor_transition_time else: dt = outdoor_transition_time - time indoor_temperature = target_temperature - dT*exp(-rate*dt) time = outdoor_transition_time outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature]) output(time, ["indoor_temperature", indoor_temperature])
Heating System Simulation → Window Opening Simulation
![Page 29: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/29.jpg)
29
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() wall_rate = 0.1 heater_rate = 0.4 heater_temperature = 100 lower_sensor_threshold = 70 upper_sensor_threshold = 75 lower_occupant_threshold = 72 upper_occupant_threshold = 76 window_rate = 0.4 time = start_time outdoor_temperature = weather_data[int(start_time)] indoor_temperature = weather_data[int(start_time)] lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 heater_is_on = False window_is_open = False observed_temperature = weather_data[int(start_time)] while time < end_time: outdoor_transition_time = int(time) + 1
if window_is_open: envelope_rate = wall_rate + window_rate else: envelope_rate = wall_rate if heater_is_on: rate = envelope_rate + heater_rate target_temperature = (envelope_rate*outdoor_temperature + heater_rate*heater_temperature)/float(rate) else: rate = envelope_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_time = infty else: indoor_transition_time = time + (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) if indoor_transition_time < outdoor_transition_time: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature observed_temperature = indoor_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 if indoor_temperature <= lower_sensor_threshold: heater_is_on = True elif indoor_temperature >= upper_sensor_threshold: heater_is_on = False time = indoor_transition_time else: dt = outdoor_transition_time - time indoor_temperature = target_temperature - dT*exp(-rate*dt) time = outdoor_transition_time outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature]) output(time, ["indoor_temperature", indoor_temperature])
if observed_temperature >= max([outdoor_temperature, upper_occupant_threshold]): window_is_open = True if observed_temperature <= max([outdoor_temperature, lower_occupant_threshold]): window_is_open = False
Heating System Simulation → Window Opening Simulation
![Page 30: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/30.jpg)
30
Heating System Simulation → Window Opening Simulation
![Page 31: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/31.jpg)
31
Heating System Simulation → Window Opening Simulation
![Page 32: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/32.jpg)
32
Traditional Simulation Code start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() wall_rate = 0.1 heater_rate = 0.4 heater_temperature = 100 lower_sensor_threshold = 70 upper_sensor_threshold = 75 lower_occupant_threshold = 72 upper_occupant_threshold = 76 window_rate = 0.4 time = start_time outdoor_temperature = weather_data[int(start_time)] indoor_temperature = weather_data[int(start_time)] lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 heater_is_on = False window_is_open = False observed_temperature = weather_data[int(start_time)] while time < end_time: outdoor_transition_time = int(time) + 1
if window_is_open: envelope_rate = wall_rate + window_rate else: envelope_rate = wall_rate if heater_is_on: rate = envelope_rate + heater_rate target_temperature = (envelope_rate*outdoor_temperature + heater_rate*heater_temperature)/float(rate) else: rate = envelope_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_time = infty else: indoor_transition_time = time + (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) if indoor_transition_time < outdoor_transition_time: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature observed_temperature = indoor_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 if indoor_temperature <= lower_sensor_threshold: heater_is_on = True elif indoor_temperature >= upper_sensor_threshold: heater_is_on = False time = indoor_transition_time else: dt = outdoor_transition_time - time indoor_temperature = target_temperature - dT*exp(-rate*dt) time = outdoor_transition_time outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature]) output(time, ["indoor_temperature", indoor_temperature])
if observed_temperature >= max([outdoor_temperature, upper_occupant_threshold]): window_is_open = True if observed_temperature <= max([outdoor_temperature, lower_occupant_threshold]): window_is_open = False
![Page 33: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/33.jpg)
33
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 34: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/34.jpg)
34
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 35: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/35.jpg)
35
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 36: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/36.jpg)
36
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 37: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/37.jpg)
37
Traditional Simulation Development
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
MODEL PARAMETERS
SIMULATIONSOFTWARE
SIMULATIONRESULTS
![Page 38: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/38.jpg)
38
DEVS Model Development
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
![Page 39: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/39.jpg)
39
DEVS Model Development
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
![Page 40: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/40.jpg)
40
DEVS Model Development
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
![Page 41: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/41.jpg)
41
DEVS Model Development
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
![Page 42: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/42.jpg)
42
DEVS Model Development
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
MODEL PARAMETERS MODEL
SIMULATIONRESULTSSIMULATOR
![Page 43: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/43.jpg)
Outdoor Climate Model
OUTDOOR CLIMATE
outdoortemperature
![Page 44: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/44.jpg)
44
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
Outdoor Climate Model
OUTDOOR CLIMATE
outdoortemperature
![Page 45: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/45.jpg)
45
Outdoor Climate Model
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
Traditional Simulation Code: DEVS Model Code:
![Page 46: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/46.jpg)
46
Outdoor Climate Model
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
Traditional Simulation Code: DEVS Model Code:
![Page 47: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/47.jpg)
47
Outdoor Climate Model
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
DEVS Model Code: Traditional Simulation Code:
![Page 48: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/48.jpg)
48
Outdoor Climate Model
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
Traditional Simulation Code: DEVS Model Code:
![Page 49: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/49.jpg)
49
Outdoor Climate Model
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
Traditional Simulation Code: DEVS Model Code:
![Page 50: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/50.jpg)
50
Outdoor Climate Model
start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() time = start_time outdoor_temperature = weather_data[int(start_time)] while time < end_time: time = time + 1 outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature])
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
Traditional Simulation Code: DEVS Model Code:
![Page 51: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/51.jpg)
51
DEVS Simulation Output
![Page 52: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/52.jpg)
52
Outdoor Climate Model → Indoor Climate Model
OUTDOOR CLIMATE
outdoortemperature
![Page 53: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/53.jpg)
53
Outdoor Climate Model → Indoor Climate Model
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer INDOOR
CLIMATE
indoortemperature
![Page 54: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/54.jpg)
Outdoor Climate Model → Indoor Climate Model
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
54
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer INDOOR
CLIMATE
indoortemperature
![Page 55: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/55.jpg)
55
Outdoor Climate Model → Indoor Climate Model
def BUILDING_ENVELOPE(wall_rate):
def initialize(initial_temperature): state_has_changed = False outdoor_temperature = initial_temperature state = [state_has_changed, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): state_has_changed = True [port, outdoor_temperature] = input_value state = [state_has_changed, outdoor_temperature] return state def internal_transition(state): [state_has_changed, outdoor_temperature] = state state_has_changed = False state = [state_has_changed, outdoor_temperature] output_values = [["outdoor_heat_transfer", [outdoor_temperature, wall_rate]]] return [state, output_values]
def time_advance(state): [state_has_changed, outdoor_temperature] = state if state_has_changed: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer INDOOR
CLIMATE
indoortemperature
![Page 56: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/56.jpg)
56
Outdoor Climate Model → Indoor Climate Model
def INDOOR_CLIMATE():
def initialize(initial_temperature, initial_rate): indoor_temperature = initial_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 outdoor_temperature = initial_temperature envelope_rate = initial_rate rate = initial_rate target_temperature = initial_temperature dT = 0 indoor_transition_remaining_time = infty outdoor_has_changed = False state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return state
def external_transition(state, elapsed_time, input_value): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state dt = elapsed_time indoor_temperature = target_temperature - dT*exp(-rate*dt) [port, message] = input_value if port == "outdoor_heat_transfer": [new_outdoor_temperature, new_envelope_rate] = message if new_envelope_rate == envelope_rate or not (new_outdoor_temperature == outdoor_temperature): outdoor_has_changed = True outdoor_temperature = new_outdoor_temperature envelope_rate = new_envelope_rate rate = envelope_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature
if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_remaining_time = infty else: indoor_transition_remaining_time = (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT)))
state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return state def internal_transition(state): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state
if outdoor_has_changed: outdoor_has_changed = False output_values = [["indoor_temperature", indoor_temperature]] else: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 dT = target_temperature - indoor_temperature
if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_remaining_time = infty else: indoor_transition_remaining_time = (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) output_values = [["indoor_temperature_transition", indoor_temperature]] state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return [state, output_values]
def time_advance(state): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state if outdoor_has_changed: remaining_time = 0 else: remaining_time = indoor_transition_remaining_time return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer INDOOR
CLIMATE
indoortemperature
![Page 57: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/57.jpg)
57
DEVS Simulation Output
![Page 58: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/58.jpg)
58
DEVS Simulation Output
![Page 59: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/59.jpg)
59
Indoor Climate Model → Heating System Model
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer INDOOR
CLIMATE
indoortemperature
![Page 60: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/60.jpg)
60
Indoor Climate Model → Heating System Model
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATER
heaterchange
heaterheat transfer
![Page 61: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/61.jpg)
61
Indoor Climate Model → Heating System Model
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATER
heaterchange
heaterheat transfer
def SENSOR(lower_sensor_threshold, upper_sensor_threshold):
def initialize(): heater_should_change = False heater_should_be_on = False state = [heater_should_change, heater_should_be_on] return state
def external_transition(state, elapsed_time, input_value): [heater_should_change, heater_should_be_on] = state [port, indoor_temperature] = input_value if (not heater_should_be_on) and indoor_temperature <= lower_sensor_threshold: heater_should_change = True heater_should_be_on = True elif heater_should_be_on and indoor_temperature >= upper_sensor_threshold: heater_should_change = True heater_should_be_on = False state = [heater_should_change, heater_should_be_on] return state def internal_transition(state): [heater_should_change, heater_should_be_on] = state heater_should_change = False state = [heater_should_change, heater_should_be_on] output_values = [["heater_change", heater_should_be_on]] return [state, output_values]
def time_advance(state): [heater_should_change, heater_should_be_on] = state if heater_should_change: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 62: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/62.jpg)
62
Indoor Climate Model → Heating System Model
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATER
heaterchange
heaterheat transfer
def HEATER(heater_temperature, heater_rate):
def initialize(): heater_has_changed = False heater_is_on = False state = [heater_has_changed, heater_is_on] return state
def external_transition(state, elapsed_time, input_value): [heater_has_changed, heater_is_on] = state heater_has_changed = True [port, heater_is_on] = input_value state = [heater_has_changed, heater_is_on] return state def internal_transition(state): [heater_has_changed, heater_is_on] = state heater_has_changed = False state = [heater_has_changed, heater_is_on] if heater_is_on: rate = heater_rate else: rate = 0 output_values = [["heater_heat_transfer", [heater_temperature, rate]]] return [state, output_values]
def time_advance(state): [heater_has_changed, heater_is_on] = state if heater_has_changed: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 63: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/63.jpg)
63
Indoor Climate Model → Heating System Model
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
SENSOR HEATER
heaterchange
heaterheat transfer
def INDOOR_CLIMATE_WITH_HEATER():
def initialize(initial_temperature, initial_rate): indoor_temperature = initial_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 outdoor_temperature = initial_temperature envelope_rate = initial_rate heater_temperature = initial_temperature heater_rate = 0 rate = initial_rate target_temperature = initial_temperature dT = 0 indoor_transition_remaining_time = infty outdoor_has_changed = False state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return state
def external_transition(state, elapsed_time, input_value): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state dt = elapsed_time indoor_temperature = target_temperature - dT*exp(-rate*dt) [port, message] = input_value if port == "outdoor_heat_transfer": [new_outdoor_temperature, new_envelope_rate] = message if new_envelope_rate == envelope_rate or not (new_outdoor_temperature == outdoor_temperature): outdoor_has_changed = True outdoor_temperature = new_outdoor_temperature envelope_rate = new_envelope_rate elif port == "heater_heat_transfer": [heater_temperature, heater_rate] = message rate = envelope_rate + heater_rate target_temperature = (envelope_rate*outdoor_temperature + heater_rate*heater_temperature)/float(rate) dT = target_temperature - indoor_temperature
if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_remaining_time = infty else: indoor_transition_remaining_time = (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT)))
state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return state def internal_transition(state): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state
if outdoor_has_changed: outdoor_has_changed = False output_values = [["indoor_temperature", indoor_temperature]] else: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 dT = target_temperature - indoor_temperature
if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_remaining_time = infty else: indoor_transition_remaining_time = (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) output_values = [["indoor_temperature_transition", indoor_temperature]] state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return [state, output_values]
def time_advance(state): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state if outdoor_has_changed: remaining_time = 0 else: remaining_time = indoor_transition_remaining_time return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 64: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/64.jpg)
64
DEVS Simulation Output
![Page 65: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/65.jpg)
65
DEVS Simulation Output
![Page 66: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/66.jpg)
66
Heating System Model → Window Opening Model
OUTDOOR CLIMATE
outdoortemperature BUILDING
ENVELOPE
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATERheaterchange
heaterheat transfer
![Page 67: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/67.jpg)
67
Heating System Model → Window Opening Model
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
![Page 68: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/68.jpg)
68
def OCCUPANT(lower_sensor_threshold, upper_sensor_threshold):
def initialize(initial_temperature): window_should_change = False window_should_be_open = False outdoor_temperature = initial_temperature indoor_temperature = initial_temperature state = [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] return state
def external_transition(state, elapsed_time, input_value): [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] = state [port, input_temperature] = input_value if port == "outdoor_temperature": outdoor_temperature = input_temperature elif port == "indoor_temperature_transition": indoor_temperature = input_temperature if (not window_should_be_open) and indoor_temperature >= max([outdoor_temperature, upper_sensor_threshold]): window_should_change = True window_should_be_open = True elif window_should_be_open and indoor_temperature <= max([outdoor_temperature, lower_sensor_threshold]): window_should_change = True window_should_be_open = False state = [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] return state def internal_transition(state): [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] = state window_should_change = False state = [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] output_values = [["window_change", window_should_be_open]] return [state, output_values]
def time_advance(state): [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] = state if window_should_change: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
Heating System Model → Window Opening Model
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
![Page 69: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/69.jpg)
69
indoortemperature
Heating System Model → Window Opening Model
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
def BUILDING_ENVELOPE_WITH_WINDOW(wall_rate, window_rate):
def initialize(initial_temperature): state_has_changed = False outdoor_temperature = initial_temperature window_is_open = False state = [state_has_changed, outdoor_temperature, window_is_open] return state
def external_transition(state, elapsed_time, input_value): [state_has_changed, outdoor_temperature, window_is_open] = state [port, message] = input_value state_has_changed = True if port == "outdoor_temperature": outdoor_temperature = message elif port == "window_change": window_is_open = message state = [state_has_changed, outdoor_temperature, window_is_open] return state def internal_transition(state): [state_has_changed, outdoor_temperature, window_is_open] = state state_has_changed = False state = [state_has_changed, outdoor_temperature, window_is_open] if window_is_open: envelope_rate = wall_rate + window_rate else: envelope_rate = wall_rate output_values = [["outdoor_heat_transfer", [outdoor_temperature, envelope_rate]]] return [state, output_values]
def time_advance(state): [state_has_changed, outdoor_temperature, window_is_open] = state if state_has_changed: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 70: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/70.jpg)
70
DEVS Simulation Output
![Page 71: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/71.jpg)
71
DEVS Simulation Output
![Page 72: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/72.jpg)
72
Traditional Simulation Code start_time = 4014 end_time = 4306 weather_data = read_weather_from_file() wall_rate = 0.1 heater_rate = 0.4 heater_temperature = 100 lower_sensor_threshold = 70 upper_sensor_threshold = 75 lower_occupant_threshold = 72 upper_occupant_threshold = 76 window_rate = 0.4 time = start_time outdoor_temperature = weather_data[int(start_time)] indoor_temperature = weather_data[int(start_time)] lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 heater_is_on = False window_is_open = False observed_temperature = weather_data[int(start_time)] while time < end_time: outdoor_transition_time = int(time) + 1
if window_is_open: envelope_rate = wall_rate + window_rate else: envelope_rate = wall_rate if heater_is_on: rate = envelope_rate + heater_rate target_temperature = (envelope_rate*outdoor_temperature + heater_rate*heater_temperature)/float(rate) else: rate = envelope_rate target_temperature = outdoor_temperature dT = target_temperature - indoor_temperature if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_time = infty else: indoor_transition_time = time + (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) if indoor_transition_time < outdoor_transition_time: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature observed_temperature = indoor_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 if indoor_temperature <= lower_sensor_threshold: heater_is_on = True elif indoor_temperature >= upper_sensor_threshold: heater_is_on = False time = indoor_transition_time else: dt = outdoor_transition_time - time indoor_temperature = target_temperature - dT*exp(-rate*dt) time = outdoor_transition_time outdoor_temperature = weather_data[int(time)] output(time, ["outdoor_temperature", outdoor_temperature]) output(time, ["indoor_temperature", indoor_temperature])
if observed_temperature >= max([outdoor_temperature, upper_occupant_threshold]): window_is_open = True if observed_temperature <= max([outdoor_temperature, lower_occupant_threshold]): window_is_open = False
![Page 73: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/73.jpg)
73
DEVS Model Code
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
![Page 74: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/74.jpg)
74
indoortemperature
OCCUPANT
windowchange
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
SENSOR HEATERheaterchange
heaterheat transfer
DEVS Model Code
def OUTDOOR_CLIMATE(start_time, end_time, weather_data):
def initialize(): time = start_time outdoor_temperature = weather_data[int(start_time)] state = [time, outdoor_temperature] return state
def external_transition(state, elapsed_time, input_value): pass
def internal_transition(state): [time, outdoor_temperature] = state time = time + 1 outdoor_temperature = weather_data[int(time)] state = [time, outdoor_temperature] output_values = [["outdoor_temperature", outdoor_temperature]] return [state, output_values]
def time_advance(state): [time, outdoor_temperature] = state if time < end_time: remaining_time = 1 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
OUTDOOR CLIMATE
![Page 75: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/75.jpg)
75
indoortemperature
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
DEVS Model Code
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
def BUILDING_ENVELOPE_WITH_WINDOW(wall_rate, window_rate):
def initialize(initial_temperature): state_has_changed = False outdoor_temperature = initial_temperature window_is_open = False state = [state_has_changed, outdoor_temperature, window_is_open] return state
def external_transition(state, elapsed_time, input_value): [state_has_changed, outdoor_temperature, window_is_open] = state [port, message] = input_value state_has_changed = True if port == "outdoor_temperature": outdoor_temperature = message elif port == "window_change": window_is_open = message state = [state_has_changed, outdoor_temperature, window_is_open] return state def internal_transition(state): [state_has_changed, outdoor_temperature, window_is_open] = state state_has_changed = False state = [state_has_changed, outdoor_temperature, window_is_open] if window_is_open: envelope_rate = wall_rate + window_rate else: envelope_rate = wall_rate output_values = [["outdoor_heat_transfer", [outdoor_temperature, envelope_rate]]] return [state, output_values]
def time_advance(state): [state_has_changed, outdoor_temperature, window_is_open] = state if state_has_changed: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 76: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/76.jpg)
76
indoortemperature
SENSOR
heaterchange
DEVS Model Code
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
INDOORCLIMATE
WITHHEATER
def INDOOR_CLIMATE_WITH_HEATER():
def initialize(initial_temperature, initial_rate): indoor_temperature = initial_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 outdoor_temperature = initial_temperature envelope_rate = initial_rate heater_temperature = initial_temperature heater_rate = 0 rate = initial_rate target_temperature = initial_temperature dT = 0 indoor_transition_remaining_time = infty outdoor_has_changed = False state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return state
def external_transition(state, elapsed_time, input_value): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state dt = elapsed_time indoor_temperature = target_temperature - dT*exp(-rate*dt) [port, message] = input_value if port == "outdoor_heat_transfer": [new_outdoor_temperature, new_envelope_rate] = message if new_envelope_rate == envelope_rate or not (new_outdoor_temperature == outdoor_temperature): outdoor_has_changed = True outdoor_temperature = new_outdoor_temperature envelope_rate = new_envelope_rate elif port == "heater_heat_transfer": [heater_temperature, heater_rate] = message rate = envelope_rate + heater_rate target_temperature = (envelope_rate*outdoor_temperature + heater_rate*heater_temperature)/float(rate) dT = target_temperature - indoor_temperature
if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_remaining_time = infty else: indoor_transition_remaining_time = (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT)))
state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return state def internal_transition(state): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state
if outdoor_has_changed: outdoor_has_changed = False output_values = [["indoor_temperature", indoor_temperature]] else: if dT < 0: indoor_temperature = lower_transition_temperature else: indoor_temperature = upper_transition_temperature lower_transition_temperature = indoor_temperature - 1.0 upper_transition_temperature = indoor_temperature + 1.0 dT = target_temperature - indoor_temperature
if dT < 0: transition_dT = lower_transition_temperature - indoor_temperature else: transition_dT = upper_transition_temperature - indoor_temperature if abs(dT) <= abs(transition_dT): indoor_transition_remaining_time = infty else: indoor_transition_remaining_time = (1.0/rate)*log(abs(dT)/(abs(dT) - abs(transition_dT))) output_values = [["indoor_temperature_transition", indoor_temperature]] state = [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] return [state, output_values]
def time_advance(state): [indoor_temperature, lower_transition_temperature, upper_transition_temperature, outdoor_temperature, envelope_rate, heater_temperature, heater_rate, rate, target_temperature, dT, indoor_transition_remaining_time, outdoor_has_changed] = state if outdoor_has_changed: remaining_time = 0 else: remaining_time = indoor_transition_remaining_time return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 77: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/77.jpg)
77
DEVS Model Code
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
def OCCUPANT(lower_sensor_threshold, upper_sensor_threshold):
def initialize(initial_temperature): window_should_change = False window_should_be_open = False outdoor_temperature = initial_temperature indoor_temperature = initial_temperature state = [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] return state
def external_transition(state, elapsed_time, input_value): [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] = state [port, input_temperature] = input_value if port == "outdoor_temperature": outdoor_temperature = input_temperature elif port == "indoor_temperature_transition": indoor_temperature = input_temperature if (not window_should_be_open) and indoor_temperature >= max([outdoor_temperature, upper_sensor_threshold]): window_should_change = True window_should_be_open = True elif window_should_be_open and indoor_temperature <= max([outdoor_temperature, lower_sensor_threshold]): window_should_change = True window_should_be_open = False state = [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] return state def internal_transition(state): [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] = state window_should_change = False state = [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] output_values = [["window_change", window_should_be_open]] return [state, output_values]
def time_advance(state): [window_should_change, window_should_be_open, outdoor_temperature, indoor_temperature] = state if window_should_change: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 78: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/78.jpg)
78
heaterchange
DEVS Model Code
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATER
heaterheat transfer
OCCUPANT
windowchange
def SENSOR(lower_sensor_threshold, upper_sensor_threshold):
def initialize(): heater_should_change = False heater_should_be_on = False state = [heater_should_change, heater_should_be_on] return state
def external_transition(state, elapsed_time, input_value): [heater_should_change, heater_should_be_on] = state [port, indoor_temperature] = input_value if (not heater_should_be_on) and indoor_temperature <= lower_sensor_threshold: heater_should_change = True heater_should_be_on = True elif heater_should_be_on and indoor_temperature >= upper_sensor_threshold: heater_should_change = True heater_should_be_on = False state = [heater_should_change, heater_should_be_on] return state def internal_transition(state): [heater_should_change, heater_should_be_on] = state heater_should_change = False state = [heater_should_change, heater_should_be_on] output_values = [["heater_change", heater_should_be_on]] return [state, output_values]
def time_advance(state): [heater_should_change, heater_should_be_on] = state if heater_should_change: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 79: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/79.jpg)
79
DEVS Model Code
OUTDOOR CLIMATE
outdoortemperature
BUILDINGENVELOPE
WITHWINDOW
outdoorheat transfer
INDOORCLIMATE
WITHHEATER
indoortemperature
SENSOR HEATERheaterchange
heaterheat transfer
OCCUPANT
windowchange
def HEATER(heater_temperature, heater_rate):
def initialize(): heater_has_changed = False heater_is_on = False state = [heater_has_changed, heater_is_on] return state
def external_transition(state, elapsed_time, input_value): [heater_has_changed, heater_is_on] = state heater_has_changed = True [port, heater_is_on] = input_value state = [heater_has_changed, heater_is_on] return state def internal_transition(state): [heater_has_changed, heater_is_on] = state heater_has_changed = False state = [heater_has_changed, heater_is_on] if heater_is_on: rate = heater_rate else: rate = 0 output_values = [["heater_heat_transfer", [heater_temperature, rate]]] return [state, output_values]
def time_advance(state): [heater_has_changed, heater_is_on] = state if heater_has_changed: remaining_time = 0 else: remaining_time = infty return remaining_time
DEVS_model = [external_transition, internal_transition, time_advance]
return [initialize, DEVS_model]
![Page 80: 1 Introducing DEVS for Collaborative Building Simulation Development Rhys Goldstein and Azam Khan Autodesk Research](https://reader031.vdocument.in/reader031/viewer/2022013004/5697bfa21a28abf838c96484/html5/thumbnails/80.jpg)
80
Introducing DEVS for CollaborativeBuilding Simulation Development
Rhys Goldstein and Azam Khan
Autodesk Research