openstudio-standards 0.2.10 → 0.2.11.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. checksums.yaml +5 -5
  2. data/data/geometry/ASHRAE90120042007LargeHotel.osm +101 -0
  3. data/data/geometry/ASHRAE90120042007RetailStandalone.osm +220 -0
  4. data/data/geometry/ASHRAE9012010LargeHotel.osm +101 -0
  5. data/data/geometry/ASHRAE9012010RetailStandalone.osm +218 -32
  6. data/data/geometry/ASHRAE9012013FullServiceRestaurant.osm +17 -0
  7. data/data/geometry/ASHRAE9012013Hospital.osm +288 -0
  8. data/data/geometry/ASHRAE9012013LargeHotel.osm +113 -12
  9. data/data/geometry/ASHRAE9012013LargeOffice.osm +205 -1
  10. data/data/geometry/ASHRAE9012013MediumOffice.osm +103 -1
  11. data/data/geometry/ASHRAE9012013Outpatient.osm +390 -102
  12. data/data/geometry/ASHRAE9012013PrimarySchool.osm +424 -0
  13. data/data/geometry/ASHRAE9012013QuickServiceRestaurant.osm +16 -0
  14. data/data/geometry/ASHRAE9012013RetailStandalone.osm +220 -0
  15. data/data/geometry/ASHRAE9012013SecondarySchool.osm +543 -0
  16. data/data/geometry/ASHRAE9012013SmallHotel.osm +50 -0
  17. data/data/geometry/ASHRAE9012013SmallOffice.osm +33 -0
  18. data/data/geometry/ASHRAE9012013Warehouse.osm +475 -238
  19. data/data/geometry/ASHRAEFullServiceRestaurant.osm +16 -0
  20. data/data/geometry/ASHRAEHospital.osm +288 -0
  21. data/data/geometry/ASHRAELargeOffice.osm +205 -1
  22. data/data/geometry/ASHRAELargeOfficeDetailed.osm +32 -32
  23. data/data/geometry/ASHRAEMediumOffice.osm +103 -1
  24. data/data/geometry/ASHRAEOutpatient.osm +390 -102
  25. data/data/geometry/ASHRAEPrimarySchool.osm +424 -0
  26. data/data/geometry/ASHRAEQuickServiceRestaurant.osm +16 -0
  27. data/data/geometry/ASHRAESecondarySchool.osm +1011 -162
  28. data/data/geometry/ASHRAESmallHotel.osm +50 -0
  29. data/data/geometry/ASHRAESmallOffice.osm +33 -0
  30. data/data/geometry/ASHRAEWarehouse.osm +476 -238
  31. data/data/standards/manage_OpenStudio_Standards.rb +1 -1
  32. data/data/standards/openstudio_standards_duplicates_log.csv +16 -0
  33. data/data/standards/test_performance_expected_dd_results.csv +1216 -1216
  34. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.ddy +536 -0
  35. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.epw +8768 -0
  36. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.stat +544 -0
  37. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.ddy +533 -0
  38. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.epw +8768 -0
  39. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.stat +553 -0
  40. data/data/weather/VNM_Hanoi.488200_IWEC.ddy +533 -0
  41. data/data/weather/VNM_Hanoi.488200_IWEC.epw +8768 -0
  42. data/data/weather/VNM_Hanoi.488200_IWEC.stat +544 -0
  43. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.ddy +533 -0
  44. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.epw +8768 -0
  45. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.stat +546 -0
  46. data/lib/openstudio-standards.rb +27 -0
  47. data/lib/openstudio-standards/btap/btap.model.rb +4 -4
  48. data/lib/openstudio-standards/btap/btap_result.rb +8 -8
  49. data/lib/openstudio-standards/btap/economics.rb +11 -11
  50. data/lib/openstudio-standards/btap/envelope.rb +5 -5
  51. data/lib/openstudio-standards/btap/hvac.rb +55 -11
  52. data/lib/openstudio-standards/btap/measures.rb +7 -7
  53. data/lib/openstudio-standards/btap/spaceloads.rb +4 -4
  54. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +105 -1
  55. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +2 -2
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +0 -8
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +0 -8
  58. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +0 -8
  59. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +0 -8
  60. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +6 -1
  61. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  62. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +3 -1
  63. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +22 -0
  64. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +32 -0
  65. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +33 -0
  66. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +32 -0
  67. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  68. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +25 -0
  69. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +35 -0
  70. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +11 -0
  71. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +17 -3
  72. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +9 -0
  73. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +9 -0
  74. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +22 -3
  75. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +9 -0
  76. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +9 -0
  77. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +107 -5
  78. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +9 -0
  79. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +3 -0
  80. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -0
  81. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +0 -8
  82. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +2 -2
  83. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +2 -4
  84. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -4
  85. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +2 -2
  86. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +45 -5
  87. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +1 -1
  88. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +21 -2
  89. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -364
  90. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +4 -0
  91. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +4 -5
  92. data/lib/openstudio-standards/refs/references.rb +4 -0
  93. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +283 -97
  94. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +2 -2
  95. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -1
  96. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +1 -1
  97. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +1 -1
  98. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +5 -5
  99. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +3 -1
  100. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
  101. data/lib/openstudio-standards/standards/Standards.Construction.rb +53 -45
  102. data/lib/openstudio-standards/standards/Standards.Fan.rb +10 -2
  103. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +4 -4
  104. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -1
  105. data/lib/openstudio-standards/standards/Standards.Model.rb +39 -18
  106. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +8 -8
  107. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +12 -12
  108. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +1 -1
  109. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +2 -2
  110. data/lib/openstudio-standards/standards/Standards.Space.rb +190 -181
  111. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +36 -59
  112. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +3 -3
  113. data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
  114. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +16 -12
  115. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +1 -1
  116. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +16 -5
  117. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
  118. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +159 -8
  119. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +1354 -1075
  120. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +557 -17
  121. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +28 -28
  122. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +36 -36
  123. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +233 -6
  124. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +159 -8
  125. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +1356 -1077
  126. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +480 -0
  127. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +28 -28
  128. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +36 -36
  129. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +241 -14
  130. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +0 -8
  131. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +12 -7
  132. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +159 -8
  133. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +1367 -1087
  134. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +480 -0
  135. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +36 -36
  136. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +233 -5
  137. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +20 -27
  138. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -3
  139. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +159 -8
  140. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +1432 -1138
  141. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +480 -0
  142. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +36 -36
  143. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +241 -5
  144. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zone_sets.json +37 -0
  145. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zones.json +39 -15
  146. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +489 -7
  147. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +250 -0
  148. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
  149. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +1920 -0
  150. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +5265 -9
  151. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +159 -8
  152. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +2441 -1925
  153. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +16658 -2578
  154. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +212 -8
  155. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +11 -1
  156. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +159 -8
  157. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +2403 -1889
  158. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +16664 -2584
  159. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +209 -7
  160. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +11 -1
  161. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +4113 -513
  162. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_sets.json +40 -40
  163. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.elevators.json +1 -1
  164. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ground_temperatures.json +650 -0
  165. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps.json +90 -2
  166. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps_heating.json +25 -5
  167. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +1909 -32
  168. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.water_heaters.json +8 -8
  169. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +147 -155
  170. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  171. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +29 -10
  172. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
  173. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +45 -73
  174. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +4 -72
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.boilers.json +20 -0
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.chillers.json +400 -0
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +4444 -0
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_sets.json +391 -0
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +536 -0
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.elevators.json +36 -0
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +169 -0
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ground_temperatures.json +650 -0
  183. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps.json +290 -0
  184. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps_heating.json +164 -0
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +40 -0
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.motors.json +274 -0
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.prototype_inputs.json +704 -0
  188. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.refrigeration_compressors.json +22 -0
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +6424 -0
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.unitary_acs.json +142 -0
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +72 -0
  192. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps.json +31 -0
  193. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps_heating.json +13 -0
  194. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +829 -0
  195. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +24 -0
  196. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +19 -0
  197. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerSingleSpeed.rb +5 -0
  198. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerTwoSpeed.rb +5 -0
  199. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +16 -0
  200. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +37 -0
  201. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +34 -0
  202. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +80 -0
  203. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +68 -0
  204. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +146 -0
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ThermalZone.rb +23 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +8 -0
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +16 -0
  208. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.heat_pumps_heating.json +5 -5
  209. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +18 -0
  210. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.heat_pumps_heating.json +5 -5
  211. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.heat_pumps_heating.json +5 -5
  212. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.heat_pumps_heating.json +5 -5
  213. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.heat_pumps_heating.json +5 -5
  214. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.heat_pumps_heating.json +5 -5
  215. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.heat_pumps_heating.json +5 -5
  216. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.heat_pumps_heating.json +1 -1
  217. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.heat_pumps_heating.json +5 -5
  218. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.heat_pumps_heating.json +5 -5
  219. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps_heating.json +5 -5
  220. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.heat_pumps_heating.json +5 -5
  221. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.heat_pumps_heating.json +5 -5
  222. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.heat_pumps_heating.json +5 -5
  223. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.heat_pumps_heating.json +5 -5
  224. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.heat_pumps_heating.json +5 -5
  225. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.heat_pumps_heating.json +5 -5
  226. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.heat_pumps_heating.json +5 -5
  227. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.heat_pumps_heating.json +5 -5
  228. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.heat_pumps_heating.json +5 -5
  229. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.heat_pumps_heating.json +5 -5
  230. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +5 -1
  231. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +5 -1
  232. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +5 -2
  233. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +8 -2
  234. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +12 -12
  235. data/lib/openstudio-standards/version.rb +1 -1
  236. data/lib/openstudio-standards/weather/Weather.Model.rb +4 -0
  237. metadata +102 -18
  238. data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
  239. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  240. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  241. data/data/standards/OpenStudio_Standards-cbes(space_types).xlsx +0 -0
  242. data/data/standards/OpenStudio_Standards-cbes.xlsx +0 -0
  243. data/data/standards/OpenStudio_Standards-deer(space_types).xlsx +0 -0
  244. data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
  245. data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
  246. data/data/standards/OpenStudio_Standards_LA100.xlsx +0 -0
  247. data/data/standards/junk/legacy_dd_results - Copy.csv +0 -960
  248. data/data/standards/junk/legacy_dd_results.csv +0 -960
  249. data/data/standards/junk/legacy_dd_results_new - Copy.csv +0 -960
  250. data/data/standards/junk/legacy_dd_results_new.csv +0 -960
  251. data/data/standards/junk/legacy_dd_results_original.csv +0 -960
  252. data/lib/openstudio-standards/standards/necb/NECB2011/newway.json +0 -8102
@@ -0,0 +1,142 @@
1
+ {
2
+ "unitary_acs": [
3
+ {
4
+ "template": "ZE AEDG Multifamily",
5
+ "cooling_type": "AirCooled",
6
+ "heating_type": "All Other",
7
+ "subcategory": "PTAC",
8
+ "minimum_capacity": 0.0,
9
+ "maximum_capacity": 9999999.0,
10
+ "start_date": "1919-09-09T00:00:00+00:00",
11
+ "end_date": "2999-09-09T00:00:00+00:00",
12
+ "minimum_seasonal_energy_efficiency_ratio": null,
13
+ "minimum_energy_efficiency_ratio": null,
14
+ "minimum_integrated_part_load_value": null,
15
+ "minimum_integrated_energy_efficiency_ratio": null,
16
+ "ptac_eer_coefficient_1": 14.0,
17
+ "ptac_eer_coefficient_2": 0.3,
18
+ "minimum_scop": null,
19
+ "cool_cap_ft": "PSZ-Fine Storage DX Coil Cap-FT",
20
+ "cool_cap_fflow": "DX Coil Cap-FF",
21
+ "cool_eir_ft": "PSZ-AC DX Coil EIR-FT",
22
+ "cool_eir_fflow": "Split DX Coil EIR-FF",
23
+ "cool_plf_fplr": "HPACCOOLPLFFPLR",
24
+ "notes": " From 90.1-2016 Table 6.8.1-4"
25
+ },
26
+ {
27
+ "template": "ZE AEDG Multifamily",
28
+ "cooling_type": "AirCooled",
29
+ "heating_type": "All Other",
30
+ "subcategory": "Single Package",
31
+ "minimum_capacity": 0.0,
32
+ "maximum_capacity": 9999999.0,
33
+ "start_date": "1919-09-09T00:00:00+00:00",
34
+ "end_date": "2999-09-09T00:00:00+00:00",
35
+ "minimum_seasonal_energy_efficiency_ratio": null,
36
+ "minimum_energy_efficiency_ratio": 11.2,
37
+ "minimum_integrated_part_load_value": null,
38
+ "minimum_integrated_energy_efficiency_ratio": 12.9,
39
+ "ptac_eer_coefficient_1": null,
40
+ "ptac_eer_coefficient_2": null,
41
+ "minimum_scop": null,
42
+ "cool_cap_ft": "CoilClgDXQRatio_fTwbToadbSI",
43
+ "cool_cap_fflow": "CoilClgDXDblQRatio_fCFMRatio",
44
+ "cool_eir_ft": "CoilClgDXEIRRatio_fTwbToadbSI",
45
+ "cool_eir_fflow": "CoilClgDXDblEIRRatio_fCFMRatio",
46
+ "cool_plf_fplr": "CoilClgDXEIRRatio_fQFrac",
47
+ "notes": " From 90.1-2016 Table 6.8.1-4"
48
+ },
49
+ {
50
+ "template": "ZE AEDG Multifamily",
51
+ "cooling_type": "AirCooled",
52
+ "heating_type": "All Other",
53
+ "subcategory": "Split System",
54
+ "minimum_capacity": 0.0,
55
+ "maximum_capacity": 9999999.0,
56
+ "start_date": "1919-09-09T00:00:00+00:00",
57
+ "end_date": "2999-09-09T00:00:00+00:00",
58
+ "minimum_seasonal_energy_efficiency_ratio": null,
59
+ "minimum_energy_efficiency_ratio": 11.2,
60
+ "minimum_integrated_part_load_value": null,
61
+ "minimum_integrated_energy_efficiency_ratio": 12.9,
62
+ "ptac_eer_coefficient_1": null,
63
+ "ptac_eer_coefficient_2": null,
64
+ "minimum_scop": null,
65
+ "cool_cap_ft": "CoilClgDXQRatio_fTwbToadbSI",
66
+ "cool_cap_fflow": "CoilClgDXDblQRatio_fCFMRatio",
67
+ "cool_eir_ft": "CoilClgDXEIRRatio_fTwbToadbSI",
68
+ "cool_eir_fflow": "CoilClgDXDblEIRRatio_fCFMRatio",
69
+ "cool_plf_fplr": "CoilClgDXEIRRatio_fQFrac",
70
+ "notes": " From 90.1-2016 Table 6.8.1-4"
71
+ },
72
+ {
73
+ "template": "ZE AEDG Multifamily",
74
+ "cooling_type": "AirCooled",
75
+ "heating_type": "Electric Resistance or None",
76
+ "subcategory": "PTAC",
77
+ "minimum_capacity": 0.0,
78
+ "maximum_capacity": 9999999.0,
79
+ "start_date": "1919-09-09T00:00:00+00:00",
80
+ "end_date": "2999-09-09T00:00:00+00:00",
81
+ "minimum_seasonal_energy_efficiency_ratio": null,
82
+ "minimum_energy_efficiency_ratio": null,
83
+ "minimum_integrated_part_load_value": null,
84
+ "minimum_integrated_energy_efficiency_ratio": null,
85
+ "ptac_eer_coefficient_1": 14.0,
86
+ "ptac_eer_coefficient_2": 0.3,
87
+ "minimum_scop": null,
88
+ "cool_cap_ft": "PSZ-Fine Storage DX Coil Cap-FT",
89
+ "cool_cap_fflow": "DX Coil Cap-FF",
90
+ "cool_eir_ft": "PSZ-AC DX Coil EIR-FT",
91
+ "cool_eir_fflow": "Split DX Coil EIR-FF",
92
+ "cool_plf_fplr": "HPACCOOLPLFFPLR",
93
+ "notes": " From 90.1-2016 Table 6.8.1-4"
94
+ },
95
+ {
96
+ "template": "ZE AEDG Multifamily",
97
+ "cooling_type": "AirCooled",
98
+ "heating_type": "Electric Resistance or None",
99
+ "subcategory": "Single Package",
100
+ "minimum_capacity": 0.0,
101
+ "maximum_capacity": 9999999.0,
102
+ "start_date": "1919-09-09T00:00:00+00:00",
103
+ "end_date": "2999-09-09T00:00:00+00:00",
104
+ "minimum_seasonal_energy_efficiency_ratio": null,
105
+ "minimum_energy_efficiency_ratio": 11.2,
106
+ "minimum_integrated_part_load_value": null,
107
+ "minimum_integrated_energy_efficiency_ratio": 12.9,
108
+ "ptac_eer_coefficient_1": null,
109
+ "ptac_eer_coefficient_2": null,
110
+ "minimum_scop": null,
111
+ "cool_cap_ft": "CoilClgDXQRatio_fTwbToadbSI",
112
+ "cool_cap_fflow": "CoilClgDXDblQRatio_fCFMRatio",
113
+ "cool_eir_ft": "CoilClgDXEIRRatio_fTwbToadbSI",
114
+ "cool_eir_fflow": "CoilClgDXDblEIRRatio_fCFMRatio",
115
+ "cool_plf_fplr": "CoilClgDXEIRRatio_fQFrac",
116
+ "notes": " From 90.1-2016 Table 6.8.1-4"
117
+ },
118
+ {
119
+ "template": "ZE AEDG Multifamily",
120
+ "cooling_type": "AirCooled",
121
+ "heating_type": "Electric Resistance or None",
122
+ "subcategory": "Split System",
123
+ "minimum_capacity": 0.0,
124
+ "maximum_capacity": 9999999.0,
125
+ "start_date": "1919-09-09T00:00:00+00:00",
126
+ "end_date": "2999-09-09T00:00:00+00:00",
127
+ "minimum_seasonal_energy_efficiency_ratio": null,
128
+ "minimum_energy_efficiency_ratio": 11.2,
129
+ "minimum_integrated_part_load_value": null,
130
+ "minimum_integrated_energy_efficiency_ratio": 12.9,
131
+ "ptac_eer_coefficient_1": null,
132
+ "ptac_eer_coefficient_2": null,
133
+ "minimum_scop": null,
134
+ "cool_cap_ft": "CoilClgDXQRatio_fTwbToadbSI",
135
+ "cool_cap_fflow": "CoilClgDXDblQRatio_fCFMRatio",
136
+ "cool_eir_ft": "CoilClgDXEIRRatio_fTwbToadbSI",
137
+ "cool_eir_fflow": "CoilClgDXDblEIRRatio_fCFMRatio",
138
+ "cool_plf_fplr": "CoilClgDXEIRRatio_fQFrac",
139
+ "notes": " From 90.1-2016 Table 6.8.1-4"
140
+ }
141
+ ]
142
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "water_heaters": [
3
+ {
4
+ "template": "ZE AEDG Multifamily",
5
+ "fuel_type": "Electricity",
6
+ "minimum_capacity": 0.0,
7
+ "maximum_capacity": 40945.99,
8
+ "start_date": "1919-09-09T00:00:00+00:00",
9
+ "end_date": "2999-09-09T00:00:00+00:00",
10
+ "energy_factor_base": 0.97,
11
+ "energy_factor_volume_derate": "",
12
+ "standby_loss_base": null,
13
+ "standby_loss_capacity_allowance": null,
14
+ "standby_loss_volume_allowance": null,
15
+ "hourly_loss_base": null,
16
+ "hourly_loss_volume_allowance": null,
17
+ "thermal_efficiency": null,
18
+ "notes": "Code of Federal Regulations 10 CFR Part 430."
19
+ },
20
+ {
21
+ "template": "ZE AEDG Multifamily",
22
+ "fuel_type": "Electricity",
23
+ "minimum_capacity": 40946.0,
24
+ "maximum_capacity": 99999999.0,
25
+ "start_date": "1919-09-09T00:00:00+00:00",
26
+ "end_date": "2999-09-09T00:00:00+00:00",
27
+ "energy_factor_base": null,
28
+ "energy_factor_volume_derate": null,
29
+ "standby_loss_base": 20.0,
30
+ "standby_loss_capacity_allowance": null,
31
+ "standby_loss_volume_allowance": 35.0,
32
+ "hourly_loss_base": null,
33
+ "hourly_loss_volume_allowance": null,
34
+ "thermal_efficiency": null,
35
+ "notes": "From 90.1-2016 Table 7.8"
36
+ },
37
+ {
38
+ "template": "ZE AEDG Multifamily",
39
+ "fuel_type": "NaturalGas",
40
+ "minimum_capacity": 0.0,
41
+ "maximum_capacity": 74999.99,
42
+ "start_date": "1919-09-09T00:00:00+00:00",
43
+ "end_date": "2999-09-09T00:00:00+00:00",
44
+ "energy_factor_base": 0.67,
45
+ "energy_factor_volume_derate": "",
46
+ "standby_loss_base": null,
47
+ "standby_loss_capacity_allowance": null,
48
+ "standby_loss_volume_allowance": null,
49
+ "hourly_loss_base": null,
50
+ "hourly_loss_volume_allowance": null,
51
+ "thermal_efficiency": null,
52
+ "notes": "Code of Federal Regulations 10 CFR Part 430."
53
+ },
54
+ {
55
+ "template": "ZE AEDG Multifamily",
56
+ "fuel_type": "NaturalGas",
57
+ "minimum_capacity": 75000.0,
58
+ "maximum_capacity": 99999999.0,
59
+ "start_date": "1919-09-09T00:00:00+00:00",
60
+ "end_date": "2999-09-09T00:00:00+00:00",
61
+ "energy_factor_base": null,
62
+ "energy_factor_volume_derate": null,
63
+ "standby_loss_base": null,
64
+ "standby_loss_capacity_allowance": 799.0,
65
+ "standby_loss_volume_allowance": 16.6,
66
+ "hourly_loss_base": null,
67
+ "hourly_loss_volume_allowance": null,
68
+ "thermal_efficiency": 0.8,
69
+ "notes": "From 90.1-2016 Table 7.8"
70
+ }
71
+ ]
72
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "water_source_heat_pumps": [
3
+ {
4
+ "template": "ZE AEDG Multifamily",
5
+ "minimum_capacity": 0.0,
6
+ "maximum_capacity": 16999.0,
7
+ "start_date": "1919-09-09T00:00:00+00:00",
8
+ "end_date": "2999-09-09T00:00:00+00:00",
9
+ "minimum_full_load_efficiency": 18.2,
10
+ "notes": "From ZE AEDG Multifamily Committee"
11
+ },
12
+ {
13
+ "template": "ZE AEDG Multifamily",
14
+ "minimum_capacity": 17000.0,
15
+ "maximum_capacity": 64999.0,
16
+ "start_date": "1919-09-09T00:00:00+00:00",
17
+ "end_date": "2999-09-09T00:00:00+00:00",
18
+ "minimum_full_load_efficiency": 18.2,
19
+ "notes": "From ZE AEDG Multifamily Committee"
20
+ },
21
+ {
22
+ "template": "ZE AEDG Multifamily",
23
+ "minimum_capacity": 65000.0,
24
+ "maximum_capacity": 134999.0,
25
+ "start_date": "1919-09-09T00:00:00+00:00",
26
+ "end_date": "2999-09-09T00:00:00+00:00",
27
+ "minimum_full_load_efficiency": 18.2,
28
+ "notes": "From ZE AEDG Multifamily Committee"
29
+ }
30
+ ]
31
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "water_source_heat_pumps_heating": [
3
+ {
4
+ "template": "ZE AEDG Multifamily",
5
+ "minimum_capacity": 0.0,
6
+ "maximum_capacity": 9999999.0,
7
+ "start_date": "1919-09-09T00:00:00+00:00",
8
+ "end_date": "2999-09-09T00:00:00+00:00",
9
+ "minimum_coefficient_of_performance_heating": 5.4,
10
+ "notes": "From ZE AEDG Multifamily Committee"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,829 @@
1
+ class ZEAEDGMultifamily < ASHRAE901
2
+ # @!group AirLoopHVAC
3
+
4
+ # Same as 90.1-2013
5
+ # Determine the limits for the type of economizer present on the AirLoopHVAC, if any.
6
+ # @return [Array<Double>] [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
7
+ def air_loop_hvac_economizer_limits(air_loop_hvac, climate_zone)
8
+ drybulb_limit_f = nil
9
+ enthalpy_limit_btu_per_lb = nil
10
+ dewpoint_limit_f = nil
11
+
12
+ # Get the OA system and OA controller
13
+ oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
14
+ if oa_sys.is_initialized
15
+ oa_sys = oa_sys.get
16
+ else
17
+ return [nil, nil, nil] # No OA system
18
+ end
19
+ oa_control = oa_sys.getControllerOutdoorAir
20
+ economizer_type = oa_control.getEconomizerControlType
21
+ oa_control.resetEconomizerMinimumLimitDryBulbTemperature
22
+
23
+ case economizer_type
24
+ when 'NoEconomizer'
25
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} no economizer")
26
+ return [nil, nil, nil]
27
+ when 'FixedDryBulb'
28
+ case climate_zone
29
+ when 'ASHRAE 169-2006-0B',
30
+ 'ASHRAE 169-2006-1B',
31
+ 'ASHRAE 169-2006-2B',
32
+ 'ASHRAE 169-2006-3B',
33
+ 'ASHRAE 169-2006-3C',
34
+ 'ASHRAE 169-2006-4B',
35
+ 'ASHRAE 169-2006-4C',
36
+ 'ASHRAE 169-2006-5B',
37
+ 'ASHRAE 169-2006-5C',
38
+ 'ASHRAE 169-2006-6B',
39
+ 'ASHRAE 169-2006-7A',
40
+ 'ASHRAE 169-2006-7B',
41
+ 'ASHRAE 169-2006-8A',
42
+ 'ASHRAE 169-2006-8B',
43
+ 'ASHRAE 169-2013-0B',
44
+ 'ASHRAE 169-2013-1B',
45
+ 'ASHRAE 169-2013-2B',
46
+ 'ASHRAE 169-2013-3B',
47
+ 'ASHRAE 169-2013-3C',
48
+ 'ASHRAE 169-2013-4B',
49
+ 'ASHRAE 169-2013-4C',
50
+ 'ASHRAE 169-2013-5B',
51
+ 'ASHRAE 169-2013-5C',
52
+ 'ASHRAE 169-2013-6B',
53
+ 'ASHRAE 169-2013-7A',
54
+ 'ASHRAE 169-2013-7B',
55
+ 'ASHRAE 169-2013-8A',
56
+ 'ASHRAE 169-2013-8B'
57
+ drybulb_limit_f = 75.0
58
+ when 'ASHRAE 169-2006-5A',
59
+ 'ASHRAE 169-2006-6A',
60
+ 'ASHRAE 169-2013-5A',
61
+ 'ASHRAE 169-2013-6A'
62
+ drybulb_limit_f = 70.0
63
+ end
64
+ when 'FixedEnthalpy'
65
+ enthalpy_limit_btu_per_lb = 28.0
66
+ when 'FixedDewPointAndDryBulb'
67
+ drybulb_limit_f = 75.0
68
+ dewpoint_limit_f = 55.0
69
+ when 'DifferentialDryBulb', 'DifferentialEnthalpy'
70
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: Economizer type = #{economizer_type}, no limits defined.")
71
+ end
72
+
73
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: Economizer type = #{economizer_type}, limits [#{drybulb_limit_f},#{enthalpy_limit_btu_per_lb},#{dewpoint_limit_f}]")
74
+
75
+ return [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
76
+ end
77
+
78
+ # Same as 90.1-2013
79
+ # Determine if the system economizer must be integrated or not.
80
+ # All economizers must be integrated in NREL ZNE Ready 2017
81
+ def air_loop_hvac_integrated_economizer_required?(air_loop_hvac, climate_zone)
82
+ integrated_economizer_required = true
83
+ return integrated_economizer_required
84
+ end
85
+
86
+ # Same as 90.1-2013
87
+ # Check the economizer type currently specified in the ControllerOutdoorAir object on this air loop
88
+ # is acceptable per the standard.
89
+ #
90
+ # @param (see #economizer_required?)
91
+ # @return [Bool] Returns true if allowable, if the system has no economizer or no OA system.
92
+ # Returns false if the economizer type is not allowable.
93
+ def air_loop_hvac_economizer_type_allowable?(air_loop_hvac, climate_zone)
94
+ # EnergyPlus economizer types
95
+ # 'NoEconomizer'
96
+ # 'FixedDryBulb'
97
+ # 'FixedEnthalpy'
98
+ # 'DifferentialDryBulb'
99
+ # 'DifferentialEnthalpy'
100
+ # 'FixedDewPointAndDryBulb'
101
+ # 'ElectronicEnthalpy'
102
+ # 'DifferentialDryBulbAndEnthalpy'
103
+
104
+ # Get the OA system and OA controller
105
+ oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
106
+ if oa_sys.is_initialized
107
+ oa_sys = oa_sys.get
108
+ else
109
+ return true # No OA system
110
+ end
111
+ oa_control = oa_sys.getControllerOutdoorAir
112
+ economizer_type = oa_control.getEconomizerControlType
113
+
114
+ # Return true if no economizer is present
115
+ if economizer_type == 'NoEconomizer'
116
+ return true
117
+ end
118
+
119
+ # Determine the prohibited types
120
+ prohibited_types = []
121
+ case climate_zone
122
+ when 'ASHRAE 169-2006-0B',
123
+ 'ASHRAE 169-2006-1B',
124
+ 'ASHRAE 169-2006-2B',
125
+ 'ASHRAE 169-2006-3B',
126
+ 'ASHRAE 169-2006-3C',
127
+ 'ASHRAE 169-2006-4B',
128
+ 'ASHRAE 169-2006-4C',
129
+ 'ASHRAE 169-2006-5B',
130
+ 'ASHRAE 169-2006-6B',
131
+ 'ASHRAE 169-2006-7A',
132
+ 'ASHRAE 169-2006-7B',
133
+ 'ASHRAE 169-2006-8A',
134
+ 'ASHRAE 169-2006-8B',
135
+ 'ASHRAE 169-2013-0B',
136
+ 'ASHRAE 169-2013-1B',
137
+ 'ASHRAE 169-2013-2B',
138
+ 'ASHRAE 169-2013-3B',
139
+ 'ASHRAE 169-2013-3C',
140
+ 'ASHRAE 169-2013-4B',
141
+ 'ASHRAE 169-2013-4C',
142
+ 'ASHRAE 169-2013-5B',
143
+ 'ASHRAE 169-2013-6B',
144
+ 'ASHRAE 169-2013-7A',
145
+ 'ASHRAE 169-2013-7B',
146
+ 'ASHRAE 169-2013-8A',
147
+ 'ASHRAE 169-2013-8B'
148
+ prohibited_types = ['FixedEnthalpy']
149
+ when 'ASHRAE 169-2006-0A',
150
+ 'ASHRAE 169-2006-1A',
151
+ 'ASHRAE 169-2006-2A',
152
+ 'ASHRAE 169-2006-3A',
153
+ 'ASHRAE 169-2006-4A',
154
+ 'ASHRAE 169-2013-0A',
155
+ 'ASHRAE 169-2013-1A',
156
+ 'ASHRAE 169-2013-2A',
157
+ 'ASHRAE 169-2013-3A',
158
+ 'ASHRAE 169-2013-4A'
159
+ prohibited_types = ['FixedDryBulb', 'DifferentialDryBulb']
160
+ when 'ASHRAE 169-2006-5A',
161
+ 'ASHRAE 169-2006-6A',
162
+ 'ASHRAE 169-2013-5A',
163
+ 'ASHRAE 169-2013-6A'
164
+ prohibited_types = []
165
+ end
166
+
167
+ # Check if the specified type is allowed
168
+ economizer_type_allowed = true
169
+ if prohibited_types.include?(economizer_type)
170
+ economizer_type_allowed = false
171
+ end
172
+
173
+ return economizer_type_allowed
174
+ end
175
+
176
+ # Same as 90.1-2013
177
+ # Determine if multizone vav optimization is required.
178
+ #
179
+ # @param (see #economizer_required?)
180
+ # @return [Bool] Returns true if required, false if not.
181
+ # @todo Add exception logic for
182
+ # systems with AIA healthcare ventilation requirements
183
+ # dual duct systems
184
+ def air_loop_hvac_multizone_vav_optimization_required?(air_loop_hvac, climate_zone)
185
+ multizone_opt_required = false
186
+
187
+ # Not required for systems with fan-powered terminals
188
+ num_fan_powered_terminals = 0
189
+ air_loop_hvac.demandComponents.each do |comp|
190
+ if comp.to_AirTerminalSingleDuctParallelPIUReheat.is_initialized || comp.to_AirTerminalSingleDuctSeriesPIUReheat.is_initialized
191
+ num_fan_powered_terminals += 1
192
+ end
193
+ end
194
+ if num_fan_powered_terminals > 0
195
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, multizone vav optimization is not required because the system has #{num_fan_powered_terminals} fan-powered terminals.")
196
+ return multizone_opt_required
197
+ end
198
+
199
+ # Not required for systems that require an ERV
200
+ if air_loop_hvac_energy_recovery?(air_loop_hvac)
201
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: multizone vav optimization is not required because the system has Energy Recovery.")
202
+ return multizone_opt_required
203
+ end
204
+
205
+ # Get the OA intake
206
+ controller_oa = nil
207
+ controller_mv = nil
208
+ oa_system = nil
209
+ if air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
210
+ oa_system = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
211
+ controller_oa = oa_system.getControllerOutdoorAir
212
+ controller_mv = controller_oa.controllerMechanicalVentilation
213
+ else
214
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, multizone optimization is not applicable because system has no OA intake.")
215
+ return multizone_opt_required
216
+ end
217
+
218
+ # Get the AHU design supply air flow rate
219
+ dsn_flow_m3_per_s = nil
220
+ if air_loop_hvac.designSupplyAirFlowRate.is_initialized
221
+ dsn_flow_m3_per_s = air_loop_hvac.designSupplyAirFlowRate.get
222
+ elsif air_loop_hvac.autosizedDesignSupplyAirFlowRate.is_initialized
223
+ dsn_flow_m3_per_s = air_loop_hvac.autosizedDesignSupplyAirFlowRate.get
224
+ else
225
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} design supply air flow rate is not available, cannot apply efficiency standard.")
226
+ return multizone_opt_required
227
+ end
228
+ dsn_flow_cfm = OpenStudio.convert(dsn_flow_m3_per_s, 'm^3/s', 'cfm').get
229
+
230
+ # Get the minimum OA flow rate
231
+ min_oa_flow_m3_per_s = nil
232
+ if controller_oa.minimumOutdoorAirFlowRate.is_initialized
233
+ min_oa_flow_m3_per_s = controller_oa.minimumOutdoorAirFlowRate.get
234
+ elsif controller_oa.autosizedMinimumOutdoorAirFlowRate.is_initialized
235
+ min_oa_flow_m3_per_s = controller_oa.autosizedMinimumOutdoorAirFlowRate.get
236
+ else
237
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{controller_oa.name}: minimum OA flow rate is not available, cannot apply efficiency standard.")
238
+ return multizone_opt_required
239
+ end
240
+ min_oa_flow_cfm = OpenStudio.convert(min_oa_flow_m3_per_s, 'm^3/s', 'cfm').get
241
+
242
+ # Calculate the percent OA at design airflow
243
+ pct_oa = min_oa_flow_m3_per_s / dsn_flow_m3_per_s
244
+
245
+ # Not required for systems where
246
+ # exhaust is more than 70% of the total OA intake.
247
+ if pct_oa > 0.7
248
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{controller_oa.name}: multizone optimization is not applicable because system is more than 70% OA.")
249
+ return multizone_opt_required
250
+ end
251
+
252
+ # TODO: Not required for dual-duct systems
253
+ # if self.isDualDuct
254
+ # OpenStudio::logFree(OpenStudio::Info, "openstudio.standards.AirLoopHVAC", "For #{controller_oa.name}: multizone optimization is not applicable because it is a dual duct system")
255
+ # return multizone_opt_required
256
+ # end
257
+
258
+ # If here, multizone vav optimization is required
259
+ multizone_opt_required = true
260
+
261
+ return multizone_opt_required
262
+ end
263
+
264
+ # Determines the OA flow rates above which an economizer is required.
265
+ # Two separate rates, one for systems with an economizer and another
266
+ # for systems without.
267
+ # are zero for both types.
268
+ # @return [Array<Double>] [min_oa_without_economizer_cfm, min_oa_with_economizer_cfm]
269
+ def air_loop_hvac_demand_control_ventilation_limits(air_loop_hvac)
270
+ min_oa_without_economizer_cfm = 1500.0 # half the 90.1-2013 requirement
271
+ min_oa_with_economizer_cfm = 375.0 # half the 90.1-2013 requirement
272
+ return [min_oa_without_economizer_cfm, min_oa_with_economizer_cfm]
273
+ end
274
+
275
+ # Determine if the standard has an exception for demand control ventilation when an energy recovery device is present.
276
+ # DCV and an ERV may be used in conjunction.
277
+ def air_loop_hvac_dcv_required_when_erv(air_loop_hvac)
278
+ dcv_required_when_erv_present = true
279
+ return dcv_required_when_erv_present
280
+ end
281
+
282
+ # Same as 90.1-2013
283
+ # Determine the air flow and number of story limits for whether motorized OA damper is required.
284
+ # @return [Array<Double>] [minimum_oa_flow_cfm, maximum_stories]
285
+ def air_loop_hvac_motorized_oa_damper_limits(air_loop_hvac, climate_zone)
286
+ case climate_zone
287
+ when 'ASHRAE 169-2006-0A',
288
+ 'ASHRAE 169-2006-0B',
289
+ 'ASHRAE 169-2006-1A',
290
+ 'ASHRAE 169-2006-1B',
291
+ 'ASHRAE 169-2006-2A',
292
+ 'ASHRAE 169-2006-2B',
293
+ 'ASHRAE 169-2006-3A',
294
+ 'ASHRAE 169-2006-3B',
295
+ 'ASHRAE 169-2006-3C',
296
+ 'ASHRAE 169-2013-0A',
297
+ 'ASHRAE 169-2013-0B',
298
+ 'ASHRAE 169-2013-1A',
299
+ 'ASHRAE 169-2013-1B',
300
+ 'ASHRAE 169-2013-2A',
301
+ 'ASHRAE 169-2013-2B',
302
+ 'ASHRAE 169-2013-3A',
303
+ 'ASHRAE 169-2013-3B',
304
+ 'ASHRAE 169-2013-3C'
305
+ minimum_oa_flow_cfm = 0
306
+ maximum_stories = 999 # Any number of stories
307
+ else
308
+ minimum_oa_flow_cfm = 0
309
+ maximum_stories = 0
310
+ end
311
+
312
+ return [minimum_oa_flow_cfm, maximum_stories]
313
+ end
314
+
315
+ # Same as 90.1-2013
316
+ # Determine the number of stages that should be used as controls for single zone DX systems.
317
+ # 90.1-2013 depends on the cooling capacity of the system.
318
+ #
319
+ # @return [Integer] the number of stages: 0, 1, 2
320
+ def air_loop_hvac_single_zone_controls_num_stages(air_loop_hvac, climate_zone)
321
+ min_clg_cap_btu_per_hr = 65_000
322
+ clg_cap_btu_per_hr = OpenStudio.convert(air_loop_hvac_total_cooling_capacity(air_loop_hvac), 'W', 'Btu/hr').get
323
+ if clg_cap_btu_per_hr >= min_clg_cap_btu_per_hr
324
+ num_stages = 2
325
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: two-stage control is required since cooling capacity of #{clg_cap_btu_per_hr.round} Btu/hr exceeds the minimum of #{min_clg_cap_btu_per_hr.round} Btu/hr .")
326
+ else
327
+ num_stages = 1
328
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: two-stage control is not required since cooling capacity of #{clg_cap_btu_per_hr.round} Btu/hr is less than the minimum of #{min_clg_cap_btu_per_hr.round} Btu/hr .")
329
+ end
330
+
331
+ return num_stages
332
+ end
333
+
334
+ # Same as 90.1-2013
335
+ # Determine if the system required supply air temperature (SAT) reset.
336
+ # For 90.1-2013, SAT reset requirements are based on climate zone.
337
+ #
338
+ # @param (see #economizer_required?)
339
+ # @return [Bool] Returns true if required, false if not.
340
+ def air_loop_hvac_supply_air_temperature_reset_required?(air_loop_hvac, climate_zone)
341
+ is_sat_reset_required = false
342
+
343
+ # Only required for multizone VAV systems
344
+ unless air_loop_hvac_multizone_vav_system?(air_loop_hvac)
345
+ return is_sat_reset_required
346
+ end
347
+
348
+ case climate_zone
349
+ when 'ASHRAE 169-2006-0A',
350
+ 'ASHRAE 169-2006-1A',
351
+ 'ASHRAE 169-2006-2A',
352
+ 'ASHRAE 169-2006-3A',
353
+ 'ASHRAE 169-2013-0A',
354
+ 'ASHRAE 169-2013-1A',
355
+ 'ASHRAE 169-2013-2A',
356
+ 'ASHRAE 169-2013-3A'
357
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: Supply air temperature reset is not required per 6.5.3.4 Exception 1, the system is located in climate zone #{climate_zone}.")
358
+ return is_sat_reset_required
359
+ when 'ASHRAE 169-2006-0B',
360
+ 'ASHRAE 169-2006-1B',
361
+ 'ASHRAE 169-2006-2B',
362
+ 'ASHRAE 169-2006-3B',
363
+ 'ASHRAE 169-2006-3C',
364
+ 'ASHRAE 169-2006-4A',
365
+ 'ASHRAE 169-2006-4B',
366
+ 'ASHRAE 169-2006-4C',
367
+ 'ASHRAE 169-2006-5A',
368
+ 'ASHRAE 169-2006-5B',
369
+ 'ASHRAE 169-2006-5C',
370
+ 'ASHRAE 169-2006-6A',
371
+ 'ASHRAE 169-2006-6B',
372
+ 'ASHRAE 169-2006-7A',
373
+ 'ASHRAE 169-2006-7B',
374
+ 'ASHRAE 169-2006-8A',
375
+ 'ASHRAE 169-2006-8B',
376
+ 'ASHRAE 169-2013-0B',
377
+ 'ASHRAE 169-2013-1B',
378
+ 'ASHRAE 169-2013-2B',
379
+ 'ASHRAE 169-2013-3B',
380
+ 'ASHRAE 169-2013-3C',
381
+ 'ASHRAE 169-2013-4A',
382
+ 'ASHRAE 169-2013-4B',
383
+ 'ASHRAE 169-2013-4C',
384
+ 'ASHRAE 169-2013-5A',
385
+ 'ASHRAE 169-2013-5B',
386
+ 'ASHRAE 169-2013-5C',
387
+ 'ASHRAE 169-2013-6A',
388
+ 'ASHRAE 169-2013-6B',
389
+ 'ASHRAE 169-2013-7A',
390
+ 'ASHRAE 169-2013-7B',
391
+ 'ASHRAE 169-2013-8A',
392
+ 'ASHRAE 169-2013-8B'
393
+ is_sat_reset_required = true
394
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: Supply air temperature reset is required.")
395
+ return is_sat_reset_required
396
+ end
397
+ end
398
+
399
+ # Default occupancy fraction threshold for determining if the spaces on the air loop are occupied
400
+ def air_loop_hvac_unoccupied_threshold
401
+ return 0.05
402
+ end
403
+
404
+ # Same as Standards method but with no DCV exception
405
+ # Check if ERV is required on this airloop.
406
+ #
407
+ # @return [Bool] Returns true if required, false if not.
408
+ def air_loop_hvac_energy_recovery_ventilator_required?(air_loop_hvac, climate_zone)
409
+
410
+ if air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
411
+ oa_system = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
412
+ controller_oa = oa_system.getControllerOutdoorAir
413
+ controller_mv = controller_oa.controllerMechanicalVentilation
414
+ else
415
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV not applicable because it has no OA intake.")
416
+ return false
417
+ end
418
+
419
+ # Get the AHU design supply air flow rate
420
+ dsn_flow_m3_per_s = nil
421
+ if air_loop_hvac.designSupplyAirFlowRate.is_initialized
422
+ dsn_flow_m3_per_s = air_loop_hvac.designSupplyAirFlowRate.get
423
+ elsif air_loop_hvac.autosizedDesignSupplyAirFlowRate.is_initialized
424
+ dsn_flow_m3_per_s = air_loop_hvac.autosizedDesignSupplyAirFlowRate.get
425
+ else
426
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} design supply air flow rate is not available, cannot apply efficiency standard.")
427
+ return false
428
+ end
429
+ dsn_flow_cfm = OpenStudio.convert(dsn_flow_m3_per_s, 'm^3/s', 'cfm').get
430
+
431
+ # Get the minimum OA flow rate
432
+ min_oa_flow_m3_per_s = nil
433
+ if controller_oa.minimumOutdoorAirFlowRate.is_initialized
434
+ min_oa_flow_m3_per_s = controller_oa.minimumOutdoorAirFlowRate.get
435
+ elsif controller_oa.autosizedMinimumOutdoorAirFlowRate.is_initialized
436
+ min_oa_flow_m3_per_s = controller_oa.autosizedMinimumOutdoorAirFlowRate.get
437
+ else
438
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{controller_oa.name}: minimum OA flow rate is not available, cannot apply efficiency standard.")
439
+ return false
440
+ end
441
+ min_oa_flow_cfm = OpenStudio.convert(min_oa_flow_m3_per_s, 'm^3/s', 'cfm').get
442
+
443
+ # Calculate the percent OA at design airflow
444
+ pct_oa = min_oa_flow_m3_per_s / dsn_flow_m3_per_s
445
+
446
+ # Determine the airflow limit
447
+ erv_cfm = air_loop_hvac_energy_recovery_ventilator_flow_limit(air_loop_hvac, climate_zone, pct_oa)
448
+
449
+ # Determine if an ERV is required
450
+ if erv_cfm.nil?
451
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV not required based on #{(pct_oa * 100).round}% OA flow, design supply air flow of #{dsn_flow_cfm.round}cfm, and climate zone #{climate_zone}.")
452
+ erv_required = false
453
+ elsif dsn_flow_cfm < erv_cfm
454
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV not required based on #{(pct_oa * 100).round}% OA flow, design supply air flow of #{dsn_flow_cfm.round}cfm, and climate zone #{climate_zone}. Does not exceed minimum flow requirement of #{erv_cfm}cfm.")
455
+ erv_required = false
456
+ else
457
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV required based on #{(pct_oa * 100).round}% OA flow, design supply air flow of #{dsn_flow_cfm.round}cfm, and climate zone #{climate_zone}. Exceeds minimum flow requirement of #{erv_cfm}cfm.")
458
+ erv_required = true
459
+ end
460
+
461
+ return erv_required
462
+ end
463
+
464
+ # Same as 90.1-2016
465
+ # Determine the airflow limits that govern whether or not an ERV is required.
466
+ # Based on climate zone and % OA, plus the number of operating hours the system has.
467
+ # @return [Double] the flow rate above which an ERV is required.
468
+ # if nil, ERV is never required.
469
+ def air_loop_hvac_energy_recovery_ventilator_flow_limit(air_loop_hvac, climate_zone, pct_oa)
470
+ # Calculate the number of system operating hours
471
+ # based on the availability schedule.
472
+ ann_op_hrs = 0.0
473
+ avail_sch = air_loop_hvac.availabilitySchedule
474
+ if avail_sch == air_loop_hvac.model.alwaysOnDiscreteSchedule
475
+ ann_op_hrs = 8760.0
476
+ elsif avail_sch.to_ScheduleRuleset.is_initialized
477
+ avail_sch = avail_sch.to_ScheduleRuleset.get
478
+ ann_op_hrs = schedule_ruleset_annual_hours_above_value(avail_sch, 0.0)
479
+ else
480
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: could not determine annual operating hours. Assuming less than 8,000 for ERV determination.")
481
+ end
482
+
483
+ if ann_op_hrs < 8000.0
484
+ # Table 6.5.6.1-1, less than 8000 hrs
485
+ case climate_zone
486
+ when 'ASHRAE 169-2006-3B',
487
+ 'ASHRAE 169-2006-3C',
488
+ 'ASHRAE 169-2006-4B',
489
+ 'ASHRAE 169-2006-4C',
490
+ 'ASHRAE 169-2006-5B',
491
+ 'ASHRAE 169-2013-3B',
492
+ 'ASHRAE 169-2013-3C',
493
+ 'ASHRAE 169-2013-4B',
494
+ 'ASHRAE 169-2013-4C',
495
+ 'ASHRAE 169-2013-5B'
496
+ if pct_oa < 0.1
497
+ erv_cfm = nil
498
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
499
+ erv_cfm = nil
500
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
501
+ erv_cfm = nil
502
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
503
+ erv_cfm = nil
504
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
505
+ erv_cfm = nil
506
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
507
+ erv_cfm = nil
508
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
509
+ erv_cfm = nil
510
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
511
+ erv_cfm = nil
512
+ elsif pct_oa >= 0.8
513
+ erv_cfm = nil
514
+ end
515
+ when 'ASHRAE 169-2006-0B',
516
+ 'ASHRAE 169-2006-1B',
517
+ 'ASHRAE 169-2006-2B',
518
+ 'ASHRAE 169-2006-5C',
519
+ 'ASHRAE 169-2013-0B',
520
+ 'ASHRAE 169-2013-1B',
521
+ 'ASHRAE 169-2013-2B',
522
+ 'ASHRAE 169-2013-5C'
523
+ if pct_oa < 0.1
524
+ erv_cfm = nil
525
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
526
+ erv_cfm = nil
527
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
528
+ erv_cfm = nil
529
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
530
+ erv_cfm = nil
531
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
532
+ erv_cfm = nil
533
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
534
+ erv_cfm = 26_000
535
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
536
+ erv_cfm = 12_000
537
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
538
+ erv_cfm = 5000
539
+ elsif pct_oa >= 0.8
540
+ erv_cfm = 4000
541
+ end
542
+ when 'ASHRAE 169-2006-6B',
543
+ 'ASHRAE 169-2013-6B'
544
+ if pct_oa < 0.1
545
+ erv_cfm = nil
546
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
547
+ erv_cfm = 28_000
548
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
549
+ erv_cfm = 26_500
550
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
551
+ erv_cfm = 11_000
552
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
553
+ erv_cfm = 5500
554
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
555
+ erv_cfm = 4500
556
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
557
+ erv_cfm = 3500
558
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
559
+ erv_cfm = 2500
560
+ elsif pct_oa >= 0.8
561
+ erv_cfm = 1500
562
+ end
563
+ when 'ASHRAE 169-2006-0A',
564
+ 'ASHRAE 169-2006-1A',
565
+ 'ASHRAE 169-2006-2A',
566
+ 'ASHRAE 169-2006-3A',
567
+ 'ASHRAE 169-2006-4A',
568
+ 'ASHRAE 169-2006-5A',
569
+ 'ASHRAE 169-2006-6A',
570
+ 'ASHRAE 169-2013-0A',
571
+ 'ASHRAE 169-2006-1A',
572
+ 'ASHRAE 169-2013-2A',
573
+ 'ASHRAE 169-2013-3A',
574
+ 'ASHRAE 169-2013-4A',
575
+ 'ASHRAE 169-2013-5A',
576
+ 'ASHRAE 169-2013-6A'
577
+ if pct_oa < 0.1
578
+ erv_cfm = nil
579
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
580
+ erv_cfm = 26_000
581
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
582
+ erv_cfm = 16_000
583
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
584
+ erv_cfm = 5500
585
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
586
+ erv_cfm = 4500
587
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
588
+ erv_cfm = 3500
589
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
590
+ erv_cfm = 2000
591
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
592
+ erv_cfm = 1000
593
+ elsif pct_oa >= 0.8
594
+ erv_cfm = 120
595
+ end
596
+ when 'ASHRAE 169-2006-7A',
597
+ 'ASHRAE 169-2006-7B',
598
+ 'ASHRAE 169-2006-8A',
599
+ 'ASHRAE 169-2006-8B',
600
+ 'ASHRAE 169-2013-7A',
601
+ 'ASHRAE 169-2013-7B',
602
+ 'ASHRAE 169-2013-8A',
603
+ 'ASHRAE 169-2013-8B'
604
+ if pct_oa < 0.1
605
+ erv_cfm = nil
606
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
607
+ erv_cfm = 4500
608
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
609
+ erv_cfm = 4000
610
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
611
+ erv_cfm = 2500
612
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
613
+ erv_cfm = 1000
614
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
615
+ erv_cfm = 140
616
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
617
+ erv_cfm = 120
618
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
619
+ erv_cfm = 100
620
+ elsif pct_oa >= 0.8
621
+ erv_cfm = 80
622
+ end
623
+ end
624
+ else
625
+ # Table 6.5.6.1-2, above 8000 hrs
626
+ case climate_zone
627
+ when 'ASHRAE 169-2006-3C',
628
+ 'ASHRAE 169-2013-3C'
629
+ erv_cfm = nil
630
+ when 'ASHRAE 169-2006-0B',
631
+ 'ASHRAE 169-2006-1B',
632
+ 'ASHRAE 169-2006-2B',
633
+ 'ASHRAE 169-2006-3B',
634
+ 'ASHRAE 169-2006-4C',
635
+ 'ASHRAE 169-2006-5C',
636
+ 'ASHRAE 169-2013-0B',
637
+ 'ASHRAE 169-2013-1B',
638
+ 'ASHRAE 169-2013-2B',
639
+ 'ASHRAE 169-2013-3B',
640
+ 'ASHRAE 169-2013-4C',
641
+ 'ASHRAE 169-2013-5C'
642
+ if pct_oa < 0.1
643
+ erv_cfm = nil
644
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
645
+ erv_cfm = nil
646
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
647
+ erv_cfm = 19_500
648
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
649
+ erv_cfm = 9000
650
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
651
+ erv_cfm = 5000
652
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
653
+ erv_cfm = 4000
654
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
655
+ erv_cfm = 3000
656
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
657
+ erv_cfm = 1500
658
+ elsif pct_oa >= 0.8
659
+ erv_cfm = 120
660
+ end
661
+ when 'ASHRAE 169-2006-0A',
662
+ 'ASHRAE 169-2006-1A',
663
+ 'ASHRAE 169-2006-2A',
664
+ 'ASHRAE 169-2006-3A',
665
+ 'ASHRAE 169-2006-4B',
666
+ 'ASHRAE 169-2006-5B',
667
+ 'ASHRAE 169-2013-0A',
668
+ 'ASHRAE 169-2013-1A',
669
+ 'ASHRAE 169-2013-2A',
670
+ 'ASHRAE 169-2013-3A',
671
+ 'ASHRAE 169-2013-4B',
672
+ 'ASHRAE 169-2013-5B'
673
+ if pct_oa < 0.1
674
+ erv_cfm = nil
675
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
676
+ erv_cfm = 2500
677
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
678
+ erv_cfm = 2000
679
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
680
+ erv_cfm = 1000
681
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
682
+ erv_cfm = 500
683
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
684
+ erv_cfm = 140
685
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
686
+ erv_cfm = 120
687
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
688
+ erv_cfm = 100
689
+ elsif pct_oa >= 0.8
690
+ erv_cfm = 80
691
+ end
692
+ when 'ASHRAE 169-2006-4A',
693
+ 'ASHRAE 169-2006-5A',
694
+ 'ASHRAE 169-2006-6A',
695
+ 'ASHRAE 169-2006-6B',
696
+ 'ASHRAE 169-2006-7A',
697
+ 'ASHRAE 169-2006-7B',
698
+ 'ASHRAE 169-2006-8A',
699
+ 'ASHRAE 169-2006-8B',
700
+ 'ASHRAE 169-2013-4A',
701
+ 'ASHRAE 169-2013-5A',
702
+ 'ASHRAE 169-2013-6A',
703
+ 'ASHRAE 169-2013-6B',
704
+ 'ASHRAE 169-2013-7A',
705
+ 'ASHRAE 169-2013-7B',
706
+ 'ASHRAE 169-2013-8A',
707
+ 'ASHRAE 169-2013-8B'
708
+ if pct_oa < 0.1
709
+ erv_cfm = nil
710
+ elsif pct_oa >= 0.1 && pct_oa < 0.2
711
+ erv_cfm = 200
712
+ elsif pct_oa >= 0.2 && pct_oa < 0.3
713
+ erv_cfm = 130
714
+ elsif pct_oa >= 0.3 && pct_oa < 0.4
715
+ erv_cfm = 100
716
+ elsif pct_oa >= 0.4 && pct_oa < 0.5
717
+ erv_cfm = 80
718
+ elsif pct_oa >= 0.5 && pct_oa < 0.6
719
+ erv_cfm = 70
720
+ elsif pct_oa >= 0.6 && pct_oa < 0.7
721
+ erv_cfm = 60
722
+ elsif pct_oa >= 0.7 && pct_oa < 0.8
723
+ erv_cfm = 50
724
+ elsif pct_oa >= 0.8
725
+ erv_cfm = 40
726
+ end
727
+ end
728
+ end
729
+
730
+ return erv_cfm
731
+ end
732
+
733
+ # Determine whether to apply an Energy Recovery Ventilator 'ERV' or a Heat Recovery Ventilator 'HRV' depending on the climate zone
734
+ # Defaults to ERV.
735
+ # @return [String] the ERV type
736
+ def air_loop_hvac_energy_recovery_ventilator_type(air_loop_hvac, climate_zone)
737
+ erv_type = 'ERV'
738
+ return erv_type
739
+ end
740
+
741
+ # Determine whether to use a Plate-Frame or Rotary Wheel style ERV depending on air loop outdoor air flow rate
742
+ # Defaults to Rotary.
743
+ # @return [String] the ERV type
744
+ def air_loop_hvac_energy_recovery_ventilator_heat_exchanger_type(air_loop_hvac)
745
+ # Get the OA system
746
+ if air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
747
+ oa_system = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
748
+ controller_oa = oa_system.getControllerOutdoorAir
749
+ else
750
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.nrel_zne_ready_2017.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV type not applicable because it has no OA intake.")
751
+ return false
752
+ end
753
+
754
+ # Get the minimum OA flow rate
755
+ if controller_oa.maximumOutdoorAirFlowRate.is_initialized
756
+ max_oa_flow_m3_per_s = controller_oa.maximumOutdoorAirFlowRate.get
757
+ elsif controller_oa.autosizedMaximumOutdoorAirFlowRate.is_initialized
758
+ max_oa_flow_m3_per_s = controller_oa.autosizedMaximumOutdoorAirFlowRate.get
759
+ else
760
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.nrel_zne_ready_2017.AirLoopHVAC', "For #{controller_oa.name}: maximum OA flow rate is not available, cannot determine ERV type.")
761
+ return false
762
+ end
763
+ max_oa_flow_cfm = OpenStudio.convert(max_oa_flow_m3_per_s, 'm^3/s', 'cfm').get
764
+
765
+ # Use a 500 cfm threshold
766
+ if max_oa_flow_cfm < 500.0
767
+ heat_exchanger_type = 'Plate'
768
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.nrel_zne_ready_2017.AirLoopHVAC', "For #{air_loop_hvac.name}, maximum outdoor air flow rate is less than 500 cfm, assuming a plate and frame heat exchanger.")
769
+ else
770
+ heat_exchanger_type = 'Rotary'
771
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.nrel_zne_ready_2017.AirLoopHVAC', "For #{air_loop_hvac.name}, maximum outdoor air flow rate is greater than 500 cfm, assuming a rotary wheel heat exchanger.")
772
+ end
773
+
774
+ return heat_exchanger_type
775
+ end
776
+
777
+ # Apply efficiency values to the erv
778
+ #
779
+ # @param erv [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
780
+ # @param erv_type [String] erv type ERV or HRV
781
+ # @param heat_exchanger_type [String] heat exchanger type Rotary or Plate
782
+ # @return erv [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
783
+ def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ERV', heat_exchanger_type: 'Rotary')
784
+ if heat_exchanger_type == 'Plate'
785
+ # based on Zehnder ComfoAir
786
+ if erv_type == 'HRV'
787
+ erv.setSensibleEffectivenessat100HeatingAirFlow(0.865)
788
+ erv.setLatentEffectivenessat100HeatingAirFlow(0.0)
789
+ erv.setSensibleEffectivenessat75HeatingAirFlow(0.887)
790
+ erv.setLatentEffectivenessat75HeatingAirFlow(0.0)
791
+ erv.setSensibleEffectivenessat100CoolingAirFlow(0.865)
792
+ erv.setLatentEffectivenessat100CoolingAirFlow(0.0)
793
+ erv.setSensibleEffectivenessat75CoolingAirFlow(0.887)
794
+ erv.setLatentEffectivenessat75CoolingAirFlow(0.0)
795
+ else
796
+ erv.setSensibleEffectivenessat100HeatingAirFlow(0.755)
797
+ erv.setLatentEffectivenessat100HeatingAirFlow(0.564)
798
+ erv.setSensibleEffectivenessat75HeatingAirFlow(0.791)
799
+ erv.setLatentEffectivenessat75HeatingAirFlow(0.625)
800
+ erv.setSensibleEffectivenessat100CoolingAirFlow(0.755)
801
+ erv.setLatentEffectivenessat100CoolingAirFlow(0.564)
802
+ erv.setSensibleEffectivenessat75CoolingAirFlow(0.791)
803
+ erv.setLatentEffectivenessat75CoolingAirFlow(0.625)
804
+ end
805
+ else
806
+ if erv_type == 'HRV'
807
+ erv.setSensibleEffectivenessat100HeatingAirFlow(0.75)
808
+ erv.setLatentEffectivenessat100HeatingAirFlow(0.0)
809
+ erv.setSensibleEffectivenessat75HeatingAirFlow(0.79)
810
+ erv.setLatentEffectivenessat75HeatingAirFlow(0.0)
811
+ erv.setSensibleEffectivenessat100CoolingAirFlow(0.75)
812
+ erv.setLatentEffectivenessat100CoolingAirFlow(0.0)
813
+ erv.setSensibleEffectivenessat75CoolingAirFlow(0.78)
814
+ erv.setLatentEffectivenessat75CoolingAirFlow(0.0)
815
+ else
816
+ erv.setSensibleEffectivenessat100HeatingAirFlow(0.75)
817
+ erv.setLatentEffectivenessat100HeatingAirFlow(0.74)
818
+ erv.setSensibleEffectivenessat75HeatingAirFlow(0.79)
819
+ erv.setLatentEffectivenessat75HeatingAirFlow(0.79)
820
+ erv.setSensibleEffectivenessat100CoolingAirFlow(0.75)
821
+ erv.setLatentEffectivenessat100CoolingAirFlow(0.74)
822
+ erv.setSensibleEffectivenessat75CoolingAirFlow(0.78)
823
+ erv.setLatentEffectivenessat75CoolingAirFlow(0.78)
824
+ end
825
+ end
826
+
827
+ return erv
828
+ end
829
+ end