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.
- 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
|