openstudio-standards 0.3.1.rc1 → 0.3.1.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/geometry/ASHRAELargeOffice.json +4 -4
- data/data/standards/test_performance_expected_dd_results.csv +1890 -2016
- data/lib/openstudio-standards/btap/fileio.rb +1 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +8 -3
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +6 -6
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +7 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +3 -3
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +5 -5
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +4 -4
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +23 -23
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
- data/lib/openstudio-standards/standards/Standards.Fan.rb +6 -6
- data/lib/openstudio-standards/standards/Standards.Model.rb +20 -14
- data/lib/openstudio-standards/standards/Standards.Pump.rb +21 -19
- data/lib/openstudio-standards/standards/Standards.Space.rb +25 -18
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +6 -6
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +45 -45
- data/lib/openstudio-standards/version.rb +1 -1
- metadata +2 -2
@@ -1333,17 +1333,17 @@ class ECMS
|
|
1333
1333
|
# There is an error in EnergyPlus in the estimated capacity of the coil "CoilCoolingDXVariableSpeed".
|
1334
1334
|
# Here the capacity reported by OS is adjusted to estimate an appropriate capacity for the cooling coil.
|
1335
1335
|
# The autosized capacity is corrected for the actual fan flow rate and fan power.
|
1336
|
-
if supply_fan.
|
1337
|
-
fan_max_afr = supply_fan.autosizedMaximumFlowRate.to_f
|
1338
|
-
elsif supply_fan.maximumFlowRate.is_initialized
|
1336
|
+
if supply_fan.maximumFlowRate.is_initialized
|
1339
1337
|
fan_max_afr = supply_fan.maximumFlowRate.to_f
|
1338
|
+
elsif supply_fan.autosizedMaximumFlowRate.is_initialized
|
1339
|
+
fan_max_afr = supply_fan.autosizedMaximumFlowRate.to_f
|
1340
1340
|
else
|
1341
1341
|
raise "Fan flow rate is undefined for fan #{supply_fan.name.to_s}"
|
1342
1342
|
end
|
1343
|
-
if clg_dx_coil.
|
1343
|
+
if clg_dx_coil.ratedAirFlowRateAtSelectedNominalSpeedLevel.is_initialized
|
1344
|
+
clg_dx_coil_afr = clg_dx_coil.ratedAirFlowRateAtSelectedNominalSpeedLevel.to_f
|
1345
|
+
elsif clg_dx_coil.autosizedRatedAirFlowRateAtSelectedNominalSpeedLevel.is_initialized
|
1344
1346
|
clg_dx_coil_afr = clg_dx_coil.autosizedRatedAirFlowRateAtSelectedNominalSpeedLevel.to_f
|
1345
|
-
elsif clg_dx_coil.ratedAirFlowRateAtSelectedNominalSpeedLevel.is_initialized
|
1346
|
-
clg_dx_coil_afr = clg_dx_coil.ratedAirFlowRateAtSelectedNominalSpeedLevel.to_f
|
1347
1347
|
else
|
1348
1348
|
raise "Rated air flow rate at selected nominal speed level is undefined for coil #{clg_dx_coil.name.to_s}"
|
1349
1349
|
end
|
@@ -1357,10 +1357,10 @@ class ECMS
|
|
1357
1357
|
end
|
1358
1358
|
htg_dx_coil_init_name = get_hvac_comp_init_name(htg_dx_coil, false)
|
1359
1359
|
htg_dx_coil.setName(htg_dx_coil_init_name)
|
1360
|
-
if backup_coil.
|
1360
|
+
if backup_coil.nominalCapacity.is_initialized
|
1361
|
+
backup_coil_cap = backup_coil.nominalCapacity.to_f
|
1362
|
+
elsif backup_coil.autosizedNominalCapacity.is_initialized
|
1361
1363
|
backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
|
1362
|
-
elsif backup_coil.nominalCapacity.is_initialized
|
1363
|
-
backup_coil_cap = backup_coil.nominalCapacity.to_f
|
1364
1364
|
else
|
1365
1365
|
raise "Nominal capacity is undefiled for coil #{backup_coil.name.to_s}"
|
1366
1366
|
end
|
@@ -1492,19 +1492,19 @@ class ECMS
|
|
1492
1492
|
if clg_dx_coil && htg_dx_coil && backup_coil && fan
|
1493
1493
|
clg_dx_coil_init_name = get_hvac_comp_init_name(clg_dx_coil, false)
|
1494
1494
|
clg_dx_coil.setName(clg_dx_coil_init_name)
|
1495
|
-
if clg_dx_coil.
|
1496
|
-
clg_dx_coil_cap = clg_dx_coil.autosizedRatedTotalCoolingCapacity.to_f
|
1497
|
-
elsif clg_dx_coil.ratedTotalCoolingCapacity.is_initialized
|
1495
|
+
if clg_dx_coil.ratedTotalCoolingCapacity.is_initialized
|
1498
1496
|
clg_dx_coil_cap = clg_dx_coil.ratedTotalCoolingCapacity.to_f
|
1497
|
+
elsif clg_dx_coil.autosizedRatedTotalCoolingCapacity.is_initialized
|
1498
|
+
clg_dx_coil_cap = clg_dx_coil.autosizedRatedTotalCoolingCapacity.to_f
|
1499
1499
|
else
|
1500
1500
|
raise "The total cooling capacity is undefined for coil #{clg_dx_coil_cap.name.to_s}"
|
1501
1501
|
end
|
1502
1502
|
htg_dx_coil_init_name = get_hvac_comp_init_name(htg_dx_coil, true)
|
1503
1503
|
htg_dx_coil.setName(htg_dx_coil_init_name)
|
1504
|
-
if backup_coil.
|
1505
|
-
backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
|
1506
|
-
elsif backup_coil.nominalCapacity.is_initialized
|
1504
|
+
if backup_coil.nominalCapacity.is_initialized
|
1507
1505
|
backup_coil_cap = backup_coil.nominalCapacity.to_f
|
1506
|
+
elsif backup_coil.autosizedNominalCapacity.is_initialized
|
1507
|
+
backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
|
1508
1508
|
else
|
1509
1509
|
raise "The nominal capacity is undefined for coil #{backup_coil.name.to_s}"
|
1510
1510
|
end
|
@@ -1653,19 +1653,19 @@ class ECMS
|
|
1653
1653
|
# update names of dx coils
|
1654
1654
|
clg_dx_coil_init_name = get_hvac_comp_init_name(clg_dx_coil, false)
|
1655
1655
|
clg_dx_coil.setName(clg_dx_coil_init_name)
|
1656
|
-
if clg_dx_coil.
|
1657
|
-
clg_dx_coil_cap = clg_dx_coil.autosizedRatedTotalCoolingCapacity.to_f
|
1658
|
-
elsif clg_dx_coil.ratedTotalCoolingCapacity.is_initialized
|
1656
|
+
if clg_dx_coil.ratedTotalCoolingCapacity.is_initialized
|
1659
1657
|
clg_dx_coil_cap = clg_dx_coil.ratedTotalCoolingCapacity.to_f
|
1658
|
+
elsif clg_dx_coil.autosizedRatedTotalCoolingCapacity.is_initialized
|
1659
|
+
clg_dx_coil_cap = clg_dx_coil.autosizedRatedTotalCoolingCapacity.to_f
|
1660
1660
|
else
|
1661
1661
|
raise "Rated total cooling capacity is undefined for coil #{clg_dx_coil.name.to_s}"
|
1662
1662
|
end
|
1663
1663
|
htg_dx_coil_init_name = get_hvac_comp_init_name(htg_dx_coil, true)
|
1664
1664
|
htg_dx_coil.setName(htg_dx_coil_init_name)
|
1665
|
-
if backup_coil.
|
1666
|
-
backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
|
1667
|
-
elsif backup_coil.nominalCapacity.is_initialized
|
1665
|
+
if backup_coil.nominalCapacity.is_initialized
|
1668
1666
|
backup_coil_cap = backup_coil.nominalCapacity.to_f
|
1667
|
+
elsif backup_coil.autosizedNominalCapacity.is_initialized
|
1668
|
+
backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
|
1669
1669
|
else
|
1670
1670
|
raise "Nominal capacity is undefined for coil #{backup_coil.name.to_s}"
|
1671
1671
|
end
|
@@ -1919,18 +1919,18 @@ class ECMS
|
|
1919
1919
|
cw_loop = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'condenser'}[0]
|
1920
1920
|
# condenser flow rate is set based on heating loop flow rate and cooling loop flow rate (adjusted for sizing factors)
|
1921
1921
|
cw_loop_max_flow = 0.0
|
1922
|
-
if hw_heatpump_loop.
|
1923
|
-
cw_loop_max_flow += heatpump_siz_f*hw_heatpump_loop.autosizedMaximumLoopFlowRate.to_f
|
1924
|
-
elsif hw_heatpump_loop.maximumLoopFlowRate.is_initialized
|
1922
|
+
if hw_heatpump_loop.maximumLoopFlowRate.is_initialized
|
1925
1923
|
cw_loop_max_flow += heatpump_siz_f*hw_heatpump_loop.maximumLoopFlowRate.to_f
|
1924
|
+
elsif hw_heatpump_loop.autosizedMaximumLoopFlowRate.is_initialized
|
1925
|
+
cw_loop_max_flow += heatpump_siz_f*hw_heatpump_loop.autosizedMaximumLoopFlowRate.to_f
|
1926
1926
|
else
|
1927
1927
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: heating loop #{hw_heatpump_loop.name.to_s} flow rate is not defined")
|
1928
1928
|
end
|
1929
1929
|
chw_loop = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'cooling'}[0]
|
1930
|
-
if chw_loop.
|
1931
|
-
cw_loop_max_flow += chiller_siz_f*chw_loop.autosizedMaximumLoopFlowRate.to_f
|
1932
|
-
elsif chw_loop.maximumLoopFlowRate.is_initialized
|
1930
|
+
if chw_loop.maximumLoopFlowRate.is_initialized
|
1933
1931
|
cw_loop_max_flow += chiller_siz_f*chw_loop.maximumLoopFlowRate.to_f
|
1932
|
+
elsif chw_loop.autosizedMaximumLoopFlowRate.is_initialized
|
1933
|
+
cw_loop_max_flow += chiller_siz_f*chw_loop.autosizedMaximumLoopFlowRate.to_f
|
1934
1934
|
else
|
1935
1935
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: cooling loop #{chw_loop.name.to_s} is not defined")
|
1936
1936
|
end
|
@@ -1938,10 +1938,10 @@ class ECMS
|
|
1938
1938
|
cw_loop_pump = cw_loop.supplyComponents.select {|comp| comp.to_PumpVariableSpeed.is_initialized}[0].to_PumpVariableSpeed.get
|
1939
1939
|
cw_loop_pump.setRatedFlowRate(cw_loop_max_flow)
|
1940
1940
|
# set heating capacity of water-source heat pump
|
1941
|
-
if hw_heatpump.
|
1942
|
-
cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
|
1943
|
-
elsif hw_heatpump.ratedHeatingCapacity.is_initialized
|
1941
|
+
if hw_heatpump.ratedHeatingCapacity.is_initialized
|
1944
1942
|
cap = hw_heatpump.ratedHeatingCapacity.to_f
|
1943
|
+
elsif hw_heatpump.autosizedRatedHeatingCapacity.is_initialized
|
1944
|
+
cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
|
1945
1945
|
else
|
1946
1946
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: capacity of water-source heat pump #{hw_heatpump.name.to_s} is not defined")
|
1947
1947
|
end
|
@@ -1957,10 +1957,10 @@ class ECMS
|
|
1957
1957
|
end
|
1958
1958
|
end
|
1959
1959
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: no water-cooled chiller found in cooling loop #{chw_loop.name.to_s}") if chiller_water_cooled.nil?
|
1960
|
-
if chiller_water_cooled.
|
1961
|
-
cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
|
1962
|
-
elsif chiller_water_cooled.referenceCapacity.is_initialized
|
1960
|
+
if chiller_water_cooled.referenceCapacity.is_initialized
|
1963
1961
|
cap = chiller_water_cooled.referenceCapacity.to_f
|
1962
|
+
elsif chiller_water_cooled.autosizedReferenceCapacity.is_initialized
|
1963
|
+
cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
|
1964
1964
|
else
|
1965
1965
|
raise("apply_efficiency_ecm_hs14_cgshp_fancoils: cooling capacity of chiller #{chiller_water_cooled.name.to_s} is not defined")
|
1966
1966
|
end
|
@@ -3120,14 +3120,14 @@ class ECMS
|
|
3120
3120
|
raise "There was a problem setting the boiler part load curve named #{part_load_curve_name} for #{component.name}. Please ensure that the curve is entered and referenced correctly in the ECMS class curves.json and boiler_set.json files." unless part_load_curve
|
3121
3121
|
|
3122
3122
|
component.setNormalizedBoilerEfficiencyCurve(part_load_curve)
|
3123
|
-
if component.
|
3124
|
-
|
3125
|
-
|
3126
|
-
|
3123
|
+
if component.nominalCapacity.is_initialized
|
3124
|
+
boiler_size_w = component.nominalCapacity.to_f
|
3125
|
+
elsif component.isNominalCapacityAutosized
|
3126
|
+
boiler_size_w = component.autosizedNominalCapacity.get
|
3127
3127
|
end
|
3128
|
-
boiler_size_kbtu_per_hour = OpenStudio.convert(
|
3128
|
+
boiler_size_kbtu_per_hour = OpenStudio.convert(boiler_size_w, 'W', 'kBtu/h').get
|
3129
3129
|
boiler_primacy = 'Primary '
|
3130
|
-
if
|
3130
|
+
if boiler_size_w < 1.0
|
3131
3131
|
boiler_primacy = 'Secondary '
|
3132
3132
|
end
|
3133
3133
|
if eff['name'].nil?
|
@@ -3295,17 +3295,17 @@ class ECMS
|
|
3295
3295
|
|
3296
3296
|
component.setPartLoadFactorCurve(part_load_curve)
|
3297
3297
|
# Get the volume and capacity of the SHW tank.
|
3298
|
-
if component.
|
3299
|
-
shw_vol_gal = 'auto_size'
|
3300
|
-
else
|
3298
|
+
if component.tankVolume.is_initialized
|
3301
3299
|
shw_vol_m3 = component.tankVolume.to_f
|
3302
3300
|
shw_vol_gal = OpenStudio.convert(shw_vol_m3, 'm^3', 'gal').get.to_f.round(0)
|
3301
|
+
elsif component.isTankVolumeAutosized
|
3302
|
+
shw_vol_gal = 'auto_size'
|
3303
3303
|
end
|
3304
|
-
if component.
|
3305
|
-
shw_capacity_kBtu_hr = 'auto_cap'
|
3306
|
-
else
|
3304
|
+
if component.heaterMaximumCapacity.is_initialized
|
3307
3305
|
shw_capacity_W = component.heaterMaximumCapacity.to_f
|
3308
3306
|
shw_capacity_kBtu_hr = OpenStudio.convert(shw_capacity_W, 'W', 'kBtu/h').get.to_f.round(0)
|
3307
|
+
elsif component.isHeaterMaximumCapacityAutosized
|
3308
|
+
shw_capacity_kBtu_hr = 'auto_cap'
|
3309
3309
|
end
|
3310
3310
|
# Set a default revised shw tank name if no name is present in the eff hash.
|
3311
3311
|
if eff['name'].nil?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio-standards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.1.
|
4
|
+
version: 0.3.1.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Parker
|
@@ -28,7 +28,7 @@ authors:
|
|
28
28
|
autorequire:
|
29
29
|
bindir: bin
|
30
30
|
cert_chain: []
|
31
|
-
date: 2023-03
|
31
|
+
date: 2023-04-03 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: minitest-reporters
|