openstudio-standards 0.6.3 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
- data/data/standards/manage_OpenStudio_Standards.rb +2 -49
- data/data/standards/openstudio_standards_duplicates_log.csv +1 -7962
- data/data/standards/test_performance_expected_dd_results.csv +2005 -97
- data/lib/openstudio-standards/create_typical/space_type_ratios.rb +47 -57
- data/lib/openstudio-standards/geometry/create.rb +8 -2
- data/lib/openstudio-standards/geometry/create_bar.rb +6 -3
- data/lib/openstudio-standards/geometry/create_shape.rb +1 -1
- data/lib/openstudio-standards/geometry/group.rb +1 -1
- data/lib/openstudio-standards/geometry/information.rb +1 -1
- data/lib/openstudio-standards/geometry/modify.rb +53 -1
- data/lib/openstudio-standards/infiltration/nist_infiltration.rb +1 -1
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +11 -11
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +2 -2
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +44 -47
- data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +43 -48
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +1 -1
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +44 -24
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +24 -24
- data/lib/openstudio-standards/schedules/information.rb +1 -1
- data/lib/openstudio-standards/schedules/parametric.rb +1 -1
- data/lib/openstudio-standards/service_water_heating/create_piping_losses.rb +152 -0
- data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +544 -0
- data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +303 -0
- data/lib/openstudio-standards/service_water_heating/create_water_use.rb +95 -0
- data/lib/openstudio-standards/space/space.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +65 -70
- data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +12 -14
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +16 -5
- data/lib/openstudio-standards/standards/Standards.Model.rb +2 -2
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +10 -2
- data/lib/openstudio-standards/{prototypes/common/objects/Prototype.Model.swh.rb → standards/Standards.ServiceWaterHeating.rb} +209 -139
- data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +4 -8
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22251 -12963
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +91 -91
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +8981 -5228
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +8935 -5182
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +7281 -5391
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +91 -91
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +9005 -15215
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +136 -136
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +8717 -17168
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +136 -136
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1941 -651
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +135 -135
- data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +135 -135
- data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +36 -36
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +377 -99
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +6889 -4044
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +108 -108
- data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.construction_properties.json +16 -16
- data/lib/openstudio-standards/standards/cbes/data/cbes.constructions.json +142 -142
- data/lib/openstudio-standards/standards/deer/data/deer.constructions.json +5 -1551
- data/lib/openstudio-standards/standards/deer/data/deer.materials.json +40 -0
- data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.motors.json +88 -8
- data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.motors.json +88 -8
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +17 -0
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +2 -1
- data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +4 -4
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +61 -88
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +3 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/data/boiler_fuel_type_sets.json +54 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMidriseApartment.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMultiTower.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPPointTower.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPTownHouse.osm +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +4 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +32 -24
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +89 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +5 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +22 -65
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +19 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +56 -2
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +3 -1
- data/lib/openstudio-standards/standards/necb/common/construction_defaults.osm +2 -2
- data/lib/openstudio-standards/standards/necb/docs/air_system_names_method.md +127 -0
- data/lib/openstudio-standards/thermal_zone/thermal_zone.rb +1 -1
- data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +1 -1
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/information.rb +61 -5
- data/lib/openstudio-standards/weather/modify.rb +1 -1
- data/lib/openstudio-standards.rb +5 -3
- metadata +12 -63
- data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +0 -1100
- data/lib/openstudio-standards/service_water_heating/component.rb +0 -189
@@ -246,7 +246,17 @@
|
|
246
246
|
"type": "Enclosed",
|
247
247
|
"synchronous_speed": 3600.0,
|
248
248
|
"minimum_capacity": 450.0,
|
249
|
-
"maximum_capacity":
|
249
|
+
"maximum_capacity": 499.999,
|
250
|
+
"nominal_full_load_efficiency": 0.941,
|
251
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
252
|
+
},
|
253
|
+
{
|
254
|
+
"template": "DEER Pre-1975",
|
255
|
+
"number_of_poles": 2.0,
|
256
|
+
"type": "Enclosed",
|
257
|
+
"synchronous_speed": 3600.0,
|
258
|
+
"minimum_capacity": 500.0,
|
259
|
+
"maximum_capacity": 9999.0,
|
250
260
|
"nominal_full_load_efficiency": 0.941,
|
251
261
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
252
262
|
},
|
@@ -496,7 +506,17 @@
|
|
496
506
|
"type": "Open",
|
497
507
|
"synchronous_speed": 3600.0,
|
498
508
|
"minimum_capacity": 450.0,
|
499
|
-
"maximum_capacity":
|
509
|
+
"maximum_capacity": 499.999,
|
510
|
+
"nominal_full_load_efficiency": 0.941,
|
511
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
512
|
+
},
|
513
|
+
{
|
514
|
+
"template": "DEER Pre-1975",
|
515
|
+
"number_of_poles": 2.0,
|
516
|
+
"type": "Open",
|
517
|
+
"synchronous_speed": 3600.0,
|
518
|
+
"minimum_capacity": 500.0,
|
519
|
+
"maximum_capacity": 9999.0,
|
500
520
|
"nominal_full_load_efficiency": 0.941,
|
501
521
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
502
522
|
},
|
@@ -746,7 +766,17 @@
|
|
746
766
|
"type": "Enclosed",
|
747
767
|
"synchronous_speed": 1800.0,
|
748
768
|
"minimum_capacity": 450.0,
|
749
|
-
"maximum_capacity":
|
769
|
+
"maximum_capacity": 499.999,
|
770
|
+
"nominal_full_load_efficiency": 0.945,
|
771
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
772
|
+
},
|
773
|
+
{
|
774
|
+
"template": "DEER Pre-1975",
|
775
|
+
"number_of_poles": 4.0,
|
776
|
+
"type": "Enclosed",
|
777
|
+
"synchronous_speed": 1800.0,
|
778
|
+
"minimum_capacity": 500.0,
|
779
|
+
"maximum_capacity": 9999.0,
|
750
780
|
"nominal_full_load_efficiency": 0.945,
|
751
781
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
752
782
|
},
|
@@ -996,7 +1026,17 @@
|
|
996
1026
|
"type": "Open",
|
997
1027
|
"synchronous_speed": 1800.0,
|
998
1028
|
"minimum_capacity": 450.0,
|
999
|
-
"maximum_capacity":
|
1029
|
+
"maximum_capacity": 499.999,
|
1030
|
+
"nominal_full_load_efficiency": 0.945,
|
1031
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1032
|
+
},
|
1033
|
+
{
|
1034
|
+
"template": "DEER Pre-1975",
|
1035
|
+
"number_of_poles": 4.0,
|
1036
|
+
"type": "Open",
|
1037
|
+
"synchronous_speed": 1800.0,
|
1038
|
+
"minimum_capacity": 500.0,
|
1039
|
+
"maximum_capacity": 9999.0,
|
1000
1040
|
"nominal_full_load_efficiency": 0.945,
|
1001
1041
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1002
1042
|
},
|
@@ -1246,7 +1286,17 @@
|
|
1246
1286
|
"type": "Enclosed",
|
1247
1287
|
"synchronous_speed": 1200.0,
|
1248
1288
|
"minimum_capacity": 450.0,
|
1249
|
-
"maximum_capacity":
|
1289
|
+
"maximum_capacity": 499.999,
|
1290
|
+
"nominal_full_load_efficiency": 0.941,
|
1291
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1292
|
+
},
|
1293
|
+
{
|
1294
|
+
"template": "DEER Pre-1975",
|
1295
|
+
"number_of_poles": 6.0,
|
1296
|
+
"type": "Enclosed",
|
1297
|
+
"synchronous_speed": 1200.0,
|
1298
|
+
"minimum_capacity": 500.0,
|
1299
|
+
"maximum_capacity": 9999.0,
|
1250
1300
|
"nominal_full_load_efficiency": 0.941,
|
1251
1301
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1252
1302
|
},
|
@@ -1496,7 +1546,17 @@
|
|
1496
1546
|
"type": "Open",
|
1497
1547
|
"synchronous_speed": 1200.0,
|
1498
1548
|
"minimum_capacity": 450.0,
|
1499
|
-
"maximum_capacity":
|
1549
|
+
"maximum_capacity": 499.999,
|
1550
|
+
"nominal_full_load_efficiency": 0.941,
|
1551
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1552
|
+
},
|
1553
|
+
{
|
1554
|
+
"template": "DEER Pre-1975",
|
1555
|
+
"number_of_poles": 6.0,
|
1556
|
+
"type": "Open",
|
1557
|
+
"synchronous_speed": 1200.0,
|
1558
|
+
"minimum_capacity": 500.0,
|
1559
|
+
"maximum_capacity": 9999.0,
|
1500
1560
|
"nominal_full_load_efficiency": 0.941,
|
1501
1561
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1502
1562
|
},
|
@@ -1746,7 +1806,17 @@
|
|
1746
1806
|
"type": "Enclosed",
|
1747
1807
|
"synchronous_speed": 900.0,
|
1748
1808
|
"minimum_capacity": 450.0,
|
1749
|
-
"maximum_capacity":
|
1809
|
+
"maximum_capacity": 499.999,
|
1810
|
+
"nominal_full_load_efficiency": 0.941,
|
1811
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1812
|
+
},
|
1813
|
+
{
|
1814
|
+
"template": "DEER Pre-1975",
|
1815
|
+
"number_of_poles": 8.0,
|
1816
|
+
"type": "Enclosed",
|
1817
|
+
"synchronous_speed": 900.0,
|
1818
|
+
"minimum_capacity": 500.0,
|
1819
|
+
"maximum_capacity": 9999.0,
|
1750
1820
|
"nominal_full_load_efficiency": 0.941,
|
1751
1821
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
1752
1822
|
},
|
@@ -1996,7 +2066,17 @@
|
|
1996
2066
|
"type": "Open",
|
1997
2067
|
"synchronous_speed": 900.0,
|
1998
2068
|
"minimum_capacity": 450.0,
|
1999
|
-
"maximum_capacity":
|
2069
|
+
"maximum_capacity": 499.999,
|
2070
|
+
"nominal_full_load_efficiency": 0.941,
|
2071
|
+
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
2072
|
+
},
|
2073
|
+
{
|
2074
|
+
"template": "DEER Pre-1975",
|
2075
|
+
"number_of_poles": 8.0,
|
2076
|
+
"type": "Open",
|
2077
|
+
"synchronous_speed": 900.0,
|
2078
|
+
"minimum_capacity": 500.0,
|
2079
|
+
"maximum_capacity": 9999.0,
|
2000
2080
|
"nominal_full_load_efficiency": 0.941,
|
2001
2081
|
"notes": "Mapped from 'Standard' eff from DEER (2017.08.30)"
|
2002
2082
|
}
|
@@ -85,4 +85,21 @@ class BTAPPRE1980 < NECB2011
|
|
85
85
|
def set_occ_sensor_spacetypes(model, space_type_map)
|
86
86
|
return true
|
87
87
|
end
|
88
|
+
|
89
|
+
# This method sets the primary heating fuel to either NaturalGas or Electricity if a HP fuel type is set.
|
90
|
+
def validate_primary_heating_fuel(primary_heating_fuel:)
|
91
|
+
return primary_heating_fuel unless primary_heating_fuel == 'NaturalGasHPGasBackup' || primary_heating_fuel == 'NaturalGasHPElecBackupMixed' || primary_heating_fuel == 'ElectricityHPElecBackup' || primary_heating_fuel == 'ElectricityHPGasBackupMixed'
|
92
|
+
case primary_heating_fuel
|
93
|
+
when "NaturalGasHPGasBackup"
|
94
|
+
primary_heating_fuel = 'NaturalGas'
|
95
|
+
when "NaturalGasHPElecBackupMixed"
|
96
|
+
primary_heating_fuel = 'NaturalGas'
|
97
|
+
when "ElectricityHPElecBackup"
|
98
|
+
primary_heating_fuel = 'Electricity'
|
99
|
+
when "ElectricityHPGasBackupMixed"
|
100
|
+
primary_heating_fuel = 'Electricity'
|
101
|
+
end
|
102
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.Standards.Model', "Attemted to apply an NECB HP primary_heating_fuel to a vintage building type. Replacing the selected primary_heating_fuel with #{primary_heating_fuel}.")
|
103
|
+
return primary_heating_fuel
|
104
|
+
end
|
88
105
|
end
|
@@ -29,7 +29,8 @@ class BTAPPRE1980
|
|
29
29
|
chiller_electric_eir.setChillerFlowMode('LeavingSetpointModulated')
|
30
30
|
chiller_electric_eir.setMinimumPartLoadRatio(0.25)
|
31
31
|
chiller_electric_eir.setMinimumUnloadingRatio(0.25)
|
32
|
-
|
32
|
+
|
33
|
+
chiller_capacity = capacity_w
|
33
34
|
if (capacity_w / 1000.0) <= 700.0
|
34
35
|
# As per MNECB if chiller capacity <= 700 kW the compressor should be reciprocating so change the type here in
|
35
36
|
# the name, compressor_type and search_criteria which is where the compressor type is used.
|
@@ -43,11 +43,12 @@ class ECMS < NECB2011
|
|
43
43
|
ecm_system_name: nil,
|
44
44
|
template_standard:,
|
45
45
|
runner: nil,
|
46
|
-
primary_heating_fuel: nil,
|
47
|
-
swh_fuel: nil,
|
48
46
|
ecm_system_zones_map_option: 'NECB_Default')
|
49
47
|
# Do nothing if nil or other usual suspects.. covering all bases for now.
|
50
48
|
return if ecm_system_name.nil? || ecm_system_name == 'none' || ecm_system_name == 'NECB_Default'
|
49
|
+
# Verify the heating fuel
|
50
|
+
primary_heating_fuel = template_standard.fuel_type_set.ecm_fueltype
|
51
|
+
raise("Heating fuel for ECM #{ecm_system_name} is neither Electricity nor NaturalGas") if ((primary_heating_fuel != 'Electricity') && (primary_heating_fuel != 'NaturalGas'))
|
51
52
|
ecm_system_zones_map_option = 'NECB_Default' if ecm_system_zones_map_option.nil? || ecm_system_zones_map_option == 'none'
|
52
53
|
|
53
54
|
ecm_std = Standard.build('ECMS')
|
@@ -69,8 +70,7 @@ class ECMS < NECB2011
|
|
69
70
|
system_zones_map: map_system_to_zones,
|
70
71
|
system_doas_flags: system_doas_flags,
|
71
72
|
ecm_system_zones_map_option: ecm_system_zones_map_option,
|
72
|
-
standard: template_standard
|
73
|
-
heating_fuel: primary_heating_fuel)
|
73
|
+
standard: template_standard)
|
74
74
|
end
|
75
75
|
|
76
76
|
def apply_system_efficiencies_ecm(model:, ecm_system_name: nil, template_standard:)
|
@@ -504,13 +504,15 @@ class ECMS
|
|
504
504
|
system_zones_map:,
|
505
505
|
system_doas_flags:,
|
506
506
|
ecm_system_zones_map_option:,
|
507
|
-
heating_fuel:,
|
508
507
|
standard:,
|
509
508
|
air_sys_eqpt_type: 'ccashp')
|
510
509
|
|
511
|
-
#
|
510
|
+
# Get the heating fuel type from the system fuels object defined by the standards object
|
511
|
+
heating_fuel = standard.fuel_type_set.ecm_fueltype
|
512
|
+
|
513
|
+
# Create one hot-water loop for hot-water baseboards if required
|
512
514
|
hw_loop = nil
|
513
|
-
hw_loop = add_hotwater_loop(model: model) if
|
515
|
+
hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
514
516
|
|
515
517
|
# Update system zones map if needed
|
516
518
|
system_zones_map = update_system_zones_map_keys(system_zones_map,'sys_1')
|
@@ -523,20 +525,14 @@ class ECMS
|
|
523
525
|
# Update system doas flags
|
524
526
|
system_doas_flags = {}
|
525
527
|
system_zones_map.keys.each { |sname| system_doas_flags[sname] = true }
|
526
|
-
|
527
|
-
updated_heating_fuel = heating_fuel
|
528
|
-
if heating_fuel == 'DefaultFuel'
|
529
|
-
epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
|
530
|
-
updated_heating_fuel = standard.standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion) }['fueltype_set']
|
531
|
-
end
|
532
|
-
raise("Heating fuel for ECM 'HS08_CCASHP_VRF' is neither Electricity nor NaturalGas") if ((updated_heating_fuel != 'Electricity') && (updated_heating_fuel != 'NaturalGas'))
|
528
|
+
|
533
529
|
# use system zones map and generate new air system and zonal equipment
|
534
530
|
system_zones_map.sort.each do |sys_name, zones|
|
535
531
|
sys_info = air_sys_comps_assumptions(sys_name: sys_name,
|
536
532
|
zones: zones,
|
537
533
|
system_doas_flags: system_doas_flags)
|
538
534
|
sys_supp_htg_eqpt_type = 'coil_electric'
|
539
|
-
sys_supp_htg_eqpt_type = 'coil_gas' if
|
535
|
+
sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
|
540
536
|
airloop,clg_dx_coil,htg_dx_coil,return_fan = add_air_system(model: model,
|
541
537
|
zones: zones,
|
542
538
|
sys_abbr: sys_info['sys_abbr'],
|
@@ -573,8 +569,8 @@ class ECMS
|
|
573
569
|
zone_fan_type: 'On_Off',
|
574
570
|
hw_loop: hw_loop)
|
575
571
|
# add electric or hot-water baseboards for backup; Type of baseboard follows the primary heating fuel used in the building model.
|
576
|
-
zone_htg_eqpt_type = 'baseboard_hotwater' if
|
577
|
-
zone_htg_eqpt_type = 'baseboard_electric' if
|
572
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
573
|
+
zone_htg_eqpt_type = 'baseboard_electric' if standard.fuel_type_set.baseboard_type == 'Electric'
|
578
574
|
|
579
575
|
add_zone_eqpt(model: model,
|
580
576
|
airloop: airloop,
|
@@ -1223,23 +1219,18 @@ class ECMS
|
|
1223
1219
|
system_zones_map:, # hash of ailoop names as keys and array of zones as values
|
1224
1220
|
system_doas_flags:, # hash of system names as keys and flag for DOAS as values
|
1225
1221
|
ecm_system_zones_map_option:,
|
1226
|
-
heating_fuel:,
|
1227
1222
|
standard:)
|
1228
1223
|
|
1229
|
-
#
|
1224
|
+
# Get the heating fuel type from the system fuels object defined by the standards object
|
1225
|
+
heating_fuel = standard.fuel_type_set.ecm_fueltype
|
1226
|
+
|
1227
|
+
# Create one hot-water loop for hot-water baseboards if required
|
1230
1228
|
hw_loop = nil
|
1231
|
-
hw_loop = add_hotwater_loop(model: model) if
|
1229
|
+
hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
1232
1230
|
|
1233
|
-
# Set heating fuel
|
1234
|
-
updated_heating_fuel = heating_fuel
|
1235
|
-
if heating_fuel == 'DefaultFuel'
|
1236
|
-
epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
|
1237
|
-
updated_heating_fuel = standard.standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion)}['fueltype_set']
|
1238
|
-
end
|
1239
|
-
raise("Heating fuel for ECM 'HS09_CCASHP_Baseboard' is neither Electricity nor NaturalGas") if ((updated_heating_fuel != 'Electricity') && (updated_heating_fuel != 'NaturalGas'))
|
1240
1231
|
# Set supplemental heating for air loop
|
1241
1232
|
sys_supp_htg_eqpt_type = 'coil_electric'
|
1242
|
-
sys_supp_htg_eqpt_type = 'coil_gas' if
|
1233
|
+
sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
|
1243
1234
|
systems = []
|
1244
1235
|
system_zones_map.sort.each do |sys_name, zones|
|
1245
1236
|
sys_info = air_sys_comps_assumptions(sys_name: sys_name,
|
@@ -1269,8 +1260,8 @@ class ECMS
|
|
1269
1260
|
zone_clg_eqpt_type = 'ptac_electric_off'
|
1270
1261
|
zone_fan_type = 'on_off'
|
1271
1262
|
else
|
1272
|
-
zone_htg_eqpt_type = 'baseboard_electric' if
|
1273
|
-
zone_htg_eqpt_type = 'baseboard_hotwater' if
|
1263
|
+
zone_htg_eqpt_type = 'baseboard_electric' if standard.fuel_type_set.baseboard_type == 'Electric'
|
1264
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
1274
1265
|
zone_clg_eqpt_type = 'none'
|
1275
1266
|
zone_fan_type = 'none'
|
1276
1267
|
end
|
@@ -1286,8 +1277,8 @@ class ECMS
|
|
1286
1277
|
hw_loop: hw_loop)
|
1287
1278
|
# for doas use baseboard electric or hotwater as backup for PTAC units
|
1288
1279
|
if sys_info['sys_vent_type'] == 'doas'
|
1289
|
-
zone_htg_eqpt_type = 'baseboard_electric' if
|
1290
|
-
zone_htg_eqpt_type = 'baseboard_hotwater' if
|
1280
|
+
zone_htg_eqpt_type = 'baseboard_electric' if standard.fuel_type_set.baseboard_type == 'Electric'
|
1281
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
1291
1282
|
add_zone_eqpt(model: model,
|
1292
1283
|
airloop: airloop,
|
1293
1284
|
zones: zones,
|
@@ -1400,20 +1391,14 @@ class ECMS
|
|
1400
1391
|
system_zones_map:,
|
1401
1392
|
system_doas_flags:,
|
1402
1393
|
ecm_system_zones_map_option:,
|
1403
|
-
standard
|
1404
|
-
heating_fuel:)
|
1394
|
+
standard:)
|
1405
1395
|
hw_loop = nil
|
1406
1396
|
|
1407
|
-
#
|
1408
|
-
|
1409
|
-
if heating_fuel == 'DefaultFuel'
|
1410
|
-
epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
|
1411
|
-
updated_heating_fuel = standard.standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion)}['fueltype_set']
|
1412
|
-
end
|
1413
|
-
raise("Heating fuel for ECM 'HS11_ASHP_PTHP' is neither Electricity nor NaturalGas") if ((updated_heating_fuel != 'Electricity') && (updated_heating_fuel != 'NaturalGas'))
|
1397
|
+
# Get the heating fuel type from the system fuels object defined by the standards object
|
1398
|
+
heating_fuel = standard.fuel_type_set.ecm_fueltype
|
1414
1399
|
# Set supplemental heaing for airloop
|
1415
1400
|
sys_supp_htg_eqpt_type = 'coil_electric'
|
1416
|
-
sys_supp_htg_eqpt_type = 'coil_gas' if
|
1401
|
+
sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
|
1417
1402
|
# Update system zones map if needed
|
1418
1403
|
system_zones_map = update_system_zones_map_keys(system_zones_map,'sys_1')
|
1419
1404
|
system_zones_map = update_system_zones_map(model,system_zones_map,ecm_system_zones_map_option,'sys_1') if ecm_system_zones_map_option != 'NECB_Default'
|
@@ -1552,23 +1537,18 @@ class ECMS
|
|
1552
1537
|
system_zones_map:,
|
1553
1538
|
system_doas_flags:,
|
1554
1539
|
ecm_system_zones_map_option:,
|
1555
|
-
standard
|
1556
|
-
|
1540
|
+
standard:)
|
1541
|
+
|
1542
|
+
# Get the heating fuel type from the system fuels object defined by the standards object
|
1543
|
+
heating_fuel = standard.fuel_type_set.ecm_fueltype
|
1557
1544
|
|
1558
|
-
# Create one hot-water loop for hot-water baseboards if
|
1545
|
+
# Create one hot-water loop for hot-water baseboards if required
|
1559
1546
|
hw_loop = nil
|
1560
|
-
hw_loop = add_hotwater_loop(model: model) if
|
1547
|
+
hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
1561
1548
|
|
1562
|
-
# Set heating fuel
|
1563
|
-
updated_heating_fuel = heating_fuel
|
1564
|
-
if heating_fuel == 'DefaultFuel'
|
1565
|
-
epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
|
1566
|
-
updated_heating_fuel = standard.standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion)}['fueltype_set']
|
1567
|
-
end
|
1568
|
-
raise("Heating fuel for ECM 'HS12_ASHP_Baseboard' is neither Electricity nor NaturalGas") if ((updated_heating_fuel != 'Electricity') && (updated_heating_fuel != 'NaturalGas'))
|
1569
1549
|
# Set supplemental heating fuel for airloop
|
1570
1550
|
sys_supp_htg_eqpt_type = 'coil_electric'
|
1571
|
-
sys_supp_htg_eqpt_type = 'coil_gas' if
|
1551
|
+
sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
|
1572
1552
|
systems = []
|
1573
1553
|
system_zones_map.sort.each do |sys_name, zones|
|
1574
1554
|
sys_info = air_sys_comps_assumptions(sys_name: sys_name,
|
@@ -1595,8 +1575,8 @@ class ECMS
|
|
1595
1575
|
zone_clg_eqpt_type = 'ptac_electric_off'
|
1596
1576
|
zone_fan_type = 'on_off'
|
1597
1577
|
else
|
1598
|
-
zone_htg_eqpt_type = 'baseboard_electric' if
|
1599
|
-
zone_htg_eqpt_type = 'baseboard_hotwater' if
|
1578
|
+
zone_htg_eqpt_type = 'baseboard_electric' if standard.fuel_type_set.baseboard_type == 'Electric'
|
1579
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
1600
1580
|
zone_clg_eqpt_type = 'none'
|
1601
1581
|
zone_fan_type = 'none'
|
1602
1582
|
end
|
@@ -1612,8 +1592,8 @@ class ECMS
|
|
1612
1592
|
hw_loop: hw_loop)
|
1613
1593
|
# for doas use baseboard electric or hotwater as backup for PTAC units
|
1614
1594
|
if sys_info['sys_vent_type'] == 'doas'
|
1615
|
-
zone_htg_eqpt_type = 'baseboard_electric' if
|
1616
|
-
zone_htg_eqpt_type = 'baseboard_hotwater' if
|
1595
|
+
zone_htg_eqpt_type = 'baseboard_electric' if standard.fuel_type_set.baseboard_type == 'Electric'
|
1596
|
+
zone_htg_eqpt_type = 'baseboard_hotwater' if standard.fuel_type_set.baseboard_type == 'Hot Water'
|
1617
1597
|
add_zone_eqpt(model: model,
|
1618
1598
|
airloop: airloop,
|
1619
1599
|
zones: zones,
|
@@ -1711,15 +1691,13 @@ class ECMS
|
|
1711
1691
|
system_zones_map:,
|
1712
1692
|
system_doas_flags:,
|
1713
1693
|
ecm_system_zones_map_option:,
|
1714
|
-
standard
|
1715
|
-
heating_fuel:)
|
1694
|
+
standard:)
|
1716
1695
|
# call method for ECM hs08 with ASHP in the air system
|
1717
1696
|
add_ecm_hs08_ccashp_vrf(model: model,
|
1718
1697
|
system_zones_map: system_zones_map,
|
1719
1698
|
system_doas_flags: system_doas_flags,
|
1720
1699
|
ecm_system_zones_map_option: ecm_system_zones_map_option,
|
1721
1700
|
standard: standard,
|
1722
|
-
heating_fuel: heating_fuel,
|
1723
1701
|
air_sys_eqpt_type: 'ashp')
|
1724
1702
|
end
|
1725
1703
|
|
@@ -1740,18 +1718,14 @@ class ECMS
|
|
1740
1718
|
system_zones_map:,
|
1741
1719
|
system_doas_flags:,
|
1742
1720
|
ecm_system_zones_map_option:,
|
1743
|
-
standard
|
1744
|
-
|
1721
|
+
standard:)
|
1722
|
+
|
1723
|
+
# Get the heating fuel type from the system fuels object defined by the standards object
|
1724
|
+
heating_fuel = standard.fuel_type_set.ecm_fueltype
|
1745
1725
|
|
1746
|
-
updated_heating_fuel = heating_fuel
|
1747
|
-
if heating_fuel == 'DefaultFuel'
|
1748
|
-
epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
|
1749
|
-
updated_heating_fuel = standard.standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion)}['fueltype_set']
|
1750
|
-
end
|
1751
|
-
raise("Heating fuel for ECM 'HS11_ASHP_PTHP' is neither Electricity nor NaturalGas") if ((updated_heating_fuel != 'Electricity') && (updated_heating_fuel != 'NaturalGas'))
|
1752
1726
|
# Set supplemental heaing for airloop
|
1753
1727
|
sys_supp_htg_eqpt_type = 'coil_electric'
|
1754
|
-
sys_supp_htg_eqpt_type = 'coil_gas' if
|
1728
|
+
sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
|
1755
1729
|
# Update system zones map if needed
|
1756
1730
|
system_zones_map = update_system_zones_map_keys(system_zones_map,'sys_1')
|
1757
1731
|
system_zones_map = update_system_zones_map(model,system_zones_map,ecm_system_zones_map_option,'sys_1') if ecm_system_zones_map_option != 'NECB_Default'
|
@@ -1820,7 +1794,7 @@ class ECMS
|
|
1820
1794
|
raise("Can not find curve hpowerf for #{hw_loop_htg_eqpt.name}")
|
1821
1795
|
end
|
1822
1796
|
boiler = OpenStudio::Model::BoilerHotWater.new(model)
|
1823
|
-
boiler.setFuelType(
|
1797
|
+
boiler.setFuelType(heating_fuel)
|
1824
1798
|
hw_loop_htg_eqpt_outlet_node = hw_loop_htg_eqpt.supplyOutletModelObject.get.to_Node.get
|
1825
1799
|
boiler.addToNode(hw_loop_htg_eqpt_outlet_node)
|
1826
1800
|
|
@@ -2759,8 +2733,8 @@ class ECMS
|
|
2759
2733
|
|
2760
2734
|
# If specified as COP
|
2761
2735
|
unless props['minimum_coefficient_of_performance_heating'].nil?
|
2762
|
-
|
2763
|
-
cop = cop_heating_to_cop_heating_no_fan(
|
2736
|
+
cop_min = props['minimum_coefficient_of_performance_heating']
|
2737
|
+
cop = cop_heating_to_cop_heating_no_fan(cop_min, capacity_w)
|
2764
2738
|
new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
|
2765
2739
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
2766
2740
|
end
|
@@ -2896,8 +2870,8 @@ class ECMS
|
|
2896
2870
|
|
2897
2871
|
# If specified as COP
|
2898
2872
|
unless props['minimum_coefficient_of_performance_heating'].nil?
|
2899
|
-
|
2900
|
-
cop = cop_heating_to_cop_heating_no_fan(
|
2873
|
+
min_cop = props['minimum_coefficient_of_performance_heating']
|
2874
|
+
cop = cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
|
2901
2875
|
new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
|
2902
2876
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
2903
2877
|
end
|
@@ -3025,8 +2999,8 @@ class ECMS
|
|
3025
2999
|
|
3026
3000
|
# If specified as COP
|
3027
3001
|
unless props['minimum_coefficient_of_performance_heating'].nil?
|
3028
|
-
|
3029
|
-
cop = cop_heating_to_cop_heating_no_fan(
|
3002
|
+
min_cop = props['minimum_coefficient_of_performance_heating']
|
3003
|
+
cop = cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
|
3030
3004
|
new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
|
3031
3005
|
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
|
3032
3006
|
end
|
@@ -3171,6 +3145,10 @@ class ECMS
|
|
3171
3145
|
raise 'You attempted to set the part load curve of boilers in this model to nil. Please check the ECMS class boiler_set.json file and ensure that both the efficiency and part load curve are set.' if boiler_eff['part_load_curve'].nil?
|
3172
3146
|
|
3173
3147
|
model.getBoilerHotWaters.sort.each do |mod_boiler|
|
3148
|
+
if mod_boiler.fuelType.to_s.downcase == 'electricity'
|
3149
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "The boiler #{mod_boiler.name.to_s} is electrically powered. Only the efficiencies of fuel fired boilers are modified. The efficiency of this boiler will not be changed.")
|
3150
|
+
next
|
3151
|
+
end
|
3174
3152
|
reset_boiler_efficiency(model: model, component: mod_boiler.to_BoilerHotWater.get, eff: boiler_eff)
|
3175
3153
|
end
|
3176
3154
|
end
|
@@ -3526,28 +3504,21 @@ class ECMS
|
|
3526
3504
|
system_zones_map:,
|
3527
3505
|
system_doas_flags: nil,
|
3528
3506
|
ecm_system_zones_map_option:,
|
3529
|
-
standard
|
3530
|
-
heating_fuel:)
|
3507
|
+
standard:)
|
3531
3508
|
# Set the primary fuel set to default to to specific fuel type.
|
3532
3509
|
standards_info = standard.standards_data
|
3533
3510
|
|
3534
|
-
if heating_fuel == 'DefaultFuel'
|
3535
|
-
epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
|
3536
|
-
heating_fuel = standards_info['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion) }['fueltype_set']
|
3537
|
-
end
|
3538
|
-
# Get fuelset.
|
3539
|
-
system_fuel_defaults = standards_info['fuel_type_sets'].detect { |fuel_type_set| fuel_type_set['name'] == heating_fuel }
|
3540
|
-
raise("fuel_type_sets named #{heating_fuel} not found in fuel_type_sets table.") if system_fuel_defaults.nil?
|
3541
|
-
|
3542
3511
|
# Assign fuel sources.
|
3543
|
-
boiler_fueltype =
|
3544
|
-
|
3512
|
+
boiler_fueltype = standard.fuel_type_set.boiler_fueltype
|
3513
|
+
backup_boiler_fueltype = standard.fuel_type_set.backup_boiler_fueltype
|
3514
|
+
baseboard_type = standard.fuel_type_set.baseboard_type
|
3545
3515
|
mau_heating_coil_type = 'none'
|
3546
3516
|
|
3547
3517
|
# Create the hot water loop if necessary.
|
3548
3518
|
hw_loop = standard.create_hw_loop_if_required(
|
3549
3519
|
baseboard_type,
|
3550
3520
|
boiler_fueltype,
|
3521
|
+
backup_boiler_fueltype,
|
3551
3522
|
mau_heating_coil_type,
|
3552
3523
|
model
|
3553
3524
|
)
|
@@ -3705,15 +3676,17 @@ class ECMS
|
|
3705
3676
|
end
|
3706
3677
|
end
|
3707
3678
|
# ============================================================================================================================
|
3708
|
-
# Add one hot-water loop for hot-water baseboards if
|
3709
|
-
def add_hotwater_loop(model:)
|
3679
|
+
# Add one hot-water loop for hot-water baseboards if required
|
3680
|
+
def add_hotwater_loop(model:, fuel_type_set:)
|
3681
|
+
primary_boiler_fueltype = fuel_type_set.boiler_fueltype
|
3682
|
+
backup_boiler_fueltype = fuel_type_set.backup_boiler_fueltype
|
3710
3683
|
plant_loop_names = []
|
3711
3684
|
model.getPlantLoops.sort.each do |plant_loop|
|
3712
3685
|
plant_loop_names << plant_loop.name.to_s
|
3713
3686
|
end
|
3714
3687
|
unless plant_loop_names.include? 'Hot Water Loop'
|
3715
3688
|
hw_loop = OpenStudio::Model::PlantLoop.new(model)
|
3716
|
-
setup_hw_loop_with_components(model, hw_loop,
|
3689
|
+
setup_hw_loop_with_components(model, hw_loop, primary_boiler_fueltype, backup_boiler_fueltype, model.alwaysOnDiscreteSchedule)
|
3717
3690
|
end
|
3718
3691
|
return hw_loop
|
3719
3692
|
end
|
@@ -122,6 +122,7 @@ class NECB2011
|
|
122
122
|
model.getZoneHVACIdealLoadsAirSystems.each(&:remove)
|
123
123
|
@hw_loop = create_hw_loop_if_required(self.fuel_type_set.baseboard_type,
|
124
124
|
self.fuel_type_set.boiler_fueltype,
|
125
|
+
self.fuel_type_set.backup_boiler_fueltype,
|
125
126
|
self.fuel_type_set.mau_heating_coil_type,
|
126
127
|
model)
|
127
128
|
# Rule that all dwelling units have their own zone and system.
|
@@ -824,7 +825,7 @@ class NECB2011
|
|
824
825
|
################################################# NECB Systems
|
825
826
|
|
826
827
|
# Method will create a hot water loop if systems default fuel and medium sources require it.
|
827
|
-
def create_hw_loop_if_required(baseboard_type, boiler_fueltype, mau_heating_coil_type, model)
|
828
|
+
def create_hw_loop_if_required(baseboard_type, boiler_fueltype, backup_boiler_fueltype, mau_heating_coil_type, model)
|
828
829
|
# get systems that will be used in the model based on the space types to determine if a hw_loop is required.
|
829
830
|
systems_used = []
|
830
831
|
model.getSpaces.sort.each do |space|
|
@@ -857,7 +858,7 @@ class NECB2011
|
|
857
858
|
if hw_loop_needed
|
858
859
|
@hw_loop = OpenStudio::Model::PlantLoop.new(model)
|
859
860
|
always_on = model.alwaysOnDiscreteSchedule
|
860
|
-
setup_hw_loop_with_components(model, @hw_loop, boiler_fueltype, always_on)
|
861
|
+
setup_hw_loop_with_components(model, @hw_loop, boiler_fueltype, backup_boiler_fueltype, always_on)
|
861
862
|
end
|
862
863
|
return @hw_loop
|
863
864
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
{
|
2
|
+
"tables": {
|
3
|
+
"boiler_fuel_type_sets": {
|
4
|
+
"data_type": "table",
|
5
|
+
"notes": "This is a list of boiler fuel type combinations",
|
6
|
+
"refs": [
|
7
|
+
"Kamel.Haddad@nrcan-rncan.gc.ca",
|
8
|
+
"Phylroy.lopez@nrcan-rncan.gc.ca",
|
9
|
+
"Chris.Kirney@nrcan-rncan.gc.ca" ],
|
10
|
+
"table": [
|
11
|
+
{
|
12
|
+
"name":"NaturalGas",
|
13
|
+
"boiler_fueltype": "NaturalGas",
|
14
|
+
"backup_boiler_fueltype": "NaturalGas",
|
15
|
+
"baseboard_type": "Hot Water",
|
16
|
+
"mau_heating_coil_type": "Hot Water",
|
17
|
+
"heating_coil_type_sys6": "Hot Water"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"name":"NaturalGasElecBackup",
|
21
|
+
"boiler_fueltype": "NaturalGas",
|
22
|
+
"backup_boiler_fueltype": "Electricity",
|
23
|
+
"baseboard_type": "Hot Water",
|
24
|
+
"mau_heating_coil_type": "Hot Water",
|
25
|
+
"heating_coil_type_sys6": "Hot Water"
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"name":"Electricity",
|
29
|
+
"boiler_fueltype": "Electricity",
|
30
|
+
"backup_boiler_fueltype": "Electricity",
|
31
|
+
"baseboard_type": "Hot Water",
|
32
|
+
"mau_heating_coil_type": "Hot Water",
|
33
|
+
"heating_coil_type_sys6": "Hot Water"
|
34
|
+
},
|
35
|
+
{
|
36
|
+
"name":"ElectricityGasBackup",
|
37
|
+
"boiler_fueltype": "Electricity",
|
38
|
+
"backup_boiler_fueltype": "NaturalGas",
|
39
|
+
"baseboard_type": "Hot Water",
|
40
|
+
"mau_heating_coil_type": "Hot Water",
|
41
|
+
"heating_coil_type_sys6": "Hot Water"
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"name":"FuelOilNo2",
|
45
|
+
"boiler_fueltype": "FuelOilNo2",
|
46
|
+
"backup_boiler_fueltype": "FuelOilNo2",
|
47
|
+
"baseboard_type": "Hot Water",
|
48
|
+
"mau_heating_coil_type": "Hot Water",
|
49
|
+
"heating_coil_type_sys6": "Hot Water"
|
50
|
+
}
|
51
|
+
]
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMidriseApartment.osm
CHANGED
@@ -1229,7 +1229,7 @@ OS:Building,
|
|
1229
1229
|
6, !- Standards Number of Stories
|
1230
1230
|
6, !- Standards Number of Above Ground Stories
|
1231
1231
|
, !- Standards Template
|
1232
|
-
,
|
1232
|
+
LEEPMidriseApartment, !- Standards Building Type
|
1233
1233
|
, !- Standards Number of Living Units
|
1234
1234
|
, !- Relocatable
|
1235
1235
|
; !- Nominal Floor to Ceiling Height {m}
|
@@ -1229,7 +1229,7 @@ OS:Building,
|
|
1229
1229
|
60, !- Standards Number of Stories
|
1230
1230
|
60, !- Standards Number of Above Ground Stories
|
1231
1231
|
, !- Standards Template
|
1232
|
-
,
|
1232
|
+
LEEPMultiTower, !- Standards Building Type
|
1233
1233
|
, !- Standards Number of Living Units
|
1234
1234
|
, !- Relocatable
|
1235
1235
|
; !- Nominal Floor to Ceiling Height {m}
|
@@ -19487,7 +19487,7 @@ OS:Building,
|
|
19487
19487
|
23, !- Standards Number of Stories
|
19488
19488
|
23, !- Standards Number of Above Ground Stories
|
19489
19489
|
, !- Standards Template
|
19490
|
-
,
|
19490
|
+
LEEPPointTower, !- Standards Building Type
|
19491
19491
|
, !- Standards Number of Living Units
|
19492
19492
|
, !- Relocatable
|
19493
19493
|
; !- Nominal Floor to Ceiling Height {m}
|