openstudio-standards 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/standards/OpenStudio_Standards.xlsx +0 -0
- data/data/standards/OpenStudio_Standards_chillers.json +5 -5
- data/data/standards/OpenStudio_Standards_construction_sets.json +2 -2
- data/data/standards/OpenStudio_Standards_curve_cubics.json +12 -0
- data/data/standards/OpenStudio_Standards_heat_pumps.json +2126 -72
- data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +766 -14
- data/data/standards/OpenStudio_Standards_heat_rejection.json +172 -0
- data/data/standards/OpenStudio_Standards_prototype_inputs.json +355 -267
- data/data/standards/OpenStudio_Standards_schedules.json +262 -10
- data/data/standards/OpenStudio_Standards_space_types.json +1466 -794
- data/data/standards/manage_OpenStudio_Standards.rb +19 -21
- data/data/weather/weather_info.csv +96 -0
- data/lib/openstudio-standards/btap/btap.rb +1 -1
- data/lib/openstudio-standards/btap/compliance.rb +135 -40
- data/lib/openstudio-standards/btap/envelope.rb +26 -5
- data/lib/openstudio-standards/btap/geometry.rb +11 -1
- data/lib/openstudio-standards/btap/hvac.rb +489 -56
- data/lib/openstudio-standards/btap/simmanager.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/HVACSizing.CoilHeatingDXMultiSpeed.rb +120 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXMultiSpeed.rb +151 -7
- data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGasMultiStage.rb +48 -7
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +14 -12
- data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -7
- data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +123 -91
- data/lib/openstudio-standards/prototypes/Prototype.Model.rb +130 -45
- data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +13 -7
- data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +332 -324
- data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +401 -99
- data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +309 -222
- data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +100 -80
- data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +37 -22
- data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +68 -53
- data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +109 -88
- data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +52 -4
- data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +230 -213
- data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +225 -218
- data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +29 -17
- data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +42 -32
- data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +331 -314
- data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +233 -219
- data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +40 -32
- data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +19 -6
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +576 -555
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +3 -1
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +35 -17
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +51 -23
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +255 -0
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +192 -0
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +65 -0
- data/lib/openstudio-standards/standards/Standards.Fan.rb +37 -6
- data/lib/openstudio-standards/standards/Standards.Model.rb +28 -3
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +3 -1
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +41 -15
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.Model.rb +509 -5
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +145 -5
- metadata +8 -3
- 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
|
-
|
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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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
|