honeybee-openstudio 2.2.0 → 2.5.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.
@@ -97,9 +97,10 @@ module FromHoneybee
97
97
  shd_mat_name = openstudio_model.getMaterialByName(@hash[:shade_material])
98
98
  unless shd_mat_name.empty?
99
99
  @shade_material = shd_mat_name.get
100
+ obj_type = @shade_material.iddObject.name
100
101
  end
101
102
  unless @shade_material.nil?
102
- if @shade_material.is_a? OpenStudio::Model::StandardGlazing
103
+ if obj_type == 'OS:WindowMaterial:StandardGlazing'
103
104
  if @shade_location == 'Interior'
104
105
  os_materials[-1] = @shade_material
105
106
  elsif @shade_location == 'Exterior' | os_materials.length < 2
@@ -159,9 +160,12 @@ module FromHoneybee
159
160
  os_shade_control = OpenStudio::Model::ShadingControl.new(@shade_construction)
160
161
 
161
162
  # figure out the shading type
162
- if @shade_material.is_a? OpenStudio::Model::StandardGlazing
163
+ unless @shade_material.nil?
164
+ obj_type = @shade_material.iddObject.name
165
+ end
166
+ if obj_type == 'OS:WindowMaterial:StandardGlazing'
163
167
  shd_type = 'SwitchableGlazing'
164
- elsif @shade_material.is_a? OpenStudio::Model::Blind
168
+ elsif obj_type == 'OS:WindowMaterial:Blind'
165
169
  if @shade_location == 'Between'
166
170
  shd_type = 'BetweenGlassBlind'
167
171
  else
@@ -37,6 +37,7 @@ require 'openstudio/extension'
37
37
  module FromHoneybee
38
38
  class Extension < OpenStudio::Extension::Extension
39
39
  @@schema = nil
40
+ @@standards = nil
40
41
 
41
42
  # Override parent class
42
43
  def initialize
@@ -49,6 +50,7 @@ module FromHoneybee
49
50
 
50
51
  @instance_lock = Mutex.new
51
52
  @@schema ||= schema
53
+ @@standards ||= standards
52
54
  end
53
55
 
54
56
  # Return the absolute path of the measures or nil if there is none.
@@ -73,7 +75,12 @@ module FromHoneybee
73
75
 
74
76
  # return path to the model schema file
75
77
  def schema_file
76
- File.join(@lib_dir, 'from_honeybee', '_openapi', 'model.json')
78
+ File.join(@lib_dir, 'from_honeybee', '_defaults', 'model.json')
79
+ end
80
+
81
+ # return path to the model standards file
82
+ def standards_file
83
+ File.join(@lib_dir, 'from_honeybee', '_defaults', 'energy_default.json')
77
84
  end
78
85
 
79
86
  # return the model schema
@@ -89,6 +96,19 @@ module FromHoneybee
89
96
  @@schema
90
97
  end
91
98
 
99
+ # return the JSON of default standards
100
+ def standards
101
+ @instance_lock.synchronize do
102
+ if @@standards.nil?
103
+ File.open(standards_file, 'r') do |f|
104
+ @@standards = JSON.parse(f.read, symbolize_names: true)
105
+ end
106
+ end
107
+ end
108
+
109
+ @@standards
110
+ end
111
+
92
112
  # check if the model schema is valid
93
113
  def schema_valid?
94
114
  if Gem.loaded_specs.has_key?("json-schema")
@@ -42,6 +42,7 @@ require 'from_honeybee/load/infiltration'
42
42
  require 'from_honeybee/load/ventilation'
43
43
  require 'from_honeybee/load/setpoint_thermostat'
44
44
  require 'from_honeybee/load/setpoint_humidistat'
45
+ require 'from_honeybee/ventcool/opening'
45
46
 
46
47
  require 'openstudio'
47
48
 
@@ -117,6 +118,9 @@ module FromHoneybee
117
118
  end
118
119
  os_space.setBuildingStory(story)
119
120
 
121
+ # keep track of all window ventilation objects
122
+ window_vent = {}
123
+
120
124
  # assign all of the faces to the room
121
125
  @hash[:faces].each do |face|
122
126
  ladybug_face = Face.new(face)
@@ -134,6 +138,9 @@ module FromHoneybee
134
138
  # assign aperture-level shades if they exist
135
139
  if face[:apertures]
136
140
  face[:apertures].each do |aperture|
141
+ if aperture[:properties][:energy][:vent_opening]
142
+ window_vent[aperture[:identifier]] = aperture[:properties][:energy][:vent_opening]
143
+ end
137
144
  if aperture[:outdoor_shades]
138
145
  unless os_shd_group
139
146
  os_shd_group = make_shade_group(openstudio_model, os_surface, os_space)
@@ -148,6 +155,9 @@ module FromHoneybee
148
155
  # assign door-level shades if they exist
149
156
  if face[:doors]
150
157
  face[:doors].each do |door|
158
+ if door[:properties][:energy][:vent_opening]
159
+ window_vent[door[:identifier]] = door[:properties][:energy][:vent_opening]
160
+ end
151
161
  if door[:outdoor_shades]
152
162
  unless os_shd_group
153
163
  os_shd_group = make_shade_group(openstudio_model, os_surface, os_space)
@@ -284,14 +294,12 @@ module FromHoneybee
284
294
 
285
295
  # assign setpoint if it exists
286
296
  if @hash[:properties][:energy][:setpoint]
287
- #thermostat object is created because heating and cooling schedule are required
288
- #fields.
297
+ # thermostat object is created because heating and cooling schedule are required
289
298
  setpoint_thermostat_space = SetpointThermostat.new(@hash[:properties][:energy][:setpoint])
290
299
  os_setpoint_thermostat_space = setpoint_thermostat_space.to_openstudio(openstudio_model)
291
300
  #set thermostat to thermal zone
292
301
  os_thermal_zone.setThermostatSetpointDualSetpoint(os_setpoint_thermostat_space)
293
- #humidistat object is created if humidifying or dehumidifying schedule is
294
- #specified.
302
+ # humidistat object is created if humidifying or dehumidifying schedule is specified
295
303
  if @hash[:properties][:energy][:setpoint][:humidifying_schedule] or @hash[:properties][:energy][:setpoint][:dehumidifying_schedule]
296
304
  setpoint_humidistat_space = SetpointHumidistat.new(@hash[:properties][:energy][:setpoint])
297
305
  os_setpoint_humidistat_space = setpoint_humidistat_space.to_openstudio(openstudio_model)
@@ -299,6 +307,20 @@ module FromHoneybee
299
307
  end
300
308
  end
301
309
 
310
+ # assign window ventilation objects if they exist
311
+ unless window_vent.empty?
312
+ window_vent.each do |sub_f_id, opening|
313
+ opt_sub_f = openstudio_model.getSubSurfaceByName(sub_f_id)
314
+ unless opt_sub_f.empty?
315
+ sub_f = opt_sub_f.get
316
+ window_vent = VentilationOpening.new(opening)
317
+ os_window_vent = window_vent.to_openstudio(
318
+ openstudio_model, sub_f, @hash[:properties][:energy][:window_vent_control])
319
+ os_window_vent.addToThermalZone(os_thermal_zone)
320
+ end
321
+ end
322
+ end
323
+
302
324
  os_space
303
325
  end
304
326
 
@@ -0,0 +1,635 @@
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_only_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
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
114
+ zone_equipment_ventilation: false)
115
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
116
+
117
+ when 'DOAS with fan coil chiller with gas unit heaters'
118
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones)
119
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
120
+ zone_equipment_ventilation: false)
121
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
122
+
123
+ when 'DOAS with fan coil chiller with no heat'
124
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones)
125
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
126
+ zone_equipment_ventilation: false)
127
+
128
+ when 'DOAS with fan coil air-cooled chiller with boiler'
129
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
130
+ chilled_water_loop_cooling_type: 'AirCooled')
131
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
132
+ chilled_water_loop_cooling_type: 'AirCooled',
133
+ zone_equipment_ventilation: false)
134
+
135
+ when 'DOAS with fan coil air-cooled chiller with central air source heat pump'
136
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones,
137
+ chilled_water_loop_cooling_type: 'AirCooled')
138
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones,
139
+ chilled_water_loop_cooling_type: 'AirCooled',
140
+ zone_equipment_ventilation: false)
141
+
142
+ when 'DOAS with fan coil air-cooled chiller with district hot water'
143
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones,
144
+ chilled_water_loop_cooling_type: 'AirCooled')
145
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones,
146
+ chilled_water_loop_cooling_type: 'AirCooled',
147
+ zone_equipment_ventilation: false)
148
+
149
+ when 'DOAS with fan coil air-cooled chiller with baseboard electric'
150
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
151
+ chilled_water_loop_cooling_type: 'AirCooled')
152
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
153
+ chilled_water_loop_cooling_type: 'AirCooled',
154
+ zone_equipment_ventilation: false)
155
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
156
+
157
+ when 'DOAS with fan coil air-cooled chiller with gas unit heaters'
158
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
159
+ chilled_water_loop_cooling_type: 'AirCooled')
160
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
161
+ chilled_water_loop_cooling_type: 'AirCooled',
162
+ zone_equipment_ventilation: false)
163
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
164
+
165
+ when 'DOAS with fan coil air-cooled chiller with no heat'
166
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'Electricity', zones,
167
+ chilled_water_loop_cooling_type: 'AirCooled')
168
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
169
+ chilled_water_loop_cooling_type: 'AirCooled',
170
+ zone_equipment_ventilation: false)
171
+
172
+ when 'DOAS with fan coil district chilled water with boiler'
173
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
174
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones,
175
+ zone_equipment_ventilation: false)
176
+
177
+ when 'DOAS with fan coil district chilled water with central air source heat pump'
178
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', zones)
179
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', zones,
180
+ zone_equipment_ventilation: false)
181
+
182
+ when 'DOAS with fan coil district chilled water with district hot water'
183
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
184
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones,
185
+ zone_equipment_ventilation: false)
186
+
187
+ when 'DOAS with fan coil district chilled water with baseboard electric'
188
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
189
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
190
+ zone_equipment_ventilation: false)
191
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
192
+
193
+ when 'DOAS with fan coil district chilled water with gas unit heaters'
194
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
195
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
196
+ zone_equipment_ventilation: false)
197
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
198
+
199
+ when 'DOAS with fan coil district chilled water with no heat '
200
+ standard.model_add_hvac_system(self, 'DOAS', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
201
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones,
202
+ zone_equipment_ventilation: false)
203
+
204
+ when 'DOAS with VRF'
205
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'Electricity', znht = nil, cl = 'Electricity', zones,
206
+ air_loop_heating_type: 'DX',
207
+ air_loop_cooling_type: 'DX')
208
+ standard.model_add_hvac_system(self, 'VRF', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
209
+
210
+ when 'DOAS with water source heat pumps fluid cooler with boiler'
211
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
212
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
213
+ heat_pump_loop_cooling_type: 'FluidCooler',
214
+ zone_equipment_ventilation: false)
215
+
216
+ when 'DOAS with water source heat pumps cooling tower 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: 'CoolingTower',
220
+ zone_equipment_ventilation: false)
221
+
222
+ when 'DOAS with water source heat pumps with ground source heat pump'
223
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'Electricity', znht = nil, cl = 'Electricity', zones,
224
+ air_loop_heating_type: 'DX',
225
+ air_loop_cooling_type: 'DX')
226
+ standard.model_add_hvac_system(self, 'Ground Source Heat Pumps', ht = 'Electricity', znht = nil, cl = 'Electricity', zones,
227
+ zone_equipment_ventilation: false)
228
+
229
+ when 'DOAS with water source heat pumps district chilled water with district hot water'
230
+ standard.model_add_hvac_system(self, 'DOAS', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
231
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones,
232
+ zone_equipment_ventilation: false)
233
+
234
+ # ventilation provided by zone fan coil unit in fan coil systems
235
+ when 'Fan coil chiller with boiler'
236
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
237
+
238
+ when 'Fan coil chiller with central air source heat pump'
239
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones)
240
+
241
+ when 'Fan coil chiller with district hot water'
242
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones)
243
+
244
+ when 'Fan coil chiller with baseboard electric'
245
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones)
246
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
247
+
248
+ when 'Fan coil chiller with gas unit heaters'
249
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones)
250
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
251
+
252
+ when 'Fan coil chiller with no heat'
253
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones)
254
+
255
+ when 'Fan coil air-cooled chiller with boiler'
256
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
257
+ chilled_water_loop_cooling_type: 'AirCooled')
258
+
259
+ when 'Fan coil air-cooled chiller with central air source heat pump'
260
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', zones,
261
+ chilled_water_loop_cooling_type: 'AirCooled')
262
+
263
+ when 'Fan coil air-cooled chiller with district hot water'
264
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', zones,
265
+ chilled_water_loop_cooling_type: 'AirCooled')
266
+
267
+ when 'Fan coil air-cooled chiller with baseboard electric'
268
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
269
+ chilled_water_loop_cooling_type: 'AirCooled')
270
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
271
+
272
+ when 'Fan coil air-cooled chiller with gas unit heaters'
273
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
274
+ chilled_water_loop_cooling_type: 'AirCooled')
275
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
276
+
277
+ when 'Fan coil air-cooled chiller with no heat'
278
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'Electricity', zones,
279
+ chilled_water_loop_cooling_type: 'AirCooled')
280
+
281
+ when 'Fan coil district chilled water with boiler'
282
+ standard.model_add_hvac_system(self, 'Fan Coil ', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
283
+
284
+ when 'Fan coil district chilled water with central air source heat pump'
285
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', zones)
286
+
287
+ when 'Fan coil district chilled water with district hot water'
288
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
289
+
290
+ when 'Fan coil district chilled water with baseboard electric'
291
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
292
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
293
+
294
+ when 'Fan coil district chilled water with gas unit heaters'
295
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
296
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
297
+
298
+ when 'Fan coil district chilled water with no heat '
299
+ standard.model_add_hvac_system(self, 'Fan Coil', ht = nil, znht = nil, cl = 'DistrictCooling', zones)
300
+
301
+ when 'Forced air furnace'
302
+ # includes ventilation, whereas residential forced air furnace does not.
303
+ standard.model_add_hvac_system(self, 'Forced Air Furnace', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
304
+
305
+ when 'Gas unit heaters'
306
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
307
+
308
+ when 'PTAC with baseboard electric'
309
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
310
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
311
+
312
+ when 'PTAC with baseboard gas boiler'
313
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
314
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
315
+
316
+ when 'PTAC with baseboard district hot water'
317
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
318
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
319
+
320
+ when 'PTAC with gas unit heaters'
321
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
322
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
323
+
324
+ when 'PTAC with electric coil'
325
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = 'Electricity', cl = 'Electricity', system_zones)
326
+ # use 'Baseboard electric' for heated only zones
327
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
328
+
329
+ when 'PTAC with gas coil'
330
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = 'NaturalGas', cl = 'Electricity', system_zones)
331
+ # use 'Baseboard electric' for heated only zones
332
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
333
+
334
+ when 'PTAC with gas boiler'
335
+ standard.model_add_hvac_system(self, 'PTAC', ht = 'NaturalGas', znht = nil, cl = 'Electricity', system_zones)
336
+ # use 'Baseboard gas boiler' for heated only zones
337
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_only_zones)
338
+
339
+ when 'PTAC with central air source heat pump'
340
+ standard.model_add_hvac_system(self, 'PTAC', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', system_zones)
341
+ # use 'Baseboard central air source heat pump' for heated only zones
342
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_only_zones)
343
+
344
+ when 'PTAC with district hot water'
345
+ standard.model_add_hvac_system(self, 'PTAC', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', system_zones)
346
+ # use 'Baseboard district hot water heat' for heated only zones
347
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_only_zones)
348
+
349
+ when 'PTAC with no heat'
350
+ standard.model_add_hvac_system(self, 'PTAC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
351
+
352
+ when 'PTHP'
353
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', system_zones)
354
+ # use 'Baseboard electric' for heated only zones
355
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
356
+
357
+ when 'PSZ-AC with baseboard electric'
358
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
359
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
360
+
361
+ when 'PSZ-AC with baseboard gas boiler'
362
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
363
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
364
+
365
+ when 'PSZ-AC with baseboard district hot water'
366
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
367
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
368
+
369
+ when 'PSZ-AC with gas unit heaters'
370
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', system_zones)
371
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
372
+
373
+ when 'PSZ-AC with electric coil'
374
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'Electricity', cl = 'Electricity', system_zones)
375
+ # use 'Baseboard electric' for heated only zones
376
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
377
+
378
+ when 'PSZ-AC with gas coil'
379
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'NaturalGas', cl = 'Electricity', system_zones)
380
+ # use 'Baseboard electric' for heated only zones
381
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
382
+
383
+ when 'PSZ-AC with gas boiler'
384
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'NaturalGas', znht = nil, cl = 'Electricity', system_zones)
385
+ # use 'Baseboard gas boiler' for heated only zones
386
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_only_zones)
387
+
388
+ when 'PSZ-AC with central air source heat pump'
389
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'AirSourceHeatPump', znht = nil, cl = 'Electricity', system_zones)
390
+ # use 'Baseboard central air source heat pump' for heated only zones
391
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_only_zones)
392
+
393
+ when 'PSZ-AC with district hot water'
394
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'DistrictHeating', znht = nil, cl = 'Electricity', system_zones)
395
+ # use 'Baseboard district hot water' for heated only zones
396
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_only_zones)
397
+
398
+ when 'PSZ-AC with no heat'
399
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
400
+
401
+ when 'PSZ-AC district chilled water with baseboard electric'
402
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', system_zones)
403
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
404
+
405
+ when 'PSZ-AC district chilled water with baseboard gas boiler'
406
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', system_zones)
407
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
408
+
409
+ when 'PSZ-AC district chilled water with gas unit heaters'
410
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', system_zones)
411
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
412
+
413
+ when 'PSZ-AC district chilled water with electric coil'
414
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'Electricity', cl = 'DistrictCooling', system_zones)
415
+ # use 'Baseboard electric' for heated only zones
416
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
417
+
418
+ when 'PSZ-AC district chilled water with gas coil'
419
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = 'NaturalGas', cl = 'DistrictCooling', system_zones)
420
+ # use 'Baseboard electric' for heated only zones
421
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
422
+
423
+ when 'PSZ-AC district chilled water with gas boiler'
424
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', system_zones)
425
+ # use 'Baseboard gas boiler' for heated only zones
426
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_only_zones)
427
+
428
+ when 'PSZ-AC district chilled water with central air source heat pump'
429
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'AirSourceHeatPump', znht = nil, cl = 'DistrictCooling', system_zones)
430
+ # use 'Baseboard central air source heat pump' for heated only zones
431
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_only_zones)
432
+
433
+ when 'PSZ-AC district chilled water with district hot water'
434
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', system_zones)
435
+ # use 'Baseboard district hot water' for heated only zones
436
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_only_zones)
437
+
438
+ when 'PSZ-AC district chilled water with no heat'
439
+ standard.model_add_hvac_system(self, 'PSZ-AC', ht = nil, znht = nil, cl = 'DistrictCooling', cooled_zones)
440
+
441
+ when 'PSZ-HP'
442
+ standard.model_add_hvac_system(self, 'PSZ-HP', ht = 'Electricity', znht = nil, cl = 'Electricity', system_zones)
443
+ # use 'Baseboard electric' for heated only zones
444
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_only_zones)
445
+
446
+ # PVAV systems by default use a DX coil for cooling
447
+ when 'PVAV with gas boiler reheat', 'Packaged VAV Air Loop with Boiler' # second enumeration for backwards compatibility with Tenant Star project
448
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones)
449
+
450
+ when 'PVAV with central air source heat pump reheat'
451
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'Electricity', zones)
452
+
453
+ when 'PVAV with district hot water reheat'
454
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'Electricity', zones)
455
+
456
+ when 'PVAV with PFP boxes'
457
+ standard.model_add_hvac_system(self, 'PVAV PFP Boxes', ht = 'Electricity', znht = 'Electricity', cl = 'Electricity', zones)
458
+
459
+ when 'PVAV with gas heat with electric reheat'
460
+ standard.model_add_hvac_system(self, 'PVAV Reheat', ht = 'Gas', znht = 'Electricity', cl = 'Electricity', zones)
461
+
462
+ # all residential systems do not have ventilation
463
+ when 'Residential AC with baseboard electric'
464
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
465
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
466
+
467
+ when 'Residential AC with baseboard gas boiler'
468
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
469
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
470
+
471
+ when 'Residential AC with baseboard central air source heat pump'
472
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
473
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_zones)
474
+
475
+ when 'Residential AC with baseboard district hot water'
476
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
477
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
478
+
479
+ when 'Residential AC with residential forced air furnace'
480
+ standard.model_add_hvac_system(self, 'Residential Forced Air Furnace with AC', ht = nil, znht = nil, cl = nil, zones)
481
+
482
+ when 'Residential AC with no heat'
483
+ standard.model_add_hvac_system(self, 'Residential AC', ht = nil, znht = nil, cl = nil, cooled_zones)
484
+
485
+ when 'Residential heat pump'
486
+ standard.model_add_hvac_system(self, 'Residential Air Source Heat Pump', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
487
+
488
+ when 'Residential heat pump with no cooling'
489
+ standard.model_add_hvac_system(self, 'Residential Air Source Heat Pump', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
490
+
491
+ when 'Residential forced air furnace'
492
+ standard.model_add_hvac_system(self, 'Residential Forced Air Furnace', ht = 'NaturalGas', znht = nil, cl = nil, zones)
493
+
494
+ when 'VAV chiller with gas boiler reheat'
495
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones)
496
+
497
+ when 'VAV chiller with central air source heat pump reheat'
498
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'Electricity', zones)
499
+
500
+ when 'VAV chiller with district hot water reheat'
501
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'Electricity', zones)
502
+
503
+ when 'VAV chiller with PFP boxes'
504
+ standard.model_add_hvac_system(self, 'VAV PFP Boxes', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones)
505
+
506
+ when 'VAV chiller with gas coil reheat'
507
+ standard.model_add_hvac_system(self, 'VAV Gas Reheat', ht = 'NaturalGas', ht = 'NaturalGas', cl = 'Electricity', zones)
508
+
509
+ when 'VAV chiller with no reheat with baseboard electric'
510
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
511
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
512
+
513
+ when 'VAV chiller with no reheat with gas unit heaters'
514
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
515
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
516
+
517
+ when 'VAV chiller with no reheat with zone heat pump'
518
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones)
519
+ # Using PTHP to represent zone heat pump to limit to one airloop per thermal zone.
520
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
521
+
522
+ when 'VAV air-cooled chiller with gas boiler reheat'
523
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones,
524
+ chilled_water_loop_cooling_type: 'AirCooled')
525
+
526
+ when 'VAV air-cooled chiller with central air source heat pump reheat '
527
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'Electricity', zones,
528
+ chilled_water_loop_cooling_type: 'AirCooled')
529
+
530
+ when 'VAV air-cooled chiller with district hot water reheat'
531
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'Electricity', zones,
532
+ chilled_water_loop_cooling_type: 'AirCooled')
533
+
534
+ when 'VAV air-cooled chiller with PFP boxes'
535
+ standard.model_add_hvac_system(self, 'VAV PFP Boxes', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'Electricity', zones,
536
+ chilled_water_loop_cooling_type: 'AirCooled')
537
+
538
+ when 'VAV air-cooled chiller with gas coil reheat'
539
+ standard.model_add_hvac_system(self, 'VAV Gas Reheat', ht = 'NaturalGas', ht = 'NaturalGas', cl = 'Electricity', zones,
540
+ chilled_water_loop_cooling_type: 'AirCooled')
541
+
542
+ when 'VAV air-cooled chiller with no reheat with baseboard electric'
543
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
544
+ chilled_water_loop_cooling_type: 'AirCooled')
545
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
546
+
547
+ when 'VAV air-cooled chiller with no reheat with gas unit heaters'
548
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
549
+ chilled_water_loop_cooling_type: 'AirCooled')
550
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
551
+
552
+ when 'VAV air-cooled chiller with no reheat with zone heat pump'
553
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
554
+ chilled_water_loop_cooling_type: 'AirCooled')
555
+ # Using PTHP to represent zone heat pump to limit to one airloop per thermal zone.
556
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
557
+
558
+ when 'VAV district chilled water with gas boiler reheat'
559
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'DistrictCooling', zones)
560
+
561
+ when 'VAV district chilled water with central air source heat pump reheat'
562
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'AirSourceHeatPump', znht = 'AirSourceHeatPump', cl = 'DistrictCooling', zones)
563
+
564
+ when 'VAV district chilled water with district hot water reheat'
565
+ standard.model_add_hvac_system(self, 'VAV Reheat', ht = 'DistrictHeating', znht = 'DistrictHeating', cl = 'DistrictCooling', zones)
566
+
567
+ when 'VAV district chilled water with PFP boxes'
568
+ standard.model_add_hvac_system(self, 'VAV PFP Boxes', ht = 'NaturalGas', znht = 'NaturalGas', cl = 'DistrictCooling', zones)
569
+
570
+ when 'VAV district chilled water with gas coil reheat'
571
+ standard.model_add_hvac_system(self, 'VAV Gas Reheat', ht = 'NaturalGas', ht = 'NaturalGas', cl = 'DistrictCooling', zones)
572
+
573
+ when 'VAV district chilled water with no reheat with baseboard electric'
574
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
575
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
576
+
577
+ when 'VAV district chilled water with no reheat with gas unit heaters'
578
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
579
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
580
+
581
+ when 'VAV district chilled water with no reheat with zone heat pump'
582
+ standard.model_add_hvac_system(self, 'VAV No Reheat', ht = 'NaturalGas', znht = nil, cl = 'DistrictCooling', zones)
583
+ # Using PTHP to represent zone heat pump to limit to one airloop per thermal zone.
584
+ standard.model_add_hvac_system(self, 'PTHP', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
585
+
586
+ when 'VRF'
587
+ standard.model_add_hvac_system(self, 'VRF', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
588
+
589
+ when 'Water source heat pumps fluid cooler with boiler'
590
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
591
+ heat_pump_loop_cooling_type: 'FluidCooler')
592
+
593
+ when 'Water source heat pumps cooling tower with boiler'
594
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'NaturalGas', znht = nil, cl = 'Electricity', zones,
595
+ heat_pump_loop_cooling_type: 'CoolingTower')
596
+
597
+ when 'Water source heat pumps with ground source heat pump'
598
+ standard.model_add_hvac_system(self, 'Ground Source Heat Pumps', ht = 'Electricity', znht = nil, cl = 'Electricity', zones)
599
+
600
+ when 'Water source heat pumps district chilled water with district hot water'
601
+ standard.model_add_hvac_system(self, 'Water Source Heat Pumps', ht = 'DistrictHeating', znht = nil, cl = 'DistrictCooling', zones)
602
+
603
+ when 'Window AC with baseboard electric'
604
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
605
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'Electricity', znht = nil, cl = nil, heated_zones)
606
+
607
+ when 'Window AC with baseboard gas boiler'
608
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
609
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
610
+
611
+ when 'Window AC with baseboard central air source heat pump'
612
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
613
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'AirSourceHeatPump', znht = nil, cl = nil, heated_zones)
614
+
615
+ when 'Window AC with baseboard district hot water'
616
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
617
+ standard.model_add_hvac_system(self, 'Baseboards', ht = 'DistrictHeating', znht = nil, cl = nil, heated_zones)
618
+
619
+ when 'Window AC with forced air furnace'
620
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
621
+ standard.model_add_hvac_system(self, 'Forced Air Furnace', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
622
+
623
+ when 'Window AC with unit heaters'
624
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
625
+ standard.model_add_hvac_system(self, 'Unit Heaters', ht = 'NaturalGas', znht = nil, cl = nil, heated_zones)
626
+
627
+ when 'Window AC with no heat'
628
+ standard.model_add_hvac_system(self, 'Window AC', ht = nil, znht = nil, cl = 'Electricity', cooled_zones)
629
+
630
+ else
631
+ puts "HVAC system type '#{system_type}' not recognized"
632
+
633
+ end
634
+ end
635
+ end