honeybee-openstudio 0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yaml +88 -0
  3. data/.gitignore +33 -0
  4. data/.releaserc.json +7 -0
  5. data/Gemfile +14 -0
  6. data/LICENSE.md +23 -0
  7. data/README.md +95 -0
  8. data/Rakefile +16 -0
  9. data/doc_templates/LICENSE.md +23 -0
  10. data/doc_templates/README.md.erb +42 -0
  11. data/doc_templates/copyright_erb.txt +32 -0
  12. data/doc_templates/copyright_js.txt +5 -0
  13. data/doc_templates/copyright_ruby.txt +30 -0
  14. data/honeybee-openstudio.gemspec +38 -0
  15. data/lib/files/Honeybee.rb +113 -0
  16. data/lib/files/honeybee_workflow.osw +48 -0
  17. data/lib/files/urbanopt_Gemfile +32 -0
  18. data/lib/from_openstudio.rb +49 -0
  19. data/lib/from_openstudio/geometry/aperture.rb +136 -0
  20. data/lib/from_openstudio/geometry/door.rb +136 -0
  21. data/lib/from_openstudio/geometry/face.rb +174 -0
  22. data/lib/from_openstudio/geometry/room.rb +121 -0
  23. data/lib/from_openstudio/geometry/shade.rb +87 -0
  24. data/lib/from_openstudio/model.rb +123 -0
  25. data/lib/from_openstudio/model_object.rb +43 -0
  26. data/lib/from_openstudio/simulation/design_day.rb +123 -0
  27. data/lib/from_openstudio/simulation/parameter_model.rb +93 -0
  28. data/lib/from_openstudio/simulation/simulation_output.rb +67 -0
  29. data/lib/honeybee.rb +93 -0
  30. data/lib/honeybee/_defaults/energy_default.json +1682 -0
  31. data/lib/honeybee/_defaults/model.json +11311 -0
  32. data/lib/honeybee/_defaults/simulation-parameter.json +973 -0
  33. data/lib/honeybee/construction/air.rb +42 -0
  34. data/lib/honeybee/construction/opaque.rb +42 -0
  35. data/lib/honeybee/construction/shade.rb +42 -0
  36. data/lib/honeybee/construction/window.rb +51 -0
  37. data/lib/honeybee/construction/windowshade.rb +43 -0
  38. data/lib/honeybee/construction_set.rb +42 -0
  39. data/lib/honeybee/extension.rb +129 -0
  40. data/lib/honeybee/geometry/aperture.rb +42 -0
  41. data/lib/honeybee/geometry/door.rb +42 -0
  42. data/lib/honeybee/geometry/face.rb +48 -0
  43. data/lib/honeybee/geometry/room.rb +56 -0
  44. data/lib/honeybee/geometry/shade.rb +42 -0
  45. data/lib/honeybee/hvac/ideal_air.rb +42 -0
  46. data/lib/honeybee/hvac/template.rb +73 -0
  47. data/lib/honeybee/load/electric_equipment.rb +42 -0
  48. data/lib/honeybee/load/gas_equipment.rb +42 -0
  49. data/lib/honeybee/load/infiltration.rb +42 -0
  50. data/lib/honeybee/load/lighting.rb +43 -0
  51. data/lib/honeybee/load/people.rb +42 -0
  52. data/lib/honeybee/load/setpoint_humidistat.rb +46 -0
  53. data/lib/honeybee/load/setpoint_thermostat.rb +46 -0
  54. data/lib/honeybee/load/ventilation.rb +42 -0
  55. data/lib/honeybee/material/opaque.rb +42 -0
  56. data/lib/honeybee/material/opaque_no_mass.rb +42 -0
  57. data/lib/honeybee/material/window_blind.rb +42 -0
  58. data/lib/honeybee/material/window_gas.rb +42 -0
  59. data/lib/honeybee/material/window_gas_custom.rb +42 -0
  60. data/lib/honeybee/material/window_gas_mixture.rb +42 -0
  61. data/lib/honeybee/material/window_glazing.rb +42 -0
  62. data/lib/honeybee/material/window_shade.rb +42 -0
  63. data/lib/honeybee/material/window_simpleglazsys.rb +42 -0
  64. data/lib/honeybee/model.rb +87 -0
  65. data/lib/honeybee/model_object.rb +108 -0
  66. data/lib/honeybee/program_type.rb +56 -0
  67. data/lib/honeybee/schedule/fixed_interval.rb +42 -0
  68. data/lib/honeybee/schedule/ruleset.rb +42 -0
  69. data/lib/honeybee/schedule/type_limit.rb +42 -0
  70. data/lib/honeybee/simulation/design_day.rb +42 -0
  71. data/lib/honeybee/simulation/parameter_model.rb +86 -0
  72. data/lib/honeybee/simulation/simulation_output.rb +42 -0
  73. data/lib/honeybee/ventcool/control.rb +42 -0
  74. data/lib/honeybee/ventcool/opening.rb +46 -0
  75. data/lib/honeybee/ventcool/simulation.rb +42 -0
  76. data/lib/measures/.gitkeep +0 -0
  77. data/lib/measures/from_honeybee_model/LICENSE.md +23 -0
  78. data/lib/measures/from_honeybee_model/README.md +32 -0
  79. data/lib/measures/from_honeybee_model/measure.rb +91 -0
  80. data/lib/measures/from_honeybee_model/measure.xml +80 -0
  81. data/lib/measures/from_honeybee_model/tests/from_honeybee_model_test.rb +126 -0
  82. data/lib/measures/from_honeybee_simulation_parameter/LICENSE.md +23 -0
  83. data/lib/measures/from_honeybee_simulation_parameter/README.md +32 -0
  84. data/lib/measures/from_honeybee_simulation_parameter/measure.rb +95 -0
  85. data/lib/measures/from_honeybee_simulation_parameter/measure.xml +86 -0
  86. data/lib/measures/from_honeybee_simulation_parameter/tests/from_honeybee_simulation_parameter_test.rb +109 -0
  87. data/lib/to_openstudio.rb +92 -0
  88. data/lib/to_openstudio/construction/air.rb +56 -0
  89. data/lib/to_openstudio/construction/opaque.rb +67 -0
  90. data/lib/to_openstudio/construction/shade.rb +99 -0
  91. data/lib/to_openstudio/construction/window.rb +70 -0
  92. data/lib/to_openstudio/construction/windowshade.rb +196 -0
  93. data/lib/to_openstudio/construction_set.rb +266 -0
  94. data/lib/to_openstudio/geometry/aperture.rb +157 -0
  95. data/lib/to_openstudio/geometry/door.rb +150 -0
  96. data/lib/to_openstudio/geometry/face.rb +178 -0
  97. data/lib/to_openstudio/geometry/room.rb +442 -0
  98. data/lib/to_openstudio/geometry/shade.rb +79 -0
  99. data/lib/to_openstudio/hvac/Model.hvac.rb +641 -0
  100. data/lib/to_openstudio/hvac/ideal_air.rb +141 -0
  101. data/lib/to_openstudio/hvac/template.rb +169 -0
  102. data/lib/to_openstudio/load/electric_equipment.rb +87 -0
  103. data/lib/to_openstudio/load/gas_equipment.rb +88 -0
  104. data/lib/to_openstudio/load/infiltration.rb +86 -0
  105. data/lib/to_openstudio/load/lighting.rb +89 -0
  106. data/lib/to_openstudio/load/people.rb +91 -0
  107. data/lib/to_openstudio/load/setpoint_humidistat.rb +66 -0
  108. data/lib/to_openstudio/load/setpoint_thermostat.rb +62 -0
  109. data/lib/to_openstudio/load/ventilation.rb +87 -0
  110. data/lib/to_openstudio/material/opaque.rb +85 -0
  111. data/lib/to_openstudio/material/opaque_no_mass.rb +85 -0
  112. data/lib/to_openstudio/material/window_blind.rb +229 -0
  113. data/lib/to_openstudio/material/window_gas.rb +67 -0
  114. data/lib/to_openstudio/material/window_gas_custom.rb +108 -0
  115. data/lib/to_openstudio/material/window_gas_mixture.rb +70 -0
  116. data/lib/to_openstudio/material/window_glazing.rb +157 -0
  117. data/lib/to_openstudio/material/window_shade.rb +151 -0
  118. data/lib/to_openstudio/material/window_simpleglazsys.rb +64 -0
  119. data/lib/to_openstudio/model.rb +497 -0
  120. data/lib/to_openstudio/model_object.rb +52 -0
  121. data/lib/to_openstudio/program_type.rb +104 -0
  122. data/lib/to_openstudio/schedule/fixed_interval.rb +105 -0
  123. data/lib/to_openstudio/schedule/ruleset.rb +164 -0
  124. data/lib/to_openstudio/schedule/type_limit.rb +76 -0
  125. data/lib/to_openstudio/simulation/design_day.rb +96 -0
  126. data/lib/to_openstudio/simulation/parameter_model.rb +243 -0
  127. data/lib/to_openstudio/ventcool/control.rb +185 -0
  128. data/lib/to_openstudio/ventcool/opening.rb +189 -0
  129. data/lib/to_openstudio/ventcool/simulation.rb +101 -0
  130. metadata +301 -0
@@ -0,0 +1,79 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/geometry/shade'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class Shade
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getSurfaceByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create the openstudio shading surface
47
+ os_vertices = OpenStudio::Point3dVector.new
48
+ @hash[:geometry][:boundary].each do |vertex|
49
+ os_vertices << OpenStudio::Point3d.new(vertex[0], vertex[1], vertex[2])
50
+ end
51
+ reordered_vertices = OpenStudio.reorderULC(os_vertices)
52
+
53
+ os_shading_surface = OpenStudio::Model::ShadingSurface.new(reordered_vertices, openstudio_model)
54
+ os_shading_surface.setName(@hash[:identifier])
55
+
56
+ # assign the construction if it exists
57
+ if @hash[:properties][:energy][:construction]
58
+ construction_identifier = @hash[:properties][:energy][:construction]
59
+ construction = openstudio_model.getConstructionByName(construction_identifier)
60
+ unless construction.empty?
61
+ os_construction = construction.get
62
+ os_shading_surface.setConstruction(os_construction)
63
+ end
64
+ end
65
+
66
+ # assign the transmittance schedule if it exists
67
+ if @hash[:properties][:energy][:transmittance_schedule]
68
+ schedule_identifier = @hash[:properties][:energy][:transmittance_schedule]
69
+ schedule = openstudio_model.getScheduleByName(schedule_identifier)
70
+ unless schedule.empty?
71
+ os_schedule = schedule.get
72
+ os_shading_surface.setTransmittanceSchedule(os_schedule)
73
+ end
74
+ end
75
+
76
+ os_shading_surface
77
+ end
78
+ end #Shade
79
+ end #Honeybee
@@ -0,0 +1,641 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ # Note: This file is copied directly from the "Create Typical DOE Building from Model" measure
33
+ # https://bcl.nrel.gov/node/85019
34
+ # It is intended that this file be re-copied if new system types are added
35
+
36
+ class OpenStudio::Model::Model
37
+ # Adds the HVAC system as derived from the combinations of CBECS 2012 MAINHT and MAINCL fields.
38
+ # Mapping between combinations and HVAC systems per http://www.nrel.gov/docs/fy08osti/41956.pdf
39
+ # Table C-31
40
+ def add_cbecs_hvac_system(standard, system_type, zones)
41
+ # the 'zones' argument includes zones that have heating, cooling, or both
42
+ # if the HVAC system type serves a single zone, handle zones with only heating separately by adding unit heaters
43
+ # applies to system types PTAC, PTHP, PSZ-AC, and Window AC
44
+ heated_and_cooled_zones = zones.select { |zone| standard.thermal_zone_heated?(zone) && standard.thermal_zone_cooled?(zone) }
45
+ heated_zones = zones.select { |zone| standard.thermal_zone_heated?(zone) }
46
+ cooled_zones = zones.select { |zone| standard.thermal_zone_cooled?(zone) }
47
+ cooled_only_zones = zones.select { |zone| !standard.thermal_zone_heated?(zone) && standard.thermal_zone_cooled?(zone) }
48
+ heated_only_zones = zones.select { |zone| standard.thermal_zone_heated?(zone) && !standard.thermal_zone_cooled?(zone) }
49
+ system_zones = heated_and_cooled_zones + cooled_only_zones
50
+
51
+ # system type naming convention:
52
+ # [ventilation strategy] [ cooling system and plant] [heating system and plant]
53
+
54
+ case system_type
55
+
56
+ when 'Baseboard electric'
57
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
58
+
59
+ when 'Baseboard gas boiler'
60
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
61
+
62
+ when 'Baseboard central air source heat pump'
63
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_zones)
64
+
65
+ when 'Baseboard district hot water'
66
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
67
+
68
+ when 'Direct evap coolers with baseboard electric'
69
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
70
+ standard.model_add_hvac_system(self, 'Evaporative Cooler', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
71
+
72
+ when 'Direct evap coolers with baseboard gas boiler'
73
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
74
+ standard.model_add_hvac_system(self, 'Evaporative Cooler', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
75
+
76
+ when 'Direct evap coolers with baseboard central air source heat pump'
77
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_zones)
78
+ standard.model_add_hvac_system(self, 'Evaporative Cooler', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
79
+
80
+ when 'Direct evap coolers with baseboard district hot water'
81
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
82
+ standard.model_add_hvac_system(self, 'Evaporative Cooler', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
83
+
84
+ when 'Direct evap coolers with forced air furnace'
85
+ # Using unit heater to represent forced air furnace to limit to one airloop per thermal zone.
86
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
87
+ standard.model_add_hvac_system(self, 'Evaporative Cooler', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
88
+
89
+ when 'Direct evap coolers with gas unit heaters'
90
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
91
+ standard.model_add_hvac_system(self, 'Evaporative Cooler', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
92
+
93
+ when 'Direct evap coolers with no heat'
94
+ standard.model_add_hvac_system(self, 'Evaporative Cooler', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
95
+
96
+ when 'DOAS with fan coil chiller with boiler'
97
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
98
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
99
+ zone_equipment_ventilation: false)
100
+
101
+ when 'DOAS with fan coil chiller with central air source heat pump'
102
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones)
103
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones,
104
+ zone_equipment_ventilation: false)
105
+
106
+ when 'DOAS with fan coil chiller with district hot water'
107
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones)
108
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones,
109
+ zone_equipment_ventilation: false)
110
+
111
+ when 'DOAS with fan coil chiller with baseboard electric'
112
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
113
+ air_loop_heating_type: nil)
114
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
115
+ zone_equipment_ventilation: false)
116
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
117
+
118
+ when 'DOAS with fan coil chiller with gas unit heaters'
119
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
120
+ air_loop_heating_type: nil)
121
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
122
+ zone_equipment_ventilation: false)
123
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
124
+
125
+ when 'DOAS with fan coil chiller with no heat'
126
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
127
+ air_loop_heating_type: nil)
128
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
129
+ zone_equipment_ventilation: false)
130
+
131
+ when 'DOAS with fan coil air-cooled chiller with boiler'
132
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
133
+ chilled_water_loop_cooling_type: 'AirCooled')
134
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
135
+ chilled_water_loop_cooling_type: 'AirCooled',
136
+ zone_equipment_ventilation: false)
137
+
138
+ when 'DOAS with fan coil air-cooled chiller with central air source heat pump'
139
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones,
140
+ chilled_water_loop_cooling_type: 'AirCooled')
141
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones,
142
+ chilled_water_loop_cooling_type: 'AirCooled',
143
+ zone_equipment_ventilation: false)
144
+
145
+ when 'DOAS with fan coil air-cooled chiller with district hot water'
146
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones,
147
+ chilled_water_loop_cooling_type: 'AirCooled')
148
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones,
149
+ chilled_water_loop_cooling_type: 'AirCooled',
150
+ zone_equipment_ventilation: false)
151
+
152
+ when 'DOAS with fan coil air-cooled chiller with baseboard electric'
153
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
154
+ chilled_water_loop_cooling_type: 'AirCooled', air_loop_heating_type: nil)
155
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
156
+ chilled_water_loop_cooling_type: 'AirCooled',
157
+ zone_equipment_ventilation: false)
158
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
159
+
160
+ when 'DOAS with fan coil air-cooled chiller with gas unit heaters'
161
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
162
+ chilled_water_loop_cooling_type: 'AirCooled', air_loop_heating_type: nil)
163
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
164
+ chilled_water_loop_cooling_type: 'AirCooled',
165
+ zone_equipment_ventilation: false)
166
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
167
+
168
+ when 'DOAS with fan coil air-cooled chiller with no heat'
169
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
170
+ chilled_water_loop_cooling_type: 'AirCooled', air_loop_heating_type: nil)
171
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
172
+ chilled_water_loop_cooling_type: 'AirCooled',
173
+ zone_equipment_ventilation: false)
174
+
175
+ when 'DOAS with fan coil district chilled water with boiler'
176
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
177
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones,
178
+ zone_equipment_ventilation: false)
179
+
180
+ when 'DOAS with fan coil district chilled water with central air source heat pump'
181
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', zones)
182
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', zones,
183
+ zone_equipment_ventilation: false)
184
+
185
+ when 'DOAS with fan coil district chilled water with district hot water'
186
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
187
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones,
188
+ zone_equipment_ventilation: false)
189
+
190
+ when 'DOAS with fan coil district chilled water with baseboard electric'
191
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
192
+ air_loop_heating_type: nil)
193
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
194
+ zone_equipment_ventilation: false)
195
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
196
+
197
+ when 'DOAS with fan coil district chilled water with gas unit heaters'
198
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
199
+ air_loop_heating_type: nil)
200
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
201
+ zone_equipment_ventilation: false)
202
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
203
+
204
+ when 'DOAS with fan coil district chilled water with no heat'
205
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
206
+ air_loop_heating_type: nil)
207
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
208
+ zone_equipment_ventilation: false)
209
+
210
+ when 'DOAS with VRF'
211
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'Electricity', znht = nil, cl = 'Electricity', zones,
212
+ air_loop_heating_type: 'DX',
213
+ air_loop_cooling_type: 'DX')
214
+ standard.model_add_hvac_system(self, 'VRF', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
215
+
216
+ when 'DOAS with water source heat pumps fluid cooler with boiler'
217
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
218
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
219
+ heat_pump_loop_cooling_type: 'FluidCooler',
220
+ zone_equipment_ventilation: false)
221
+
222
+ when 'DOAS with water source heat pumps cooling tower with boiler'
223
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
224
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
225
+ heat_pump_loop_cooling_type: 'CoolingTower',
226
+ zone_equipment_ventilation: false)
227
+
228
+ when 'DOAS with water source heat pumps with ground source heat pump'
229
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'Electricity', znht = nil, cl = 'Electricity', zones,
230
+ air_loop_heating_type: 'DX',
231
+ air_loop_cooling_type: 'DX')
232
+ standard.model_add_hvac_system(self, 'Ground Source Heat Pumps', ht = 'Electricity', znht = nil, cl = 'Electricity', zones,
233
+ zone_equipment_ventilation: false)
234
+
235
+ when 'DOAS with water source heat pumps district chilled water with district hot water'
236
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
237
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones,
238
+ zone_equipment_ventilation: false)
239
+
240
+ # ventilation provided by zone fan coil unit in fan coil systems
241
+ when 'Fan coil chiller with boiler'
242
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
243
+
244
+ when 'Fan coil chiller with central air source heat pump'
245
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones)
246
+
247
+ when 'Fan coil chiller with district hot water'
248
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones)
249
+
250
+ when 'Fan coil chiller with baseboard electric'
251
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones)
252
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
253
+
254
+ when 'Fan coil chiller with gas unit heaters'
255
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones)
256
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
257
+
258
+ when 'Fan coil chiller with no heat'
259
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones)
260
+
261
+ when 'Fan coil air-cooled chiller with boiler'
262
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
263
+ chilled_water_loop_cooling_type: 'AirCooled')
264
+
265
+ when 'Fan coil air-cooled chiller with central air source heat pump'
266
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones,
267
+ chilled_water_loop_cooling_type: 'AirCooled')
268
+
269
+ when 'Fan coil air-cooled chiller with district hot water'
270
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones,
271
+ chilled_water_loop_cooling_type: 'AirCooled')
272
+
273
+ when 'Fan coil air-cooled chiller with baseboard electric'
274
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
275
+ chilled_water_loop_cooling_type: 'AirCooled')
276
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
277
+
278
+ when 'Fan coil air-cooled chiller with gas unit heaters'
279
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
280
+ chilled_water_loop_cooling_type: 'AirCooled')
281
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
282
+
283
+ when 'Fan coil air-cooled chiller with no heat'
284
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
285
+ chilled_water_loop_cooling_type: 'AirCooled')
286
+
287
+ when 'Fan coil district chilled water with boiler'
288
+ standard.model_add_hvac_system(self, 'Fan Coil ', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
289
+
290
+ when 'Fan coil district chilled water with central air source heat pump'
291
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', zones)
292
+
293
+ when 'Fan coil district chilled water with district hot water'
294
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
295
+
296
+ when 'Fan coil district chilled water with baseboard electric'
297
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
298
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
299
+
300
+ when 'Fan coil district chilled water with gas unit heaters'
301
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
302
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
303
+
304
+ when 'Fan coil district chilled water with no heat '
305
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
306
+
307
+ when 'Forced air furnace'
308
+ # includes ventilation, whereas residential forced air furnace does not.
309
+ standard.model_add_hvac_system(self, 'Forced Air Furnace', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
310
+
311
+ when 'Gas unit heaters'
312
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
313
+
314
+ when 'PTAC with baseboard electric'
315
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
316
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
317
+
318
+ when 'PTAC with baseboard gas boiler'
319
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
320
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
321
+
322
+ when 'PTAC with baseboard district hot water'
323
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
324
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
325
+
326
+ when 'PTAC with gas unit heaters'
327
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
328
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
329
+
330
+ when 'PTAC with electric coil'
331
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = 'Electricity', cl = 'Electricity', system_zones)
332
+ # use 'Baseboard electric' for heated only zones
333
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
334
+
335
+ when 'PTAC with gas coil'
336
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = 'NaturalGas', cl = 'Electricity', system_zones)
337
+ # use 'Baseboard electric' for heated only zones
338
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
339
+
340
+ when 'PTAC with gas boiler'
341
+ standard.model_add_hvac_system(self, 'PTAC', ht = 'NaturalGas', znht = nil, cl = 'Electricity', system_zones)
342
+ # use 'Baseboard gas boiler' for heated only zones
343
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_only_zones)
344
+
345
+ when 'PTAC with central air source heat pump'
346
+ standard.model_add_hvac_system(self, 'PTAC', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', system_zones)
347
+ # use 'Baseboard central air source heat pump' for heated only zones
348
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_only_zones)
349
+
350
+ when 'PTAC with district hot water'
351
+ standard.model_add_hvac_system(self, 'PTAC', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', system_zones)
352
+ # use 'Baseboard district hot water heat' for heated only zones
353
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_only_zones)
354
+
355
+ when 'PTAC with no heat'
356
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
357
+
358
+ when 'PTHP'
359
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', system_zones)
360
+ # use 'Baseboard electric' for heated only zones
361
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
362
+
363
+ when 'PSZ-AC with baseboard electric'
364
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
365
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
366
+
367
+ when 'PSZ-AC with baseboard gas boiler'
368
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
369
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
370
+
371
+ when 'PSZ-AC with baseboard district hot water'
372
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
373
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
374
+
375
+ when 'PSZ-AC with gas unit heaters'
376
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
377
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
378
+
379
+ when 'PSZ-AC with electric coil'
380
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'Electricity', cl = 'Electricity', system_zones)
381
+ # use 'Baseboard electric' for heated only zones
382
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
383
+
384
+ when 'PSZ-AC with gas coil'
385
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'NaturalGas', cl = 'Electricity', system_zones)
386
+ # use 'Baseboard electric' for heated only zones
387
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
388
+
389
+ when 'PSZ-AC with gas boiler'
390
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'NaturalGas', znht = nil, cl = 'Electricity', system_zones)
391
+ # use 'Baseboard gas boiler' for heated only zones
392
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_only_zones)
393
+
394
+ when 'PSZ-AC with central air source heat pump'
395
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', system_zones)
396
+ # use 'Baseboard central air source heat pump' for heated only zones
397
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_only_zones)
398
+
399
+ when 'PSZ-AC with district hot water'
400
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', system_zones)
401
+ # use 'Baseboard district hot water' for heated only zones
402
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_only_zones)
403
+
404
+ when 'PSZ-AC with no heat'
405
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
406
+
407
+ when 'PSZ-AC district chilled water with baseboard electric'
408
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', system_zones)
409
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
410
+
411
+ when 'PSZ-AC district chilled water with baseboard gas boiler'
412
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', system_zones)
413
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
414
+
415
+ when 'PSZ-AC district chilled water with gas unit heaters'
416
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', system_zones)
417
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
418
+
419
+ when 'PSZ-AC district chilled water with electric coil'
420
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'Electricity', cl = 'DistrictCooling', system_zones)
421
+ # use 'Baseboard electric' for heated only zones
422
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
423
+
424
+ when 'PSZ-AC district chilled water with gas coil'
425
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'NaturalGas', cl = 'DistrictCooling', system_zones)
426
+ # use 'Baseboard electric' for heated only zones
427
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
428
+
429
+ when 'PSZ-AC district chilled water with gas boiler'
430
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', system_zones)
431
+ # use 'Baseboard gas boiler' for heated only zones
432
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_only_zones)
433
+
434
+ when 'PSZ-AC district chilled water with central air source heat pump'
435
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', system_zones)
436
+ # use 'Baseboard central air source heat pump' for heated only zones
437
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_only_zones)
438
+
439
+ when 'PSZ-AC district chilled water with district hot water'
440
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', system_zones)
441
+ # use 'Baseboard district hot water' for heated only zones
442
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_only_zones)
443
+
444
+ when 'PSZ-AC district chilled water with no heat'
445
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', cooled_zones)
446
+
447
+ when 'PSZ-HP'
448
+ standard.model_add_hvac_system(self, 'PSZ-HP', ht = 'Electricity', znht = nil, cl = 'Electricity', system_zones)
449
+ # use 'Baseboard electric' for heated only zones
450
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
451
+
452
+ # PVAV systems by default use a DX coil for cooling
453
+ when 'PVAV with gas boiler reheat', 'Packaged VAV Air Loop with Boiler' # second enumeration for backwards compatibility with Tenant Star project
454
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones)
455
+
456
+ when 'PVAV with central air source heat pump reheat'
457
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'Electricity', zones)
458
+
459
+ when 'PVAV with district hot water reheat'
460
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'Electricity', zones)
461
+
462
+ when 'PVAV with PFP boxes'
463
+ standard.model_add_hvac_system(self, 'PVAV PFP Boxes', ht = 'Electricity', znht = 'Electricity', cl = 'Electricity', zones)
464
+
465
+ when 'PVAV with gas heat with electric reheat'
466
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'Gas', znht = 'Electricity', cl = 'Electricity', zones)
467
+
468
+ # all residential systems do not have ventilation
469
+ when 'Residential AC with baseboard electric'
470
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
471
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
472
+
473
+ when 'Residential AC with baseboard gas boiler'
474
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
475
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
476
+
477
+ when 'Residential AC with baseboard central air source heat pump'
478
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
479
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_zones)
480
+
481
+ when 'Residential AC with baseboard district hot water'
482
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
483
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
484
+
485
+ when 'Residential AC with residential forced air furnace'
486
+ standard.model_add_hvac_system(self, 'Residential Forced Air Furnace with AC', ht = nil, znht = nil, cl = nil, zones)
487
+
488
+ when 'Residential AC with no heat'
489
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
490
+
491
+ when 'Residential heat pump'
492
+ standard.model_add_hvac_system(self, 'Residential Air Source Heat Pump', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
493
+
494
+ when 'Residential heat pump with no cooling'
495
+ standard.model_add_hvac_system(self, 'Residential Air Source Heat Pump', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
496
+
497
+ when 'Residential forced air furnace'
498
+ standard.model_add_hvac_system(self, 'Residential Forced Air Furnace', ht = 'NaturalGas', znht = nil, cl = nil, zones)
499
+
500
+ when 'VAV chiller with gas boiler reheat'
501
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones)
502
+
503
+ when 'VAV chiller with central air source heat pump reheat'
504
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'Electricity', zones)
505
+
506
+ when 'VAV chiller with district hot water reheat'
507
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'Electricity', zones)
508
+
509
+ when 'VAV chiller with PFP boxes'
510
+ standard.model_add_hvac_system(self, 'VAV PFP Boxes', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones)
511
+
512
+ when 'VAV chiller with gas coil reheat'
513
+ standard.model_add_hvac_system(self, 'VAV Gas Reheat', ht = 'NaturalGas', ht = 'NaturalGas', cl = 'Electricity', zones)
514
+
515
+ when 'VAV chiller with no reheat with baseboard electric'
516
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
517
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
518
+
519
+ when 'VAV chiller with no reheat with gas unit heaters'
520
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
521
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
522
+
523
+ when 'VAV chiller with no reheat with zone heat pump'
524
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
525
+ # Using PTHP to represent zone heat pump to limit to one airloop per thermal zone.
526
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
527
+
528
+ when 'VAV air-cooled chiller with gas boiler reheat'
529
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones,
530
+ chilled_water_loop_cooling_type: 'AirCooled')
531
+
532
+ when 'VAV air-cooled chiller with central air source heat pump reheat '
533
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'Electricity', zones,
534
+ chilled_water_loop_cooling_type: 'AirCooled')
535
+
536
+ when 'VAV air-cooled chiller with district hot water reheat'
537
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'Electricity', zones,
538
+ chilled_water_loop_cooling_type: 'AirCooled')
539
+
540
+ when 'VAV air-cooled chiller with PFP boxes'
541
+ standard.model_add_hvac_system(self, 'VAV PFP Boxes', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones,
542
+ chilled_water_loop_cooling_type: 'AirCooled')
543
+
544
+ when 'VAV air-cooled chiller with gas coil reheat'
545
+ standard.model_add_hvac_system(self, 'VAV Gas Reheat', ht = 'NaturalGas', ht = 'NaturalGas', cl = 'Electricity', zones,
546
+ chilled_water_loop_cooling_type: 'AirCooled')
547
+
548
+ when 'VAV air-cooled chiller with no reheat with baseboard electric'
549
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
550
+ chilled_water_loop_cooling_type: 'AirCooled')
551
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
552
+
553
+ when 'VAV air-cooled chiller with no reheat with gas unit heaters'
554
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
555
+ chilled_water_loop_cooling_type: 'AirCooled')
556
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
557
+
558
+ when 'VAV air-cooled chiller with no reheat with zone heat pump'
559
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
560
+ chilled_water_loop_cooling_type: 'AirCooled')
561
+ # Using PTHP to represent zone heat pump to limit to one airloop per thermal zone.
562
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
563
+
564
+ when 'VAV district chilled water with gas boiler reheat'
565
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'DistrictCooling', zones)
566
+
567
+ when 'VAV district chilled water with central air source heat pump reheat'
568
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'DistrictCooling', zones)
569
+
570
+ when 'VAV district chilled water with district hot water reheat'
571
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'DistrictCooling', zones)
572
+
573
+ when 'VAV district chilled water with PFP boxes'
574
+ standard.model_add_hvac_system(self, 'VAV PFP Boxes', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'DistrictCooling', zones)
575
+
576
+ when 'VAV district chilled water with gas coil reheat'
577
+ standard.model_add_hvac_system(self, 'VAV Gas Reheat', ht = 'NaturalGas', ht = 'NaturalGas', cl = 'DistrictCooling', zones)
578
+
579
+ when 'VAV district chilled water with no reheat with baseboard electric'
580
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
581
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
582
+
583
+ when 'VAV district chilled water with no reheat with gas unit heaters'
584
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
585
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
586
+
587
+ when 'VAV district chilled water with no reheat with zone heat pump'
588
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
589
+ # Using PTHP to represent zone heat pump to limit to one airloop per thermal zone.
590
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
591
+
592
+ when 'VRF'
593
+ standard.model_add_hvac_system(self, 'VRF', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
594
+
595
+ when 'Water source heat pumps fluid cooler with boiler'
596
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
597
+ heat_pump_loop_cooling_type: 'FluidCooler')
598
+
599
+ when 'Water source heat pumps cooling tower with boiler'
600
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
601
+ heat_pump_loop_cooling_type: 'CoolingTower')
602
+
603
+ when 'Water source heat pumps with ground source heat pump'
604
+ standard.model_add_hvac_system(self, 'Ground Source Heat Pumps', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
605
+
606
+ when 'Water source heat pumps district chilled water with district hot water'
607
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
608
+
609
+ when 'Window AC with baseboard electric'
610
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
611
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
612
+
613
+ when 'Window AC with baseboard gas boiler'
614
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
615
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
616
+
617
+ when 'Window AC with baseboard central air source heat pump'
618
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
619
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_zones)
620
+
621
+ when 'Window AC with baseboard district hot water'
622
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
623
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
624
+
625
+ when 'Window AC with forced air furnace'
626
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
627
+ standard.model_add_hvac_system(self, 'Forced Air Furnace', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
628
+
629
+ when 'Window AC with unit heaters'
630
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
631
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
632
+
633
+ when 'Window AC with no heat'
634
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
635
+
636
+ else
637
+ puts "HVAC system type '#{system_type}' not recognized"
638
+
639
+ end
640
+ end
641
+ end