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.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  3. data/data/standards/manage_OpenStudio_Standards.rb +2 -49
  4. data/data/standards/openstudio_standards_duplicates_log.csv +1 -7962
  5. data/data/standards/test_performance_expected_dd_results.csv +2005 -97
  6. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +47 -57
  7. data/lib/openstudio-standards/geometry/create.rb +8 -2
  8. data/lib/openstudio-standards/geometry/create_bar.rb +6 -3
  9. data/lib/openstudio-standards/geometry/create_shape.rb +1 -1
  10. data/lib/openstudio-standards/geometry/group.rb +1 -1
  11. data/lib/openstudio-standards/geometry/information.rb +1 -1
  12. data/lib/openstudio-standards/geometry/modify.rb +53 -1
  13. data/lib/openstudio-standards/infiltration/nist_infiltration.rb +1 -1
  14. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +11 -11
  15. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +11 -11
  16. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +2 -2
  17. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +44 -47
  18. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +43 -48
  19. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +1 -1
  20. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +44 -24
  21. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +24 -24
  22. data/lib/openstudio-standards/schedules/information.rb +1 -1
  23. data/lib/openstudio-standards/schedules/parametric.rb +1 -1
  24. data/lib/openstudio-standards/service_water_heating/create_piping_losses.rb +152 -0
  25. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +544 -0
  26. data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +303 -0
  27. data/lib/openstudio-standards/service_water_heating/create_water_use.rb +95 -0
  28. data/lib/openstudio-standards/space/space.rb +1 -1
  29. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +65 -70
  30. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +12 -14
  31. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +16 -5
  32. data/lib/openstudio-standards/standards/Standards.Model.rb +2 -2
  33. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +10 -2
  34. data/lib/openstudio-standards/{prototypes/common/objects/Prototype.Model.swh.rb → standards/Standards.ServiceWaterHeating.rb} +209 -139
  35. data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
  36. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +4 -8
  37. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +2 -2
  38. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +22251 -12963
  39. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +91 -91
  40. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +8981 -5228
  41. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +8935 -5182
  42. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +7281 -5391
  43. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +91 -91
  44. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +9005 -15215
  45. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_sets.json +136 -136
  46. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
  47. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +8717 -17168
  48. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_sets.json +136 -136
  49. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +1941 -651
  50. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +135 -135
  51. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +135 -135
  52. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +36 -36
  53. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +36 -36
  54. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +377 -99
  55. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +2 -2
  56. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +3 -3
  57. 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
  58. 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
  59. data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.construction_properties.json +16 -16
  60. data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.construction_properties.json +16 -16
  61. data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.construction_properties.json +16 -16
  62. data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.construction_properties.json +16 -16
  63. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.construction_properties.json +16 -16
  64. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.construction_properties.json +16 -16
  65. data/lib/openstudio-standards/standards/cbes/data/cbes.constructions.json +142 -142
  66. data/lib/openstudio-standards/standards/deer/data/deer.constructions.json +5 -1551
  67. data/lib/openstudio-standards/standards/deer/data/deer.materials.json +40 -0
  68. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.motors.json +88 -8
  69. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.motors.json +88 -8
  70. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.motors.json +88 -8
  71. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.motors.json +88 -8
  72. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.motors.json +88 -8
  73. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.motors.json +88 -8
  74. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.motors.json +88 -8
  75. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.motors.json +88 -8
  76. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.motors.json +88 -8
  77. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.motors.json +88 -8
  78. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.motors.json +88 -8
  79. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.motors.json +88 -8
  80. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.motors.json +88 -8
  81. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.motors.json +88 -8
  82. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.motors.json +88 -8
  83. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.motors.json +88 -8
  84. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.motors.json +88 -8
  85. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.motors.json +88 -8
  86. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.motors.json +88 -8
  87. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.motors.json +88 -8
  88. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.motors.json +88 -8
  89. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +17 -0
  90. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +2 -1
  91. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +4 -4
  92. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +61 -88
  93. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +3 -2
  94. data/lib/openstudio-standards/standards/necb/NECB2011/data/boiler_fuel_type_sets.json +54 -0
  95. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMidriseApartment.osm +1 -1
  96. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMultiTower.osm +1 -1
  97. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPPointTower.osm +1 -1
  98. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPTownHouse.osm +1 -1
  99. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +4 -4
  100. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +4 -4
  101. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +32 -24
  102. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +89 -15
  103. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +5 -1
  104. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +22 -65
  105. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +19 -0
  106. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +56 -2
  107. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +3 -1
  108. data/lib/openstudio-standards/standards/necb/common/construction_defaults.osm +2 -2
  109. data/lib/openstudio-standards/standards/necb/docs/air_system_names_method.md +127 -0
  110. data/lib/openstudio-standards/thermal_zone/thermal_zone.rb +1 -1
  111. data/lib/openstudio-standards/utilities/template_measure/resources/BTAPMeasureHelper.rb +1 -1
  112. data/lib/openstudio-standards/version.rb +1 -1
  113. data/lib/openstudio-standards/weather/information.rb +61 -5
  114. data/lib/openstudio-standards/weather/modify.rb +1 -1
  115. data/lib/openstudio-standards.rb +5 -3
  116. metadata +12 -63
  117. data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
  118. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +0 -1100
  119. 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": 500.0,
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": 500.0,
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": 500.0,
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": 500.0,
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": 500.0,
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": 500.0,
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": 500.0,
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": 500.0,
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
- # Create one hot-water loop for hot-water baseboards if primary heating fuel is gas
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 heating_fuel == 'NaturalGas'
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
- # Set heating fuel
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 updated_heating_fuel == 'NaturalGas'
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 heating_fuel == 'NaturalGas'
577
- zone_htg_eqpt_type = 'baseboard_electric' if heating_fuel == 'Electricity'
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
- # Create one hot-water loop for hot-water baseboards if primary heating fuel is gas
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 heating_fuel == 'NaturalGas'
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 updated_heating_fuel == 'NaturalGas'
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 updated_heating_fuel == 'Electricity'
1273
- zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
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 updated_heating_fuel == 'Electricity'
1290
- zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
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
- # Set heating fuel
1408
- updated_heating_fuel = heating_fuel
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 updated_heating_fuel == 'NaturalGas'
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
- heating_fuel:)
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 primary heating fuel is gas
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 heating_fuel == 'NaturalGas'
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 updated_heating_fuel == 'NaturalGas'
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 updated_heating_fuel == 'Electricity'
1599
- zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
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 updated_heating_fuel == 'Electricity'
1616
- zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
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
- heating_fuel:)
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 updated_heating_fuel == 'NaturalGas'
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(updated_heating_fuel)
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
- cop = props['minimum_coefficient_of_performance_heating']
2763
- cop = cop_heating_to_cop_heating_no_fan(min_eer)
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
- cop = props['minimum_coefficient_of_performance_heating']
2900
- cop = cop_heating_to_cop_heating_no_fan(min_eer)
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
- cop = props['minimum_coefficient_of_performance_heating']
3029
- cop = cop_heating_to_cop_heating_no_fan(min_eer)
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 = system_fuel_defaults['boiler_fueltype']
3544
- baseboard_type = system_fuel_defaults['baseboard_type']
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 primary heating fuel is gas
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, 'NaturalGas', model.alwaysOnDiscreteSchedule)
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
+ }
@@ -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
- , !- Standards Building Type
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
- , !- Standards Building Type
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
- , !- Standards Building Type
19490
+ LEEPPointTower, !- Standards Building Type
19491
19491
  , !- Standards Number of Living Units
19492
19492
  , !- Relocatable
19493
19493
  ; !- Nominal Floor to Ceiling Height {m}