honeybee-openstudio 2.4.0 → 2.6.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.
@@ -49,6 +49,10 @@ module FromHoneybee
49
49
  @@schema[:components][:schemas][:FaceEnergyPropertiesAbridged][:properties]
50
50
  end
51
51
 
52
+ def crack_defaults
53
+ @@schema[:components][:schemas][:AFNCrack][:properties]
54
+ end
55
+
52
56
  def find_existing_openstudio_object(openstudio_model)
53
57
  model_surf = openstudio_model.getSurfaceByName(@hash[:identifier])
54
58
  return model_surf.get unless model_surf.empty?
@@ -56,16 +60,18 @@ module FromHoneybee
56
60
  end
57
61
 
58
62
  def to_openstudio(openstudio_model)
59
- # create the openstudio surface
63
+ # reorder the vertices to ensure they start from the upper-left corner
60
64
  os_vertices = OpenStudio::Point3dVector.new
61
65
  @hash[:geometry][:boundary].each do |vertex|
62
66
  os_vertices << OpenStudio::Point3d.new(vertex[0], vertex[1], vertex[2])
63
67
  end
64
68
  reordered_vertices = OpenStudio.reorderULC(os_vertices)
65
69
 
70
+ # create the openstudio surface and assign the type
66
71
  os_surface = OpenStudio::Model::Surface.new(reordered_vertices, openstudio_model)
67
72
  os_surface.setName(@hash[:identifier])
68
73
  os_surface.setSurfaceType(@hash[:face_type])
74
+
69
75
  # assign the construction if it is present
70
76
  if @hash[:properties][:energy][:construction]
71
77
  construction_identifier = @hash[:properties][:energy][:construction]
@@ -76,6 +82,32 @@ module FromHoneybee
76
82
  end
77
83
  end
78
84
 
85
+ # assign the AFN crack if it's specified and we are not using simple infiltration
86
+ if !$use_simple_vent && @hash[:properties][:energy][:vent_crack]
87
+ unless $interior_afn_srf_hash[@hash[:identifier]] # interior crack that's been accounted for
88
+ vent_crack = @hash[:properties][:energy][:vent_crack]
89
+ # create the crack object for using default values
90
+ flow_exponent = crack_defaults[:flow_exponent][:default].to_f
91
+ os_crack = OpenStudio::Model::AirflowNetworkCrack.new(
92
+ openstudio_model, vent_crack[:flow_coefficient], flow_exponent,
93
+ $afn_reference_crack)
94
+
95
+ # assign the flow exponent if it's specified
96
+ if vent_crack[:flow_exponent]
97
+ os_crack. setAirMassFlowExponent(vent_crack[:flow_exponent])
98
+ end
99
+
100
+ # if it's a Surface boundary condition ensure the neighbor is not written as a duplicate
101
+ if @hash[:boundary_condition][:type] == 'Surface'
102
+ $interior_afn_srf_hash[@hash[:boundary_condition][:boundary_condition_objects][0]] = true
103
+ end
104
+
105
+ # create the AirflowNetworkSurface
106
+ os_afn_srf = os_surface.getAirflowNetworkSurface(os_crack)
107
+
108
+ end
109
+ end
110
+
79
111
  # assign the boundary condition
80
112
  boundary_condition = (@hash[:boundary_condition][:type])
81
113
  case boundary_condition
@@ -43,6 +43,7 @@ require 'from_honeybee/load/ventilation'
43
43
  require 'from_honeybee/load/setpoint_thermostat'
44
44
  require 'from_honeybee/load/setpoint_humidistat'
45
45
  require 'from_honeybee/ventcool/opening'
46
+ require 'from_honeybee/ventcool/control'
46
47
 
47
48
  require 'openstudio'
48
49
 
@@ -185,17 +186,19 @@ module FromHoneybee
185
186
  os_surface.setConstruction(air_construction)
186
187
  end
187
188
  # add air mixing properties to the global list that tracks them
188
- air_hash = $air_boundary_hash[air_construction.name.to_s]
189
- if air_hash[:air_mixing_per_area]
190
- air_mix_area = air_hash[:air_mixing_per_area]
191
- else
192
- air_default = @@schema[:components][:schemas][:AirBoundaryConstructionAbridged]
193
- air_mix_area = air_default[:properties][:air_mixing_per_area][:default]
189
+ if $use_simple_vent # only use air mixing objects when simple ventilation is requested
190
+ air_hash = $air_boundary_hash[air_construction.name.to_s]
191
+ if air_hash[:air_mixing_per_area]
192
+ air_mix_area = air_hash[:air_mixing_per_area]
193
+ else
194
+ air_default = @@schema[:components][:schemas][:AirBoundaryConstructionAbridged]
195
+ air_mix_area = air_default[:properties][:air_mixing_per_area][:default]
196
+ end
197
+ flow_rate = os_surface.netArea * air_mix_area
198
+ flow_sch_id = air_hash[:air_mixing_schedule]
199
+ adj_zone_id = face[:boundary_condition][:boundary_condition_objects][-1]
200
+ $air_mxing_array << [os_thermal_zone, flow_rate, flow_sch_id, adj_zone_id]
194
201
  end
195
- flow_rate = os_surface.netArea * air_mix_area
196
- flow_sch_id = air_hash[:air_mixing_schedule]
197
- adj_zone_id = face[:boundary_condition][:boundary_condition_objects][-1]
198
- $air_mxing_array << [os_thermal_zone, flow_rate, flow_sch_id, adj_zone_id]
199
202
  end
200
203
  end
201
204
  end
@@ -265,7 +268,7 @@ module FromHoneybee
265
268
  end
266
269
 
267
270
  # assign infiltration if it exists
268
- if @hash[:properties][:energy][:infiltration]
271
+ if @hash[:properties][:energy][:infiltration] && $use_simple_vent # only use infiltration with simple ventilation
269
272
  infiltration = openstudio_model.getSpaceInfiltrationDesignFlowRateByName(
270
273
  @hash[:properties][:energy][:infiltration][:identifier])
271
274
  unless infiltration.empty?
@@ -308,7 +311,7 @@ module FromHoneybee
308
311
  end
309
312
 
310
313
  # assign window ventilation objects if they exist
311
- unless window_vent.empty?
314
+ if $use_simple_vent && !window_vent.empty? # write simple WindAndStack ventilation
312
315
  window_vent.each do |sub_f_id, opening|
313
316
  opt_sub_f = openstudio_model.getSubSurfaceByName(sub_f_id)
314
317
  unless opt_sub_f.empty?
@@ -319,6 +322,31 @@ module FromHoneybee
319
322
  os_window_vent.addToThermalZone(os_thermal_zone)
320
323
  end
321
324
  end
325
+ elsif !$use_simple_vent # we're using the AFN!
326
+ # write an AirflowNetworkZone object in for the Room
327
+ os_afn_room_node = os_thermal_zone.getAirflowNetworkZone
328
+ os_afn_room_node.setVentilationControlMode('NoVent')
329
+ # write the opening objects for each Aperture / Door
330
+ operable_subfs = [] # collect the sub-face objects for the EMS
331
+ opening_factors = [] # collect the maximum opening factors for the EMS
332
+ window_vent.each do |sub_f_id, opening|
333
+ opt_sub_f = openstudio_model.getSubSurfaceByName(sub_f_id)
334
+ unless opt_sub_f.empty?
335
+ sub_f = opt_sub_f.get
336
+ if sub_f.adjacentSubSurface.empty? # not an interior window that's already in the AFN
337
+ window_vent = VentilationOpening.new(opening)
338
+ open_fac = window_vent.to_openstudio_afn(openstudio_model, sub_f)
339
+ operable_subfs << sub_f
340
+ opening_factors << open_fac
341
+ end
342
+ end
343
+ end
344
+ # add the control startegy of the ventilation openings using the EMS
345
+ if @hash[:properties][:energy][:window_vent_control]
346
+ vent_control = VentilationControl.new(@hash[:properties][:energy][:window_vent_control])
347
+ vent_control.to_openstudio(
348
+ openstudio_model, os_thermal_zone, operable_subfs, opening_factors)
349
+ end
322
350
  end
323
351
 
324
352
  os_space
@@ -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_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