openstudio-standards 0.2.10 → 0.2.11.rc1

Sign up to get free protection for your applications and to get access to all the features.
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