honeybee-openstudio 2.4.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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