openstudio-standards 0.8.2 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  3. data/data/standards/openstudio_standards_duplicates_log.csv +7962 -0
  4. data/lib/openstudio-standards/btap/costing/README.md +502 -0
  5. data/lib/openstudio-standards/btap/costing/btap_costing.rb +473 -0
  6. data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
  7. data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
  8. data/lib/openstudio-standards/btap/costing/common_paths.rb +78 -0
  9. data/lib/openstudio-standards/btap/costing/common_resources/ConstructionProperties.csv +52 -0
  10. data/lib/openstudio-standards/btap/costing/common_resources/Constructions.csv +37 -0
  11. data/lib/openstudio-standards/btap/costing/common_resources/construction_sets.csv +1270 -0
  12. data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +61 -0
  13. data/lib/openstudio-standards/btap/costing/common_resources/constructions_opaque.csv +2256 -0
  14. data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +1904 -0
  15. data/lib/openstudio-standards/btap/costing/common_resources/costs_local_factors.csv +2315 -0
  16. data/lib/openstudio-standards/btap/costing/common_resources/hvac_vent_ahu.csv +925 -0
  17. data/lib/openstudio-standards/btap/costing/common_resources/lighting.csv +364 -0
  18. data/lib/openstudio-standards/btap/costing/common_resources/lighting_sets.csv +2667 -0
  19. data/lib/openstudio-standards/btap/costing/common_resources/locations.csv +75 -0
  20. data/lib/openstudio-standards/btap/costing/common_resources/materials_glazing.csv +35 -0
  21. data/lib/openstudio-standards/btap/costing/common_resources/materials_hvac.csv +1699 -0
  22. data/lib/openstudio-standards/btap/costing/common_resources/materials_lighting.csv +267 -0
  23. data/lib/openstudio-standards/btap/costing/common_resources/materials_opaque.csv +164 -0
  24. data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
  25. data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
  26. data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +177 -0
  27. data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +353 -0
  28. data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
  29. data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
  30. data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
  31. data/lib/openstudio-standards/btap/costing/envelope_costing.rb +284 -0
  32. data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
  33. data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +155 -0
  34. data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
  35. data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
  36. data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
  37. data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
  38. data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
  39. data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
  40. data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
  41. data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
  42. data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
  43. data/lib/openstudio-standards/btap/costing/test_list.txt +17 -0
  44. data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +26 -0
  45. data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
  46. data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
  47. data/lib/openstudio-standards/constructions/modify.rb +2 -1
  48. data/lib/openstudio-standards/refrigeration/create_case.rb +58 -21
  49. data/lib/openstudio-standards/refrigeration/create_typical_refrigeration.rb +4 -2
  50. data/lib/openstudio-standards/refrigeration/create_walkin.rb +57 -22
  51. data/lib/openstudio-standards/refrigeration/data/refrigerated_cases.csv +31 -31
  52. data/lib/openstudio-standards/refrigeration/data/refrigerated_walkins.csv +76 -76
  53. data/lib/openstudio-standards/service_water_heating/create_typical.rb +10 -10
  54. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +10 -0
  55. data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +16 -3
  56. data/lib/openstudio-standards/service_water_heating/data/convert_data.rb +9 -9
  57. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.csv +49 -49
  58. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.json +159 -159
  59. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +7 -18
  60. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +10 -20
  61. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +6 -15
  62. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +5 -6
  63. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +93 -43
  64. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +5 -5
  65. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +135 -37
  66. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -2
  67. data/lib/openstudio-standards/standards/Standards.Model.rb +48 -13
  68. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.computer_room_acs.json +302 -140
  69. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +648 -326
  70. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +371 -90
  71. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +66 -22
  72. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.computer_room_acs.json +302 -140
  73. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +1012 -296
  74. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +443 -79
  75. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +66 -22
  76. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.computer_room_acs.json +302 -140
  77. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +672 -306
  78. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +354 -74
  79. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +72 -24
  80. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.computer_room_acs.json +302 -140
  81. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +8 -8
  82. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +930 -604
  83. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +415 -111
  84. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +72 -24
  85. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.computer_room_acs.json +602 -140
  86. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps.json +1005 -333
  87. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +642 -88
  88. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.water_heaters.json +78 -26
  89. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.computer_room_acs.json +722 -140
  90. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps.json +1741 -426
  91. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +1108 -111
  92. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.water_heaters.json +186 -62
  93. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +62 -232
  94. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -3
  95. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +1 -1
  96. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +7 -18
  97. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +9 -7
  98. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +1 -1
  99. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -2
  100. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +154 -69
  101. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps_heating.json +72 -72
  102. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +382 -295
  103. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +6 -1
  104. data/lib/openstudio-standards/standards/deer/data/deer.schedules.json +62 -232
  105. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +2 -27
  106. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/heat_pumps.json +16 -0
  107. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/heat_pumps_heating.json +6 -0
  108. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
  109. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
  110. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
  111. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +46 -20
  112. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +635 -248
  113. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +43 -7
  114. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +7 -1
  115. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
  116. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps.json +16 -0
  117. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +6 -0
  118. data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
  119. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
  120. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
  121. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
  122. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
  123. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +16 -6
  124. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
  125. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
  126. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
  127. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
  128. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
  129. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +43 -14
  130. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +214 -25
  131. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
  132. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps.json +16 -0
  133. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +8 -0
  134. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
  135. data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
  136. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +15 -6
  137. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
  138. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
  139. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +20 -0
  140. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +10 -0
  141. data/lib/openstudio-standards/standards/necb/README.md +343 -0
  142. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +190 -28
  143. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +14 -5
  144. data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
  145. data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
  146. data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
  147. data/lib/openstudio-standards/utilities/logging.rb +18 -14
  148. data/lib/openstudio-standards/utilities/simulation.rb +3 -2
  149. data/lib/openstudio-standards/version.rb +1 -1
  150. data/lib/openstudio-standards/weather/modify.rb +2 -2
  151. data/lib/openstudio-standards.rb +12 -0
  152. metadata +56 -3
@@ -0,0 +1,489 @@
1
+ class NECB2011
2
+
3
+ def get_chiller_type_from_water_coil(cooling_coil_water: nil)
4
+ if cooling_coil_water
5
+ # Get the PlantLoop attached to the CoilCoolingWater
6
+ plant_loop = cooling_coil_water.plantLoop
7
+ # Initialize an array to hold the names of the ChillerElectricEIR objects
8
+ chiller_names = []
9
+ # Check if the PlantLoop is valid
10
+ if plant_loop.is_initialized
11
+ # Get the actual PlantLoop object
12
+ plant_loop = plant_loop.get
13
+ # Get the ChillerElectricEIR objects attached to the PlantLoop
14
+ chillers = plant_loop.supplyComponents(OpenStudio::Model::ChillerElectricEIR::iddObjectType)
15
+ chillers.each do |chiller|
16
+ chiller = chiller.to_ChillerElectricEIR.get
17
+ chiller_names << chiller.name.get
18
+ end #chillers
19
+
20
+ case chiller_names[0]
21
+ # Check if name contains ["Scroll","Centrifugal","RotaryScrew","Reciprocating","WaterCooled"]
22
+ when /Scroll/
23
+ chiller_type = 'scrl'
24
+ when /Centrifugal/
25
+ chiller_type = 'cent'
26
+ when /RotaryScrew/ , /Rotary Screw/
27
+ chiller_type = 'screw'
28
+ when /Reciprocating/
29
+ chiller_type = 'recip'
30
+ when /WaterCooled/
31
+ chiller_type = 'water'
32
+ else
33
+ raise("Chiller type not recognized #{chiller_names[0]}")
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def detect_air_system_type(air_loop: nil , sys_abbr: nil , old_system_name: nil)
40
+ ref_system_desc = {
41
+ "sys_1" => "PSZ %s %s Coils and %s",
42
+ "sys_2" => "FPFC %s %s Coils with %s Chiller",
43
+ "sys_3" => "PSZ %s %s Coils and %s",
44
+ "sys_4" => "PSZ %s %s Coils and %s",
45
+ "sys_5" => "TPFC %s %s Coils with %s Chiller",
46
+ "sys_6" => "MZ BU %s %s Heating Coil %s Chiller and %s"
47
+ }
48
+
49
+ # AirLoopHVACUnitaryHeatPumpAirToAir
50
+ unitary_hp = air_loop.components.detect(proc {false}) { |equip| equip.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized()} ? air_loop.components.detect() { |equip| equip.to_AirLoopHVACUnitaryHeatPumpAirToAir.is_initialized()}.to_AirLoopHVACUnitaryHeatPumpAirToAir.get : false
51
+ unitary_heating_coil_elec = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingElectric.is_initialized()? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingElectric.get : false
52
+ unitary_heating_coil_gas = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingGas.is_initialized()? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingGas.get : false
53
+ unitary_heating_coil_ashp = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingDXSingleSpeed.is_initialized()? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.heatingCoil.to_CoilHeatingDXSingleSpeed.get : false
54
+ unitary_sup_heating_coil_elec =( unitary_hp && unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingElectric.is_initialized()) ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingElectric.get : false
55
+ unitary_sup_heating_coil_gas = ( unitary_hp && unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingGas.is_initialized()) ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingGas.get : false
56
+ unitary_sup_heating_coil_ashp =( unitary_hp && unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingDXSingleSpeed.is_initialized()) ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplementalHeatingCoil.to_CoilHeatingDXSingleSpeed.get : false
57
+ unitary_supply_fan_on_off = unitary_hp and unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplyAirFan.to_FanOnOff.is_initialized() ? unitary_hp.to_AirLoopHVACUnitaryHeatPumpAirToAir.get.supplyAirFan.to_FanOnOff.get : false
58
+
59
+ # Main AirLoopHVAC Components
60
+ # Heating Coils
61
+ heating_coil_elect = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingElectric.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilHeatingElectric.is_initialized}.to_CoilHeatingElectric.get : false
62
+ heating_coil_ashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized and equip.to_CoilHeatingDXSingleSpeed.get.minimumOutdoorDryBulbTemperatureforCompressorOperation == -10} ? air_loop.components.detect() { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized}.to_CoilHeatingDXSingleSpeed.get : false
63
+ heating_coil_ccashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized and equip.to_CoilHeatingDXSingleSpeed.get.minimumOutdoorDryBulbTemperatureforCompressorOperation == -25} ? air_loop.components.detect() { |equip| equip.to_CoilHeatingDXSingleSpeed.is_initialized}.to_CoilHeatingDXSingleSpeed.get : false
64
+ heating_coil_water = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingWater.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilHeatingWater.is_initialized}.to_CoilHeatingWater.get : false
65
+ heating_coil_gas = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilHeatingGas.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilHeatingGas.is_initialized}.to_CoilHeatingGas.get : false
66
+ # Cooling Coils
67
+ cooling_coil_ashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingDXSingleSpeed.is_initialized and heating_coil_ashp}
68
+ cooling_coil_ccashp = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingDXSingleSpeed.is_initialized and heating_coil_ccashp}
69
+ cooling_coil_dx = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingDXSingleSpeed.is_initialized and (heating_coil_gas or heating_coil_elect or heating_coil_water)}
70
+ cooling_coil_water = air_loop.components.detect(proc {false}) { |equip| equip.to_CoilCoolingWater.is_initialized } ? air_loop.components.detect() { |equip| equip.to_CoilCoolingWater.is_initialized}.to_CoilCoolingWater.get : false
71
+
72
+ # MAU Chiller Type
73
+ chiller_type = get_chiller_type_from_water_coil(cooling_coil_water: cooling_coil_water)
74
+
75
+ # Zone Baseboard Heating.
76
+ zone_htg_b_elec = air_loop.thermalZones.first.respond_to?(:equipment) ? air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Baseboard Convective Electric') } : false
77
+ zone_htg_b_water = air_loop.thermalZones.first.respond_to?(:equipment) ? air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Baseboard Convective Water') } : false
78
+
79
+ # Zone VAV with Reheat.
80
+ zone_vav_rh = air_loop.components.detect(proc {false}) { |equip| equip.to_AirTerminalSingleDuctVAVReheat.is_initialized()} ? air_loop.components.detect() { |equip| equip.to_AirTerminalSingleDuctVAVReheat.is_initialized()}.to_AirTerminalSingleDuctVAVReheat.get : false
81
+
82
+
83
+ # Zone 2/4 Pipe Fan Coils.
84
+ zone_tpfc = false
85
+ zone_fpfc = false
86
+ if air_loop.thermalZones.first.respond_to?(:equipment)
87
+ fan_coil = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.to_ZoneHVACFourPipeFanCoil().is_initialized() }
88
+ if fan_coil
89
+ case fan_coil.to_ZoneHVACFourPipeFanCoil.get.coolingCoil.to_CoilCoolingWater.get.availabilitySchedule.nameString
90
+ when 'tpfc_clg_availability'
91
+ zone_tpfc = true
92
+ when OpenStudio::Model::Model.new.alwaysOnDiscreteSchedule.nameString
93
+ zone_fpfc = true
94
+ else
95
+ raise('unknown schedule type')
96
+ end
97
+ cooling_coil_water = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.to_ZoneHVACFourPipeFanCoil().is_initialized()}.to_ZoneHVACFourPipeFanCoil.get.coolingCoil.to_CoilCoolingWater.get
98
+
99
+ # If chiller was not detected, from MAU or RTU, then detect it from the fan coil.
100
+ chiller_type = get_chiller_type_from_water_coil(cooling_coil_water: cooling_coil_water) if not chiller_type
101
+ end
102
+ end
103
+
104
+
105
+ if air_loop.thermalZones.first.respond_to?(:equipment)
106
+ zone_htg_pthp = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Packaged Terminal Heat Pump') }
107
+ zone_clg_ptac = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('PTAC') }
108
+ zone_clg_pthp = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Zone HVAC Packaged Terminal Heat Pump') }
109
+ zone_rh_elec = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Air Terminal Single Duct Constant Volume Reheat') and equip.to_AirTerminalSingleDuctConstantVolumeReheat.get.reheatCoil.nameString.include?('Coil Heating Electric') }
110
+ zone_rh_gas = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Air Terminal Single Duct Constant Volume Reheat') and equip.to_AirTerminalSingleDuctConstantVolumeReheat.get.reheatCoil.nameString.include?('Coil Heating Gas') }
111
+ zone_rh_hw = air_loop.thermalZones.first.equipment.detect(proc {false}) { |equip| equip.nameString.include?('Air Terminal Single Duct Constant Volume Reheat') and equip.to_AirTerminalSingleDuctConstantVolumeReheat.get.reheatCoil.nameString.include?('Coil Heating Water') }
112
+ end
113
+ return_fan = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('Fan') }
114
+ # Determine System Outdoor Air type.
115
+ oa_controller = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('ControllerOutdoorAir') }
116
+ oa_system = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('OutdoorAirSystem') }
117
+ # Determine System Heat Recovery type.
118
+ heat_recovery = air_loop.components.detect(proc {false}) { |equip| equip.nameString.include?('HeatExchangerAirToAirSensibleAndLatent') }
119
+ # Determine System Supply Fan type.
120
+ fans_vv = air_loop.components.select{ |equip| equip.to_FanVariableVolume.is_initialized()}
121
+ fans_cv = air_loop.components.select{ |equip| equip.to_FanConstantVolume.is_initialized()}
122
+ case fans_vv.size
123
+ when 1
124
+ supply_fan_vv = fans_vv[0].to_FanVariableVolume.get
125
+ return_fan_vv = false
126
+ when 2
127
+ return_fan_vv = fans_vv[0].to_FanVariableVolume.get
128
+ supply_fan_vv = fans_vv[1].to_FanVariableVolume.get
129
+ else
130
+ supply_fan_vv = false
131
+ return_fan_vv = false
132
+ end
133
+ case fans_cv.size
134
+ when 1
135
+ supply_fan_cv = fans_cv[0].to_FanConstantVolume.get
136
+ return_fan_cv = false
137
+ when 2
138
+ return_fan_cv = fans_cv[0].to_FanConstantVolume.get
139
+ supply_fan_cv = fans_cv[1].to_FanConstantVolume.get
140
+ else
141
+ supply_fan_cv = false
142
+ return_fan_cv = false
143
+ end
144
+
145
+ # System Name and assumptions
146
+
147
+ case sys_abbr
148
+ when "sys_1"
149
+ ref_sys = sys_abbr
150
+ oa='doas'
151
+ oa = 'mixed' if heating_coil_ashp or heating_coil_ccashp
152
+ when "sys_2"
153
+ ref_sys = sys_abbr
154
+ oa='doas'
155
+ when "sys_3"
156
+ ref_sys = sys_abbr
157
+ oa='mixed'
158
+ when "sys_5"
159
+ ref_sys = sys_abbr
160
+ oa='doas'
161
+ when "sys_4"
162
+ ref_sys = sys_abbr
163
+ oa='mixed'
164
+ when "sys_6"
165
+ ref_sys = sys_abbr
166
+ oa='mixed'
167
+ else
168
+ raise("System name not recognized")
169
+ end
170
+
171
+
172
+
173
+ # Determine if the system is a DOAS based on
174
+ # whether there is 100% OA in heating and cooling sizing.
175
+ puts "allOutdoorAirinCooling #{air_loop.sizingSystem.allOutdoorAirinCooling}"
176
+ puts "allOutdoorAirinHeating #{air_loop.sizingSystem.allOutdoorAirinHeating}"
177
+ puts "typeofLoadtoSizeOn #{air_loop.sizingSystem.typeofLoadtoSizeOn}"
178
+
179
+
180
+
181
+
182
+
183
+ # puts "heating_coil_elect: #{heating_coil_elect.nil?}"
184
+ # puts "heating_coil_ashp: #{heating_coil_ashp}"
185
+ # puts "heating_coil_ccashp: #{heating_coil_ccashp}"
186
+ # puts "heating_coil_water: #{heating_coil_water}"
187
+ # puts "cooling_coil_ashp: #{cooling_coil_ashp}"
188
+ # puts "cooling_coil_ccashp: #{cooling_coil_ccashp}"
189
+ # puts "cooling_coil_dx: #{cooling_coil_dx}"
190
+ # puts "cooling_coil_water: #{cooling_coil_water}"
191
+ # puts "heating_coil_gas: #{heating_coil_gas}"
192
+ # puts "zone_htg_b_elec: #{zone_htg_b_elec}"
193
+ # puts "zone_htg_b_water: #{zone_htg_b_water}"
194
+ # puts "zone_htg_tpfc: #{zone_htg_tpfc}"
195
+ # puts "zone_htg_fpfc: #{zone_htg_fpfc}"
196
+ # puts "zone_htg_pthp: #{zone_htg_pthp}"
197
+ # puts "zone_clg_tpfc: #{zone_clg_tpfc}"
198
+ # puts "zone_clg_fpfc: #{zone_clg_fpfc}"
199
+ # puts "zone_clg_ptac: #{zone_clg_ptac}"
200
+ # puts "zone_clg_pthp: #{zone_clg_pthp}"
201
+ # puts "return_fan: #{return_fan}"
202
+ # puts "oa_controller: #{oa_controller}"
203
+ # puts "oa_system: #{oa_system}"
204
+ # puts "heat_recovery: #{heat_recovery}"
205
+ # puts "supply_fan_vv: #{supply_fan_vv}"
206
+ # puts "return_fan_vv: #{return_fan_vv}"
207
+ # puts "supply_fan_cv: #{supply_fan_cv}"
208
+ # puts "return_fan_cv: #{return_fan_cv}"
209
+ puts "zone_rh_elec: #{zone_rh_elec}"
210
+ puts "zone_rh_gas: #{zone_rh_gas}"
211
+ # puts "unitary_hp: #{unitary_hp}"
212
+ # puts "unitary_heating_coil_elec: #{unitary_heating_coil_elec}"
213
+ # puts "unitary_heating_coil_gas: #{unitary_heating_coil_gas}"
214
+ # puts "unitary_heating_coil_ashp: #{unitary_heating_coil_ashp}"
215
+ # puts "unitary_supply_fan_on_off: #{unitary_supply_fan_on_off}"
216
+ # puts "zone_htg_b_elec: #{zone_htg_b_elec}"
217
+ # puts "zone_htg_b_water: #{zone_htg_b_water}"
218
+
219
+
220
+
221
+
222
+
223
+ # sys_htg or sh>?
224
+ sh_map = {
225
+ "sh>none" => 'None',
226
+ "sh>c-e" => 'Electric',
227
+ "sh>c-g" => 'Gas',
228
+ "sh>c-hw" => 'Hot Water',
229
+ "sh>ashp>c-e" => 'ASHP with Electric',
230
+ "sh>ashp>c-g" => 'ASHP with Gas',
231
+ "sh>ashp>c-hw" => 'ASHP with Hot Water',
232
+ "sh>ccashp>c-e" => 'CCASHP with Electric',
233
+ "sh>ccashp>c-g" => 'CCASHP with Gas',
234
+ "sh>ccashp>c-hw" => 'CCASHP with Hot Water'
235
+ }
236
+ sc_map = {
237
+ "sc>none" => 'None',
238
+ "sc>ashp" => 'ASHP',
239
+ "sc>ccashp" => 'CCASHP',
240
+ "sc>dx" => 'DX',
241
+ "sc>c-chw" => 'Chilled Water'
242
+ }
243
+ ssf_map = {
244
+ "ssf>none" => 'None',
245
+ "ssf>cv" => 'Constant Volume',
246
+ "ssf>vv" => 'Variable Volume'
247
+ }
248
+ zh_map = {
249
+ "zh>none" => 'None',
250
+ "zh>b-e" => 'Electric Baseboard',
251
+ "zh>b-hw" => 'Hot Water Baseboard',
252
+ "zh>tpfc" => 'TPFC',
253
+ "zh>fpfc" => 'FPFC',
254
+ "zh>pthp" => 'PTHP'
255
+ }
256
+ zc_map = {
257
+ "zc>none" => 'None',
258
+ "zc>tpfc" => 'TPFC',
259
+ "zc>fpfc" => 'FPFC',
260
+ "zc>ptac" => 'PTAC',
261
+ "zc>pthp" => 'PTHP'
262
+ }
263
+ chiller_map = {
264
+ "ch>none" => 'None',
265
+ "ch>scrl" => 'Scroll',
266
+ "ch>cent" => 'Centrifugal',
267
+ "ch>screw" => 'Rotary Screw',
268
+ "ch>recip" => 'Reciprocating'
269
+ }
270
+ srf_map = {
271
+ "srf>none" => 'None',
272
+ "srf>cv" => 'Constant Volume',
273
+ "srf>vv" => 'Variable Volume'
274
+ }
275
+ zrh_map = {
276
+ "zrh>none" => 'None',
277
+ "zrh>e" => 'Electric',
278
+ "zrh>g" => 'Gas',
279
+ "zrh>hw" => 'Hot Water'
280
+ }
281
+ # Unitary Heating Coil
282
+ uhc_map = {
283
+ "uhc>none" => 'None',
284
+ "uhc>e" => 'Electric',
285
+ "uhc>g" => 'Gas',
286
+ }
287
+
288
+ # Unitary Supplemental Heating Coil
289
+ ushc_map = {
290
+ "ushc>none" => 'None',
291
+ "ushc>e" => 'Electric',
292
+ "ushc>g" => 'Gas',
293
+ }
294
+
295
+ # Unitary Supplemental Heating Coil
296
+ if unitary_sup_heating_coil_elec
297
+ ushc = 'ushc>e'
298
+ elsif unitary_sup_heating_coil_gas
299
+ ushc = 'ushc>g'
300
+ else
301
+ ushc = 'ushc>none'
302
+ end
303
+
304
+ # Unitary Heating Coil
305
+ if unitary_heating_coil_elec
306
+ uhc = 'uhc>e'
307
+ elsif unitary_heating_coil_gas
308
+ uhc = 'uhc>g'
309
+ elsif unitary_heating_coil_ashp
310
+ uhc = 'uhc>ashp'
311
+ else
312
+ uhc = 'uhc>none'
313
+ end
314
+
315
+ # Zone Reheat
316
+ if zone_rh_gas
317
+ zrh = 'zrh>g'
318
+ elsif zone_rh_elec
319
+ zrh = 'zrh>e'
320
+ elsif zone_rh_hw
321
+ zrh = 'zrh>hw'
322
+ else
323
+ zrh = 'zrh>none'
324
+ end
325
+
326
+ if heating_coil_elect
327
+ sh = 'sh>c-e'
328
+ elsif heating_coil_ashp or unitary_hp
329
+ sh = 'sh>ashp'
330
+ if zone_rh_gas or unitary_sup_heating_coil_gas
331
+ sh += '>c-g'
332
+ elsif zone_rh_elec or unitary_sup_heating_coil_elec
333
+ sh += '>c-e'
334
+ elsif zone_rh_hw
335
+ sh += '>c-hw'
336
+ end
337
+ elsif heating_coil_ccashp
338
+ sh = 'sh>ccashp'
339
+ if zone_rh_gas or unitary_sup_heating_coil_gas
340
+ sh += '>c-g'
341
+ elsif zone_rh_elec or unitary_sup_heating_coil_elec
342
+ sh += '>c-e'
343
+ elsif zone_rh_hw
344
+ sh += '>c-hw'
345
+ end
346
+ elsif heating_coil_water
347
+ sh = 'sh>c-hw'
348
+ elsif heating_coil_gas
349
+ sh = 'sh>c-g'
350
+ else
351
+ sh = 'sh>none'
352
+ end
353
+
354
+ # sys_clg or sc>?
355
+
356
+ if cooling_coil_ashp or unitary_hp
357
+ sc = 'sc>ashp'
358
+ elsif cooling_coil_ccashp
359
+ sc = 'sc>ccashp'
360
+ elsif cooling_coil_dx
361
+ sc = 'sc>dx'
362
+ elsif cooling_coil_water
363
+ sc = 'sc>c-chw'
364
+ else
365
+ sc = 'sc>none'
366
+ end
367
+
368
+ # sys_sf or ssf>?
369
+ if supply_fan_cv or unitary_supply_fan_on_off
370
+ ssf = 'ssf>cv'
371
+ elsif supply_fan_vv
372
+ ssf = 'ssf>vv'
373
+ else
374
+ ssf = 'ssf>none'
375
+ end
376
+
377
+
378
+ if return_fan_cv
379
+ srf = 'srf>cv'
380
+ elsif return_fan_vv
381
+ srf = 'srf>vv'
382
+ else
383
+ srf = 'srf>none'
384
+ end
385
+
386
+ # zone_htg or zh>?
387
+ if zone_htg_b_elec
388
+ zh = 'zh>b-e'
389
+ elsif zone_htg_b_water
390
+ zh = 'zh>b-hw'
391
+ elsif zone_tpfc
392
+ zh = 'zh>tpfc'
393
+ elsif zone_fpfc
394
+ zh = 'zh>fpfc'
395
+ elsif zone_htg_pthp
396
+ zh = 'zh>pthp'
397
+ else
398
+ zh = 'zh>none'
399
+ end
400
+
401
+ if zone_tpfc
402
+ zc = 'zc>tpfc'
403
+ elsif zone_fpfc
404
+ zc = 'zc>fpfc'
405
+ elsif zone_clg_ptac
406
+ zc = 'zc>ptac'
407
+ elsif zone_clg_pthp
408
+ zc = 'zc>pthp'
409
+ else
410
+ zc = 'zc>none'
411
+ end
412
+
413
+ # Chiller type
414
+ if chiller_type
415
+ chiller = "ch>#{chiller_type}"
416
+ else
417
+ chiller = "ch>none"
418
+ end
419
+
420
+
421
+ name =""
422
+ desc =""
423
+ # sh and sc are reversed for system 6
424
+ name = "#{ref_sys}|#{oa}|shr>none|#{sc}|#{sh}|#{ssf}|#{zh}|#{zc}|#{srf}|"
425
+ fixed_name = name
426
+ air_unit_type = oa == "mixed" ? 'RTU' : 'MAU'
427
+ case ref_sys
428
+ when "sys_1"
429
+ # Air Loop Coils
430
+ coils = ""
431
+ # if heating and cooling coils are the same, only list it once
432
+ if sh_map[sh] == sc_map[sc]
433
+ coils = "#{sh_map[sh]}"
434
+ else
435
+ coils = "#{sh_map[sh]} and #{sc_map[sc]}"
436
+ end
437
+ zone_system = "#{zh_map[zh]}"
438
+ zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
439
+ # If reheating is present, add it to the zone system name
440
+ if zrh_map[zrh] != 'None'
441
+ zone_system += " with #{zrh_map[zrh]} Reheat"
442
+ end
443
+ desc= ref_system_desc[ref_sys] % [air_unit_type,coils,zone_system]
444
+ when "sys_2"
445
+ desc= ref_system_desc[ref_sys] % [air_unit_type,sc_map[sc],chiller_map[chiller]]
446
+ when "sys_3"
447
+ coils = ""
448
+ # if heating and cooling coils are the same, only list it once
449
+ if sh_map[sh] == sc_map[sc]
450
+ coils = "#{sh_map[sh]}"
451
+ else
452
+ coils = "#{sh_map[sh]} and #{sc_map[sc]}"
453
+ end
454
+ if ushc_map[ushc] != 'None'
455
+ coils += " with #{ushc_map[ushc]} Supp. Heat"
456
+ end
457
+ zone_system = "#{zh_map[zh]}"
458
+ zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
459
+ desc= ref_system_desc[ref_sys] % [air_unit_type,coils,zone_system]
460
+ when "sys_4"
461
+ coils = ""
462
+ # if heating and cooling coils are the same, only list it once
463
+ if sh_map[sh] == sc_map[sc]
464
+ coils = "#{sh_map[sh]}"
465
+ else
466
+ coils = "#{sh_map[sh]} and #{sc_map[sc]}"
467
+ end
468
+ if ushc_map[ushc] != 'None'
469
+ coils += " with #{ushc_map[ushc]} Supp. Heat"
470
+ end
471
+ zone_system = "#{zh_map[zh]}"
472
+ zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
473
+ desc= ref_system_desc[ref_sys] % [air_unit_type,coils,zone_system]
474
+ when "sys_5"
475
+ desc= ref_system_desc[ref_sys] % [air_unit_type,sc_map[sc],chiller_map[chiller]]
476
+ when "sys_6"
477
+ zone_system = "#{zh_map[zh]}"
478
+ zone_system += " with #{zc_map[zc]}" if zc_map[zc] != 'None'
479
+ desc= ref_system_desc[ref_sys] % [air_unit_type, sh_map[sh],chiller_map[chiller], zone_system]
480
+ fixed_name = "#{ref_sys}|#{oa}|shr>none|#{sh}|#{sc}|#{ssf}|#{zh}|#{zc}|#{srf}|"
481
+ else
482
+
483
+ end
484
+
485
+ #
486
+
487
+ return old_system_name, fixed_name, name, desc
488
+ end
489
+ end
@@ -110,14 +110,18 @@ class NECB2011
110
110
  #end
111
111
  # MAU Heating type selection.
112
112
  raise("Flag 'necb_reference_hp' is true while 'mau_heating_coil_type' is not set to type DX") if (necb_reference_hp && (mau_heating_coil_type != 'DX'))
113
- if mau_heating_coil_type == 'Electric' # electric coil
113
+ if mau_heating_coil_type == 'Electric' || mau_heating_coil_type == 'Electricity' || mau_heating_coil_type == 'FuelOilNo2' # electric coil
114
114
  mau_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
115
- elsif mau_heating_coil_type == 'Hot Water'
115
+ elsif mau_heating_coil_type == 'Hot Water' || mau_heating_coil_type == 'HotWater'
116
116
  mau_htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
117
117
  hw_loop.addDemandBranchForComponent(mau_htg_coil)
118
118
  elsif mau_heating_coil_type == 'DX'
119
119
  mau_htg_coil = add_onespeed_htg_DX_coil(model, always_on)
120
120
  mau_htg_coil.setName('CoilHeatingDXSingleSpeed_ashp')
121
+ elsif mau_heating_coil_type == 'Gas' || mau_heating_coil_type == "NaturalGas"
122
+ mau_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
123
+ else
124
+ raise('Invalid fuel type selected for mau heating coil')
121
125
  end
122
126
 
123
127
  # Set up Single Speed DX coil with
@@ -228,11 +232,14 @@ class NECB2011
228
232
  epw = OpenStudio::EpwFile.new(model.weatherFile.get.path.get)
229
233
  necb_reference_hp_supp_fuel = @standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.stateProvinceRegion) }['fueltype_set']
230
234
  end
231
- if necb_reference_hp_supp_fuel == 'NaturalGas'
235
+ if necb_reference_hp_supp_fuel == 'NaturalGas' || necb_reference_hp_supp_fuel == "Gas"
232
236
  rh_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
233
- elsif necb_reference_hp_supp_fuel == 'Electricity' or necb_reference_hp_supp_fuel == 'FuelOilNo2'
237
+ elsif necb_reference_hp_supp_fuel == 'Electricity' || necb_reference_hp_supp_fuel == 'Electric' || necb_reference_hp_supp_fuel == 'FuelOilNo2'
234
238
  rh_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
235
- else #hot water coils is an option in the future
239
+ elsif necb_reference_hp_supp_fuel == 'Hot Water' || necb_reference_hp_supp_fuel == 'HotWater'
240
+ rh_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
241
+ hw_loop.addDemandBranchForComponent(rh_coil)
242
+ else
236
243
  raise('Invalid fuel type selected for heat pump supplemental coil')
237
244
  end
238
245
  cav_rh_terminal = OpenStudio::Model::AirTerminalSingleDuctConstantVolumeReheat.new(model, always_on, rh_coil)
@@ -251,6 +258,9 @@ class NECB2011
251
258
  sys_name_pars['sys_clg'] = 'ashp' if necb_reference_hp
252
259
  sys_name_pars['sys_htg'] = mau_heating_coil_type
253
260
  sys_name_pars['sys_htg'] = 'ashp' if necb_reference_hp
261
+ sys_name_pars['sys_htg'] = 'ashp>c-g' if (necb_reference_hp && (necb_reference_hp_supp_fuel == "NaturalGas" || necb_reference_hp_supp_fuel == "Gas"))
262
+ sys_name_pars['sys_htg'] = 'ashp>c-e' if necb_reference_hp && necb_reference_hp_supp_fuel == "Electricity"
263
+ sys_name_pars['sys_htg'] = 'ashp>c-hw' if necb_reference_hp && (necb_reference_hp_supp_fuel == "Hot Water" || necb_reference_hp_supp_fuel == "HotWater")
254
264
  sys_name_pars['sys_sf'] = 'cv'
255
265
  sys_name_pars['zone_htg'] = baseboard_type
256
266
  sys_oa = 'doas'
@@ -262,7 +272,7 @@ class NECB2011
262
272
  sys_oa = 'doas'
263
273
  end
264
274
  sys_name_pars['sys_rf'] = 'none'
265
- assign_base_sys_name(mau_air_loop,
275
+ return assign_base_sys_name(air_loop: mau_air_loop,
266
276
  sys_abbr: 'sys_1',
267
277
  sys_oa: sys_oa,
268
278
  sys_name_pars: sys_name_pars)
@@ -78,13 +78,49 @@ class NECB2011
78
78
  # Assume direct-fired gas heating coil for now; need to add logic
79
79
  # to set up hydronic or electric coil depending on proposed?
80
80
 
81
- htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
81
+ # Get Heating Coil from heating coil type sys2. If set to DX use NECB reference HP supplemental fuel.
82
+ # TODO: If set to DX incorporate DX heating coil and supplemental heating type.
83
+ #if self.fuel_type_set.heating_coil_type_sys2 == "DX"
84
+ # htg_coil_fuel = self.fuel_type_set.necb_reference_hp_supp_fuel
85
+ #else
86
+ # htg_coil_fuel = self.fuel_type_set.heating_coil_type_sys2
87
+ #end
88
+ htg_coil_fuel = self.fuel_type_set.heating_coil_type_sys2
89
+
90
+ case htg_coil_fuel
91
+ when 'Electric', 'Electricity', 'FuelOilNo2' # Electric Coil
92
+ htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
93
+ when 'Gas', 'NaturalGas'# Natural Gas Coil
94
+ htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
95
+ when 'Hot Water', 'HotWater' # Hot Water Coil
96
+ htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
97
+ hw_loop.addDemandBranchForComponent(htg_coil)
98
+ when 'DX'
99
+ htg_coil = add_onespeed_htg_DX_coil(model, always_on)
100
+ htg_coil.setName('CoilHeatingDXSingleSpeed_ashp')
101
+ else # Default to Natural Gas Coil
102
+ htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
103
+ end
82
104
 
105
+ if htg_coil_fuel == 'DX'
106
+ supplemental_htg_fuel = self.fuel_type_set.necb_reference_hp_supp_fuel
107
+ case supplemental_htg_fuel
108
+ when 'Electric', 'Electricity', 'FuelOilNo2'
109
+ supp_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
110
+ when 'Gas', 'NaturalGas'
111
+ supp_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
112
+ when 'Hot Water', 'HotWater'
113
+ supp_htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
114
+ hw_loop.addDemandBranchForComponent(supp_htg_coil)
115
+ else
116
+ supp_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
117
+ end
118
+ end
83
119
  # Add DX or hydronic cooling coil
84
120
  if mau_cooling_type == 'DX'
85
121
  clg_coil = add_onespeed_DX_coil(model, tpfc_clg_availability_sch)
86
122
  clg_coil.setName('CoilCoolingDXSingleSpeed_dx')
87
- elsif mau_cooling_type == 'Hydronic'
123
+ elsif mau_cooling_type == 'Hydronic' || mau_cooling_type == 'Hot Water' || mau_cooling_type == 'HotWater'
88
124
  clg_coil = OpenStudio::Model::CoilCoolingWater.new(model, tpfc_clg_availability_sch)
89
125
  chw_loop.addDemandBranchForComponent(clg_coil)
90
126
  end
@@ -104,6 +140,7 @@ class NECB2011
104
140
  # in order from closest to zone to furthest from zone
105
141
  supply_inlet_node = air_loop.supplyInletNode
106
142
  fan.addToNode(supply_inlet_node)
143
+ supp_htg_coil.addToNode(supply_inlet_node) unless supp_htg_coil.nil?
107
144
  htg_coil.addToNode(supply_inlet_node)
108
145
  clg_coil.addToNode(supply_inlet_node)
109
146
  oa_system.addToNode(supply_inlet_node)
@@ -163,13 +200,19 @@ class NECB2011
163
200
  sys_abbr = 'sys_5' if fan_coil_type == 'TPFC'
164
201
  sys_name_pars = {}
165
202
  sys_name_pars['sys_hr'] = 'none'
166
- sys_name_pars['sys_clg'] = mau_cooling_type
167
- sys_name_pars['sys_htg'] = 'g'
203
+ sys_name_pars['sys_clg'] = 'Hydronic' if mau_cooling_type == 'Hydronic' || mau_cooling_type == 'Hot Water' || mau_cooling_type == 'HotWater'
204
+ sys_name_pars['sys_clg'] = 'DX' if mau_cooling_type == 'DX' && htg_coil_fuel != 'DX'
205
+ sys_name_pars['sys_clg'] = 'ashp' if mau_cooling_type == 'DX' && htg_coil_fuel == 'DX'
206
+ sys_name_pars['sys_htg'] = 'g' if (htg_coil_fuel == 'Gas' || htg_coil_fuel == 'NaturalGas')
207
+ sys_name_pars['sys_htg'] = 'e' if (htg_coil_fuel == 'Electric' || htg_coil_fuel == 'Electricity' || htg_coil_fuel == 'FuelOilNo2')
208
+ sys_name_pars['sys_htg'] = 'ashp>c-g' if (htg_coil_fuel == 'DX' && (supplemental_htg_fuel == "NaturalGas" || supplemental_htg_fuel == "Gas"))
209
+ sys_name_pars['sys_htg'] = 'ashp>c-e' if (htg_coil_fuel == 'DX' && (supplemental_htg_fuel == "Electricity" || supplemental_htg_fuel == "Electric" || supplemental_htg_fuel == "FuelOilNo2"))
210
+ sys_name_pars['sys_htg'] = 'ashp>c-hw' if (htg_coil_fuel == 'DX' && (supplemental_htg_fuel == "Hot Water" || supplemental_htg_fuel == "HotWater"))
168
211
  sys_name_pars['sys_sf'] = 'cv'
169
212
  sys_name_pars['zone_htg'] = fan_coil_type
170
213
  sys_name_pars['zone_clg'] = fan_coil_type
171
214
  sys_name_pars['sys_rf'] = 'none'
172
- assign_base_sys_name(mau_air_loop,
215
+ return assign_base_sys_name(air_loop: mau_air_loop,
173
216
  sys_abbr: sys_abbr,
174
217
  sys_oa: 'doas',
175
218
  sys_name_pars: sys_name_pars)
@@ -67,7 +67,7 @@ class NECB2011
67
67
  return true
68
68
  else
69
69
  zones.each do |zone|
70
- air_loop = add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, zone)
70
+ air_loop = add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, zone, hw_loop)
71
71
  add_sys3_and_8_zone_equip(air_loop,
72
72
  baseboard_type,
73
73
  hw_loop,
@@ -78,7 +78,7 @@ class NECB2011
78
78
  end
79
79
  end
80
80
 
81
- def add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, control_zone)
81
+ def add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, control_zone, hw_loop)
82
82
  # System Type 3: PSZ-AC
83
83
  # This measure creates:
84
84
  # -a constant volume packaged single-zone A/C unit