openstudio-standards 0.3.0 → 0.3.1.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAESuperMarket.json +29 -38
  3. data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
  4. data/data/standards/metadata_units_OpenStudio_Standards-deer-ALL-comstockspace_types.csv +172 -0
  5. data/data/standards/test_performance_expected_dd_results.csv +12 -12
  6. data/lib/openstudio-standards/btap/analysis.rb +389 -389
  7. data/lib/openstudio-standards/btap/bridging.rb +2099 -0
  8. data/lib/openstudio-standards/btap/btap.model.rb +717 -717
  9. data/lib/openstudio-standards/btap/btap.rb +33 -30
  10. data/lib/openstudio-standards/btap/economics.rb +1163 -1163
  11. data/lib/openstudio-standards/btap/envelope.rb +4 -4
  12. data/lib/openstudio-standards/btap/equest.rb +2524 -2524
  13. data/lib/openstudio-standards/btap/fileio.rb +9 -0
  14. data/lib/openstudio-standards/btap/measures.rb +1515 -1515
  15. data/lib/openstudio-standards/btap/mpc.rb +554 -554
  16. data/lib/openstudio-standards/btap/reporting.rb +287 -287
  17. data/lib/openstudio-standards/btap/simmanager.rb +759 -759
  18. data/lib/openstudio-standards/btap/spaceloads.rb +439 -439
  19. data/lib/openstudio-standards/btap/spacetypes.rb +113 -113
  20. data/lib/openstudio-standards/btap/utilities.rb +134 -134
  21. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +8 -83
  22. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingWater.rb +3 -99
  23. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +81 -75
  24. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +7 -306
  25. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +70 -98
  26. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +41 -14
  27. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +40 -14
  28. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +1 -23
  29. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +93 -4
  30. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +13 -0
  31. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +5 -4
  32. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +24 -4
  33. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +18 -2
  34. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +18 -0
  35. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +13 -10
  36. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +5 -3
  37. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +11 -8
  38. data/lib/openstudio-standards/standards/Standards.Construction.rb +1 -1
  39. data/lib/openstudio-standards/standards/Standards.Model.rb +68 -52
  40. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +2 -2
  41. data/lib/openstudio-standards/standards/Standards.Space.rb +16 -18
  42. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +510 -0
  43. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +18 -0
  44. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +410 -0
  45. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +2 -2
  46. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +510 -0
  47. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +18 -0
  48. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +410 -0
  49. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +2 -2
  50. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +510 -0
  51. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +18 -0
  52. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +410 -0
  53. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +2 -2
  54. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +510 -0
  55. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +18 -0
  56. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +410 -0
  57. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +2 -2
  58. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +2 -2
  59. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +2 -2
  60. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +9 -0
  61. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -0
  62. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +4 -3
  63. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.spc_typ.json +405 -405
  64. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.spc_typ.json +405 -405
  65. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.spc_typ.json +405 -405
  66. data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.ThermalZone.rb +21 -0
  67. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.spc_typ.json +405 -405
  68. data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.ThermalZone.rb +21 -0
  69. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.spc_typ.json +405 -405
  70. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.ThermalZone.rb +21 -0
  71. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.spc_typ.json +405 -405
  72. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.ThermalZone.rb +21 -0
  73. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.spc_typ.json +405 -405
  74. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.ThermalZone.rb +21 -0
  75. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.spc_typ.json +405 -405
  76. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.ThermalZone.rb +21 -0
  77. data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/data/comstock_deer_2020.spc_typ.json +405 -405
  78. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +8 -0
  79. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.ThermalZone.rb +21 -0
  80. data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/data/comstock_deer_2025.spc_typ.json +405 -405
  81. data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/data/comstock_deer_2030.spc_typ.json +405 -405
  82. data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/data/comstock_deer_2035.spc_typ.json +405 -405
  83. data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/data/comstock_deer_2040.spc_typ.json +405 -405
  84. data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/data/comstock_deer_2045.spc_typ.json +405 -405
  85. data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/data/comstock_deer_2050.spc_typ.json +405 -405
  86. data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/data/comstock_deer_2055.spc_typ.json +405 -405
  87. data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/data/comstock_deer_2060.spc_typ.json +405 -405
  88. data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/data/comstock_deer_2065.spc_typ.json +405 -405
  89. data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/data/comstock_deer_2070.spc_typ.json +405 -405
  90. data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/data/comstock_deer_2075.spc_typ.json +405 -405
  91. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.spc_typ.json +405 -405
  92. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +1 -1
  93. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +3 -1
  94. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +3 -1
  95. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +2 -2
  96. data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +233 -0
  97. data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +180 -0
  98. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +6 -1
  99. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +807 -258
  100. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +102 -66
  101. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +85 -8
  102. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartment.osm +2483 -992
  103. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +4 -336
  104. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/MidriseApartment.osm +228 -231
  105. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +12 -18
  106. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_type_unit_definitions.txt +76 -0
  107. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +6 -1
  108. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +111 -24
  109. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +1 -0
  110. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +3 -1
  111. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +64 -16
  112. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +61 -17
  113. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +128 -0
  114. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +252 -23
  115. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +316 -20
  116. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +1 -1
  117. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +3 -5
  118. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +38 -0
  119. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +16 -24
  120. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +48 -25
  121. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +3 -3
  122. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +36 -19
  123. data/lib/openstudio-standards/standards/necb/NECB2020/data/furnaces.json +19 -4
  124. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +20 -40
  125. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +74 -36
  126. data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +0 -2
  127. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +123 -56
  128. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +124 -2
  129. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +15 -2
  130. data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +1 -1
  131. data/lib/openstudio-standards/utilities/simulation.rb +1 -1
  132. data/lib/openstudio-standards/version.rb +1 -1
  133. data/lib/openstudio-standards/weather/Weather.stat_file.rb +33 -1
  134. data/lib/openstudio-standards.rb +1 -0
  135. metadata +14 -121
  136. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  137. data/data/weather/CAN_ON_Kingston.AP.718200_TMYx.2004-2018.ddy +0 -2342
  138. data/data/weather/CAN_ON_Kingston.AP.718200_TMYx.2004-2018.epw +0 -8768
  139. data/data/weather/CAN_ON_Kingston.AP.718200_TMYx.2004-2018.stat +0 -700
  140. data/data/weather/CAN_ON_Region.of.Waterloo.Intl.AP.713680_TMYx.2004-2018.ddy +0 -2342
  141. data/data/weather/CAN_ON_Region.of.Waterloo.Intl.AP.713680_TMYx.2004-2018.epw +0 -8768
  142. data/data/weather/CAN_ON_Region.of.Waterloo.Intl.AP.713680_TMYx.2004-2018.stat +0 -700
  143. data/data/weather/CAN_ON_Sarnia-Hadfield.AP.717040_TMYx.2004-2018.ddy +0 -2342
  144. data/data/weather/CAN_ON_Sarnia-Hadfield.AP.717040_TMYx.2004-2018.epw +0 -8768
  145. data/data/weather/CAN_ON_Sarnia-Hadfield.AP.717040_TMYx.2004-2018.stat +0 -700
  146. data/data/weather/CAN_QC_Gatineau.AP.716279_TMYx.2004-2018.ddy +0 -276
  147. data/data/weather/CAN_QC_Gatineau.AP.716279_TMYx.2004-2018.epw +0 -8768
  148. data/data/weather/CAN_QC_Gatineau.AP.716279_TMYx.2004-2018.stat +0 -611
  149. data/data/weather/CAN_QC_Granby.710367_TMYx.2004-2018.ddy +0 -276
  150. data/data/weather/CAN_QC_Granby.710367_TMYx.2004-2018.epw +0 -8768
  151. data/data/weather/CAN_QC_Granby.710367_TMYx.2004-2018.stat +0 -610
  152. data/data/weather/CAN_QC_Sherbrooke.AP.716100_TMYx.2004-2018.ddy +0 -2342
  153. data/data/weather/CAN_QC_Sherbrooke.AP.716100_TMYx.2004-2018.epw +0 -8768
  154. data/data/weather/CAN_QC_Sherbrooke.AP.716100_TMYx.2004-2018.stat +0 -700
  155. data/data/weather/CAN_QC_Trois.Rivieres.717240_TMYx.2004-2018.ddy +0 -2342
  156. data/data/weather/CAN_QC_Trois.Rivieres.717240_TMYx.2004-2018.epw +0 -8768
  157. data/data/weather/CAN_QC_Trois.Rivieres.717240_TMYx.2004-2018.stat +0 -700
  158. data/lib/openstudio-standards/hvac_sizing/Siz.AirConditionerVariableRefrigerantFlow.rb +0 -81
  159. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitaryHeatCoolVAVChngByp.rb +0 -27
  160. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitaryHeatPumpAirToAir.rb +0 -69
  161. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.rb +0 -178
  162. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVACUnitarySystem.rb +0 -27
  163. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctConstVolCooledBeam.rb +0 -27
  164. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctConstVolFourPipeInduction.rb +0 -27
  165. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctConstVolReheat.rb +0 -27
  166. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctParallelPIUReheat.rb +0 -67
  167. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctSeriesPIUReheat.rb +0 -27
  168. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctUncontrolled.rb +0 -30
  169. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVHeatAndCoolNoReheat.rb +0 -27
  170. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVHeatAndCoolReheat.rb +0 -27
  171. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVNoReheat.rb +0 -68
  172. data/lib/openstudio-standards/hvac_sizing/Siz.AirTermSnglDuctVAVReheat.rb +0 -68
  173. data/lib/openstudio-standards/hvac_sizing/Siz.BoilerHotWater.rb +0 -42
  174. data/lib/openstudio-standards/hvac_sizing/Siz.BoilerSteam.rb +0 -27
  175. data/lib/openstudio-standards/hvac_sizing/Siz.ChillerElectricEIR.rb +0 -58
  176. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXMultiSpeed.rb +0 -171
  177. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXSingleSpeed.rb +0 -56
  178. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXTwoSpeed.rb +0 -89
  179. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingDXVariableRefrigerantFlow.rb +0 -50
  180. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -69
  181. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDXMultiSpeed.rb +0 -120
  182. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDXSingleSpeed.rb +0 -56
  183. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDXVariableRefrigerantFlow.rb +0 -41
  184. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingDesuperheater.rb +0 -27
  185. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingElectric.rb +0 -30
  186. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGas.rb +0 -30
  187. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingGasMultiStage.rb +0 -68
  188. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingWater.rb +0 -61
  189. data/lib/openstudio-standards/hvac_sizing/Siz.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -57
  190. data/lib/openstudio-standards/hvac_sizing/Siz.CoilWaterHeatingDesuperheater.rb +0 -27
  191. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +0 -59
  192. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerWaterCoil.rb +0 -49
  193. data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerSingleSpeed.rb +0 -90
  194. data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerTwoSpeed.rb +0 -83
  195. data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerVariableSpeed.rb +0 -57
  196. data/lib/openstudio-standards/hvac_sizing/Siz.DistrictCooling.rb +0 -27
  197. data/lib/openstudio-standards/hvac_sizing/Siz.DistrictHeating.rb +0 -27
  198. data/lib/openstudio-standards/hvac_sizing/Siz.EvaporativeCoolerDirectResearchSpecial.rb +0 -27
  199. data/lib/openstudio-standards/hvac_sizing/Siz.EvaporativeCoolerIndirectResearchSpecial.rb +0 -27
  200. data/lib/openstudio-standards/hvac_sizing/Siz.EvaporativeFluidCoolerSingleSpeed.rb +0 -27
  201. data/lib/openstudio-standards/hvac_sizing/Siz.FanConstantVolume.rb +0 -29
  202. data/lib/openstudio-standards/hvac_sizing/Siz.FanOnOff.rb +0 -27
  203. data/lib/openstudio-standards/hvac_sizing/Siz.FanVariableVolume.rb +0 -29
  204. data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsConstantSpeed.rb +0 -55
  205. data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsVariableSpeed.rb +0 -55
  206. data/lib/openstudio-standards/hvac_sizing/Siz.HeatExchangerAirToAirSensibleAndLatent.rb +0 -38
  207. data/lib/openstudio-standards/hvac_sizing/Siz.HeatExchangerFluidToFluid.rb +0 -27
  208. data/lib/openstudio-standards/hvac_sizing/Siz.HumidifierSteamElectric.rb +0 -27
  209. data/lib/openstudio-standards/hvac_sizing/Siz.PlantLoop.rb +0 -42
  210. data/lib/openstudio-standards/hvac_sizing/Siz.PumpConstantSpeed.rb +0 -59
  211. data/lib/openstudio-standards/hvac_sizing/Siz.PumpVariableSpeed.rb +0 -59
  212. data/lib/openstudio-standards/hvac_sizing/Siz.SizingSystem.rb +0 -48
  213. data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +0 -16
  214. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACBaseboardConvectiveElectric.rb +0 -27
  215. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACBaseboardConvectiveWater.rb +0 -27
  216. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACFourPipeFanCoil.rb +0 -27
  217. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACHighTemperatureRadiant.rb +0 -27
  218. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACIdealLoadsAirSystem.rb +0 -27
  219. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACLowTempRadiantConstFlow.rb +0 -27
  220. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACLowTempRadiantVarFlow.rb +0 -27
  221. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACLowTemperatureRadiantElectric.rb +0 -27
  222. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACPackagedTerminalAirConditioner.rb +0 -88
  223. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACPackagedTerminalHeatPump.rb +0 -88
  224. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +0 -104
  225. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACUnitHeater.rb +0 -27
  226. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACWaterToAirHeatPump.rb +0 -27
@@ -7,7 +7,6 @@
7
7
  ],
8
8
  "table": [
9
9
  {
10
-
11
10
  "cooling_type": "AirCooled",
12
11
  "subcategory": "Single Package",
13
12
  "minimum_capacity": 0.0,
@@ -15,8 +14,8 @@
15
14
  "start_date": "9/9/1919",
16
15
  "end_date": "2999-09-09T00:00:00+00:00",
17
16
  "minimum_heating_seasonal_performance_factor": null,
18
- "minimum_coefficient_of_performance_heating": null,
19
- "minimum_energy_efficiency_ratio": 8.9,
17
+ "minimum_coefficient_of_performance_heating": 3.1,
18
+ "minimum_energy_efficiency_ratio": null,
20
19
  "pthp_cop_coefficient_1": null,
21
20
  "pthp_cop_coefficient_2": null,
22
21
  "heat_cap_ft": "DXHEAT-NECB2011-REF-CAPFT",
@@ -27,7 +26,6 @@
27
26
  "notes": "From NECB 2011, Table 5.2.12.1"
28
27
  },
29
28
  {
30
-
31
29
  "cooling_type": "AirCooled",
32
30
  "subcategory": "Split System",
33
31
  "minimum_capacity": 0.0,
@@ -35,8 +33,8 @@
35
33
  "start_date": "9/9/1919",
36
34
  "end_date": "2999-09-09T00:00:00+00:00",
37
35
  "minimum_heating_seasonal_performance_factor": null,
38
- "minimum_coefficient_of_performance_heating": null,
39
- "minimum_energy_efficiency_ratio": 8.9,
36
+ "minimum_coefficient_of_performance_heating": 3.1,
37
+ "minimum_energy_efficiency_ratio": null,
40
38
  "pthp_cop_coefficient_1": null,
41
39
  "pthp_cop_coefficient_2": null,
42
40
  "heat_cap_ft": "DXHEAT-NECB2011-REF-CAPFT",
@@ -47,7 +45,6 @@
47
45
  "notes": "From NECB 2011, Table 5.2.12.1"
48
46
  },
49
47
  {
50
-
51
48
  "cooling_type": "AirCooled",
52
49
  "subcategory": "Single Package",
53
50
  "minimum_capacity": 65001.0,
@@ -55,8 +52,8 @@
55
52
  "start_date": "9/9/1919",
56
53
  "end_date": "2999-09-09T00:00:00+00:00",
57
54
  "minimum_heating_seasonal_performance_factor": null,
58
- "minimum_coefficient_of_performance_heating": null,
59
- "minimum_energy_efficiency_ratio": 9.5,
55
+ "minimum_coefficient_of_performance_heating": 3.3,
56
+ "minimum_energy_efficiency_ratio": null,
60
57
  "pthp_cop_coefficient_1": null,
61
58
  "pthp_cop_coefficient_2": null,
62
59
  "heat_cap_ft": "DXHEAT-NECB2011-REF-CAPFT",
@@ -67,7 +64,6 @@
67
64
  "notes": "From NECB 2011, Table 5.2.12.1"
68
65
  },
69
66
  {
70
-
71
67
  "cooling_type": "AirCooled",
72
68
  "subcategory": "Split System",
73
69
  "minimum_capacity": 65001.0,
@@ -75,8 +71,8 @@
75
71
  "start_date": "9/9/1919",
76
72
  "end_date": "2999-09-09T00:00:00+00:00",
77
73
  "minimum_heating_seasonal_performance_factor": null,
78
- "minimum_coefficient_of_performance_heating": null,
79
- "minimum_energy_efficiency_ratio": 9.5,
74
+ "minimum_coefficient_of_performance_heating": 3.3,
75
+ "minimum_energy_efficiency_ratio": null,
80
76
  "pthp_cop_coefficient_1": null,
81
77
  "pthp_cop_coefficient_2": null,
82
78
  "heat_cap_ft": "DXHEAT-NECB2011-REF-CAPFT",
@@ -87,7 +83,6 @@
87
83
  "notes": "From NECB 2011, Table 5.2.12.1"
88
84
  },
89
85
  {
90
-
91
86
  "cooling_type": "AirCooled",
92
87
  "subcategory": "Single Package",
93
88
  "minimum_capacity": 238841.0,
@@ -95,8 +90,8 @@
95
90
  "start_date": "9/9/1919",
96
91
  "end_date": "2999-09-09T00:00:00+00:00",
97
92
  "minimum_heating_seasonal_performance_factor": null,
98
- "minimum_coefficient_of_performance_heating": null,
99
- "minimum_energy_efficiency_ratio": 9.2,
93
+ "minimum_coefficient_of_performance_heating": 3.2,
94
+ "minimum_energy_efficiency_ratio": null,
100
95
  "pthp_cop_coefficient_1": null,
101
96
  "pthp_cop_coefficient_2": null,
102
97
  "heat_cap_ft": "DXHEAT-NECB2011-REF-CAPFT",
@@ -107,7 +102,6 @@
107
102
  "notes": "From NECB 2011, Table 5.2.12.1"
108
103
  },
109
104
  {
110
-
111
105
  "cooling_type": "AirCooled",
112
106
  "subcategory": "Split System",
113
107
  "minimum_capacity": 238841.0,
@@ -115,8 +109,8 @@
115
109
  "start_date": "9/9/1919",
116
110
  "end_date": "2999-09-09T00:00:00+00:00",
117
111
  "minimum_heating_seasonal_performance_factor": null,
118
- "minimum_coefficient_of_performance_heating": null,
119
- "minimum_energy_efficiency_ratio": 9.2,
112
+ "minimum_coefficient_of_performance_heating": 3.2,
113
+ "minimum_energy_efficiency_ratio": null,
120
114
  "pthp_cop_coefficient_1": null,
121
115
  "pthp_cop_coefficient_2": null,
122
116
  "heat_cap_ft": "DXHEAT-NECB2011-REF-CAPFT",
@@ -0,0 +1,76 @@
1
+ "building_type":
2
+ "space_type":
3
+ "rgb":
4
+ "lighting_standard":
5
+ "lighting_primary_space_type":
6
+ "lighting_secondary_space_type":
7
+ "lighting_per_area": W/ft^2
8
+ "lighting_per_person": W/person
9
+ "additional_lighting_per_area":
10
+ "lighting_fraction_to_return_air":
11
+ "lighting_fraction_radiant":
12
+ "lighting_fraction_visible":
13
+ "lighting_fraction_replaceable":
14
+ "lpd_fraction_linear_fluorescent":
15
+ "lpd_fraction_compact_fluorescent":
16
+ "lpd_fraction_high_bay":
17
+ "lpd_fraction_specialty_lighting":
18
+ "lpd_fraction_exit_lighting":
19
+ "lighting_schedule":
20
+ "compact_fluorescent_lighting_schedule":
21
+ "high_bay_lighting_schedule":
22
+ "specialty_lighting_schedule":
23
+ "exit_lighting_schedule":
24
+ "target_illuminance_setpoint":
25
+ "psa_nongeometry_fraction":
26
+ "ssa_nongeometry_fraction":
27
+ "ventilation_standard":
28
+ "ventilation_primary_space_type":
29
+ "ventilation_secondary_space_type":
30
+ "ventilation_per_area": cfm/ft^2
31
+ "ventilation_per_person": cfm/person
32
+ "ventilation_air_changes": air changes/hour
33
+ "minimum_total_air_changes":
34
+ "occupancy_per_area": people/ft^2
35
+ "occupancy_schedule":
36
+ "occupancy_activity_schedule":
37
+ "infiltration_per_exterior_area": cfm/ft^2
38
+ "infiltration_per_exterior_wall_area": cfm/ft^2
39
+ "infiltration_air_changes": air changes/hour
40
+ "infiltration_schedule":
41
+ "infiltration_schedule_perimeter":
42
+ "gas_equipment_per_area": Btu/(hr*ft^2)
43
+ "gas_equipment_fraction_latent":
44
+ "gas_equipment_fraction_radiant":
45
+ "gas_equipment_fraction_lost":
46
+ "gas_equipment_schedule":
47
+ "electric_equipment_per_area": W/ft^2
48
+ "electric_equipment_fraction_latent":
49
+ "electric_equipment_fraction_radiant":
50
+ "electric_equipment_fraction_lost":
51
+ "electric_equipment_schedule":
52
+ "additional_electric_equipment_schedule":
53
+ "additional_gas_equipment_schedule":
54
+ "heating_setpoint_schedule":
55
+ "cooling_setpoint_schedule":
56
+ "service_water_heating_peak_flow_rate": US Gal/hr
57
+ "service_water_heating_area": US Gal/(hr*ft^2)
58
+ "service_water_heating_peak_flow_per_area": US Gal/(hr*ft^2)
59
+ "service_water_heating_target_temperature": deg. C
60
+ "service_water_heating_fraction_sensible":
61
+ "service_water_heating_fraction_latent":
62
+ "service_water_heating_schedule":
63
+ "exhaust_per_area": N/A,
64
+ "exhaust_fan_efficiency": N/A
65
+ "exhaust_fan_power": N/A
66
+ "exhaust_fan_pressure_rise": N/A
67
+ "exhaust_fan_maximum_flow_rate": N/A
68
+ "exhaust_schedule":
69
+ "balanced_exhaust_fraction_schedule":
70
+ "is_residential":
71
+ "necb_hvac_system_selection_type":
72
+ "necb_schedule_type":
73
+ "notes":
74
+ "ventilation_occupancy_rate_people_per_1000ft2": people/1000 ft^2
75
+ "ventilation_occupancy_standard":
76
+ "ventilation_standard_space_type":
@@ -96,7 +96,12 @@ class NECB2011
96
96
 
97
97
  # TODO: other fuel-fired heating coil types? (not available in OpenStudio/E+ - may need to play with efficiency to mimic other fuel types)
98
98
 
99
- air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.new(model, mau_fan, mau_htg_coil, mau_clg_coil, mau_supplemental_htg_coil)
99
+ # This method will seem like an error in number of args..but this is due to swig voodoo.
100
+ air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.new(model,
101
+ mau_fan,
102
+ mau_htg_coil,
103
+ mau_clg_coil,
104
+ mau_supplemental_htg_coil)
100
105
  air_to_air_heatpump.setName("#{zones[0].name} ASHP")
101
106
  air_to_air_heatpump.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(system_data[:MinimumOutdoorDryBulbTemperatureforCompressorOperation])
102
107
  air_to_air_heatpump.setControllingZoneorThermostatLocation(zones[0])
@@ -1,5 +1,7 @@
1
1
  class NECB2011
2
2
  def add_sys1_unitary_ac_baseboard_heating(model:,
3
+ necb_reference_hp:false,
4
+ necb_reference_hp_supp_fuel:'DefaultFuel',
3
5
  zones:,
4
6
  mau_type:,
5
7
  mau_heating_coil_type:,
@@ -15,6 +17,8 @@ class NECB2011
15
17
  hw_loop: hw_loop)
16
18
  else
17
19
  add_sys1_unitary_ac_baseboard_heating_single_speed(model: model,
20
+ necb_reference_hp: necb_reference_hp,
21
+ necb_reference_hp_supp_fuel: necb_reference_hp_supp_fuel,
18
22
  zones: zones,
19
23
  mau_type: mau_type,
20
24
  mau_heating_coil_type: mau_heating_coil_type,
@@ -24,12 +28,13 @@ class NECB2011
24
28
  end
25
29
 
26
30
  def add_sys1_unitary_ac_baseboard_heating_single_speed(model:,
31
+ necb_reference_hp:false,
32
+ necb_reference_hp_supp_fuel:'DefaultFuel',
27
33
  zones:,
28
34
  mau_type:,
29
35
  mau_heating_coil_type:,
30
36
  baseboard_type:,
31
37
  hw_loop:)
32
-
33
38
  # Keep all data and assumptions for both systems on the top here for easy reference.
34
39
  system_data = {}
35
40
  system_data[:name] = 'Sys_1_Make-up air unit'
@@ -49,7 +54,11 @@ class NECB2011
49
54
  system_data[:CentralHeatingDesignSupplyAirTemperature] = 43.0
50
55
  system_data[:AllOutdoorAirinCooling] = true
51
56
  system_data[:AllOutdoorAirinHeating] = true
52
- system_data[:TypeofLoadtoSizeOn] = 'VentilationRequirement'
57
+ if necb_reference_hp
58
+ system_data[:TypeofLoadtoSizeOn] = 'Total'
59
+ else
60
+ system_data[:TypeofLoadtoSizeOn] = 'VentilationRequirement'
61
+ end
53
62
  system_data[:MinimumSystemAirFlowRatio] = 1.0
54
63
  # Zone Sizing data
55
64
  system_data[:system_supply_air_temperature] = 20.0
@@ -57,10 +66,12 @@ class NECB2011
57
66
  system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference] = 11.0
58
67
  system_data[:ZoneCoolingDesignSupplyAirTemperatureInputMethod] = 'TemperatureDifference'
59
68
  system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference] = 21.0
69
+ system_data[:ZoneDXCoolingSizingFactor] = 1.0
70
+ system_data[:ZoneDXHeatingSizingFactor] = 1.3
60
71
  system_data[:ZoneCoolingSizingFactor] = 1.1
61
72
  system_data[:ZoneHeatingSizingFactor] = 1.3
62
73
 
63
- # System Type 1: PTAC with no heating (unitary AC)
74
+ # System Type 1: PTAC with no heating (unitary AC)
64
75
  # Zone baseboards, electric or hot water depending on argument baseboard_type
65
76
  # baseboard_type choices are "Hot Water" or "Electric"
66
77
  # PSZ to represent make-up air unit (if present)
@@ -74,6 +85,9 @@ class NECB2011
74
85
  # mau_heating_coil_type choices are "Hot Water", "Electric"
75
86
  # boiler_fueltype choices match OS choices for Boiler component fuel type, i.e.
76
87
  # "NaturalGas","Electricity","PropaneGas","FuelOilNo1","FuelOilNo2","Coal","Diesel","Gasoline","OtherFuel1"
88
+
89
+ # If reference_hp = true, NECB 8.4.4.13 Heat Pump System Type 1: CAV Packaged rooftop heat pump with
90
+ # zone baseboard (electric or hot water depending on argument baseboard_type)
77
91
 
78
92
  # Some system parameters are set after system is set up; by applying method 'apply_hvac_efficiency_standard'
79
93
 
@@ -83,23 +97,34 @@ class NECB2011
83
97
  # Create MAU
84
98
  # TO DO: MAU sizing, characteristics (fan operation schedules, temperature setpoints, outdoor air, etc)
85
99
 
100
+
101
+
86
102
  if mau_type == true
87
103
  mau_air_loop = common_air_loop(model: model, system_data: system_data)
88
- mau_fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
104
+
105
+ #if reference_hp
106
+ # AirLoopHVACUnitaryHeatPumpAirToAir needs FanOnOff in order for the fan to turn off during off hours
107
+ # mau_fan = OpenStudio::Model::FanOnOff.new(model, always_on)
108
+ #else
109
+ mau_fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
110
+ #end
89
111
  # MAU Heating type selection.
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'))
90
113
  if mau_heating_coil_type == 'Electric' # electric coil
91
114
  mau_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
92
- end
93
-
94
- if mau_heating_coil_type == 'Hot Water'
115
+ elsif mau_heating_coil_type == 'Hot Water'
95
116
  mau_htg_coil = OpenStudio::Model::CoilHeatingWater.new(model, always_on)
96
117
  hw_loop.addDemandBranchForComponent(mau_htg_coil)
118
+ elsif mau_heating_coil_type == 'DX'
119
+ mau_htg_coil = add_onespeed_htg_DX_coil(model, always_on)
120
+ mau_htg_coil.setName('CoilHeatingDXSingleSpeed_ashp')
97
121
  end
98
122
 
99
123
  # Set up Single Speed DX coil with
100
124
  mau_clg_coil = add_onespeed_DX_coil(model, always_on)
101
125
  mau_clg_coil.setName('CoilCoolingDXSingleSpeed_dx')
102
-
126
+ mau_clg_coil.setName('CoilCoolingDXSingleSpeed_ashp') if necb_reference_hp
127
+
103
128
  # Set up OA system
104
129
  oa_controller = OpenStudio::Model::ControllerOutdoorAir.new(model)
105
130
  oa_controller.autosizeMinimumOutdoorAirFlowRate
@@ -113,18 +138,46 @@ class NECB2011
113
138
  # Add the components to the air loop
114
139
  # in order from closest to zone to furthest from zone
115
140
  supply_inlet_node = mau_air_loop.supplyInletNode
116
- mau_fan.addToNode(supply_inlet_node)
117
- mau_htg_coil.addToNode(supply_inlet_node)
118
- mau_clg_coil.addToNode(supply_inlet_node)
119
- oa_system.addToNode(supply_inlet_node)
120
141
 
142
+ # Reference HP requires slight changes to default MAU heating
143
+ #if reference_hp
144
+ # Create supplemental heating coil based on default regional fuel type
145
+ #epw = BTAP::Environment::WeatherFile.new(model.weatherFile.get.path.get)
146
+ #primary_heating_fuel = @standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.state_province_region) }['fueltype_set']
147
+ #if primary_heating_fuel == 'NaturalGas'
148
+ # supplemental_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
149
+ #elsif primary_heating_fuel == 'Electricity' or primary_heating_fuel == 'FuelOilNo2'
150
+ # supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
151
+ #else #hot water coils is an option in the future
152
+ # raise('Invalid fuel type selected for heat pump supplemental coil')
153
+ #end
154
+ #air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAir.new(model, always_on, mau_fan, mau_htg_coil, mau_clg_coil, supplemental_htg_coil)
155
+ #air_to_air_heatpump.setName("#{control_zone.name} ASHP")
156
+ #air_to_air_heatpump.setControllingZone(control_zone)
157
+ #air_to_air_heatpump.setSupplyAirFanOperatingModeSchedule(always_on)
158
+ #air_to_air_heatpump.addToNode(supply_inlet_node)
159
+ #else
160
+ mau_fan.addToNode(supply_inlet_node)
161
+ mau_htg_coil.addToNode(supply_inlet_node)
162
+ mau_clg_coil.addToNode(supply_inlet_node)
163
+
164
+ #end
165
+ oa_system.addToNode(supply_inlet_node)
166
+
121
167
  # Add a setpoint manager to control the supply air temperature
122
- sat_sch = OpenStudio::Model::ScheduleRuleset.new(model)
123
- sat_sch.setName('Makeup-Air Unit Supply Air Temp')
124
- sat_sch.defaultDaySchedule.setName('Makeup Air Unit Supply Air Temp Default')
125
- sat_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), system_data[:system_supply_air_temperature])
126
- setpoint_mgr = OpenStudio::Model::SetpointManagerScheduled.new(model, sat_sch)
127
- setpoint_mgr.addToNode(mau_air_loop.supplyOutletNode)
168
+ if necb_reference_hp
169
+ setpoint_mgr = OpenStudio::Model::SetpointManagerWarmest.new(model)
170
+ setpoint_mgr.setMinimumSetpointTemperature(13)
171
+ setpoint_mgr.setMaximumSetpointTemperature(20)
172
+ setpoint_mgr.addToNode(mau_air_loop.supplyOutletNode)
173
+ else
174
+ sat_sch = OpenStudio::Model::ScheduleRuleset.new(model)
175
+ sat_sch.setName('Makeup-Air Unit Supply Air Temp')
176
+ sat_sch.defaultDaySchedule.setName('Makeup Air Unit Supply Air Temp Default')
177
+ sat_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), system_data[:system_supply_air_temperature])
178
+ setpoint_mgr = OpenStudio::Model::SetpointManagerScheduled.new(model, sat_sch)
179
+ setpoint_mgr.addToNode(mau_air_loop.supplyOutletNode)
180
+ end
128
181
  end
129
182
 
130
183
  zones.each do |zone|
@@ -134,8 +187,14 @@ class NECB2011
134
187
  sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
135
188
  sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
136
189
  sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
137
- sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
138
- sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
190
+ # Different sizing factors for reference HP capacity
191
+ if necb_reference_hp
192
+ sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneDXCoolingSizingFactor])
193
+ sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneDXHeatingSizingFactor])
194
+ else
195
+ sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
196
+ sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
197
+ end
139
198
 
140
199
  # Create a PTAC for each zone:
141
200
  # PTAC DX Cooling with electric heating coil; electric heating coil is always off
@@ -150,7 +209,10 @@ class NECB2011
150
209
 
151
210
  # htg_coil_elec = OpenStudio::Model::CoilHeatingElectric.new(model,always_on)
152
211
  zero_outdoor_air = true # flag to set outside air flow to 0.0
153
- add_ptac_dx_cooling(model, zone, zero_outdoor_air)
212
+ # Reference HP system does not use PTAC
213
+ unless necb_reference_hp
214
+ add_ptac_dx_cooling(model, zone, zero_outdoor_air)
215
+ end
154
216
 
155
217
  # add zone baseboards
156
218
  add_zone_baseboards(baseboard_type: baseboard_type,
@@ -159,7 +221,23 @@ class NECB2011
159
221
  zone: zone)
160
222
 
161
223
  # # Create a diffuser and attach the zone/diffuser pair to the MAU air loop, if applicable
162
- if mau_type == true
224
+
225
+ if necb_reference_hp
226
+ # Create CAV RH (RH based on region's default fuel type or user input)
227
+ if necb_reference_hp_supp_fuel == 'DefaultFuel'
228
+ epw = BTAP::Environment::WeatherFile.new(model.weatherFile.get.path.get)
229
+ necb_reference_hp_supp_fuel = @standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.state_province_region) }['fueltype_set']
230
+ end
231
+ if necb_reference_hp_supp_fuel == 'NaturalGas'
232
+ rh_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
233
+ elsif necb_reference_hp_supp_fuel == 'Electricity' or necb_reference_hp_supp_fuel == 'FuelOilNo2'
234
+ rh_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
235
+ else #hot water coils is an option in the future
236
+ raise('Invalid fuel type selected for heat pump supplemental coil')
237
+ end
238
+ cav_rh_terminal = OpenStudio::Model::AirTerminalSingleDuctConstantVolumeReheat.new(model, always_on, rh_coil)
239
+ mau_air_loop.addBranchForZone(zone, cav_rh_terminal.to_StraightComponent)
240
+ elsif mau_type == true
163
241
  diffuser = OpenStudio::Model::AirTerminalSingleDuctUncontrolled.new(model, always_on)
164
242
  mau_air_loop.addBranchForZone(zone, diffuser.to_StraightComponent)
165
243
  # components for MAU
@@ -170,14 +248,23 @@ class NECB2011
170
248
  sys_name_pars = {}
171
249
  sys_name_pars['sys_hr'] = 'none'
172
250
  sys_name_pars['sys_clg'] = 'dx'
251
+ sys_name_pars['sys_clg'] = 'ashp' if necb_reference_hp
173
252
  sys_name_pars['sys_htg'] = mau_heating_coil_type
253
+ sys_name_pars['sys_htg'] = 'ashp' if necb_reference_hp
174
254
  sys_name_pars['sys_sf'] = 'cv'
175
255
  sys_name_pars['zone_htg'] = baseboard_type
176
- sys_name_pars['zone_clg'] = 'ptac'
256
+ sys_oa = 'doas'
257
+ if necb_reference_hp
258
+ sys_name_pars['zone_clg'] = 'none'
259
+ sys_oa = 'mixed'
260
+ else
261
+ sys_name_pars['zone_clg'] = 'ptac'
262
+ sys_oa = 'doas'
263
+ end
177
264
  sys_name_pars['sys_rf'] = 'none'
178
265
  assign_base_sys_name(mau_air_loop,
179
266
  sys_abbr: 'sys_1',
180
- sys_oa: 'doas',
267
+ sys_oa: sys_oa,
181
268
  sys_name_pars: sys_name_pars)
182
269
  end
183
270
 
@@ -150,6 +150,7 @@ class NECB2011
150
150
  chw_loop.addDemandBranchForComponent(fc_clg_coil)
151
151
 
152
152
  # add connections to FPFC.
153
+ # This method will seem like an error in number of args..but this is due to swig voodoo.
153
154
  zone_fc = OpenStudio::Model::ZoneHVACFourPipeFanCoil.new(model, always_on, fc_fan, fc_clg_coil, fc_htg_coil)
154
155
  zone_fc.addToThermalZone(zone)
155
156
 
@@ -67,12 +67,12 @@ 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
71
  add_sys3_and_8_zone_equip(air_loop,
71
72
  baseboard_type,
72
73
  hw_loop,
73
74
  model,
74
75
  zone)
75
- air_loop = add_system_3_and_8_airloop_multi_speed(heating_coil_type, model, system_data, zone)
76
76
  end
77
77
  return true
78
78
  end
@@ -150,12 +150,14 @@ class NECB2011
150
150
  supply_inlet_node = air_loop.supplyInletNode
151
151
 
152
152
  if (heating_coil_type == 'Gas') || (heating_coil_type == 'Electric')
153
+ # This method will seem like an error in number of args..but this is due to swig voodoo.
153
154
  air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAirMultiSpeed.new(model, fan, htg_coil, clg_coil, supplemental_htg_coil)
154
155
  air_to_air_heatpump.setControllingZoneorThermostatLocation(control_zone)
155
156
  air_to_air_heatpump.setNumberofSpeedsforHeating(1)
156
157
  air_to_air_heatpump.setNumberofSpeedsforCooling(2)
157
158
  air_to_air_heatpump.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(system_data[:MinimumOutdoorDryBulbTemperatureforCompressorOperation])
158
159
  elsif heating_coil_type == 'DX'
160
+ # This method will seem like an error in number of args..but this is due to swig voodoo.
159
161
  air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAir.new(model, always_on, fan, htg_coil, clg_coil, supplemental_htg_coil)
160
162
  air_to_air_heatpump.setControllingZone(zone)
161
163
  end
@@ -1,5 +1,7 @@
1
1
  class NECB2011
2
2
  def add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating(model:,
3
+ necb_reference_hp:false,
4
+ necb_reference_hp_supp_fuel:'DefaultFuel',
3
5
  zones:,
4
6
  heating_coil_type:,
5
7
  baseboard_type:,
@@ -15,17 +17,22 @@ class NECB2011
15
17
  new_auto_zoner: new_auto_zoner)
16
18
  else
17
19
  add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating_single_speed(model: model,
20
+ necb_reference_hp: necb_reference_hp,
21
+ necb_reference_hp_supp_fuel: necb_reference_hp_supp_fuel,
18
22
  zones: zones,
19
23
  heating_coil_type: heating_coil_type,
20
24
  baseboard_type: baseboard_type,
21
25
  hw_loop: hw_loop,
22
26
  new_auto_zoner: new_auto_zoner)
27
+
23
28
  end
24
29
  end
25
30
 
26
31
  # Some tests still require a simple way to set up a system without sizing.. so we are keeping the auto_zoner flag for this method.
27
32
  #
28
33
  def add_sys3and8_single_zone_packaged_rooftop_unit_with_baseboard_heating_single_speed(model:,
34
+ necb_reference_hp:false,
35
+ necb_reference_hp_supp_fuel:'DefaultFuel',
29
36
  zones:,
30
37
  heating_coil_type:,
31
38
  baseboard_type:,
@@ -65,7 +72,6 @@ class NECB2011
65
72
  system_data[:ZoneCoolingSizingFactor] = 1.1
66
73
  system_data[:ZoneHeatingSizingFactor] = 1.3
67
74
  system_data[:MinimumOutdoorDryBulbTemperatureforCompressorOperation] = -10.0
68
-
69
75
  if new_auto_zoner == true
70
76
  # Create system airloop
71
77
 
@@ -73,7 +79,9 @@ class NECB2011
73
79
  air_loop = add_system_3_and_8_airloop(heating_coil_type,
74
80
  model,
75
81
  system_data,
76
- determine_control_zone(zones))
82
+ determine_control_zone(zones),
83
+ necb_reference_hp: necb_reference_hp,
84
+ necb_reference_hp_supp_fuel: necb_reference_hp_supp_fuel)
77
85
  # Add Zone equipment
78
86
  zones.each do |zone| # Zone sizing temperature difference
79
87
  sizing_zone = zone.sizingZone
@@ -81,17 +89,23 @@ class NECB2011
81
89
  sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
82
90
  sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
83
91
  sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
84
- sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
85
- sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
92
+ if necb_reference_hp
93
+ sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneDXCoolingSizingFactor])
94
+ sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneDXHeatingSizingFactor])
95
+ else
96
+ sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
97
+ sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
98
+ end
86
99
  add_sys3_and_8_zone_equip(air_loop,
87
100
  baseboard_type,
88
101
  hw_loop,
89
102
  model,
90
103
  zone)
104
+
91
105
  end
92
106
  else
93
107
  zones.each do |zone|
94
- air_loop = add_system_3_and_8_airloop(heating_coil_type, model, system_data, zone)
108
+ air_loop = add_system_3_and_8_airloop(heating_coil_type, model, system_data, zone, necb_reference_hp: necb_reference_hp, necb_reference_hp_supp_fuel: necb_reference_hp_supp_fuel)
95
109
  add_sys3_and_8_zone_equip(air_loop,
96
110
  baseboard_type,
97
111
  hw_loop,
@@ -102,7 +116,9 @@ class NECB2011
102
116
  sys_name_pars = {}
103
117
  sys_name_pars['sys_hr'] = 'none'
104
118
  sys_name_pars['sys_clg'] = 'dx'
119
+ sys_name_pars['sys_clg'] = 'ashp' if necb_reference_hp
105
120
  sys_name_pars['sys_htg'] = heating_coil_type
121
+ sys_name_pars['sys_htg'] = 'ashp' if necb_reference_hp
106
122
  sys_name_pars['sys_sf'] = 'cv'
107
123
  sys_name_pars['zone_htg'] = baseboard_type
108
124
  sys_name_pars['zone_clg'] = 'none'
@@ -114,7 +130,7 @@ class NECB2011
114
130
  return true
115
131
  end
116
132
 
117
- def add_system_3_and_8_airloop(heating_coil_type, model, system_data, control_zone)
133
+ def add_system_3_and_8_airloop(heating_coil_type, model, system_data, control_zone, necb_reference_hp:false, necb_reference_hp_supp_fuel:'DefaultFuel')
118
134
  # System Type 3: PSZ-AC
119
135
  # This measure creates:
120
136
  # -a constant volume packaged single-zone A/C unit
@@ -136,20 +152,40 @@ class NECB2011
136
152
  sizing_zone.setZoneCoolingDesignSupplyAirTemperatureDifference(system_data[:ZoneCoolingDesignSupplyAirTemperatureDifference])
137
153
  sizing_zone.setZoneHeatingDesignSupplyAirTemperatureInputMethod(system_data[:ZoneHeatingDesignSupplyAirTemperatureInputMethod])
138
154
  sizing_zone.setZoneHeatingDesignSupplyAirTemperatureDifference(system_data[:ZoneHeatingDesignSupplyAirTemperatureDifference])
139
- sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
140
- sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
155
+ if necb_reference_hp
156
+ sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneDXCoolingSizingFactor])
157
+ sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneDXHeatingSizingFactor])
158
+ else
159
+ sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneCoolingSizingFactor])
160
+ sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneHeatingSizingFactor])
161
+ end
141
162
 
142
- fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
163
+ if necb_reference_hp
164
+ #AirLoopHVACUnitaryHeatPumpAirToAir needs FanOnOff in order for the fan to turn off during off hours
165
+ fan = OpenStudio::Model::FanOnOff.new(model, always_on)
166
+ else
167
+ fan = OpenStudio::Model::FanConstantVolume.new(model, always_on)
168
+ end
143
169
 
170
+ # Set up DX coil
171
+ if necb_reference_hp #NECB curve characteristics
172
+ clg_coil = add_onespeed_DX_coil(model, always_on)
173
+ clg_coil.setName('CoilCoolingDXSingleSpeed_ashp')
174
+ else
175
+ clg_coil = OpenStudio::Model::CoilCoolingDXSingleSpeed.new(model) #sets default OS curve (but will be replaced with NECB curves later)
176
+ clg_coil.setName('CoilCoolingDXSingleSpeed_dx')
177
+ end
178
+
179
+ raise("Flag 'necb_reference_hp' is set to true while parameter 'heating_coil_type' is not set to DX") if (necb_reference_hp && (heating_coil_type != 'DX'))
144
180
  case heating_coil_type
145
181
  when 'Electric' # electric coil
146
182
  htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
147
183
  when 'Gas'
148
184
  htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
149
185
  when 'DX'
150
- htg_coil = OpenStudio::Model::CoilHeatingDXSingleSpeed.new(model)
151
- supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
152
- htg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(system_data[:MinimumOutdoorDryBulbTemperatureforCompressorOperation])
186
+ #create main DX heating coil
187
+ htg_coil = add_onespeed_htg_DX_coil(model, always_on)
188
+ htg_coil.setName('CoilHeatingDXSingleSpeed_ashp')
153
189
  sizing_zone.setZoneHeatingSizingFactor(system_data[:ZoneDXHeatingSizingFactor])
154
190
  sizing_zone.setZoneCoolingSizingFactor(system_data[:ZoneDXCoolingSizingFactor])
155
191
  else
@@ -158,9 +194,7 @@ class NECB2011
158
194
 
159
195
  # TO DO: other fuel-fired heating coil types? (not available in OpenStudio/E+ - may need to play with efficiency to mimic other fuel types)
160
196
 
161
- # Set up DX coil with NECB performance curve characteristics;
162
- clg_coil = OpenStudio::Model::CoilCoolingDXSingleSpeed.new(model)
163
- clg_coil.setName('CoilCoolingDXSingleSpeed_dx')
197
+
164
198
 
165
199
  # oa_controller
166
200
  oa_controller = OpenStudio::Model::ControllerOutdoorAir.new(model)
@@ -176,7 +210,21 @@ class NECB2011
176
210
  # Add the components to the air loop
177
211
  # in order from closest to zone to furthest from zone
178
212
  supply_inlet_node = air_loop.supplyInletNode
179
- if heating_coil_type == 'DX'
213
+ if necb_reference_hp
214
+
215
+ #create supplemental heating coil based on default regional fuel type
216
+ if necb_reference_hp_supp_fuel == 'DefaultFuel'
217
+ epw = BTAP::Environment::WeatherFile.new(model.weatherFile.get.path.get)
218
+ necb_reference_hp_supp_fuel = @standards_data['regional_fuel_use'].detect { |fuel_sources| fuel_sources['state_province_regions'].include?(epw.state_province_region) }['fueltype_set']
219
+ end
220
+ if necb_reference_hp_supp_fuel == 'NaturalGas'
221
+ supplemental_htg_coil = OpenStudio::Model::CoilHeatingGas.new(model, always_on)
222
+ elsif necb_reference_hp_supp_fuel == 'Electricity' or necb_reference_hp_supp_fuel == 'FuelOilNo2'
223
+ supplemental_htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model, always_on)
224
+ else #hot water coils is an option in the future
225
+ raise('Invalid fuel type selected for heat pump supplemental coil')
226
+ end
227
+ # This method will seem like an error in number of args..but this is due to swig voodoo.
180
228
  air_to_air_heatpump = OpenStudio::Model::AirLoopHVACUnitaryHeatPumpAirToAir.new(model, always_on, fan, htg_coil, clg_coil, supplemental_htg_coil)
181
229
  air_to_air_heatpump.setName("#{control_zone.name} ASHP")
182
230
  air_to_air_heatpump.setControllingZone(control_zone)