openstudio-standards 0.2.15 → 0.2.16.rc1
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/geometry/ASHRAEHighriseApartment.osm +0 -27
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
- data/data/standards/test_performance_expected_dd_results.csv +710 -710
- data/lib/openstudio-standards/btap/btap_result.rb +2 -2
- data/lib/openstudio-standards/btap/reporting.rb +2 -2
- data/lib/openstudio-standards/btap/simmanager.rb +2 -2
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +0 -54
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +11 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +26 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +35 -16
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +23 -10
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +36 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +0 -3
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -3
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +2 -0
- data/lib/openstudio-standards/standards/Standards.Construction.rb +12 -6
- data/lib/openstudio-standards/standards/Standards.Model.rb +38 -7
- data/lib/openstudio-standards/standards/Standards.Space.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +7 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +32 -11
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22 -742
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +19 -559
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +5 -5
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +7 -7
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +370 -910
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.prototype_inputs.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +19 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +2380 -1300
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.prototype_inputs.json +6 -6
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_system.json +0 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +12 -12
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +140 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +1176 -312
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +172 -1132
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_sets.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +180 -1140
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_sets.json +14 -14
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +10 -10
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +9 -9
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +9 -9
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +12 -6
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +12 -6
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +16 -8
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +10 -20
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +209 -37
- data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +1 -0
- data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +16 -9
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/MidriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +9 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +10 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +9 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -8
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +14 -8
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +13 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +12 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +4 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +38 -19
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +15 -4
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +10 -651
- data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +8 -38
- data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +159 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +41 -43
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +7 -4
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards.rb +1 -0
- metadata +4 -2
|
@@ -20,8 +20,8 @@ module BTAP
|
|
|
20
20
|
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Electricity' AND RowName='Electricity:Facility'" +
|
|
21
21
|
" AND ColumnName='Electricity Maximum Value' AND Units='W'")
|
|
22
22
|
natural_gas_peak = model.sqlFile().get().execAndReturnFirstDouble("SELECT Value FROM tabulardatawithstrings WHERE ReportName='EnergyMeters'" +
|
|
23
|
-
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Gas' AND RowName='
|
|
24
|
-
" AND ColumnName='Gas Maximum Value' AND Units='W'")
|
|
23
|
+
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Natural Gas' AND RowName='NaturalGas:Facility'" +
|
|
24
|
+
" AND ColumnName='Natural Gas Maximum Value' AND Units='W'")
|
|
25
25
|
|
|
26
26
|
# Create hash to store all the collected data.
|
|
27
27
|
qaqc = {}
|
|
@@ -215,8 +215,8 @@ module BTAP
|
|
|
215
215
|
end
|
|
216
216
|
|
|
217
217
|
natural_gas_peak = model.sqlFile().get().execAndReturnFirstDouble("SELECT Value FROM tabulardatawithstrings WHERE ReportName='EnergyMeters'" +
|
|
218
|
-
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Gas' AND RowName='
|
|
219
|
-
" AND ColumnName='Gas Maximum Value' AND Units='W'")
|
|
218
|
+
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Natural Gas' AND RowName='NaturalGas:Facility'" +
|
|
219
|
+
" AND ColumnName='Natural Gas Maximum Value' AND Units='W'")
|
|
220
220
|
if natural_gas_peak.empty?
|
|
221
221
|
natural_gas_peak = 0.0
|
|
222
222
|
end
|
|
@@ -472,8 +472,8 @@ module BTAP
|
|
|
472
472
|
end
|
|
473
473
|
|
|
474
474
|
natural_gas_peak = model.sqlFile().get().execAndReturnFirstDouble("SELECT Value FROM tabulardatawithstrings WHERE ReportName='EnergyMeters'" +
|
|
475
|
-
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Gas' AND RowName='
|
|
476
|
-
" AND ColumnName='Gas Maximum Value' AND Units='W'")
|
|
475
|
+
" AND ReportForString='Entire Facility' AND TableName='Annual and Peak Values - Natural Gas' AND RowName='NaturalGas:Facility'" +
|
|
476
|
+
" AND ColumnName='Natural Gas Maximum Value' AND Units='W'")
|
|
477
477
|
if natural_gas_peak.empty?
|
|
478
478
|
natural_gas_peak = 0.0
|
|
479
479
|
end
|
|
@@ -54,60 +54,6 @@ class OpenStudio::Model::ControllerOutdoorAir
|
|
|
54
54
|
end
|
|
55
55
|
air_loop = oa_sys.airLoop.get
|
|
56
56
|
|
|
57
|
-
# Determine if the system is multizone
|
|
58
|
-
multizone = false
|
|
59
|
-
if air_loop.thermalZones.size > 1
|
|
60
|
-
multizone = true
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Determine if the system is variable volume
|
|
64
|
-
vav = false
|
|
65
|
-
air_loop.supplyComponents.reverse.each do |comp|
|
|
66
|
-
if comp.to_FanVariableVolume.is_initialized
|
|
67
|
-
vav = true
|
|
68
|
-
elsif comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized
|
|
69
|
-
fan = comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.get.supplyAirFan
|
|
70
|
-
if fan.to_FanVariableVolume.is_initialized
|
|
71
|
-
vav = true
|
|
72
|
-
end
|
|
73
|
-
elsif comp.to_AirLoopHVACUnitarySystem.is_initialized
|
|
74
|
-
fan = comp.to_AirLoopHVACUnitarySystem.get.supplyFan
|
|
75
|
-
if fan.is_initialized
|
|
76
|
-
if fan.get.to_FanVariableVolume.is_initialized
|
|
77
|
-
vav = true
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# If it is a multizone VAV system, get the system multiplier
|
|
84
|
-
# to work around the bug in EnergyPlus.
|
|
85
|
-
if multizone && vav
|
|
86
|
-
if oa.is_initialized
|
|
87
|
-
oa_val = oa.get
|
|
88
|
-
|
|
89
|
-
# Get the system multiplier
|
|
90
|
-
mult = 1
|
|
91
|
-
|
|
92
|
-
# Get all the zone multipliers
|
|
93
|
-
zn_mults = []
|
|
94
|
-
air_loop.thermalZones.each do |zone|
|
|
95
|
-
zn_mults << zone.multiplier
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
# Warn if there are different multipliers
|
|
99
|
-
uniq_mults = zn_mults.uniq
|
|
100
|
-
if uniq_mults.size > 1
|
|
101
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop.name}: not all zones on the system have an identical zone multiplier. Multipliers are: #{uniq_mults.join(', ')}.")
|
|
102
|
-
else
|
|
103
|
-
mult = uniq_mults[0]
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
oa_val = oa_val * mult
|
|
107
|
-
oa = OpenStudio::OptionalDouble.new(oa_val)
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
57
|
return oa
|
|
112
58
|
end
|
|
113
59
|
end
|
|
@@ -263,6 +263,11 @@ class OpenStudio::Model::Model
|
|
|
263
263
|
# Get the object type
|
|
264
264
|
obj_type = equipment.iddObjectType.valueName.to_s
|
|
265
265
|
case obj_type
|
|
266
|
+
when 'OS_AirLooHVAC_UnitarySystem'
|
|
267
|
+
equipment = equipment.to_AirLoopHVACUnitarySystem.get
|
|
268
|
+
if equipment.heatingCoil.is_initialized
|
|
269
|
+
fuels += self.coil_heating_fuels(equipment.heatingCoil.get)
|
|
270
|
+
end
|
|
266
271
|
when 'OS_AirTerminal_SingleDuct_ConstantVolume_FourPipeInduction'
|
|
267
272
|
equipment = equipment.to_AirTerminalSingleDuctConstantVolumeFourPipeInduction.get
|
|
268
273
|
fuels += self.coil_heating_fuels(equipment.heatingCoil)
|
|
@@ -350,7 +355,12 @@ class OpenStudio::Model::Model
|
|
|
350
355
|
zone.equipment.each do |equipment|
|
|
351
356
|
# Get the object type
|
|
352
357
|
obj_type = equipment.iddObjectType.valueName.to_s
|
|
353
|
-
case obj_type
|
|
358
|
+
case obj_type
|
|
359
|
+
when 'OS_AirLoopHVAC_UnitarySystem'
|
|
360
|
+
equipment = equipment.to_AirLoopHVACUnitarySystem.get
|
|
361
|
+
if equipment.coolingCoil.is_initialized
|
|
362
|
+
fuels += self.coil_cooling_fuels(equipment.coolingCoil.get)
|
|
363
|
+
end
|
|
354
364
|
when 'OS_AirTerminal_SingleDuct_ConstantVolume_CooledBeam'
|
|
355
365
|
equipment = equipment.to_AirTerminalSingleDuctConstantVolumeCooledBeam.get
|
|
356
366
|
fuels += self.coil_cooling_fuels(equipment.coilCoolingCooledBeam)
|
|
@@ -9,6 +9,27 @@ module College
|
|
|
9
9
|
# @param prototype_input [Hash] hash of prototype inputs
|
|
10
10
|
# @return [Bool] returns true if successful, false if not
|
|
11
11
|
def model_custom_hvac_tweaks(model, building_type, climate_zone, prototype_input)
|
|
12
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started building type specific adjustments')
|
|
13
|
+
|
|
14
|
+
model.getSpaces.each do |space|
|
|
15
|
+
if space.name.get.to_s == 'CB_PUBLIC_ELEVATORS_F1'
|
|
16
|
+
model_add_elevator(model,
|
|
17
|
+
space,
|
|
18
|
+
prototype_input['number_of_elevators'],
|
|
19
|
+
prototype_input['elevator_type'],
|
|
20
|
+
prototype_input['elevator_schedule'],
|
|
21
|
+
prototype_input['elevator_fan_schedule'],
|
|
22
|
+
prototype_input['elevator_fan_schedule'],
|
|
23
|
+
building_type)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished building type specific adjustments')
|
|
28
|
+
|
|
29
|
+
# add extra infiltration for entry door
|
|
30
|
+
add_door_infiltration(climate_zone, model)
|
|
31
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Added door infiltration')
|
|
32
|
+
|
|
12
33
|
return true
|
|
13
34
|
end
|
|
14
35
|
|
|
@@ -25,7 +46,7 @@ module College
|
|
|
25
46
|
infiltration_entrydoor.setName('entry door Infiltration')
|
|
26
47
|
infiltration_per_zone_entrydoor = 0
|
|
27
48
|
if template == '90.1-2004'
|
|
28
|
-
infiltration_per_zone_entrydoor =
|
|
49
|
+
infiltration_per_zone_entrydoor = 4.566024
|
|
29
50
|
infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
|
|
30
51
|
elsif template == '90.1-2007'
|
|
31
52
|
case climate_zone
|
|
@@ -35,10 +56,10 @@ module College
|
|
|
35
56
|
'ASHRAE 169-2006-4A',
|
|
36
57
|
'ASHRAE 169-2006-4B',
|
|
37
58
|
'ASHRAE 169-2006-4C'
|
|
38
|
-
infiltration_per_zone_entrydoor =
|
|
59
|
+
infiltration_per_zone_entrydoor = 3.204085
|
|
39
60
|
infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
|
|
40
61
|
else
|
|
41
|
-
infiltration_per_zone_entrydoor =
|
|
62
|
+
infiltration_per_zone_entrydoor = 4.566024
|
|
42
63
|
infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
|
|
43
64
|
end
|
|
44
65
|
elsif template == '90.1-2010' || template == '90.1-2013'
|
|
@@ -46,10 +67,10 @@ module College
|
|
|
46
67
|
when 'ASHRAE 169-2006-3A',
|
|
47
68
|
'ASHRAE 169-2006-3B',
|
|
48
69
|
'ASHRAE 169-2006-3C'
|
|
49
|
-
infiltration_per_zone_entrydoor =
|
|
70
|
+
infiltration_per_zone_entrydoor = 3.204085
|
|
50
71
|
infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
|
|
51
72
|
else
|
|
52
|
-
infiltration_per_zone_entrydoor =
|
|
73
|
+
infiltration_per_zone_entrydoor = 4.566024
|
|
53
74
|
infiltration_entrydoor.setSchedule(model_add_schedule(model, 'College INFIL_Door_Opening_SCH'))
|
|
54
75
|
end
|
|
55
76
|
end
|
|
@@ -44,22 +44,41 @@ class Standard
|
|
|
44
44
|
if type == 'OS default'
|
|
45
45
|
# use OS default curves
|
|
46
46
|
else # default curve set
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
47
|
+
if model.version < OpenStudio::VersionString.new('3.2.0')
|
|
48
|
+
clg_coil.setTotalCoolingCapacityCoefficient1(-4.30266987344639)
|
|
49
|
+
clg_coil.setTotalCoolingCapacityCoefficient2(7.18536990534372)
|
|
50
|
+
clg_coil.setTotalCoolingCapacityCoefficient3(-2.23946714486189)
|
|
51
|
+
clg_coil.setTotalCoolingCapacityCoefficient4(0.139995928440879)
|
|
52
|
+
clg_coil.setTotalCoolingCapacityCoefficient5(0.102660179888915)
|
|
53
|
+
clg_coil.setSensibleCoolingCapacityCoefficient1(6.0019444814887)
|
|
54
|
+
clg_coil.setSensibleCoolingCapacityCoefficient2(22.6300677244073)
|
|
55
|
+
clg_coil.setSensibleCoolingCapacityCoefficient3(-26.7960783730934)
|
|
56
|
+
clg_coil.setSensibleCoolingCapacityCoefficient4(-1.72374720346819)
|
|
57
|
+
clg_coil.setSensibleCoolingCapacityCoefficient5(0.490644802367817)
|
|
58
|
+
clg_coil.setSensibleCoolingCapacityCoefficient6(0.0693119353468141)
|
|
59
|
+
clg_coil.setCoolingPowerConsumptionCoefficient1(-5.67775976415698)
|
|
60
|
+
clg_coil.setCoolingPowerConsumptionCoefficient2(0.438988156976704)
|
|
61
|
+
clg_coil.setCoolingPowerConsumptionCoefficient3(5.845277342193)
|
|
62
|
+
clg_coil.setCoolingPowerConsumptionCoefficient4(0.141605667000125)
|
|
63
|
+
clg_coil.setCoolingPowerConsumptionCoefficient5(-0.168727936032429)
|
|
64
|
+
else
|
|
65
|
+
clg_coil.totalCoolingCapacityCurve.setCoefficient1Constant(-4.30266987344639)
|
|
66
|
+
clg_coil.totalCoolingCapacityCurve.setCoefficient2w(7.18536990534372)
|
|
67
|
+
clg_coil.totalCoolingCapacityCurve.setCoefficient3x(-2.23946714486189)
|
|
68
|
+
clg_coil.totalCoolingCapacityCurve.setCoefficient4y(0.139995928440879)
|
|
69
|
+
clg_coil.totalCoolingCapacityCurve.setCoefficient5z(0.102660179888915)
|
|
70
|
+
clg_coil.sensibleCoolingCapacityCurve.setCoefficient1Constant(6.0019444814887)
|
|
71
|
+
clg_coil.sensibleCoolingCapacityCurve.setCoefficient2v(22.6300677244073)
|
|
72
|
+
clg_coil.sensibleCoolingCapacityCurve.setCoefficient3w(-26.7960783730934)
|
|
73
|
+
clg_coil.sensibleCoolingCapacityCurve.setCoefficient4x(-1.72374720346819)
|
|
74
|
+
clg_coil.sensibleCoolingCapacityCurve.setCoefficient5y(0.490644802367817)
|
|
75
|
+
clg_coil.sensibleCoolingCapacityCurve.setCoefficient6z(0.0693119353468141)
|
|
76
|
+
clg_coil.coolingPowerConsumptionCurve.setCoefficient1Constant(-5.67775976415698)
|
|
77
|
+
clg_coil.coolingPowerConsumptionCurve.setCoefficient2w(0.438988156976704)
|
|
78
|
+
clg_coil.coolingPowerConsumptionCurve.setCoefficient3x(5.845277342193)
|
|
79
|
+
clg_coil.coolingPowerConsumptionCurve.setCoefficient4y(0.141605667000125)
|
|
80
|
+
clg_coil.coolingPowerConsumptionCurve.setCoefficient5z(-0.168727936032429)
|
|
81
|
+
end
|
|
63
82
|
end
|
|
64
83
|
|
|
65
84
|
return clg_coil
|
|
@@ -44,16 +44,29 @@ class Standard
|
|
|
44
44
|
if type == 'OS default'
|
|
45
45
|
# use OS default curves
|
|
46
46
|
else # default curve set
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
if model.version < OpenStudio::VersionString.new('3.2.0')
|
|
48
|
+
htg_coil.setHeatingCapacityCoefficient1(0.237847462869254)
|
|
49
|
+
htg_coil.setHeatingCapacityCoefficient2(-3.35823796081626)
|
|
50
|
+
htg_coil.setHeatingCapacityCoefficient3(3.80640467406376)
|
|
51
|
+
htg_coil.setHeatingCapacityCoefficient4(0.179200417311554)
|
|
52
|
+
htg_coil.setHeatingCapacityCoefficient5(0.12860719846082)
|
|
53
|
+
htg_coil.setHeatingPowerConsumptionCoefficient1(-3.79175529243238)
|
|
54
|
+
htg_coil.setHeatingPowerConsumptionCoefficient2(3.38799239505527)
|
|
55
|
+
htg_coil.setHeatingPowerConsumptionCoefficient3(1.5022612076303)
|
|
56
|
+
htg_coil.setHeatingPowerConsumptionCoefficient4(-0.177653510577989)
|
|
57
|
+
htg_coil.setHeatingPowerConsumptionCoefficient5(-0.103079864171839)
|
|
58
|
+
else
|
|
59
|
+
htg_coil.heatingCapacityCurve.setCoefficient1Constant(0.237847462869254)
|
|
60
|
+
htg_coil.heatingCapacityCurve.setCoefficient2w(-3.35823796081626)
|
|
61
|
+
htg_coil.heatingCapacityCurve.setCoefficient3x(3.80640467406376)
|
|
62
|
+
htg_coil.heatingCapacityCurve.setCoefficient4y(0.179200417311554)
|
|
63
|
+
htg_coil.heatingCapacityCurve.setCoefficient5z(0.12860719846082)
|
|
64
|
+
htg_coil.heatingPowerConsumptionCurve.setCoefficient1Constant(-3.79175529243238)
|
|
65
|
+
htg_coil.heatingPowerConsumptionCurve.setCoefficient2w(3.38799239505527)
|
|
66
|
+
htg_coil.heatingPowerConsumptionCurve.setCoefficient3x(1.5022612076303)
|
|
67
|
+
htg_coil.heatingPowerConsumptionCurve.setCoefficient4y(-0.177653510577989)
|
|
68
|
+
htg_coil.heatingPowerConsumptionCurve.setCoefficient5z(-0.103079864171839)
|
|
69
|
+
end
|
|
57
70
|
end
|
|
58
71
|
|
|
59
72
|
return htg_coil
|
|
@@ -2692,6 +2692,42 @@ Standard.class_eval do
|
|
|
2692
2692
|
return true
|
|
2693
2693
|
end
|
|
2694
2694
|
|
|
2695
|
+
# Calculate a model's window or WWR
|
|
2696
|
+
# Disregard space conditioning (assume all spaces are conditioned)
|
|
2697
|
+
# which is true for most of not all prototypes
|
|
2698
|
+
#
|
|
2699
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
2700
|
+
# @param wwr [Boolean]
|
|
2701
|
+
# @return [Numeric] Returns window to wall ratio (percentage) or window area.
|
|
2702
|
+
def model_get_window_area_info(model, wwr = true)
|
|
2703
|
+
|
|
2704
|
+
window_area = 0
|
|
2705
|
+
wall_area = 0
|
|
2706
|
+
|
|
2707
|
+
model.getSpaces.each do |space|
|
|
2708
|
+
# Get zone multipler
|
|
2709
|
+
multiplier = space.thermalZone.get.multiplier
|
|
2710
|
+
space.surfaces.each do |surface|
|
|
2711
|
+
next if surface.surfaceType != 'Wall'
|
|
2712
|
+
next if surface.outsideBoundaryCondition != 'Outdoors'
|
|
2713
|
+
|
|
2714
|
+
# Get wall and window area
|
|
2715
|
+
wall_area += surface.grossArea * multiplier
|
|
2716
|
+
surface.subSurfaces.each do |subsurface|
|
|
2717
|
+
subsurface_type = subsurface.subSurfaceType.to_s.downcase
|
|
2718
|
+
# Do not count doors
|
|
2719
|
+
next unless (subsurface_type.include? 'window') || (subsurface_type.include? 'glass')
|
|
2720
|
+
|
|
2721
|
+
window_area += subsurface.grossArea * subsurface.multiplier * multiplier
|
|
2722
|
+
end
|
|
2723
|
+
end
|
|
2724
|
+
end
|
|
2725
|
+
return window_area / wall_area * 100 if wwr
|
|
2726
|
+
|
|
2727
|
+
# else
|
|
2728
|
+
return window_area
|
|
2729
|
+
end
|
|
2730
|
+
|
|
2695
2731
|
# Calculate a model's window or WWR for a specific orientation
|
|
2696
2732
|
# Disregard space conditioning (assume all spaces are conditioned)
|
|
2697
2733
|
# which is true for most of not all prototypes
|
|
@@ -381,12 +381,13 @@ class Standard
|
|
|
381
381
|
hpwh.setCondenserBottomLocation(h_condbot)
|
|
382
382
|
hpwh.setCondenserTopLocation(h_condtop)
|
|
383
383
|
hpwh.setTankElementControlLogic('MutuallyExclusive')
|
|
384
|
+
hpwh.autocalculateEvaporatorAirFlowRate
|
|
384
385
|
elsif type == 'PumpedCondenser'
|
|
385
386
|
hpwh.setDeadBandTemperatureDifference(3.89)
|
|
387
|
+
hpwh.autosizeEvaporatorAirFlowRate
|
|
386
388
|
end
|
|
387
389
|
|
|
388
390
|
# set heat pump water heater properties
|
|
389
|
-
hpwh.setEvaporatorAirFlowRate(OpenStudio.convert(181.0, 'ft^3/min', 'm^3/s').get)
|
|
390
391
|
hpwh.setFanPlacement('DrawThrough')
|
|
391
392
|
hpwh.setOnCycleParasiticElectricLoad(0.0)
|
|
392
393
|
hpwh.setOffCycleParasiticElectricLoad(0.0)
|
|
@@ -445,9 +446,10 @@ class Standard
|
|
|
445
446
|
if type == 'WrappedCondenser'
|
|
446
447
|
coil = hpwh.dXCoil.to_CoilWaterHeatingAirToWaterHeatPumpWrapped.get
|
|
447
448
|
coil.setRatedCondenserWaterTemperature(48.89)
|
|
449
|
+
coil.autocalculateRatedEvaporatorAirFlowRate
|
|
448
450
|
elsif type == 'PumpedCondenser'
|
|
449
|
-
coil =
|
|
450
|
-
|
|
451
|
+
coil = hpwh.dXCoil.to_CoilWaterHeatingAirToWaterHeatPump.get
|
|
452
|
+
coil.autosizeRatedEvaporatorAirFlowRate
|
|
451
453
|
end
|
|
452
454
|
|
|
453
455
|
# set coil properties
|
|
@@ -457,7 +459,6 @@ class Standard
|
|
|
457
459
|
coil.setRatedSensibleHeatRatio(shr)
|
|
458
460
|
coil.setRatedEvaporatorInletAirDryBulbTemperature(OpenStudio.convert(67.5, 'F', 'C').get)
|
|
459
461
|
coil.setRatedEvaporatorInletAirWetBulbTemperature(OpenStudio.convert(56.426, 'F', 'C').get)
|
|
460
|
-
coil.setRatedEvaporatorAirFlowRate(OpenStudio.convert(181.0, 'ft^3/min', 'm^3/s').get)
|
|
461
462
|
coil.setEvaporatorFanPowerIncludedinRatedCOP(true)
|
|
462
463
|
coil.setEvaporatorAirTemperatureTypeforCurveObjects('WetBulbTemperature')
|
|
463
464
|
coil.setHeatingCapacityFunctionofTemperatureCurve(hpwh_cap)
|
|
@@ -507,8 +508,7 @@ class Standard
|
|
|
507
508
|
tank.setSourceSideInletHeight(0)
|
|
508
509
|
tank.setSourceSideOutletHeight(0)
|
|
509
510
|
elsif type == 'PumpedCondenser'
|
|
510
|
-
tank =
|
|
511
|
-
hpwh.setTank(tank)
|
|
511
|
+
tank = hpwh.tank.to_WaterHeaterMixed.get
|
|
512
512
|
tank.setDeadbandTemperatureDifference(3.89)
|
|
513
513
|
tank.setHeaterControlType('Cycle')
|
|
514
514
|
tank.setHeaterMaximumCapacity(electric_backup_capacity)
|
|
@@ -5480,7 +5480,6 @@ class Standard
|
|
|
5480
5480
|
ventilation.setSchedule(availability_schedule)
|
|
5481
5481
|
|
|
5482
5482
|
if ventilation_type == 'Exhaust'
|
|
5483
|
-
ventilation.setDesignFlowRateCalculationMethod('Flow/Zone')
|
|
5484
5483
|
ventilation.setDesignFlowRate(flow_rate)
|
|
5485
5484
|
ventilation.setFanPressureRise(31.1361206455786)
|
|
5486
5485
|
ventilation.setFanTotalEfficiency(0.51)
|
|
@@ -5491,7 +5490,6 @@ class Standard
|
|
|
5491
5490
|
ventilation.setMaximumIndoorTemperature(100.0)
|
|
5492
5491
|
ventilation.setDeltaTemperature(-100.0)
|
|
5493
5492
|
elsif ventilation_type == 'Natural'
|
|
5494
|
-
ventilation.setDesignFlowRateCalculationMethod('Flow/Zone')
|
|
5495
5493
|
ventilation.setDesignFlowRate(flow_rate)
|
|
5496
5494
|
ventilation.setFanPressureRise(0.0)
|
|
5497
5495
|
ventilation.setFanTotalEfficiency(1.0)
|
|
@@ -5502,7 +5500,6 @@ class Standard
|
|
|
5502
5500
|
ventilation.setMaximumIndoorTemperature(29.4444452244559)
|
|
5503
5501
|
ventilation.setDeltaTemperature(-100.0)
|
|
5504
5502
|
elsif ventilation_type == 'Intake'
|
|
5505
|
-
ventilation.setDesignFlowRateCalculationMethod('Flow/Area')
|
|
5506
5503
|
ventilation.setFlowRateperZoneFloorArea(flow_rate)
|
|
5507
5504
|
ventilation.setFanPressureRise(49.8)
|
|
5508
5505
|
ventilation.setFanTotalEfficiency(0.53625)
|
|
@@ -489,7 +489,7 @@ class Standard
|
|
|
489
489
|
fan_pwr_limit_type = 'variable volume'
|
|
490
490
|
elsif comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized
|
|
491
491
|
fan = comp.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.get.supplyAirFan
|
|
492
|
-
if fan.to_FanConstantVolume.is_initialized ||
|
|
492
|
+
if fan.to_FanConstantVolume.is_initialized || fan.to_FanOnOff.is_initialized
|
|
493
493
|
fan_pwr_limit_type = 'constant volume'
|
|
494
494
|
elsif fan.to_FanVariableVolume.is_initialized
|
|
495
495
|
fan_pwr_limit_type = 'variable volume'
|
|
@@ -1712,7 +1712,7 @@ class Standard
|
|
|
1712
1712
|
heat_exchanger_air_to_air_sensible_and_latent_apply_prototype_nominal_electric_power(erv)
|
|
1713
1713
|
|
|
1714
1714
|
# add economizer lockout
|
|
1715
|
-
erv.setSupplyAirOutletTemperatureControl(
|
|
1715
|
+
erv.setSupplyAirOutletTemperatureControl(true)
|
|
1716
1716
|
erv.setEconomizerLockout(true)
|
|
1717
1717
|
|
|
1718
1718
|
# add defrost
|
data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb
CHANGED
|
@@ -103,7 +103,6 @@ class Standard
|
|
|
103
103
|
# @param sql_db_vars_map [Hash] hash map
|
|
104
104
|
# @return [Hash] hash of coil objects
|
|
105
105
|
def coil_cooling_water_to_air_heat_pump_apply_efficiency_and_curves(coil_cooling_water_to_air_heat_pump, sql_db_vars_map)
|
|
106
|
-
successfully_set_all_properties = true
|
|
107
106
|
|
|
108
107
|
# Get the search criteria
|
|
109
108
|
search_criteria = {}
|
|
@@ -116,8 +115,15 @@ class Standard
|
|
|
116
115
|
|
|
117
116
|
# Check to make sure properties were found
|
|
118
117
|
if coil_props.nil?
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
# search again without capacity
|
|
119
|
+
matching_objects = model_find_objects(standards_data['water_source_heat_pumps'], search_criteria, nil, Date.today)
|
|
120
|
+
if matching_objects.size.zero?
|
|
121
|
+
# This proves that the search_criteria has issue finding the correct coil prop
|
|
122
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingWaterToAirHeatPumpEquationFit', "For #{coil_cooling_water_to_air_heat_pump.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
|
|
123
|
+
else
|
|
124
|
+
# Issue warning indicate the coil size is may be too large
|
|
125
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingWaterToAirHeatPumpEquationFit', "The capacity of the coil: #{coil_cooling_water_to_air_heat_pump.name} maybe too large to be found in the efficiency standard. The coil capacity is #{capacity_btu_per_hr} Btu/hr.")
|
|
126
|
+
end
|
|
121
127
|
return sql_db_vars_map
|
|
122
128
|
end
|
|
123
129
|
|
|
@@ -22,6 +22,8 @@ class Standard
|
|
|
22
22
|
capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
|
|
23
23
|
capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
|
|
24
24
|
|
|
25
|
+
return false unless capacity_btu_per_hr > 0
|
|
26
|
+
|
|
25
27
|
# Get the boiler properties, if it exists for this template
|
|
26
28
|
return false unless standards_data.include?('furnaces')
|
|
27
29
|
|
|
@@ -83,16 +83,22 @@ class Standard
|
|
|
83
83
|
# and the R-value of the non-insulation layers and air films.
|
|
84
84
|
# This is the desired R-value of the insulation.
|
|
85
85
|
ins_r_value_si = target_r_value_si - other_layer_r_value_si
|
|
86
|
-
if ins_r_value_si <= 0.0
|
|
87
|
-
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too low given the other materials in the construction; insulation layer will not be modified.")
|
|
88
|
-
return false
|
|
89
|
-
end
|
|
90
|
-
ins_r_value_ip = OpenStudio.convert(ins_r_value_si, 'm^2*K/W', 'ft^2*h*R/Btu').get
|
|
91
86
|
|
|
92
87
|
# Set the R-value of the insulation layer
|
|
93
|
-
construction.layers.
|
|
88
|
+
construction.layers.each_with_index do |layer, l|
|
|
94
89
|
next unless layer.name.get == insulation_layer_name
|
|
95
90
|
|
|
91
|
+
# Remove insulation layer if requested R-value is lower than sum of non-insulation materials
|
|
92
|
+
if ins_r_value_si <= 0.0
|
|
93
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.Construction', "Requested U-value of #{target_u_value_ip} for #{construction.name} is too low given the other materials in the construction; insulation layer will be removed.")
|
|
94
|
+
construction.eraseLayer(l)
|
|
95
|
+
# Set the target R-value to the sum of other layers to make name match properties
|
|
96
|
+
target_r_value_ip = OpenStudio.convert(other_layer_r_value_si, 'm^2*K/W', 'ft^2*hr*R/Btu').get
|
|
97
|
+
break # Don't modify the insulation layer since it has been removed
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Modify the insulation layer
|
|
101
|
+
ins_r_value_ip = OpenStudio.convert(ins_r_value_si, 'm^2*K/W', 'ft^2*h*R/Btu').get
|
|
96
102
|
if layer.to_StandardOpaqueMaterial.is_initialized
|
|
97
103
|
layer = layer.to_StandardOpaqueMaterial.get
|
|
98
104
|
layer.setThickness(ins_r_value_si * layer.conductivity)
|
|
@@ -2524,12 +2524,28 @@ class Standard
|
|
|
2524
2524
|
# which specifies properties by construction category by climate zone set.
|
|
2525
2525
|
# AKA the info in Tables 5.5-1-5.5-8
|
|
2526
2526
|
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2527
|
+
wwr = model_get_percent_of_surface_range(model, intended_surface_type)
|
|
2528
|
+
|
|
2529
|
+
search_criteria = { 'template' => template,
|
|
2530
|
+
'climate_zone_set' => climate_zone_set,
|
|
2531
|
+
'intended_surface_type' => intended_surface_type,
|
|
2532
|
+
'standards_construction_type' => standards_construction_type,
|
|
2533
|
+
'building_category' => building_category }
|
|
2534
|
+
|
|
2535
|
+
if !wwr['minimum_percent_of_surface'].nil? && !wwr['maximum_percent_of_surface'].nil?
|
|
2536
|
+
search_criteria['minimum_percent_of_surface'] = wwr['minimum_percent_of_surface']
|
|
2537
|
+
search_criteria['maximum_percent_of_surface'] = wwr['maximum_percent_of_surface']
|
|
2538
|
+
end
|
|
2539
|
+
|
|
2540
|
+
# First search
|
|
2541
|
+
props = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
2542
|
+
|
|
2543
|
+
if !props
|
|
2544
|
+
# Second search: In case need to use climate zone (e.g: 3) instead of sub-climate zone (e.g: 3A) for search
|
|
2545
|
+
climate_zone = climate_zone_set[0..-2]
|
|
2546
|
+
search_criteria['climate_zone_set'] = climate_zone
|
|
2547
|
+
props = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
2548
|
+
end
|
|
2533
2549
|
|
|
2534
2550
|
if !props
|
|
2535
2551
|
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "Could not find construction properties for: #{template}-#{climate_zone_set}-#{intended_surface_type}-#{standards_construction_type}-#{building_category}.")
|
|
@@ -3602,6 +3618,12 @@ class Standard
|
|
|
3602
3618
|
# switch to use this but update test in standards and measures to load this outside of the method
|
|
3603
3619
|
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
3604
3620
|
|
|
3621
|
+
if !construction_properties
|
|
3622
|
+
# Search again use climate zone (e.g. 3) instead of sub-climate zone (3A)
|
|
3623
|
+
search_criteria['climate_zone_set'] = climate_zone_set[0..-2]
|
|
3624
|
+
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
3625
|
+
end
|
|
3626
|
+
|
|
3605
3627
|
return construction_properties
|
|
3606
3628
|
end
|
|
3607
3629
|
|
|
@@ -4290,7 +4312,7 @@ class Standard
|
|
|
4290
4312
|
# @param possible_climate_zone_sets [Array] climate zone sets
|
|
4291
4313
|
# @return [String] climate zone ses
|
|
4292
4314
|
def model_get_climate_zone_set_from_list(model, possible_climate_zone_sets)
|
|
4293
|
-
climate_zone_set = possible_climate_zone_sets.
|
|
4315
|
+
climate_zone_set = possible_climate_zone_sets.max
|
|
4294
4316
|
return climate_zone_set
|
|
4295
4317
|
end
|
|
4296
4318
|
|
|
@@ -5779,6 +5801,15 @@ class Standard
|
|
|
5779
5801
|
return parametric_inputs
|
|
5780
5802
|
end
|
|
5781
5803
|
|
|
5804
|
+
# Determine the surface range of a baseline model.
|
|
5805
|
+
# The method calculates the window to wall ratio (assuming all spaces are conditioned)
|
|
5806
|
+
# and select the range based on the calculated window to wall ratio
|
|
5807
|
+
# @param model [OpenStudio::Model::Model] OpenStudio model object
|
|
5808
|
+
# @param intended_surface_type [String] surface type
|
|
5809
|
+
def model_get_percent_of_surface_range(model, intended_surface_type)
|
|
5810
|
+
return { 'minimum_percent_of_surface' => nil, 'maximum_percent_of_surface' => nil }
|
|
5811
|
+
end
|
|
5812
|
+
|
|
5782
5813
|
# Default SAT reset type
|
|
5783
5814
|
#
|
|
5784
5815
|
# @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
|
|
@@ -599,6 +599,13 @@ class Standard
|
|
|
599
599
|
# switch to use this but update test in standards and measures to load this outside of the method
|
|
600
600
|
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
601
601
|
|
|
602
|
+
if !construction_properties
|
|
603
|
+
# Search again use climate zone (e.g. 3) instead of sub-climate zone (3A)
|
|
604
|
+
search_criteria['climate_zone_set'] = climate_zone_set[0..-2]
|
|
605
|
+
construction_properties = model_find_object(standards_data['construction_properties'], search_criteria)
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
|
|
602
609
|
return construction_properties
|
|
603
610
|
end
|
|
604
611
|
end
|