honeybee-openstudio 0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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