openstudio-standards 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards.xlsx +0 -0
  3. data/data/standards/OpenStudio_Standards_chillers.json +5 -5
  4. data/data/standards/OpenStudio_Standards_construction_sets.json +2 -2
  5. data/data/standards/OpenStudio_Standards_curve_cubics.json +12 -0
  6. data/data/standards/OpenStudio_Standards_heat_pumps.json +2126 -72
  7. data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +766 -14
  8. data/data/standards/OpenStudio_Standards_heat_rejection.json +172 -0
  9. data/data/standards/OpenStudio_Standards_prototype_inputs.json +355 -267
  10. data/data/standards/OpenStudio_Standards_schedules.json +262 -10
  11. data/data/standards/OpenStudio_Standards_space_types.json +1466 -794
  12. data/data/standards/manage_OpenStudio_Standards.rb +19 -21
  13. data/data/weather/weather_info.csv +96 -0
  14. data/lib/openstudio-standards/btap/btap.rb +1 -1
  15. data/lib/openstudio-standards/btap/compliance.rb +135 -40
  16. data/lib/openstudio-standards/btap/envelope.rb +26 -5
  17. data/lib/openstudio-standards/btap/geometry.rb +11 -1
  18. data/lib/openstudio-standards/btap/hvac.rb +489 -56
  19. data/lib/openstudio-standards/btap/simmanager.rb +1 -1
  20. data/lib/openstudio-standards/hvac_sizing/HVACSizing.CoilHeatingDXMultiSpeed.rb +120 -0
  21. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXMultiSpeed.rb +151 -7
  22. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGasMultiStage.rb +48 -7
  23. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +14 -12
  24. data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -7
  25. data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +123 -91
  26. data/lib/openstudio-standards/prototypes/Prototype.Model.rb +130 -45
  27. data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +13 -7
  28. data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +332 -324
  29. data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +401 -99
  30. data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +309 -222
  31. data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +100 -80
  32. data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +37 -22
  33. data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +68 -53
  34. data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +109 -88
  35. data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +52 -4
  36. data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +230 -213
  37. data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +225 -218
  38. data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +29 -17
  39. data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +42 -32
  40. data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +331 -314
  41. data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +233 -219
  42. data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +40 -32
  43. data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +19 -6
  44. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +576 -555
  45. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +3 -1
  46. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +35 -17
  47. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +51 -23
  48. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +255 -0
  49. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +192 -0
  50. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +65 -0
  51. data/lib/openstudio-standards/standards/Standards.Fan.rb +37 -6
  52. data/lib/openstudio-standards/standards/Standards.Model.rb +28 -3
  53. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +3 -1
  54. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +41 -15
  55. data/lib/openstudio-standards/version.rb +1 -1
  56. data/lib/openstudio-standards/weather/Weather.Model.rb +509 -5
  57. data/lib/openstudio-standards/weather/Weather.stat_file.rb +145 -5
  58. metadata +8 -3
  59. data/lib/openstudio-standards/btap/environment.rb +0 -718
@@ -3,7 +3,7 @@ class OpenStudio::Model::AirTerminalSingleDuctVAVReheat
3
3
 
4
4
  # Set the initial minimum damper position based on OA
5
5
  # rate of the space and the building vintage.
6
- # Zones with low OA per area get lower initial guesses.
6
+ # Zones with low OA per area get lower initial guesses.
7
7
  # Final position will be adjusted upward
8
8
  # as necessary by Standards.AirLoopHVAC.set_minimum_vav_damper_positions
9
9
  # @param building_vintage [String] the building vintage
@@ -11,15 +11,29 @@ class OpenStudio::Model::AirTerminalSingleDuctVAVReheat
11
11
  # @return [Bool] returns true if successful, false if not
12
12
  # @todo remove exception where older vintages don't have minimum positions adjusted.
13
13
  def set_initial_prototype_damper_position(building_type, building_vintage, zone_oa_per_area)
14
-
14
+
15
15
  # Minimum damper position is based on prototype
16
16
  # assumptions, which are not clearly documented.
17
17
  min_damper_position = nil
18
18
  vav_name = self.name.get
19
- case building_vintage
19
+ case building_vintage
20
20
  when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
21
- if building_type == "Outpatient" and vav_name.include? "Floor 1"
21
+ if building_type == "Outpatient" and vav_name.include? "Floor 1"
22
+ min_damper_position = 1
23
+ elsif building_type == "Hospital" and vav_name.include? "PatRoom"
24
+ min_damper_position = 1
25
+ elsif building_type == "Hospital" and vav_name.include? "OR"
26
+ min_damper_position = 1
27
+ elsif building_type == "Hospital" and vav_name.include? "ICU"
28
+ min_damper_position = 1
29
+ elsif building_type == "Hospital" and vav_name.include? "Lab"
30
+ min_damper_position = 1
31
+ elsif building_type == "Hospital" and vav_name.include? "ER"
22
32
  min_damper_position = 1
33
+ elsif building_type == "Hospital" and vav_name.include? "Kitchen"
34
+ min_damper_position = 1
35
+ elsif building_type == "Hospital" and vav_name.include? "NurseStn"
36
+ min_damper_position = 0.3
23
37
  else
24
38
  min_damper_position = 0.3
25
39
  end
@@ -28,19 +42,31 @@ class OpenStudio::Model::AirTerminalSingleDuctVAVReheat
28
42
  when '90.1-2010', '90.1-2013'
29
43
  min_damper_position = 0.2
30
44
  end
31
-
45
+
32
46
  # TODO remove the template conditional; doesn't make sense
33
47
  # Determine whether or not to use the high minimum guess.
34
48
  # Cutoff was determined by correlating apparent minimum guesses
35
49
  # to OA rates in prototypes since not well documented in papers.
36
50
  if zone_oa_per_area > 0.001 # 0.001 m^3/s*m^2 = .196 cfm/ft2
37
- case building_vintage
51
+ case building_vintage
38
52
  when 'DOE Ref Pre-1980', 'DOE Ref 1980-2004'
39
53
  self.setConstantMinimumAirFlowFraction(min_damper_position)
40
54
  else
41
55
  # High OA zones
42
56
  if building_type == "Outpatient"
43
57
  self.setConstantMinimumAirFlowFraction(1)
58
+ elsif building_type == "Hospital"
59
+ case building_vintage
60
+ when '90.1-2010', '90.1-2013'
61
+ if vav_name.include? "PatRoom"
62
+ self.setConstantMinimumAirFlowFraction(0.5)
63
+ else
64
+ self.setConstantMinimumAirFlowFraction(1)
65
+ end
66
+ when '90.1-2004', '90.1-2007'
67
+ self.setConstantMinimumAirFlowFraction(1)
68
+ end
69
+
44
70
  else
45
71
  self.setConstantMinimumAirFlowFraction(0.7)
46
72
  end
@@ -51,7 +77,7 @@ class OpenStudio::Model::AirTerminalSingleDuctVAVReheat
51
77
  end
52
78
 
53
79
  return true
54
-
80
+
55
81
  end
56
82
 
57
83
  end
@@ -3,9 +3,9 @@
3
3
  class OpenStudio::Model::Model
4
4
 
5
5
  def add_hvac(building_type, building_vintage, climate_zone, prototype_input)
6
-
6
+
7
7
  OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started Adding HVAC')
8
-
8
+
9
9
  # Get the list of HVAC systems, as defined
10
10
  # for each building in the Prototype.building_name files.
11
11
  system_to_space_map = define_hvac_system_map(building_type, building_vintage, climate_zone)
@@ -13,21 +13,21 @@ class OpenStudio::Model::Model
13
13
  # Add each HVAC system
14
14
  system_to_space_map.each do |system|
15
15
 
16
- thermal_zones = get_zones_from_spaces_on_system(system)
16
+ thermal_zones = get_zones_from_spaces_on_system(system)
17
+
18
+ return_plenum = get_return_plenum_from_system(system)
17
19
 
18
- return_plenum = get_return_plenum_from_system(system)
19
-
20
20
  # Add the HVAC systems
21
21
  case system['type']
22
22
  when 'VAV'
23
-
23
+
24
24
  # Retrieve the existing hot water loop
25
25
  # or add a new one if necessary.
26
26
  hot_water_loop = nil
27
27
  if self.getPlantLoopByName('Hot Water Loop').is_initialized
28
28
  hot_water_loop = self.getPlantLoopByName('Hot Water Loop').get
29
29
  else
30
- hot_water_loop = self.add_hw_loop('NaturalGas',building_type)
30
+ hot_water_loop = self.add_hw_loop('NaturalGas', building_type)
31
31
  end
32
32
 
33
33
  # Retrieve the existing chilled water loop
@@ -37,36 +37,49 @@ class OpenStudio::Model::Model
37
37
  chilled_water_loop = self.getPlantLoopByName('Chilled Water Loop').get
38
38
  else
39
39
  condenser_water_loop = nil
40
+ number_cooling_towers = 1
41
+ num_chillers = 1
42
+ if building_type == "Hospital" or building_type == "LargeOffice"
43
+ case building_vintage
44
+ when '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
45
+ number_cooling_towers = 2
46
+ num_chillers = 2
47
+ end
48
+ end
40
49
  if prototype_input['chiller_cooling_type'] == 'WaterCooled'
41
- condenser_water_loop = self.add_cw_loop()
50
+ condenser_water_loop = self.add_cw_loop(building_type, building_vintage, number_cooling_towers)
42
51
  end
43
-
44
- chilled_water_loop = self.add_chw_loop(building_vintage,
45
- prototype_input['chw_pumping_type'],
46
- prototype_input['chiller_cooling_type'],
47
- prototype_input['chiller_condenser_type'],
48
- prototype_input['chiller_compressor_type'],
49
- prototype_input['chiller_capacity_guess'],
50
- condenser_water_loop)
51
-
52
+ chilled_water_loop = self.add_chw_loop(
53
+ building_vintage,
54
+ prototype_input['chw_pumping_type'],
55
+ prototype_input['chiller_cooling_type'],
56
+ prototype_input['chiller_condenser_type'],
57
+ prototype_input['chiller_compressor_type'],
58
+ prototype_input['chiller_capacity_guess'],
59
+ condenser_water_loop,
60
+ building_type,
61
+ num_chillers
62
+ )
52
63
  end
53
-
64
+
54
65
  # Add the VAV
55
- self.add_vav_reheat(building_vintage,
56
- system['name'],
57
- hot_water_loop,
58
- chilled_water_loop,
59
- thermal_zones,
60
- prototype_input['vav_operation_schedule'],
61
- prototype_input['vav_oa_damper_schedule'],
62
- prototype_input['vav_fan_efficiency'],
63
- prototype_input['vav_fan_motor_efficiency'],
64
- prototype_input['vav_fan_pressure_rise'],
65
- return_plenum,
66
- building_type)
67
-
66
+ self.add_vav_reheat(building_vintage,
67
+ system['name'],
68
+ hot_water_loop,
69
+ chilled_water_loop,
70
+ thermal_zones,
71
+ prototype_input['vav_operation_schedule'],
72
+ prototype_input['vav_oa_damper_schedule'],
73
+ prototype_input['vav_fan_efficiency'],
74
+ prototype_input['vav_fan_motor_efficiency'],
75
+ prototype_input['vav_fan_pressure_rise'],
76
+ return_plenum,
77
+ building_type
78
+ )
79
+
80
+
68
81
  when 'CAV'
69
-
82
+
70
83
  # Retrieve the existing hot water loop
71
84
  # or add a new one if necessary.
72
85
  hot_water_loop = nil
@@ -75,7 +88,25 @@ class OpenStudio::Model::Model
75
88
  else
76
89
  hot_water_loop = self.add_hw_loop('NaturalGas',building_type)
77
90
  end
78
-
91
+
92
+ chilled_water_loop = nil
93
+ if self.getPlantLoopByName('Chilled Water Loop').is_initialized
94
+ chilled_water_loop = self.getPlantLoopByName('Chilled Water Loop').get
95
+ elsif building_type == 'Hospital'
96
+ condenser_water_loop = nil
97
+ if prototype_input['chiller_cooling_type'] == 'WaterCooled'
98
+ condenser_water_loop = self.add_cw_loop()
99
+ end
100
+
101
+ chilled_water_loop = self.add_chw_loop(building_vintage,
102
+ prototype_input['chw_pumping_type'],
103
+ prototype_input['chiller_cooling_type'],
104
+ prototype_input['chiller_condenser_type'],
105
+ prototype_input['chiller_compressor_type'],
106
+ prototype_input['chiller_capacity_guess'],
107
+ condenser_water_loop)
108
+ end
109
+
79
110
  # Add the CAV
80
111
  self.add_cav(building_vintage,
81
112
  system['name'],
@@ -86,10 +117,11 @@ class OpenStudio::Model::Model
86
117
  prototype_input['vav_fan_efficiency'],
87
118
  prototype_input['vav_fan_motor_efficiency'],
88
119
  prototype_input['vav_fan_pressure_rise'],
120
+ chilled_water_loop,
89
121
  building_type)
90
-
122
+
91
123
  when 'PSZ-AC'
92
-
124
+
93
125
  # Special logic to differentiate between operation schedules
94
126
  # that vary even inside of a system type for stripmall.
95
127
  hvac_op_sch = nil
@@ -104,36 +136,36 @@ class OpenStudio::Model::Model
104
136
  hvac_op_sch = prototype_input['pszac_operation_schedule_3']
105
137
  oa_sch = prototype_input['pszac_oa_damper_schedule_3']
106
138
  end
107
-
139
+
108
140
  # Special logic to make unitary heat pumps all blow-through
109
141
  fan_position = 'DrawThrough'
110
142
  if prototype_input['pszac_heating_type'] == 'Single Speed Heat Pump' ||
111
143
  prototype_input['pszac_heating_type'] == 'Water To Air Heat Pump'
112
144
  fan_position = 'BlowThrough'
113
145
  end
114
-
146
+
115
147
  # Special logic to make a heat pump loop if necessary
116
148
  heat_pump_loop = nil
117
149
  if prototype_input['pszac_heating_type'] == 'Water To Air Heat Pump'
118
150
  heat_pump_loop = add_hp_loop(building_type)
119
151
  end
120
-
121
- self.add_psz_ac(building_vintage,
122
- system['name'],
152
+
153
+ self.add_psz_ac(building_vintage,
154
+ system['name'],
123
155
  heat_pump_loop, # Typically nil unless water source hp
124
156
  heat_pump_loop, # Typically nil unless water source hp
125
- thermal_zones,
157
+ thermal_zones,
126
158
  hvac_op_sch,
127
159
  oa_sch,
128
- fan_position,
160
+ fan_position,
129
161
  prototype_input['pszac_fan_type'],
130
162
  prototype_input['pszac_heating_type'],
131
163
  prototype_input['pszac_supplemental_heating_type'],
132
164
  prototype_input['pszac_cooling_type'],
133
165
  building_type)
134
-
166
+
135
167
  when 'PVAV'
136
-
168
+
137
169
  # Retrieve the existing hot water loop
138
170
  # or add a new one if necessary.
139
171
  hot_water_loop = nil
@@ -143,19 +175,19 @@ class OpenStudio::Model::Model
143
175
  hot_water_loop = nil
144
176
  else
145
177
  hot_water_loop = self.add_hw_loop('NaturalGas',building_type)
146
- end
178
+ end
147
179
 
148
- self.add_pvav(building_vintage,
149
- system['name'],
150
- thermal_zones,
180
+ self.add_pvav(building_vintage,
181
+ system['name'],
182
+ thermal_zones,
151
183
  prototype_input['vav_operation_schedule'],
152
184
  prototype_input['vav_oa_damper_schedule'],
153
185
  hot_water_loop,
154
- return_plenum,
186
+ return_plenum,
155
187
  building_type)
156
-
188
+
157
189
  when 'DOAS'
158
-
190
+
159
191
  # Retrieve the existing hot water loop
160
192
  # or add a new one if necessary.
161
193
  hot_water_loop = nil
@@ -175,7 +207,7 @@ class OpenStudio::Model::Model
175
207
  if prototype_input['chiller_cooling_type'] == 'WaterCooled'
176
208
  condenser_water_loop = self.add_cw_loop()
177
209
  end
178
-
210
+
179
211
  chilled_water_loop = self.add_chw_loop(building_vintage,
180
212
  prototype_input['chw_pumping_type'],
181
213
  prototype_input['chiller_cooling_type'],
@@ -183,21 +215,21 @@ class OpenStudio::Model::Model
183
215
  prototype_input['chiller_compressor_type'],
184
216
  prototype_input['chiller_capacity_guess'],
185
217
  condenser_water_loop)
186
- end
218
+ end
187
219
 
188
- self.add_doas(building_vintage,
189
- system['name'],
190
- hot_water_loop,
220
+ self.add_doas(building_vintage,
221
+ system['name'],
222
+ hot_water_loop,
191
223
  chilled_water_loop,
192
224
  thermal_zones,
193
225
  prototype_input['vav_operation_schedule'],
194
226
  prototype_input['doas_oa_damper_schedule'],
195
227
  prototype_input['doas_fan_maximum_flow_rate'],
196
228
  prototype_input['doas_economizer_control_type'],
197
- building_type)
229
+ building_type)
198
230
 
199
231
  when 'DC' # Data Center
200
-
232
+
201
233
  # Retrieve the existing hot water loop
202
234
  # or add a new one if necessary.
203
235
  hot_water_loop = nil
@@ -205,8 +237,8 @@ class OpenStudio::Model::Model
205
237
  hot_water_loop = self.getPlantLoopByName('Hot Water Loop').get
206
238
  else
207
239
  hot_water_loop = self.add_hw_loop('NaturalGas',building_type)
208
- end
209
-
240
+ end
241
+
210
242
  # Retrieve the existing heat pump loop
211
243
  # or add a new one if necessary.
212
244
  heat_pump_loop = nil
@@ -215,7 +247,7 @@ class OpenStudio::Model::Model
215
247
  else
216
248
  heat_pump_loop = self.add_hp_loop(building_type)
217
249
  end
218
-
250
+
219
251
  self.add_data_center_hvac(building_vintage,
220
252
  nil,
221
253
  hot_water_loop,
@@ -224,12 +256,12 @@ class OpenStudio::Model::Model
224
256
  prototype_input['flow_fraction_schedule_name'],
225
257
  prototype_input['flow_fraction_schedule_name'],
226
258
  system['main_data_center'])
227
-
259
+
228
260
  when 'SAC'
229
-
230
- self.add_split_AC(building_vintage,
261
+
262
+ self.add_split_AC(building_vintage,
231
263
  nil,
232
- thermal_zones,
264
+ thermal_zones,
233
265
  prototype_input['sac_operation_schedule'],
234
266
  prototype_input['sac_operation_schedule_meeting'],
235
267
  prototype_input['sac_oa_damper_schedule'],
@@ -240,10 +272,10 @@ class OpenStudio::Model::Model
240
272
  building_type)
241
273
 
242
274
  when 'UnitHeater'
243
-
244
- self.add_unitheater(building_vintage,
275
+
276
+ self.add_unitheater(building_vintage,
245
277
  nil,
246
- thermal_zones,
278
+ thermal_zones,
247
279
  prototype_input['unitheater_operation_schedule'],
248
280
  prototype_input['unitheater_fan_control_type'],
249
281
  prototype_input['unitheater_fan_static_pressure'],
@@ -252,17 +284,17 @@ class OpenStudio::Model::Model
252
284
 
253
285
  when 'PTAC'
254
286
 
255
- self.add_ptac(building_vintage,
287
+ self.add_ptac(building_vintage,
256
288
  nil,
257
289
  nil,
258
290
  thermal_zones,
259
291
  prototype_input['ptac_fan_type'],
260
292
  prototype_input['ptac_heating_type'],
261
293
  prototype_input['ptac_cooling_type'],
262
- building_type)
263
-
294
+ building_type)
295
+
264
296
  when 'Exhaust Fan'
265
-
297
+
266
298
  self.add_exhaust_fan(system['availability_sch_name'],
267
299
  system['flow_rate'],
268
300
  system['flow_fraction_schedule_name'],
@@ -270,14 +302,14 @@ class OpenStudio::Model::Model
270
302
  thermal_zones)
271
303
 
272
304
  when 'Zone Ventilation'
273
-
305
+
274
306
  self.add_zone_ventilation(system['availability_sch_name'],
275
307
  system['flow_rate'],
276
308
  system['ventilation_type'],
277
309
  thermal_zones)
278
310
 
279
311
  when 'Refrigeration'
280
-
312
+
281
313
  self.add_refrigeration(building_vintage,
282
314
  system['case_type'],
283
315
  system['cooling_capacity_per_length'],
@@ -293,23 +325,23 @@ class OpenStudio::Model::Model
293
325
  system['condenser_fan_pwr_curve_name'],
294
326
  thermal_zones[0])
295
327
  else
296
-
328
+
297
329
  OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "System type #{system['type']} is not recognized. This system will not be added.")
298
-
330
+
299
331
  end
300
332
 
301
333
  end
302
334
 
303
335
  OpenStudio::logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished adding HVAC')
304
-
336
+
305
337
  return true
306
-
338
+
307
339
  end #add hvac
308
340
 
309
341
  private
310
-
342
+
311
343
  def get_zones_from_spaces_on_system(system)
312
-
344
+
313
345
  # Find all zones associated with these spaces
314
346
  thermal_zones = []
315
347
  system['space_names'].each do |space_name|
@@ -323,22 +355,22 @@ class OpenStudio::Model::Model
323
355
  if zone.empty?
324
356
  OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "Space #{space_name} has no thermal zone; cannot add an HVAC system to this space.")
325
357
  next
326
- end
358
+ end
327
359
  thermal_zones << zone.get
328
- end
360
+ end
329
361
 
330
362
  return thermal_zones
331
-
363
+
332
364
  end
333
-
365
+
334
366
  def get_return_plenum_from_system(system)
335
367
 
336
368
  # Find the zone associated with the return plenum space name
337
369
  return_plenum = nil
338
-
370
+
339
371
  # Return nil if no return plenum
340
372
  return return_plenum if system['return_plenum'].nil?
341
-
373
+
342
374
  # Get the space
343
375
  space = self.getSpaceByName(system['return_plenum'])
344
376
  if space.empty?
@@ -346,16 +378,16 @@ class OpenStudio::Model::Model
346
378
  return return_plenum
347
379
  end
348
380
  space = space.get
349
-
381
+
350
382
  # Get the space's zone
351
383
  zone = space.thermalZone
352
384
  if zone.empty?
353
- OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "Space #{space_name} has no thermal zone; cannot be a return plenum.")
385
+ OpenStudio::logFree(OpenStudio::Error, 'openstudio.model.Model', "Space #{space_name} has no thermal zone; cannot be a return plenum.")
354
386
  return return_plenum
355
- end
387
+ end
356
388
 
357
389
  return zone.get
358
-
390
+
359
391
  end
360
-
392
+
361
393
  end