openstudio-standards 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +24 -8
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +4 -0
- data/lib/openstudio-standards/prototypes/Prototype.Model.rb +10 -0
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +38 -56
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +22 -61
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +3 -7
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +103 -271
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +62 -187
- data/lib/openstudio-standards/standards/Standards.CoilDX.rb +150 -0
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +6 -4
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +139 -208
- data/lib/openstudio-standards/standards/Standards.Model.rb +37 -12
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +110 -0
- data/lib/openstudio-standards/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb164d0538ce6852024fdd4a7a67a9a949f5fba6
|
4
|
+
data.tar.gz: e56317e0392df0e6401df7e4d4d72db2a11f057c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf4d7e8dba6a645484fb0967726344b73c6d03a44a59ba88b417c9f99536ef94cfbbc5190ea4f294e835a01bbd331d498ba1b0fa6f2852f94d64dae9ad2b8a48
|
7
|
+
data.tar.gz: 279327046dc5ba3b2fa5e9ef6c8eb1048081ac1ea6e9c02a47f56543a36f7426b21af38a352d836ea7f253c6bcec6f088d9e604f7ed92b2c98177b139db3a72a
|
@@ -172,12 +172,22 @@ class OpenStudio::Model::Model
|
|
172
172
|
if heating_coil.plantLoop.is_initialized
|
173
173
|
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
174
174
|
end
|
175
|
+
when 'OS_Coil_Heating_LowTemperatureRadiant_ConstantFlow'
|
176
|
+
heating_coil = heating_coil.to_CoilHeatingLowTempRadiantConstFlow.get
|
177
|
+
if heating_coil.plantLoop.is_initialized
|
178
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
179
|
+
end
|
180
|
+
when 'OS_Coil_Heating_LowTemperatureRadiant_VariableFlow'
|
181
|
+
heating_coil = heating_coil.to_CoilHeatingLowTempRadiantVarFlow.get
|
182
|
+
if heating_coil.plantLoop.is_initialized
|
183
|
+
fuels += self.plant_loop_heating_fuels(heating_coil.plantLoop.get)
|
184
|
+
end
|
175
185
|
when 'OS_Coil_WaterHeating_AirToWaterHeatPump'
|
176
186
|
fuels << 'Electricity'
|
177
187
|
when 'OS_Coil_WaterHeating_Desuperheater'
|
178
188
|
fuels << 'Electricity'
|
179
189
|
else
|
180
|
-
|
190
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.sizing.Model', "No heating fuel types found for #{obj_type}")
|
181
191
|
end
|
182
192
|
|
183
193
|
return fuels.uniq.sort
|
@@ -219,12 +229,12 @@ class OpenStudio::Model::Model
|
|
219
229
|
if cooling_coil.plantLoop.is_initialized
|
220
230
|
fuels += self.plant_loop_cooling_fuels(cooling_coil.plantLoop.get)
|
221
231
|
end
|
222
|
-
when '
|
232
|
+
when 'OS_Coil_Cooling_LowTemperatureRadiant_ConstantFlow'
|
223
233
|
cooling_coil = cooling_coil.to_CoilCoolingLowTempRadiantConstFlow.get
|
224
234
|
if cooling_coil.plantLoop.is_initialized
|
225
235
|
fuels += self.plant_loop_cooling_fuels(cooling_coil.plantLoop.get)
|
226
236
|
end
|
227
|
-
when '
|
237
|
+
when 'OS_Coil_Cooling_LowTemperatureRadiant_VariableFlow'
|
228
238
|
cooling_coil = cooling_coil.to_CoilCoolingLowTempRadiantVarFlow.get
|
229
239
|
if cooling_coil.plantLoop.is_initialized
|
230
240
|
fuels += self.plant_loop_cooling_fuels(cooling_coil.plantLoop.get)
|
@@ -235,7 +245,7 @@ class OpenStudio::Model::Model
|
|
235
245
|
fuels += self.plant_loop_cooling_fuels(cooling_coil.plantLoop.get)
|
236
246
|
end
|
237
247
|
else
|
238
|
-
|
248
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.sizing.Model', "No cooling fuel types found for #{obj_type}")
|
239
249
|
end
|
240
250
|
|
241
251
|
return fuels.uniq.sort
|
@@ -280,10 +290,10 @@ class OpenStudio::Model::Model
|
|
280
290
|
when 'OS_ZoneHVAC_FourPipeFanCoil'
|
281
291
|
equipment = equipment.to_ZoneHVACFourPipeFanCoil.get
|
282
292
|
fuels += self.coil_heating_fuels(equipment.heatingCoil)
|
283
|
-
when '
|
293
|
+
when 'OS_ZoneHVAC_LowTemperatureRadiant_ConstantFlow'
|
284
294
|
equipment = equipment.to_ZoneHVACLowTempRadiantConstFlow.get
|
285
295
|
fuels += self.coil_heating_fuels(equipment.heatingCoil)
|
286
|
-
when '
|
296
|
+
when 'OS_ZoneHVAC_LowTemperatureRadiant_VariableFlow'
|
287
297
|
equipment = equipment.to_ZoneHVACLowTempRadiantVarFlow.get
|
288
298
|
fuels += self.coil_heating_fuels(equipment.heatingCoil)
|
289
299
|
when 'OS_ZoneHVAC_UnitHeater'
|
@@ -317,7 +327,7 @@ class OpenStudio::Model::Model
|
|
317
327
|
equipment = equipment.to_ZoneHVACWaterToAirHeatPump.get
|
318
328
|
fuels += self.coil_heating_fuels(equipment.heatingCoil)
|
319
329
|
else
|
320
|
-
|
330
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.sizing.Model', "No heating fuel types found for #{obj_type}")
|
321
331
|
end
|
322
332
|
end
|
323
333
|
|
@@ -344,6 +354,12 @@ class OpenStudio::Model::Model
|
|
344
354
|
when 'OS_ZoneHVAC_FourPipeFanCoil'
|
345
355
|
equipment = equipment.to_ZoneHVACFourPipeFanCoil.get
|
346
356
|
fuels += self.coil_cooling_fuels(equipment.coolingCoil)
|
357
|
+
when 'OS_ZoneHVAC_LowTemperatureRadiant_ConstantFlow'
|
358
|
+
equipment = equipment.to_ZoneHVACLowTempRadiantConstFlow.get
|
359
|
+
fuels += self.coil_cooling_fuels(equipment.coolingCoil)
|
360
|
+
when 'OS_ZoneHVAC_LowTemperatureRadiant_VariableFlow'
|
361
|
+
equipment = equipment.to_ZoneHVACLowTempRadiantVarFlow.get
|
362
|
+
fuels += self.coil_cooling_fuels(equipment.coolingCoil)
|
347
363
|
when 'OS_Refrigeration_AirChiller'
|
348
364
|
fuels << 'Electricity'
|
349
365
|
when 'OS_ZoneHVAC_IdealLoadsAirSystem'
|
@@ -355,7 +371,7 @@ class OpenStudio::Model::Model
|
|
355
371
|
when 'OS_ZoneHVAC_TerminalUnit_VariableRefrigerantFlow'
|
356
372
|
fuels << 'Electricity'
|
357
373
|
else
|
358
|
-
|
374
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.sizing.Model', "No cooling fuel types found for #{obj_type}")
|
359
375
|
end
|
360
376
|
end
|
361
377
|
|
@@ -266,6 +266,8 @@ class OpenStudio::Model::ThermalZone
|
|
266
266
|
# Check the zone airloop heating fuels
|
267
267
|
fuels += self.model.zone_airloop_heating_fuels(self)
|
268
268
|
|
269
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.model.Model', "For #{name}, heating fuels = #{fuels.uniq.sort.join(', ')}.")
|
270
|
+
|
269
271
|
return fuels.uniq.sort
|
270
272
|
|
271
273
|
end
|
@@ -289,6 +291,8 @@ class OpenStudio::Model::ThermalZone
|
|
289
291
|
# Check the zone airloop cooling fuels
|
290
292
|
fuels += self.model.zone_airloop_cooling_fuels(self)
|
291
293
|
|
294
|
+
OpenStudio::logFree(OpenStudio::Debug, 'openstudio.model.Model', "For #{name}, cooling fuels = #{fuels.uniq.sort.join(', ')}.")
|
295
|
+
|
292
296
|
return fuels.uniq.sort
|
293
297
|
|
294
298
|
end
|
@@ -100,6 +100,16 @@ class OpenStudio::Model::Model
|
|
100
100
|
getClimateZones.setClimateZone('ASHRAE', climate_zone.gsub('ASHRAE 169-2006-', ''))
|
101
101
|
end
|
102
102
|
|
103
|
+
# For some building types, stories are defined explicitly
|
104
|
+
if building_type == 'SmallHotel'
|
105
|
+
building_story_map = define_building_story_map(building_type, template, climate_zone)
|
106
|
+
assign_building_story(building_type, template, climate_zone, building_story_map)
|
107
|
+
end
|
108
|
+
|
109
|
+
# Assign building stories to spaces in the building
|
110
|
+
# where stories are not yet assigned.
|
111
|
+
assign_spaces_to_stories
|
112
|
+
|
103
113
|
# Perform a sizing run
|
104
114
|
if runSizingRun("#{sizing_run_dir}/SizingRun1") == false
|
105
115
|
return false
|
@@ -34,13 +34,11 @@ class OpenStudio::Model::BoilerHotWater
|
|
34
34
|
return search_criteria
|
35
35
|
end
|
36
36
|
|
37
|
-
#
|
37
|
+
# Find capacity in W
|
38
38
|
#
|
39
|
-
# @return [Double]
|
39
|
+
# @return [Double] capacity in W
|
40
40
|
def find_capacity
|
41
|
-
# Get the capacity
|
42
41
|
capacity_w = nil
|
43
|
-
capacity_btu_per_hr = nil
|
44
42
|
if nominalCapacity.is_initialized
|
45
43
|
capacity_w = nominalCapacity.get
|
46
44
|
elsif autosizedNominalCapacity.is_initialized
|
@@ -51,10 +49,7 @@ class OpenStudio::Model::BoilerHotWater
|
|
51
49
|
return successfully_set_all_properties
|
52
50
|
end
|
53
51
|
|
54
|
-
|
55
|
-
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
56
|
-
|
57
|
-
return capacity_btu_per_hr
|
52
|
+
return capacity_w
|
58
53
|
end
|
59
54
|
|
60
55
|
# Finds lookup object in standards and return minimum thermal efficiency
|
@@ -62,30 +57,39 @@ class OpenStudio::Model::BoilerHotWater
|
|
62
57
|
# @param template [String] valid choices: 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
63
58
|
# @param standards [Hash] the OpenStudio_Standards spreadsheet in hash format
|
64
59
|
# @return [Double] minimum thermal efficiency
|
65
|
-
def standard_minimum_thermal_efficiency(template,
|
60
|
+
def standard_minimum_thermal_efficiency(template, rename=false)
|
66
61
|
# Get the boiler properties
|
67
62
|
search_criteria = find_search_criteria(template)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
fuel_type = blr_props['fuel_type']
|
72
|
-
fluid_type = blr_props['fluid_type']
|
63
|
+
capacity_w = find_capacity
|
64
|
+
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
65
|
+
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
73
66
|
|
74
67
|
# Get the minimum efficiency standards
|
75
68
|
thermal_eff = nil
|
76
69
|
|
70
|
+
# Get the boiler properties
|
71
|
+
blr_props = model.find_object($os_standards['boilers'], search_criteria, capacity_btu_per_hr)
|
72
|
+
unless blr_props
|
73
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name}, cannot find boiler properties, cannot apply efficiency standard.")
|
74
|
+
successfully_set_all_properties = false
|
75
|
+
return successfully_set_all_properties
|
76
|
+
end
|
77
|
+
|
78
|
+
fuel_type = blr_props['fuel_type']
|
79
|
+
fluid_type = blr_props['fluid_type']
|
80
|
+
|
77
81
|
# If specified as AFUE
|
78
82
|
unless blr_props['minimum_annual_fuel_utilization_efficiency'].nil?
|
79
83
|
min_afue = blr_props['minimum_annual_fuel_utilization_efficiency']
|
80
84
|
thermal_eff = afue_to_thermal_eff(min_afue)
|
81
|
-
|
85
|
+
new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE"
|
82
86
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}")
|
83
87
|
end
|
84
88
|
|
85
89
|
# If specified as thermal efficiency
|
86
90
|
unless blr_props['minimum_thermal_efficiency'].nil?
|
87
91
|
thermal_eff = blr_props['minimum_thermal_efficiency']
|
88
|
-
|
92
|
+
new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff"
|
89
93
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}")
|
90
94
|
end
|
91
95
|
|
@@ -93,10 +97,15 @@ class OpenStudio::Model::BoilerHotWater
|
|
93
97
|
unless blr_props['minimum_combustion_efficiency'].nil?
|
94
98
|
min_comb_eff = blr_props['minimum_combustion_efficiency']
|
95
99
|
thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff)
|
96
|
-
|
100
|
+
new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff"
|
97
101
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}")
|
98
102
|
end
|
99
103
|
|
104
|
+
# Rename
|
105
|
+
if rename
|
106
|
+
setName(new_comp_name)
|
107
|
+
end
|
108
|
+
|
100
109
|
return thermal_eff
|
101
110
|
end
|
102
111
|
|
@@ -106,46 +115,16 @@ class OpenStudio::Model::BoilerHotWater
|
|
106
115
|
# @param standards [Hash] the OpenStudio_Standards spreadsheet in hash format
|
107
116
|
# @return [Bool] true if successful, false if not
|
108
117
|
def apply_efficiency_and_curves(template)
|
109
|
-
successfully_set_all_properties = false
|
110
|
-
|
111
|
-
boilers = $os_standards['boilers']
|
118
|
+
successfully_set_all_properties = false
|
112
119
|
|
113
120
|
# Define the criteria to find the boiler properties
|
114
121
|
# in the hvac standards data set.
|
115
|
-
search_criteria =
|
116
|
-
search_criteria['
|
117
|
-
|
118
|
-
# Get fuel type
|
119
|
-
fuel_type = nil
|
120
|
-
case fuelType
|
121
|
-
when 'NaturalGas'
|
122
|
-
fuel_type = 'Gas'
|
123
|
-
when 'Electricity'
|
124
|
-
fuel_type = 'Electric'
|
125
|
-
when 'FuelOil#1', 'FuelOil#2'
|
126
|
-
fuel_type = 'Oil'
|
127
|
-
else
|
128
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name}, a fuel type of #{fuelType} is not yet supported. Assuming 'Gas.'")
|
129
|
-
fuel_type = 'Gas'
|
130
|
-
end
|
131
|
-
|
132
|
-
search_criteria['fuel_type'] = fuel_type
|
133
|
-
|
134
|
-
# Get the fluid type
|
135
|
-
fluid_type = 'Hot Water'
|
136
|
-
search_criteria['fluid_type'] = fluid_type
|
122
|
+
search_criteria = find_search_criteria(template)
|
123
|
+
fuel_type = search_criteria['fuel_type']
|
124
|
+
fluid_type = search_criteria['fluid_type']
|
137
125
|
|
138
126
|
# Get the capacity
|
139
|
-
capacity_w =
|
140
|
-
if nominalCapacity.is_initialized
|
141
|
-
capacity_w = nominalCapacity.get
|
142
|
-
elsif autosizedNominalCapacity.is_initialized
|
143
|
-
capacity_w = autosizedNominalCapacity.get
|
144
|
-
else
|
145
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name} capacity is not available, cannot apply efficiency standard.")
|
146
|
-
successfully_set_all_properties = false
|
147
|
-
return successfully_set_all_properties
|
148
|
-
end
|
127
|
+
capacity_w = find_capacity
|
149
128
|
|
150
129
|
# for NECB, check if secondary and/or modulating boiler required
|
151
130
|
if template == 'NECB 2011'
|
@@ -179,7 +158,7 @@ class OpenStudio::Model::BoilerHotWater
|
|
179
158
|
end
|
180
159
|
|
181
160
|
# Get the boiler properties
|
182
|
-
blr_props = model.find_object(boilers, search_criteria, capacity_btu_per_hr)
|
161
|
+
blr_props = model.find_object($os_standards['boilers'], search_criteria, capacity_btu_per_hr)
|
183
162
|
unless blr_props
|
184
163
|
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{name}, cannot find boiler properties, cannot apply efficiency standard.")
|
185
164
|
successfully_set_all_properties = false
|
@@ -202,14 +181,14 @@ class OpenStudio::Model::BoilerHotWater
|
|
202
181
|
unless blr_props['minimum_annual_fuel_utilization_efficiency'].nil?
|
203
182
|
min_afue = blr_props['minimum_annual_fuel_utilization_efficiency']
|
204
183
|
thermal_eff = afue_to_thermal_eff(min_afue)
|
205
|
-
|
184
|
+
new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE"
|
206
185
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}")
|
207
186
|
end
|
208
187
|
|
209
188
|
# If specified as thermal efficiency
|
210
189
|
unless blr_props['minimum_thermal_efficiency'].nil?
|
211
190
|
thermal_eff = blr_props['minimum_thermal_efficiency']
|
212
|
-
|
191
|
+
new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff"
|
213
192
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}")
|
214
193
|
end
|
215
194
|
|
@@ -217,10 +196,13 @@ class OpenStudio::Model::BoilerHotWater
|
|
217
196
|
unless blr_props['minimum_combustion_efficiency'].nil?
|
218
197
|
min_comb_eff = blr_props['minimum_combustion_efficiency']
|
219
198
|
thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff)
|
220
|
-
|
199
|
+
new_comp_name = "#{name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff"
|
221
200
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{name}: #{fuel_type} #{fluid_type} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}")
|
222
201
|
end
|
223
202
|
|
203
|
+
# Set the name
|
204
|
+
setName(new_comp_name)
|
205
|
+
|
224
206
|
# Set the efficiency values
|
225
207
|
unless thermal_eff.nil?
|
226
208
|
setNominalThermalEfficiency(thermal_eff)
|
@@ -6,11 +6,17 @@ class OpenStudio::Model::ChillerElectricEIR
|
|
6
6
|
# @param template [String] valid choices: 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
7
7
|
# @return [hash] has for search criteria to be used for find object
|
8
8
|
def find_search_criteria(template)
|
9
|
-
# Define the criteria to find the chiller properties
|
10
|
-
# in the hvac standards data set.
|
11
9
|
search_criteria = {}
|
12
10
|
search_criteria['template'] = template
|
13
|
-
|
11
|
+
|
12
|
+
# Determine if WaterCooled or AirCooled by
|
13
|
+
# checking if the chiller is connected to a condenser
|
14
|
+
# water loop or not.
|
15
|
+
cooling_type = 'AirCooled'
|
16
|
+
if secondaryPlantLoop.is_initialized
|
17
|
+
cooling_type = 'WaterCooled'
|
18
|
+
end
|
19
|
+
|
14
20
|
search_criteria['cooling_type'] = cooling_type
|
15
21
|
|
16
22
|
# TODO: Standards replace this with a mechanism to store this
|
@@ -19,13 +25,13 @@ class OpenStudio::Model::ChillerElectricEIR
|
|
19
25
|
name = self.name.get
|
20
26
|
condenser_type = nil
|
21
27
|
compressor_type = nil
|
22
|
-
if
|
28
|
+
if cooling_type == 'AirCooled'
|
23
29
|
if name.include?('WithCondenser')
|
24
30
|
condenser_type = 'WithCondenser'
|
25
31
|
elsif name.include?('WithoutCondenser')
|
26
32
|
condenser_type = 'WithoutCondenser'
|
27
33
|
end
|
28
|
-
elsif
|
34
|
+
elsif cooling_type == 'WaterCooled'
|
29
35
|
if name.include?('Reciprocating')
|
30
36
|
compressor_type = 'Reciprocating'
|
31
37
|
elsif name.include?('Rotary Screw')
|
@@ -46,11 +52,10 @@ class OpenStudio::Model::ChillerElectricEIR
|
|
46
52
|
return search_criteria
|
47
53
|
end
|
48
54
|
|
49
|
-
# Finds capacity in
|
55
|
+
# Finds capacity in W
|
50
56
|
#
|
51
|
-
# @return [Double] capacity in
|
57
|
+
# @return [Double] capacity in W to be used for find object
|
52
58
|
def find_capacity
|
53
|
-
# Get the chiller capacity
|
54
59
|
capacity_w = nil
|
55
60
|
if referenceCapacity.is_initialized
|
56
61
|
capacity_w = referenceCapacity.get
|
@@ -62,9 +67,7 @@ class OpenStudio::Model::ChillerElectricEIR
|
|
62
67
|
return successfully_set_all_properties
|
63
68
|
end
|
64
69
|
|
65
|
-
|
66
|
-
|
67
|
-
return capacity_tons
|
70
|
+
return capacity_w
|
68
71
|
end
|
69
72
|
|
70
73
|
# Finds lookup object in standards and return full load efficiency
|
@@ -72,11 +75,11 @@ class OpenStudio::Model::ChillerElectricEIR
|
|
72
75
|
# @param template [String] valid choices: 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
73
76
|
# @param standards [Hash] the OpenStudio_Standards spreadsheet in hash format
|
74
77
|
# @return [Double] full load efficiency (COP)
|
75
|
-
def standard_minimum_full_load_efficiency(template
|
78
|
+
def standard_minimum_full_load_efficiency(template)
|
76
79
|
# Get the chiller properties
|
77
80
|
search_criteria = find_search_criteria(template)
|
78
|
-
capacity_tons = find_capacity
|
79
|
-
chlr_props = model.find_object(
|
81
|
+
capacity_tons = OpenStudio.convert(find_capacity, 'W', 'ton').get
|
82
|
+
chlr_props = model.find_object($os_standards['chillers'], search_criteria, capacity_tons, Date.today)
|
80
83
|
|
81
84
|
# lookup the efficiency value
|
82
85
|
kw_per_ton = nil
|
@@ -98,58 +101,16 @@ class OpenStudio::Model::ChillerElectricEIR
|
|
98
101
|
# @return [Bool] true if successful, false if not
|
99
102
|
def apply_efficiency_and_curves(template, clg_tower_objs)
|
100
103
|
chillers = $os_standards['chillers']
|
101
|
-
curve_biquadratics = $os_standards['curve_biquadratics']
|
102
|
-
curve_quadratics = $os_standards['curve_quadratics']
|
103
|
-
curve_bicubics = $os_standards['curve_bicubics']
|
104
104
|
|
105
105
|
# Define the criteria to find the chiller properties
|
106
106
|
# in the hvac standards data set.
|
107
|
-
search_criteria =
|
108
|
-
search_criteria['
|
109
|
-
|
110
|
-
search_criteria['
|
111
|
-
|
112
|
-
# TODO: Standards replace this with a mechanism to store this
|
113
|
-
# data in the chiller object itself.
|
114
|
-
# For now, retrieve the condenser type from the name
|
115
|
-
name = self.name.get
|
116
|
-
condenser_type = nil
|
117
|
-
compressor_type = nil
|
118
|
-
if name.include?('AirCooled')
|
119
|
-
if name.include?('WithCondenser')
|
120
|
-
condenser_type = 'WithCondenser'
|
121
|
-
elsif name.include?('WithoutCondenser')
|
122
|
-
condenser_type = 'WithoutCondenser'
|
123
|
-
end
|
124
|
-
elsif name.include?('WaterCooled')
|
125
|
-
if name.include?('Reciprocating')
|
126
|
-
compressor_type = 'Reciprocating'
|
127
|
-
elsif name.include?('Rotary Screw')
|
128
|
-
compressor_type = 'Rotary Screw'
|
129
|
-
elsif name.include?('Scroll')
|
130
|
-
compressor_type = 'Scroll'
|
131
|
-
elsif name.include?('Centrifugal')
|
132
|
-
compressor_type = 'Centrifugal'
|
133
|
-
end
|
134
|
-
end
|
135
|
-
unless condenser_type.nil?
|
136
|
-
search_criteria['condenser_type'] = condenser_type
|
137
|
-
end
|
138
|
-
unless compressor_type.nil?
|
139
|
-
search_criteria['compressor_type'] = compressor_type
|
140
|
-
end
|
107
|
+
search_criteria = find_search_criteria(template)
|
108
|
+
cooling_type = search_criteria['cooling_type']
|
109
|
+
condenser_type = search_criteria['condenser_type']
|
110
|
+
compressor_type = search_criteria['compressor_type']
|
141
111
|
|
142
112
|
# Get the chiller capacity
|
143
|
-
capacity_w =
|
144
|
-
if referenceCapacity.is_initialized
|
145
|
-
capacity_w = referenceCapacity.get
|
146
|
-
elsif autosizedReferenceCapacity.is_initialized
|
147
|
-
capacity_w = autosizedReferenceCapacity.get
|
148
|
-
else
|
149
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{self.name} capacity is not available, cannot apply efficiency standard.")
|
150
|
-
successfully_set_all_properties = false
|
151
|
-
return successfully_set_all_properties
|
152
|
-
end
|
113
|
+
capacity_w = find_capacity
|
153
114
|
|
154
115
|
# NECB 2011 requires that all chillers be modulating down to 25% of their capacity
|
155
116
|
if template == 'NECB 2011'
|
@@ -4,14 +4,10 @@ class OpenStudio::Model::CoilCoolingDXMultiSpeed
|
|
4
4
|
# Applies the standard efficiency ratings and typical performance curves to this object.
|
5
5
|
#
|
6
6
|
# @param template [String] valid choices: 'DOE Ref Pre-1980', 'DOE Ref 1980-2004', '90.1-2004', '90.1-2007', '90.1-2010', '90.1-2013'
|
7
|
-
# @param standards [Hash] the OpenStudio_Standards spreadsheet in hash format
|
8
7
|
# @return [Bool] true if successful, false if not
|
9
|
-
def apply_efficiency_and_curves(template,
|
8
|
+
def apply_efficiency_and_curves(template, sql_db_vars_map)
|
10
9
|
successfully_set_all_properties = true
|
11
10
|
|
12
|
-
unitary_acs = standards['unitary_acs']
|
13
|
-
heat_pumps = standards['heat_pumps']
|
14
|
-
|
15
11
|
# Define the criteria to find the chiller properties
|
16
12
|
# in the hvac standards data set.
|
17
13
|
search_criteria = {}
|
@@ -119,9 +115,9 @@ class OpenStudio::Model::CoilCoolingDXMultiSpeed
|
|
119
115
|
# Lookup efficiencies depending on whether it is a unitary AC or a heat pump
|
120
116
|
ac_props = nil
|
121
117
|
ac_props = if heat_pump == true
|
122
|
-
model.find_object(heat_pumps, search_criteria, capacity_btu_per_hr, Date.today)
|
118
|
+
model.find_object($os_standards['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
|
123
119
|
else
|
124
|
-
model.find_object(unitary_acs, search_criteria, capacity_btu_per_hr, Date.today)
|
120
|
+
model.find_object($os_standards['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
|
125
121
|
end
|
126
122
|
|
127
123
|
# Check to make sure properties were found
|