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,7 @@ class NECB2020
7
7
  #
8
8
  # @return [Bool] true if successful, false if not
9
9
  #
10
- # This was modified in PCF 1630
10
+ # NECB2020 uses a different procedure calculate gas water heater efficiencies (compared to previous NECB)
11
11
  #
12
12
  def water_heater_mixed_apply_efficiency(water_heater_mixed)
13
13
  # Get the capacity of the water heater
@@ -34,7 +34,7 @@ class NECB2020
34
34
  volume_m3 = volume_m3.get
35
35
  end
36
36
  volume_gal = OpenStudio.convert(volume_m3, 'm^3', 'gal').get
37
-
37
+ volume_litre = OpenStudio.convert(volume_m3, 'm^3', 'L').get
38
38
  # Get the heater fuel type
39
39
  fuel_type = water_heater_mixed.heaterFuelType
40
40
  unless fuel_type == 'NaturalGas' || fuel_type == 'Electricity' || fuel_type == 'FuelOilNo2'
@@ -46,21 +46,24 @@ class NECB2020
46
46
  # Calculate the energy factor (EF)
47
47
  # From PNNL http://www.energycodes.gov/sites/default/files/documents/PrototypeModelEnhancements_2014_0.pdf
48
48
  # Appendix A: Service Water Heating
49
- # and modified by PCF 1630 as noted below.
49
+ # and modified by PCF 1630 as noted below.
50
+
50
51
  water_heater_eff = nil
51
52
  ua_btu_per_hr_per_f = nil
52
53
  sl_btu_per_hr = nil
54
+ q_load_btu_per_hr = nil
55
+ uef = nil
53
56
  case fuel_type
54
57
  when 'Electricity'
55
- volume_l_per_s = volume_m3 * 1000
58
+ volume_litre_per_s = volume_m3 * 1000
56
59
  if capacity_btu_per_hr <= OpenStudio.convert(12, 'kW', 'Btu/hr').get
57
60
  # Fixed water heater efficiency per PNNL
58
61
  water_heater_eff = 1
59
62
  # Calculate the max allowable standby loss (SL)
60
- sl_w = if volume_l_per_s < 270
61
- 40 + 0.2 * volume_l_per_s # assume bottom inlet
63
+ sl_w = if volume_litre_per_s < 270
64
+ 40 + 0.2 * volume_litre_per_s # assume bottom inlet
62
65
  else
63
- 0.472 * volume_l_per_s - 33.5
66
+ 0.472 * volume_litre_per_s - 33.5
64
67
  # assume bottom inlet
65
68
  end
66
69
  sl_btu_per_hr = OpenStudio.convert(sl_w, 'W', 'Btu/hr').get
@@ -68,73 +71,137 @@ class NECB2020
68
71
  # Fixed water heater efficiency per PNNL
69
72
  water_heater_eff = 1
70
73
  # Calculate the max allowable standby loss (SL) # use this - NECB does not give SL calculation for cap > 12 kW
71
- sl_btu_per_hr = 20 + (35 * Math.sqrt(volume_gal))
74
+ sl_w = 0.3 + 102.2/volume_litre_per_s
75
+ sl_btu_per_hr = OpenStudio.convert(sl_w, 'W', 'Btu/hr').get
72
76
  end
73
77
  # Calculate the skin loss coefficient (UA)
74
78
  ua_btu_per_hr_per_f = sl_btu_per_hr / 70
75
79
  when 'NaturalGas'
76
- volume_l = volume_m3 / 1000
77
- if capacity_btu_per_hr <= 75_000
78
- # Fixed water heater thermal efficiency per PNNL
80
+ # Performance requirements from NECB2020 Table 6.2.2.1 Gas-fired storage type
81
+
82
+ # Performance requirement based on FHR and volume
83
+ # Water heater parameters derived using the procedure described by:
84
+ # Maguire, J., & Roberts, D. (2020). DERIVING SIMULATION PARAMETERS FOR STORAGE-TYPE WATER HEATERS
85
+ # USING RATINGS DATA PRODUCED FROM THE UNIFORM ENERGY FACTOR TEST PROCEDURE. 2020 Building Performance
86
+ # Analysis Conference and SimBuild co-organized by ASHRAE and IBPSA-USA (pp. 325-331). Chicago: ASHRAE.
87
+ # https://www.ashrae.org/file%20library/conferences/specialty%20conferences/2020%20building%20performance/papers/d-bsc20-c039.pdf
88
+ #
89
+ # AND
90
+ #
91
+ # PNNL http://www.energycodes.gov/sites/default/files/documents/PrototypeModelEnhancements_2014_0.pdf
92
+
93
+ # Assume fhr = peak demand flow
94
+ tank_param = auto_size_shw_capacity(model:water_heater_mixed.model, shw_scale: 'NECB_Default')
95
+ fhr_L_per_hr = tank_param['loop_peak_flow_rate_SI']
96
+ fhr_L_per_hr = fhr_L_per_hr * 3600000
97
+ if capacity_w <= 22000 and volume_litre >= 76 and volume_litre < 208
98
+ if fhr_L_per_hr < 68
99
+ uef = 0.3456 - 0.00053*volume_litre
100
+ q_load_btu_per_hr = 5561
101
+ volume_drawn_gal = 10
102
+ elsif fhr_L_per_hr >= 68 and fhr_L_per_hr < 193
103
+ uef = 0.5982 - 0.00050*volume_litre
104
+ q_load_btu_per_hr = 21131
105
+ volume_drawn_gal = 38
106
+ elsif fhr_L_per_hr >= 193 and fhr_L_per_hr < 284
107
+ uef = 0.6483 - 0.00045*volume_litre
108
+ q_load_btu_per_hr = 30584
109
+ volume_drawn_gal = 55
110
+ elsif fhr_L_per_hr >= 284
111
+ uef = 0.6920 - 0.00034*volume_litre
112
+ q_load_btu_per_hr = 46710
113
+ volume_drawn_gal = 84
114
+ end
115
+
116
+ # Assume burner efficiency (PNNL)
79
117
  water_heater_eff = 0.82
80
-
81
- # Calculate the minimum Energy Factor (EF) (This was introduced in PCF 1630)
82
- if volume_l < 68
83
- uef = 0.5982 - 0.0005 * volume_l
84
- ef = 1.0005 * uef + 0.0019
85
- elsif volume_l >= 68 and volume_l < 193
86
- uef = 0.6483 - 0.00045 * volume_l
87
- ef = 1.0005 * uef + 0.0019
88
- elsif volume_l >= 193 and volume_l < 284
89
- uef = 0.692 - 0.00034 * volume_l
90
- ef = 1.0005 * uef + 0.0019
118
+
119
+ # Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
120
+ q_load_btu = volume_drawn_gal*8.30074*0.99826*(125-58) #water properties at 91.5F
121
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
122
+ re = water_heater_eff + q_load_btu*(uef-water_heater_eff)/(24*capacity_btu_per_hr*uef)
123
+ ua_btu_per_hr_per_f = (water_heater_eff-re)*capacity_btu_per_hr/(125-67.5)
124
+
125
+ elsif capacity_w <= 22000 and volume_litre >= 208 and volume_litre < 380
126
+ if fhr_L_per_hr < 68
127
+ uef = 0.6470 - 0.00016*volume_litre
128
+ q_load_btu_per_hr = 5561
129
+ volume_drawn_gal = 10
130
+ elsif fhr_L_per_hr >= 68 and fhr_L_per_hr < 193
131
+ uef = 0.7689 - 0.00013*volume_litre
132
+ q_load_btu_per_hr = 21131
133
+ volume_drawn_gal = 38
134
+ elsif fhr_L_per_hr >= 193 and fhr_L_per_hr < 284
135
+ uef = 0.7897 - 0.00011*volume_litre
136
+ q_load_btu_per_hr = 30584
137
+ volume_drawn_gal = 55
138
+ elsif fhr_L_per_hr >= 284
139
+ uef = 0.8072 - 0.00008*volume_litre
140
+ q_load_btu_per_hr = 46710
141
+ volume_drawn_gal = 84
91
142
  end
92
-
93
- # Calculate the Recovery Efficiency (RE)
94
- # based on a fixed capacity of 75,000 Btu/hr
95
- # and a fixed volume of 40 gallons by solving
96
- # this system of equations:
97
- # ua = (1/.95-1/re)/(67.5*(24/41094-1/(re*cap)))
98
- # 0.82 = (ua*67.5+cap*re)/cap
99
- cap = 75_000.0
100
- re = (Math.sqrt(6724 * ef**2 * cap**2 + 40_409_100 * ef**2 * cap - 28_080_900 * ef * cap + 29_318_000_625 * ef**2 - 58_636_001_250 * ef + 29_318_000_625) + 82 * ef * cap + 171_225 * ef - 171_225) / (200 * ef * cap)
143
+
144
+ # Assume burner efficiency (PNNL)
145
+ water_heater_eff = 0.82
146
+
147
+ # Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
148
+ q_load_btu = volume_drawn_gal*8.30074*0.99826*(125-58) #water properties at 91.5F
149
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
150
+ # Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
151
+ re = water_heater_eff + q_load_btu*(uef-water_heater_eff)/(24*capacity_btu_per_hr*uef)
152
+ ua_btu_per_hr_per_f = (water_heater_eff-re)*capacity_btu_per_hr/(125-67.5)
153
+
154
+ elsif capacity_w > 22000 and capacity_w <= 30500 and volume_litre <= 454
155
+ # NOTE: volume_litre 454L in this case, refers to manufacturer stated volume.
156
+ # Assume manufacturer rated volume = actual tank volume (value used in EnergyPlus)
101
157
 
102
- # Calculate the skin loss coefficient (UA)
103
- # based on the actual capacity.
104
- ua_btu_per_hr_per_f = (water_heater_eff - re) * capacity_btu_per_hr / 67.5
105
-
106
- # This capacity band was introduced in PCF 1630
107
- elsif capacity_btu_per_hr > 75_000 and capacity_btu_per_hr < 103977 and volume_l < 454
158
+ uef = 0.8107 - 0.00021*volume_litre
159
+
160
+ # Assume burner efficiency (PNNL)
108
161
  water_heater_eff = 0.82
109
- uef = 0.8107 - 0.00021 * volume_l
110
- ef = 1.0005 * uef + 0.0019
111
- cap = 103977
112
- re = (Math.sqrt(6724 * ef**2 * cap**2 + 40_409_100 * ef**2 * cap - 28_080_900 * ef * cap + 29_318_000_625 * ef**2 - 58_636_001_250 * ef + 29_318_000_625) + 82 * ef * cap + 171_225 * ef - 171_225) / (200 * ef * cap)
162
+
163
+ # Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
164
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
165
+ if fhr_L_per_hr < 68
166
+ q_load_btu_per_hr = 5561
167
+ volume_drawn_gal = 10
168
+ elsif fhr_L_per_hr >= 68 and fhr_L_per_hr < 193
169
+ q_load_btu_per_hr = 21131
170
+ volume_drawn_gal = 38
171
+ elsif fhr_L_per_hr >= 193 and fhr_L_per_hr < 284
172
+ q_load_btu_per_hr = 30584
173
+ volume_drawn_gal = 55
174
+ elsif fhr_L_per_hr >= 284
175
+ q_load_btu_per_hr = 46710
176
+ volume_drawn_gal = 84
177
+ end
178
+ q_load_btu = volume_drawn_gal*8.30074*0.99826*(125-58) #water properties at 91.5F
179
+
180
+ # Estimate recovery efficiency (RE) and UA (Maguire and Robers, 2020)
181
+ re = water_heater_eff + q_load_btu*(uef-water_heater_eff)/(24*capacity_btu_per_hr*uef)
182
+ ua_btu_per_hr_per_f = (water_heater_eff-re)*capacity_btu_per_hr/(125-67.5)
113
183
 
114
- # Calculate the skin loss coefficient (UA)
115
- # based on the actual capacity.
116
- ua_btu_per_hr_per_f = (water_heater_eff - re) * capacity_btu_per_hr / 67.5
117
- else
118
- # Thermal efficiency (PCF 1630 update)
184
+ else # all other water heaters
185
+ capacity_kw = capacity_w/1000
186
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
187
+ # thermal efficiency (NECB2020)
119
188
  et = 0.9
120
- sl_w = 0.84 * capacity_btu_per_hr / 3412.412 / 0.234 + 16.57 * (volume_l ** 0.5)
121
- sl_btu_per_hr = sl_w * 3.412
122
- # Calculate the skin loss coefficient (UA)
123
- ua_btu_per_hr_per_f = (sl_btu_per_hr * et) / 70
124
- # Calculate water heater efficiency
125
- water_heater_eff = (ua_btu_per_hr_per_f * 70 + capacity_btu_per_hr * et) / capacity_btu_per_hr
189
+ # maximum standby losses
190
+ sl_w = 0.84*(1.25*capacity_kw + 16.57*(volume_litre**0.5))
191
+ sl_btu_per_hr = OpenStudio.convert(sl_w, 'W', 'Btu/hr').get
192
+ ua_btu_per_hr_per_f = sl_btu_per_hr*et / 70
193
+ water_heater_eff = (ua_btu_per_hr_per_f*70 + capacity_btu_per_hr*et)/capacity_btu_per_hr
126
194
  end
127
195
  end
128
196
 
129
197
  # Convert to SI
130
- ua_btu_per_hr_per_c = OpenStudio.convert(ua_btu_per_hr_per_f, 'Btu/hr*R', 'W/K').get
131
-
198
+ ua_w_per_k = OpenStudio.convert(ua_btu_per_hr_per_f, 'Btu/hr*R', 'W/K').get
132
199
  # Set the water heater properties
133
200
  # Efficiency
134
201
  water_heater_mixed.setHeaterThermalEfficiency(water_heater_eff)
135
202
  # Skin loss
136
- water_heater_mixed.setOffCycleLossCoefficienttoAmbientTemperature(ua_btu_per_hr_per_c)
137
- water_heater_mixed.setOnCycleLossCoefficienttoAmbientTemperature(ua_btu_per_hr_per_c)
203
+ water_heater_mixed.setOffCycleLossCoefficienttoAmbientTemperature(ua_w_per_k)
204
+ water_heater_mixed.setOnCycleLossCoefficienttoAmbientTemperature(ua_w_per_k)
138
205
  # TODO: Parasitic loss (pilot light)
139
206
  # PNNL document says pilot lights were removed, but IDFs
140
207
  # still have the on/off cycle parasitic fuel consumptions filled in
@@ -51,6 +51,7 @@ class BTAPData
51
51
  @btap_data.merge!(energy_peak_data)
52
52
  @btap_data.merge!(utility(model))
53
53
  @btap_data.merge!(unmet_hours(model))
54
+ @btap_data.merge!outdoor_air_data(model)
54
55
 
55
56
  # Data in tables...
56
57
  @btap_data.merge!('measures_data_table' => measures_data_table(runner)) unless runner.nil?
@@ -294,7 +295,7 @@ class BTAPData
294
295
  outdoor_roofs = BTAP::Geometry::Surfaces.filter_by_surface_types(outdoor_surfaces, 'RoofCeiling')
295
296
  outdoor_floors = BTAP::Geometry::Surfaces.filter_by_surface_types(outdoor_surfaces, 'Floor')
296
297
  outdoor_subsurfaces = BTAP::Geometry::Surfaces.get_subsurfaces_from_surfaces(outdoor_surfaces)
297
- ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, 'Ground')
298
+ ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, ['Ground', 'Foundation'])
298
299
  ground_walls = BTAP::Geometry::Surfaces.filter_by_surface_types(ground_surfaces, 'Wall')
299
300
  ground_roofs = BTAP::Geometry::Surfaces.filter_by_surface_types(ground_surfaces, 'RoofCeiling')
300
301
  ground_floors = BTAP::Geometry::Surfaces.filter_by_surface_types(ground_surfaces, 'Floor')
@@ -402,7 +403,7 @@ class BTAPData
402
403
  def envelope_exterior_surface_table
403
404
  surfaces = @model.getSurfaces.sort
404
405
  outdoor_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, 'Outdoors')
405
- ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, 'Ground')
406
+ ground_surfaces = BTAP::Geometry::Surfaces.filter_by_boundary_condition(surfaces, ['Ground', 'Foundation'])
406
407
  exterior_opaque_surfaces = outdoor_surfaces + ground_surfaces
407
408
  # outdoor_surfaces.each { |surface| puts surface.name}
408
409
  # get surface table from sql
@@ -1408,6 +1409,7 @@ class BTAPData
1408
1409
  'energy_eui_natural_gas_gj_per_m_sq',
1409
1410
  'energy_eui_pumps_gj_per_m_sq',
1410
1411
  'energy_eui_total_gj_per_m_sq',
1412
+ 'energy_eui_heat recovery_gj_per_m_sq',
1411
1413
  'energy_eui_water systems_gj_per_m_sq'].each { |end_use| data[end_use] = 0.0 }
1412
1414
  # Get E+ End use table from sql
1413
1415
  table = get_sql_table_to_json(@model, 'AnnualBuildingUtilityPerformanceSummary', 'Entire Facility', 'End Uses')['table']
@@ -1495,6 +1497,126 @@ class BTAPData
1495
1497
  return service_water_heating
1496
1498
  end
1497
1499
 
1500
+ # The below method (outdoor_air_data extract a couple of outputs related to outdoor air from the .html output file)
1501
+ def outdoor_air_data(model)
1502
+ # Store outdoor air data
1503
+ outdoor_air_data = {}
1504
+ #===============================================================================================================
1505
+ airloops_total_outdoor_air_mechanical_ventilation_m3 = 0.0
1506
+ airloops_total_outdoor_air_natural_ventilation_m3 = 0.0
1507
+ zones_total_outdoor_air_mechanical_ventilation_m3 = 0.0
1508
+ zones_total_outdoor_air_natural_ventilation_m3 = 0.0
1509
+ zones_total_outdoor_air_infiltration_m3 = 0.0
1510
+ #===============================================================================================================
1511
+ # Total outdoor air by airLoop
1512
+ model.getAirLoopHVACs.sort.each do |air_loop|
1513
+ air_loop_name = air_loop.name.get.upcase
1514
+
1515
+ # Mechanical ventilation of all airloops
1516
+ command = "SELECT Value
1517
+ FROM TabularDataWithStrings
1518
+ WHERE ReportName='OutdoorAirDetails'
1519
+ AND ReportForString='Entire Facility'
1520
+ AND TableName='Total Outdoor Air by AirLoop'
1521
+ AND RowName='#{air_loop_name}'
1522
+ AND ColumnName='Mechanical Ventilation'
1523
+ AND Units='m3'"
1524
+ airloops_total_outdoor_air_mechanical_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
1525
+
1526
+ # Natural ventilation of all airloops
1527
+ command = "SELECT Value
1528
+ FROM TabularDataWithStrings
1529
+ WHERE ReportName='OutdoorAirDetails'
1530
+ AND ReportForString='Entire Facility'
1531
+ AND TableName='Total Outdoor Air by AirLoop'
1532
+ AND RowName='#{air_loop_name}'
1533
+ AND ColumnName='Natural Ventilation'
1534
+ AND Units='m3'"
1535
+ airloops_total_outdoor_air_natural_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
1536
+
1537
+ end
1538
+
1539
+ # Not-normalized mechanical/natural.
1540
+ outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_m3'] = airloops_total_outdoor_air_mechanical_ventilation_m3
1541
+ outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_m3'] = airloops_total_outdoor_air_natural_ventilation_m3
1542
+
1543
+ # Normalized mechanical/natural: ACH (air changes per hour)
1544
+ outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_ach_1_per_hr'] = airloops_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
1545
+ outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_ach_1_per_hr'] = airloops_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
1546
+
1547
+ # Normalized mechanical/natural: normalized by conditioned floor area
1548
+ outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = airloops_total_outdoor_air_mechanical_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
1549
+ outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = airloops_total_outdoor_air_natural_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
1550
+
1551
+ # Normalized mechanical/natural: normalized by exterior area
1552
+ outdoor_air_data['airloops_total_outdoor_air_mechanical_ventilation_flow_per_exterior_area_m3_per_s_m2'] = airloops_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
1553
+ outdoor_air_data['airloops_total_outdoor_air_natural_ventilation_flow_per_exterior_area_m3_per_s_m2'] = airloops_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
1554
+
1555
+ #===============================================================================================================
1556
+ # Total outdoor air by zone
1557
+ total_outdoor_air_mechanical_ventilation_zones_m3 = 0.0
1558
+ model.getThermalZones.sort.each do |zone|
1559
+ zone_name = zone.name.get.upcase
1560
+
1561
+ # Mechanical ventilation of all zones
1562
+ command = "SELECT Value
1563
+ FROM TabularDataWithStrings
1564
+ WHERE ReportName='OutdoorAirDetails'
1565
+ AND ReportForString='Entire Facility'
1566
+ AND TableName='Total Outdoor Air by Zone'
1567
+ AND RowName='#{zone_name}'
1568
+ AND ColumnName='Mechanical Ventilation'
1569
+ AND Units='m3'"
1570
+ zones_total_outdoor_air_mechanical_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
1571
+
1572
+ # Natural ventilation of all zones
1573
+ command = "SELECT Value
1574
+ FROM TabularDataWithStrings
1575
+ WHERE ReportName='OutdoorAirDetails'
1576
+ AND ReportForString='Entire Facility'
1577
+ AND TableName='Total Outdoor Air by Zone'
1578
+ AND RowName='#{zone_name}'
1579
+ AND ColumnName='Natural Ventilation'
1580
+ AND Units='m3'"
1581
+ zones_total_outdoor_air_natural_ventilation_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
1582
+
1583
+ # Infiltration of all zones
1584
+ command = "SELECT Value
1585
+ FROM TabularDataWithStrings
1586
+ WHERE ReportName='OutdoorAirDetails'
1587
+ AND ReportForString='Entire Facility'
1588
+ AND TableName='Total Outdoor Air by Zone'
1589
+ AND RowName='#{zone_name}'
1590
+ AND ColumnName='Infiltration'
1591
+ AND Units='m3'"
1592
+ zones_total_outdoor_air_infiltration_m3 += @sqlite_file.get.execAndReturnFirstDouble(command).to_f
1593
+
1594
+ end
1595
+
1596
+ # Not-normalized mechanical/natural/infiltration.
1597
+ outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_m3'] = zones_total_outdoor_air_mechanical_ventilation_m3
1598
+ outdoor_air_data['zones_total_outdoor_air_natural_ventilation_m3'] = zones_total_outdoor_air_natural_ventilation_m3
1599
+ outdoor_air_data['zones_total_outdoor_air_infiltration_m3'] = zones_total_outdoor_air_infiltration_m3
1600
+
1601
+ # Normalized mechanical/natural/infiltration: ACH (air changes per hour)
1602
+ outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_ach_1_per_hr'] = zones_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
1603
+ outdoor_air_data['zones_total_outdoor_air_natural_ventilation_ach_1_per_hr'] = zones_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
1604
+ outdoor_air_data['zones_total_outdoor_air_infiltration_ach_1_per_hr'] = zones_total_outdoor_air_infiltration_m3 / (@btap_data['bldg_volume_m_cu'] * 365 * 24)
1605
+
1606
+ # Normalized mechanical/natural/infiltration: normalized by conditioned floor area
1607
+ outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = zones_total_outdoor_air_mechanical_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
1608
+ outdoor_air_data['zones_total_outdoor_air_natural_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2'] = zones_total_outdoor_air_natural_ventilation_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
1609
+ outdoor_air_data['zones_total_outdoor_air_infiltration_flow_per_conditioned_floor_area_m3_per_s_m2'] = zones_total_outdoor_air_infiltration_m3 / (@conditioned_floor_area_m_sq * 365 * 24 * 3600)
1610
+
1611
+ # Normalized mechanical/natural/infiltration: normalized by exterior area
1612
+ outdoor_air_data['zones_total_outdoor_air_mechanical_ventilation_flow_per_exterior_area_m3_per_s_m2'] = zones_total_outdoor_air_mechanical_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
1613
+ outdoor_air_data['zones_total_outdoor_air_natural_ventilation_flow_per_exterior_area_m3_per_s_m2'] = zones_total_outdoor_air_natural_ventilation_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
1614
+ outdoor_air_data['zones_total_outdoor_air_infiltration_flow_per_exterior_area_m3_per_s_m2'] = zones_total_outdoor_air_infiltration_m3 / (@btap_data['bldg_exterior_area_m_sq'] * 365 * 24 * 3600)
1615
+ #===============================================================================================================
1616
+
1617
+ return outdoor_air_data
1618
+ end
1619
+
1498
1620
  def sql_data_tables(model)
1499
1621
  puts 'Getting SQL Data into json...'
1500
1622
  start = Time.now
@@ -117,6 +117,8 @@ class BTAPDatapoint
117
117
  epw_file: @options[:epw_file],
118
118
  sizing_run_dir: File.join(@dp_temp_folder, 'sizing_folder'),
119
119
  primary_heating_fuel: @options[:primary_heating_fuel],
120
+ necb_reference_hp: @options[:necb_reference_hp],
121
+ necb_reference_hp_supp_fuel: @options[:necb_reference_hp_supp_fuel],
120
122
  dcv_type: @options[:dcv_type], # Four options: @options[: (1) 'NECB_Default', (2) 'No DCV', (3) 'Occupancy-based DCV' , (4) 'CO2-based DCV'
121
123
  lights_type: @options[:lights_type], # Two options: @options[: (1) 'NECB_Default', (2) 'LED'
122
124
  lights_scale: @options[:lights_scale],
@@ -167,7 +169,9 @@ class BTAPDatapoint
167
169
  output_meters: @options[:output_meters],
168
170
  airloop_economizer_type: @options[:airloop_economizer_type],
169
171
  shw_scale: @options[:shw_scale],
170
- baseline_system_zones_map_option: @options[:baseline_system_zones_map_option])
172
+ baseline_system_zones_map_option: @options[:baseline_system_zones_map_option],
173
+ tbd_option: @options[:tbd_option]
174
+ )
171
175
  end
172
176
 
173
177
  # Save model to to disk.
@@ -388,7 +392,16 @@ class BTAPDatapoint
388
392
  FROM ReportDataDictionary
389
393
  WHERE ReportDataDictionaryIndex == #{rdd_index}
390
394
  "
391
- key_value = model.sqlFile.get.execAndReturnFirstString(query).get
395
+
396
+ # In some cases KeyValue has a value and sometimes it does not. In some cases KeyValue is null. If the command
397
+ # below is run and KeyValue is null then the command fails and returns an error. The fix below assumes that if
398
+ # the command below fails it is because KeyValue is null. In that case the "key_value" variable is set to a
399
+ # blank.
400
+ begin
401
+ key_value = model.sqlFile.get.execAndReturnFirstString(query).get
402
+ rescue StandardError => bang
403
+ key_value = ""
404
+ end
392
405
 
393
406
  #Get Units
394
407
  query = "
@@ -1,4 +1,4 @@
1
- name,_id,run_start_time,run_end_time,status,status_message,btap_standard_building_type_geometry.building_type,btap_results.bldg_standards_template,btap_standard_systems.primary_heating_fuel,btap_standard_weather.epw_file,btap_results.bldg_conditioned_floor_area_m_sq,btap_results.bldg_exterior_area_m_sq,btap_results.bldg_fdwr,btap_results.bldg_name,btap_results.bldg_srr,btap_results.bldg_standards_building_template,btap_results.bldg_standards_building_type,btap_results.bldg_standards_number_of_above_ground_stories,btap_results.bldg_standards_number_of_stories,btap_results.bldg_surface_to_volume_ratio,btap_results.bldg_volume_m_cu,btap_results.cost_equipment_envelope_total_cost_per_m_sq,btap_results.cost_equipment_heating_and_cooling_total_cost_per_m_sq,btap_results.cost_equipment_lighting_total_cost_per_m_sq,btap_results.cost_equipment_shw_total_cost_per_m_sq,btap_results.cost_equipment_total_cost_per_m_sq,btap_results.cost_equipment_ventilation_total_cost_per_m_sq,btap_results.cost_rs_means_city,btap_results.cost_rs_means_prov,btap_results.cost_utility_neb_electricity_cost_per_m_sq,btap_results.cost_utility_neb_natural_gas_cost_per_m_sq,btap_results.cost_utility_neb_oil_cost_per_m_sq,btap_results.cost_utility_neb_total_cost_per_m_sq,btap_results.energy_eui_additional_fuel_gj_per_m_sq,btap_results.energy_eui_cooling_gj_per_m_sq,btap_results.energy_eui_district_cooling_gj_per_m_sq,btap_results.energy_eui_district_heating_gj_per_m_sq,btap_results.energy_eui_electricity_gj_per_m_sq,btap_results.energy_eui_fans_gj_per_m_sq,btap_results.energy_eui_heating_gj_per_m_sq,btap_results.energy_eui_interior_equipment_gj_per_m_sq,btap_results.energy_eui_interior_lighting_gj_per_m_sq,btap_results.energy_eui_natural_gas_gj_per_m_sq,btap_results.energy_eui_pumps_gj_per_m_sq,btap_results.energy_eui_total_gj_per_m_sq,btap_results.energy_eui_water_systems_gj_per_m_sq,btap_results.energy_peak_electric_w_per_m_sq,btap_results.energy_peak_natural_gas_w_per_m_sq,btap_results.energy_principal_heating_source,btap_results.envelope_ground_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_overhead_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_windows_average_conductance_w_per_m_sq_k,btap_results.envelope_skylights_average_conductance_w_per_m_sq_k,btap_results.location_cdd,btap_results.location_city,btap_results.location_country,btap_results.location_hdd,btap_results.location_latitude,btap_results.location_longitude,btap_results.location_state_province_region,btap_results.location_weather_file,btap_results.location_zone,btap_results.measures_data_table,btap_results.shw_additional_fuel_per_year,btap_results.shw_electricity_per_day,btap_results.shw_electricity_per_day_per_occupant,btap_results.shw_electricity_per_year,btap_results.shw_natural_gas_per_year,btap_results.shw_total_nominal_occupancy,btap_results.shw_water_m_cu_per_day,btap_results.shw_water_m_cu_per_day_per_occupant,btap_results.shw_water_m_cu_per_year,btap_results.simulation_btap_data_version,btap_results.simulation_date,btap_results.simulation_os_standards_revision,btap_results.simulation_os_standards_version,btap_results.npv_total_per_m_sq
1
+ name,_id,run_start_time,run_end_time,status,status_message,btap_standard_building_type_geometry.building_type,btap_results.bldg_standards_template,btap_standard_systems.primary_heating_fuel,btap_standard_weather.epw_file,btap_results.bldg_conditioned_floor_area_m_sq,btap_results.bldg_exterior_area_m_sq,btap_results.bldg_fdwr,btap_results.bldg_name,btap_results.bldg_srr,btap_results.bldg_standards_building_template,btap_results.bldg_standards_building_type,btap_results.bldg_standards_number_of_above_ground_stories,btap_results.bldg_standards_number_of_stories,btap_results.bldg_surface_to_volume_ratio,btap_results.bldg_volume_m_cu,btap_results.cost_equipment_envelope_total_cost_per_m_sq,btap_results.cost_equipment_heating_and_cooling_total_cost_per_m_sq,btap_results.cost_equipment_lighting_total_cost_per_m_sq,btap_results.cost_equipment_shw_total_cost_per_m_sq,btap_results.cost_equipment_total_cost_per_m_sq,btap_results.cost_equipment_ventilation_total_cost_per_m_sq,btap_results.cost_rs_means_city,btap_results.cost_rs_means_prov,btap_results.cost_utility_neb_electricity_cost_per_m_sq,btap_results.cost_utility_neb_natural_gas_cost_per_m_sq,btap_results.cost_utility_neb_oil_cost_per_m_sq,btap_results.cost_utility_neb_total_cost_per_m_sq,btap_results.energy_eui_additional_fuel_gj_per_m_sq,btap_results.energy_eui_cooling_gj_per_m_sq,btap_results.energy_eui_district_cooling_gj_per_m_sq,btap_results.energy_eui_district_heating_gj_per_m_sq,btap_results.energy_eui_electricity_gj_per_m_sq,btap_results.energy_eui_fans_gj_per_m_sq,btap_results.energy_eui_heating_gj_per_m_sq,btap_results.energy_eui_interior_equipment_gj_per_m_sq,btap_results.energy_eui_interior_lighting_gj_per_m_sq,btap_results.energy_eui_natural_gas_gj_per_m_sq,btap_results.energy_eui_pumps_gj_per_m_sq,btap_results.energy_eui_total_gj_per_m_sq,btap_results.energy_eui_water_systems_gj_per_m_sq,btap_results.energy_peak_electric_w_per_m_sq,btap_results.energy_peak_natural_gas_w_per_m_sq,btap_results.energy_principal_heating_source,btap_results.envelope_ground_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_ground_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_floors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_overhead_doors_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_roofs_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_walls_average_conductance_w_per_m_sq_k,btap_results.envelope_outdoor_windows_average_conductance_w_per_m_sq_k,btap_results.envelope_skylights_average_conductance_w_per_m_sq_k,btap_results.location_cdd,btap_results.location_city,btap_results.location_country,btap_results.location_hdd,btap_results.location_latitude,btap_results.location_longitude,btap_results.location_state_province_region,btap_results.location_weather_file,btap_results.location_zone,btap_results.measures_data_table,btap_results.shw_additional_fuel_per_year,btap_results.shw_electricity_per_day,btap_results.shw_electricity_per_day_per_occupant,btap_results.shw_electricity_per_year,btap_results.shw_natural_gas_per_year,btap_results.shw_total_nominal_occupancy,btap_results.shw_water_m_cu_per_day,btap_results.shw_water_m_cu_per_day_per_occupant,btap_results.shw_water_m_cu_per_year,btap_results.simulation_btap_data_version,btap_results.simulation_date,btap_results.simulation_os_standards_revision,btap_results.simulation_os_standards_version,btap_results.npv_total_per_m_sq,airloops_total_outdoor_air_mechanical_ventilation_m3,airloops_total_outdoor_air_natural_ventilation_ach_1_per_hr,airloops_total_outdoor_air_mechanical_ventilation_flow_per_conditioned_floor_area_m3_per_s_m2
2
2
  DOE Autogenerated 139,02044732-a9d8-4e84-9a37-ee894242bd76,2019-11-22T21:02:22.820Z,2019-11-22T21:04:34.271Z,completed,completed normal,Warehouse,NECB2011,Electricity,CAN_QC_Sept-Iles.AP.718110_CWEC2016.epw,4835.13,7095.242119931756,3.4,Warehouse,1.5,,Warehouse,1,1,0.1873385454726663,37873.90417722118,146.96869991086072,9.340462407422343,52.72710351117757,3.392070120141547,266.74079290525793,54.31245902385251,DALHOUSIE,NEW BRUNSWICK,7.27358941745103,0.0,0.0,7.27358941745103,0.0,0.0021736747512476396,0.0,0.0,0.35343000084796067,0.03717790421353717,0.20311553153689765,0.017571399321217835,0.08201227267932817,0.0,,0.35343000084796067,0.011379218345732174,86.32869643629023,NA,Electricity,0.757,"","",2.2,"","",0.162,0.21,2.2,2.2,14.0,Sept-Iles AP,CAN,6200.0,50.223,-66.266,QC,CAN_QC_Sept-Iles.AP.718110_CWEC2016.epw,"","[
3
3
  {
4
4
  ""measure_name"": ""btap_standard_building_type_geometry"",
@@ -103,7 +103,7 @@ Standard.class_eval do
103
103
 
104
104
  # 'touch' the weather file - for some odd reason this fixes the simulation not running issue we had on openstudio-server.
105
105
  # Removed for until further investigation completed.
106
- # FileUtils.touch("#{run_dir}/#{epw_name}")
106
+ #FileUtils.touch("#{run_dir}/#{epw_name}")
107
107
 
108
108
  cli_path = OpenStudio.getOpenStudioCLI
109
109
  cmd = "\"#{cli_path}\" run -w \"#{osw_path}\""
@@ -13,5 +13,5 @@ module OpenstudioStandards
13
13
  end
14
14
  return 'git-not-found-on-this-system'
15
15
  end
16
- VERSION = '0.3.0'.freeze
16
+ VERSION = '0.3.1.rc1'.freeze
17
17
  end
@@ -46,6 +46,8 @@ module EnergyPlus
46
46
  attr_accessor :typical_winter_dry_week
47
47
  attr_accessor :typical_autumn_week
48
48
  attr_accessor :typical_spring_week
49
+ attr_accessor :monthly_undis_ground_temps_0p5m
50
+ attr_accessor :monthly_undis_ground_temps_4p0m
49
51
 
50
52
  def initialize(path)
51
53
  @path = Pathname.new(path)
@@ -73,6 +75,8 @@ module EnergyPlus
73
75
  @typical_winter_dry_week = []
74
76
  @typical_autumn_week = []
75
77
  @typical_spring_week = []
78
+ @monthly_undis_ground_temps_0p5m = []
79
+ @monthly_undis_ground_temps_4p0m = []
76
80
  @data = []
77
81
  init
78
82
  end
@@ -313,7 +317,7 @@ module EnergyPlus
313
317
  # use regex to get the temperatures
314
318
  regex = /Daily Avg(.*)\n/
315
319
  match_data = text.match(regex)
316
- if match_data.nil?
320
+ if match_data.nil?
317
321
  puts "Can't find outdoor air temps"
318
322
  raise
319
323
  else
@@ -331,6 +335,34 @@ module EnergyPlus
331
335
  # puts "#{@monthly_dry_bulb}"
332
336
  end
333
337
 
338
+ # use regex to get undisturbed ground temps at 0.5 m depth
339
+ regex = /Monthly.*Calculated.*undisturbed*.*Ground.*Temperatures.*\n.*Jan.*Feb.*Mar.*Apr.*May.*Jun.*Jul.*Aug.*Sep.*Oct.*Nov.*Dec.*\n(.*)\n(.*)\n(.*)/
340
+ match_data = text.match(regex)
341
+ if match_data.nil?
342
+ puts "Can't find undisturbed ground temperatures"
343
+ raise
344
+ else
345
+ # first match is undisturbed ground temperature at 0.5 m and 4.0 m depth
346
+ monthly_undis_ground_temps_0p5m = match_data[1].strip.split(/\s+/)
347
+ monthly_undis_ground_temps_0p5m.shift
348
+ monthly_undis_ground_temps_0p5m.shift
349
+ monthly_undis_ground_temps_4p0m = match_data[3].strip.split(/\s+/)
350
+ monthly_undis_ground_temps_4p0m.shift
351
+ monthly_undis_ground_temps_4p0m.shift
352
+ # have to be 12 months
353
+ if monthly_undis_ground_temps_0p5m.size != 12
354
+ puts "Can't find undisturbed ground temps at 0.5 m"
355
+ raise
356
+ end
357
+ if monthly_undis_ground_temps_4p0m.size != 12
358
+ puts "Can't find undisturbed ground temps at 4.0 m"
359
+ raise
360
+ end
361
+ # insert as numbers
362
+ monthly_undis_ground_temps_0p5m.each { |temp| @monthly_undis_ground_temps_0p5m << temp.to_f }
363
+ monthly_undis_ground_temps_4p0m.each { |temp| @monthly_undis_ground_temps_4p0m << temp.to_f }
364
+ end
365
+
334
366
  # now we are valid
335
367
  @valid = true
336
368
 
@@ -33,6 +33,7 @@ module OpenstudioStandards
33
33
  # Standards classes
34
34
  require_relative "#{stds}/standard"
35
35
  # NECB2011 Code
36
+ require_relative "#{stds}/necb/NECB2011/system_fuels"
36
37
  require_relative "#{stds}/necb/NECB2011/necb_2011"
37
38
  require_relative "#{stds}/necb/NECB2011/building_envelope"
38
39
  require_relative "#{stds}/necb/NECB2011/lighting"