openstudio-standards 0.1.6 → 0.1.7
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/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
|