openstudio-standards 0.2.14 → 0.2.15.pre.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 (642) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.json +0 -19
  3. data/data/geometry/ASHRAEMidriseApartment.json +47 -47
  4. data/data/geometry/ASHRAESecondarySchool.osm +2 -2
  5. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  6. data/data/standards/export_OpenStudio_libraries.rb +1 -1
  7. data/data/standards/manage_OpenStudio_Standards.rb +43 -87
  8. data/data/standards/metadata_units_OpenStudio_Standards-ashrae_90_1.csv +9 -0
  9. data/data/standards/openstudio_standards_duplicates_log.csv +142 -27
  10. data/data/standards/test_performance_expected_dd_results.csv +2016 -2016
  11. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.ddy +2316 -0
  12. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.epw +8768 -0
  13. data/data/weather/CAN_NU_Iqaluit.AP.719090_CWEC2016.stat +697 -0
  14. data/lib/openstudio-standards/btap/WeatherData1.json +54 -0
  15. data/lib/openstudio-standards/btap/WeatherData1.xlsx +0 -0
  16. data/lib/openstudio-standards/btap/btap_result.rb +12 -10
  17. data/lib/openstudio-standards/btap/envelope.rb +2 -2
  18. data/lib/openstudio-standards/btap/geometry.rb +96 -49
  19. data/lib/openstudio-standards/{utilities → btap/utilities}/Add_template_field_to_json.rb +0 -0
  20. data/lib/openstudio-standards/{utilities → btap/utilities}/convert_surfaces_to_adiabatic_necb_8426.rb +0 -0
  21. data/lib/openstudio-standards/{utilities → btap/utilities}/generate_space_types.rb +0 -0
  22. data/lib/openstudio-standards/{utilities → btap/utilities}/necb_to_epw_map.rb +0 -0
  23. data/lib/openstudio-standards/{utilities → btap/utilities}/os_sim_extract.rb +0 -0
  24. data/lib/openstudio-standards/{utilities → btap/utilities}/rename_surfaces.rb +0 -0
  25. data/lib/openstudio-standards/{utilities → btap/utilities}/round_surf_coords.rb +0 -0
  26. data/lib/openstudio-standards/{utilities → btap/utilities}/sched_create.rb +0 -0
  27. data/lib/openstudio-standards/{utilities → btap/utilities}/set_mult_to_adiabatic.rb +0 -0
  28. data/lib/openstudio-standards/btap/utilities/space_type.rb +78 -0
  29. data/lib/openstudio-standards/{utilities → btap/utilities}/weatherData1_xlsx_to_json.rb +0 -0
  30. data/lib/openstudio-standards/hvac_sizing/Siz.AirConditionerVariableRefrigerantFlow.rb +1 -1
  31. data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +1 -1
  32. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +20 -6
  33. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +6 -6
  34. data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +2 -2
  35. data/lib/openstudio-standards/hvac_sizing/Siz.ZoneHVACTerminalUnitVariableRefrigerantFlow.rb +1 -1
  36. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
  37. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +6 -7
  38. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +2 -1
  39. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanConstantVolume.rb +5 -4
  40. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanOnOff.rb +5 -5
  41. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +5 -4
  42. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +6 -7
  43. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +2 -1
  44. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanConstantVolume.rb +5 -4
  45. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanOnOff.rb +5 -5
  46. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +5 -4
  47. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.elevators.rb +6 -4
  48. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +10 -9
  49. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +9 -11
  50. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +2 -1
  51. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanConstantVolume.rb +5 -4
  52. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanOnOff.rb +5 -5
  53. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +5 -4
  54. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.elevators.rb +11 -7
  55. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +17 -16
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +9 -11
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +4 -2
  58. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +2 -1
  59. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanConstantVolume.rb +5 -4
  60. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanOnOff.rb +5 -5
  61. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +5 -4
  62. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.elevators.rb +11 -7
  63. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +23 -22
  64. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +9 -10
  65. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +4 -2
  66. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +2 -1
  67. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanConstantVolume.rb +5 -4
  68. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanOnOff.rb +5 -5
  69. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +5 -4
  70. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.elevators.rb +11 -7
  71. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +23 -22
  72. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +89 -0
  73. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +9 -10
  74. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +76 -0
  75. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +22 -2
  76. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +2 -1
  77. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +11 -11
  78. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +5 -4
  79. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +2 -1
  80. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +5 -4
  81. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +11 -11
  82. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +5 -4
  83. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +2 -1
  84. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanConstantVolume.rb +5 -4
  85. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanOnOff.rb +5 -5
  86. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +5 -4
  87. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
  88. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.elevators.rb +11 -7
  89. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +10 -10
  90. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.hvac_systems.rb +4 -2
  91. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +2 -1
  92. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +5 -4
  93. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +5 -5
  94. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +5 -4
  95. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +2 -0
  96. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +11 -7
  97. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +10 -10
  98. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +4 -2
  99. data/lib/openstudio-standards/prototypes/cbes/cbes.Model.elevators.rb +3 -6
  100. data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +5 -4
  101. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanConstantVolume.rb +5 -3
  102. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanOnOff.rb +5 -4
  103. data/lib/openstudio-standards/prototypes/cbes/cbes_t24_2008/cbes_t24_2008.FanVariableVolume.rb +5 -3
  104. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +65 -30
  105. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +54 -23
  106. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +135 -147
  107. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +42 -7
  108. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +85 -12
  109. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +42 -30
  110. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +39 -8
  111. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +39 -8
  112. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +60 -12
  113. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +33 -265
  114. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +41 -3
  115. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +69 -297
  116. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +68 -25
  117. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +88 -59
  118. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +88 -9
  119. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +48 -10
  120. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +130 -145
  121. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +29 -101
  122. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +24 -7
  123. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +48 -589
  124. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +38 -7
  125. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +38 -8
  126. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +40 -7
  127. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +85 -171
  128. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +87 -44
  129. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +46 -5
  130. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +105 -17
  131. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +97 -15
  132. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +26 -167
  133. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3828 -1131
  134. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +3 -0
  135. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +2 -1
  136. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +2 -0
  137. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +2 -0
  138. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +4 -1
  139. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +3 -0
  140. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +4 -1
  141. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +3 -0
  142. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +9 -0
  143. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +3 -0
  144. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +9 -4
  145. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +4 -1
  146. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +3 -0
  147. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +2 -2
  148. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +4 -1
  149. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +23 -2
  150. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +29 -4
  151. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +29 -5
  152. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +43 -4
  153. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +22 -0
  154. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +46 -3
  155. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.elevators.rb +27 -22
  156. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +15 -8
  157. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +22 -4
  158. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +429 -59
  159. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +18 -11
  160. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +11 -2
  161. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +1 -0
  162. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +8 -10
  163. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +37 -28
  164. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +24 -6
  165. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -65
  166. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +1 -1
  167. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +46 -31
  168. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +62 -10
  169. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +76 -33
  170. data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
  171. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +445 -275
  172. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
  173. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +26 -21
  174. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +5 -2
  175. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +7 -9
  176. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +8 -2
  177. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +10 -6
  178. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +5 -1
  179. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +6 -1
  180. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +45 -4
  181. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +18 -8
  182. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +9 -7
  183. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +8 -4
  184. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +86 -3
  185. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +5 -2
  186. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +6 -2
  187. data/lib/openstudio-standards/standards/Standards.Construction.rb +66 -35
  188. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +7 -7
  189. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +2 -2
  190. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +2 -1
  191. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +2 -1
  192. data/lib/openstudio-standards/standards/Standards.Fan.rb +53 -35
  193. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +22 -16
  194. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +2 -2
  195. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +4 -4
  196. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +77 -19
  197. data/lib/openstudio-standards/standards/Standards.Model.rb +387 -245
  198. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +13 -15
  199. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -48
  200. data/lib/openstudio-standards/standards/Standards.Pump.rb +28 -20
  201. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +3 -4
  202. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +2 -1
  203. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -0
  204. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +34 -24
  205. data/lib/openstudio-standards/standards/Standards.Space.rb +179 -116
  206. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +23 -12
  207. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +55 -25
  208. data/lib/openstudio-standards/standards/Standards.Surface.rb +57 -32
  209. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +157 -107
  210. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +9 -6
  211. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +52 -1
  212. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.Standards.FanVariableVolume.rb +2 -2
  213. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1.rb +4 -0
  214. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +28 -18
  215. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.FanVariableVolume.rb +1 -1
  216. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -2
  217. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.rb +4 -0
  218. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/comstock_ashrae_90_1_2004.rb +4 -0
  219. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +696 -2938
  220. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +1 -1
  221. 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 +123 -123
  222. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.furnaces.json +26 -0
  223. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +11 -11
  224. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -8
  225. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +395 -384
  226. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +69 -0
  227. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirLoopHVAC.rb +20 -13
  228. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.FanVariableVolume.rb +1 -1
  229. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Model.rb +1 -1
  230. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.rb +4 -0
  231. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/comstock_ashrae_90_1_2007.rb +4 -0
  232. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +696 -2938
  233. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +1 -1
  234. 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 +122 -122
  235. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.furnaces.json +26 -0
  236. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +11 -11
  237. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -8
  238. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +413 -401
  239. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +69 -0
  240. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +42 -53
  241. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +3 -2
  242. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.CoolingTower.rb +5 -8
  243. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.FanVariableVolume.rb +1 -1
  244. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +6 -4
  245. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.rb +4 -0
  246. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/comstock_ashrae_90_1_2010.rb +4 -0
  247. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +696 -2938
  248. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +1 -1
  249. 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 +129 -129
  250. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +210 -42
  251. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.furnaces.json +26 -0
  252. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +11 -11
  253. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -8
  254. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +460 -320
  255. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +69 -0
  256. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +45 -51
  257. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +3 -2
  258. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTower.rb +5 -8
  259. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +2 -3
  260. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.FanVariableVolume.rb +2 -2
  261. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -5
  262. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ThermalZone.rb +2 -1
  263. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
  264. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ZoneHVACComponent.rb +1 -0
  265. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.rb +4 -0
  266. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/comstock_ashrae_90_1_2013.rb +4 -0
  267. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +696 -2938
  268. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +1 -1
  269. 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 +121 -121
  270. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +420 -84
  271. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.furnaces.json +26 -0
  272. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +12 -12
  273. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -8
  274. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +475 -335
  275. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +69 -0
  276. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +40 -50
  277. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +3 -2
  278. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTower.rb +5 -8
  279. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +2 -3
  280. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.FanVariableVolume.rb +2 -2
  281. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +8 -5
  282. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ThermalZone.rb +2 -1
  283. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -0
  284. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.rb +4 -0
  285. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/comstock_ashrae_90_1_2016.rb +4 -0
  286. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +696 -2938
  287. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ext_ltg.json +1 -1
  288. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +152 -128
  289. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +488 -84
  290. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.furnaces.json +26 -0
  291. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +47 -47
  292. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +69 -0
  293. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +342 -56
  294. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +3 -2
  295. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTower.rb +5 -8
  296. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +2 -3
  297. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.FanVariableVolume.rb +2 -2
  298. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +25 -5
  299. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ThermalZone.rb +2 -1
  300. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +30 -0
  301. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.rb +4 -0
  302. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/comstock_ashrae_90_1_2019.rb +4 -0
  303. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +696 -2938
  304. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ext_ltg.json +1 -1
  305. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +151 -127
  306. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +1 -1
  307. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2307 -101
  308. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.furnaces.json +26 -0
  309. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.refrigeration_compressors.json +1 -1
  310. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +47 -47
  311. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +69 -0
  312. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +25 -0
  313. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +286 -224
  314. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/comstock_doe_ref_1980_2004.rb +4 -0
  315. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +696 -2938
  316. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +1 -1
  317. 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 +126 -126
  318. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.furnaces.json +26 -0
  319. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.prototype_inputs.json +11 -11
  320. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.refrigeration_system.json +0 -8
  321. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +405 -393
  322. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +15 -11
  323. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +1 -1
  324. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop.rb +3 -0
  325. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.rb +4 -0
  326. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/comstock_doe_ref_pre_1980.rb +4 -0
  327. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +696 -2938
  328. 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 +121 -121
  329. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.furnaces.json +37 -0
  330. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.prototype_inputs.json +11 -11
  331. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.refrigeration_system.json +0 -8
  332. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +403 -391
  333. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +15 -11
  334. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +1 -1
  335. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb +3 -0
  336. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.rb +4 -0
  337. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.furnaces.json +15 -0
  338. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +64 -42
  339. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +3 -2
  340. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTower.rb +5 -8
  341. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +2 -3
  342. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.FanVariableVolume.rb +2 -2
  343. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +1 -1
  344. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +1 -1
  345. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +4 -1
  346. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +5 -3
  347. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +3 -0
  348. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.rb +4 -0
  349. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.furnaces.json +15 -0
  350. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +61 -36
  351. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +3 -2
  352. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +5 -8
  353. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +2 -3
  354. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +2 -2
  355. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +1 -1
  356. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +1 -1
  357. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +4 -1
  358. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +6 -4
  359. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +3 -0
  360. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +4 -0
  361. data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +20 -14
  362. data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +3 -0
  363. data/lib/openstudio-standards/standards/cbes/cbes.rb +4 -0
  364. data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/cbes_pre_1978.rb +4 -0
  365. data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/cbes_t24_1978.rb +4 -0
  366. data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/cbes_t24_1992.rb +4 -0
  367. data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/cbes_t24_2001.rb +4 -0
  368. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.rb +4 -0
  369. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.rb +4 -0
  370. data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +10 -5
  371. data/lib/openstudio-standards/standards/deer/deer.PlanarSurface.rb +1 -1
  372. data/lib/openstudio-standards/standards/deer/deer.rb +4 -0
  373. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/comstock_deer_1985.rb +4 -0
  374. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +2 -2
  375. data/lib/openstudio-standards/standards/deer/deer_1985/deer_1985.rb +4 -0
  376. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/comstock_deer_1996.rb +4 -0
  377. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +2 -2
  378. data/lib/openstudio-standards/standards/deer/deer_1996/deer_1996.rb +4 -0
  379. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/comstock_deer_2003.rb +4 -0
  380. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +2 -2
  381. data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.rb +4 -0
  382. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/comstock_deer_2007.rb +4 -0
  383. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +2 -2
  384. data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.rb +4 -0
  385. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/comstock_deer_2011.rb +4 -0
  386. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +2 -2
  387. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.rb +4 -0
  388. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/comstock_deer_2014.rb +4 -0
  389. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +2 -2
  390. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +5 -3
  391. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.rb +4 -0
  392. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/comstock_deer_2015.rb +4 -0
  393. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +2 -2
  394. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +5 -3
  395. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.rb +4 -0
  396. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/comstock_deer_2017.rb +4 -0
  397. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +2 -2
  398. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +5 -3
  399. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.rb +4 -0
  400. data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/comstock_deer_2020.rb +4 -0
  401. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +9 -5
  402. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +3 -0
  403. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +5 -3
  404. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.rb +4 -0
  405. data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/comstock_deer_2025.rb +4 -0
  406. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +9 -5
  407. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +3 -0
  408. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +5 -3
  409. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.rb +4 -0
  410. data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/comstock_deer_2030.rb +4 -0
  411. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +9 -5
  412. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +3 -0
  413. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +5 -3
  414. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.rb +4 -0
  415. data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/comstock_deer_2035.rb +4 -0
  416. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +9 -5
  417. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +3 -0
  418. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +5 -3
  419. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.rb +4 -0
  420. data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/comstock_deer_2040.rb +4 -0
  421. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +9 -5
  422. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +3 -0
  423. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +5 -3
  424. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.rb +4 -0
  425. data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/comstock_deer_2045.rb +4 -0
  426. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +9 -5
  427. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +3 -0
  428. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +5 -3
  429. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.rb +4 -0
  430. data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/comstock_deer_2050.rb +4 -0
  431. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +9 -5
  432. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +3 -0
  433. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +5 -3
  434. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.rb +4 -0
  435. data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/comstock_deer_2055.rb +4 -0
  436. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +9 -5
  437. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +3 -0
  438. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +5 -3
  439. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.rb +4 -0
  440. data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/comstock_deer_2060.rb +4 -0
  441. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +9 -5
  442. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +3 -0
  443. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +5 -3
  444. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.rb +4 -0
  445. data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/comstock_deer_2065.rb +4 -0
  446. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +9 -5
  447. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +3 -0
  448. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +5 -3
  449. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.rb +4 -0
  450. data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/comstock_deer_2070.rb +4 -0
  451. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +9 -5
  452. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +3 -0
  453. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +5 -3
  454. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.rb +4 -0
  455. data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/comstock_deer_2075.rb +4 -0
  456. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +9 -5
  457. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +3 -0
  458. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +5 -3
  459. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.rb +4 -0
  460. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/comstock_deer_pre_1975.rb +4 -0
  461. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +2 -2
  462. data/lib/openstudio-standards/standards/deer/deer_pre_1975/deer_pre_1975.rb +4 -0
  463. data/lib/openstudio-standards/standards/icc_iecc/icc_iecc_2015/icc_iecc_2015.rb +4 -0
  464. data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/btap_1980to2010.rb +6 -28
  465. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +25 -110
  466. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +45 -60
  467. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +19 -23
  468. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +84 -83
  469. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +52 -47
  470. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +43 -40
  471. data/lib/openstudio-standards/standards/necb/ECMS/data/boiler_set.json +18 -0
  472. data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_set.json +211 -0
  473. data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +1195 -20
  474. data/lib/openstudio-standards/standards/necb/ECMS/data/furnace_set.json +18 -0
  475. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +244 -182
  476. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +232 -185
  477. data/lib/openstudio-standards/standards/necb/ECMS/data/shw_set.json +20 -2
  478. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +18 -25
  479. data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +12 -13
  480. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +1647 -466
  481. data/lib/openstudio-standards/standards/necb/ECMS/loads.rb +93 -0
  482. data/lib/openstudio-standards/standards/necb/ECMS/nv.rb +40 -47
  483. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +26 -25
  484. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +303 -305
  485. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +45 -45
  486. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +90 -120
  487. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Hospital.osm +1176 -1115
  488. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LowriseApartment.osm +8279 -28923
  489. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +1173 -1173
  490. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +15 -13
  491. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +32 -29
  492. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +25 -26
  493. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +14 -14
  494. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +24 -29
  495. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +85 -84
  496. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +41 -42
  497. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +209 -197
  498. data/lib/openstudio-standards/standards/necb/NECB2011/lighting.rb +87 -82
  499. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +510 -406
  500. data/lib/openstudio-standards/standards/necb/NECB2011/nv.md +3 -3
  501. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +686 -683
  502. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +129 -82
  503. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +1608 -1608
  504. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +25 -18
  505. data/lib/openstudio-standards/standards/necb/NECB2015/lighting.rb +73 -67
  506. data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +18 -22
  507. data/lib/openstudio-standards/standards/necb/NECB2015/qaqc/necb_2015_qaqc.rb +59 -63
  508. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +1608 -1608
  509. data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -4
  510. data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +10 -14
  511. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +779 -0
  512. data/lib/openstudio-standards/standards/necb/NECB2020/data/boilers.json +122 -0
  513. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +335 -0
  514. data/lib/openstudio-standards/standards/necb/NECB2020/data/constants.json +13 -0
  515. data/lib/openstudio-standards/standards/necb/NECB2020/data/furnaces.json +41 -0
  516. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps.json +452 -0
  517. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +164 -0
  518. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_rejection.json +228 -0
  519. data/lib/openstudio-standards/standards/necb/NECB2020/data/led_lighting_data.json +2883 -0
  520. data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +25851 -0
  521. data/lib/openstudio-standards/standards/necb/NECB2020/data/surface_thermal_transmittance.json +60 -0
  522. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +585 -0
  523. data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +175 -0
  524. data/lib/openstudio-standards/standards/necb/common/bc_step_code_indicators.md +10 -0
  525. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +1963 -0
  526. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +410 -0
  527. data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +42 -0
  528. data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +28705 -0
  529. data/lib/openstudio-standards/standards/necb/common/phius.md +23 -0
  530. data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +1158 -386
  531. data/lib/openstudio-standards/standards/oeesc/oeesc_2014/oeesc_2014.rb +4 -0
  532. data/lib/openstudio-standards/standards/standard.rb +2 -1
  533. data/lib/openstudio-standards/utilities/define_thermal_zone_and_mulitpliers.rb +1 -1
  534. data/lib/openstudio-standards/utilities/logging.rb +6 -0
  535. data/lib/openstudio-standards/utilities/simulation.rb +30 -14
  536. data/lib/openstudio-standards/utilities/{speacetype_map_converter.rb → spacetype_map_converter.rb} +0 -0
  537. data/lib/openstudio-standards/utilities/sqlfile.rb +112 -71
  538. data/lib/openstudio-standards/version.rb +2 -2
  539. data/lib/openstudio-standards/weather/Weather.Model.rb +209 -9
  540. data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
  541. data/lib/openstudio-standards.rb +9 -0
  542. metadata +106 -205
  543. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  544. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +0 -49
  545. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.chillers.json +0 -293
  546. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +0 -25426
  547. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_sets.json +0 -1600
  548. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +0 -564
  549. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.elevators.json +0 -349
  550. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +0 -164
  551. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +0 -10663
  552. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps.json +0 -508
  553. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +0 -156
  554. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_rejection.json +0 -44
  555. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +0 -184
  556. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.prototype_inputs.json +0 -3094
  557. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_cases.json +0 -829
  558. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ref_lnup.json +0 -562
  559. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_compressors.json +0 -52
  560. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_condenser.json +0 -220
  561. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_system.json +0 -156
  562. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.refrigeration_walkins.json +0 -1316
  563. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +0 -21446
  564. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +0 -554
  565. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_heaters.json +0 -68
  566. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps.json +0 -28
  567. data/data/standards/export/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.water_source_heat_pumps_heating.json +0 -12
  568. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +0 -49
  569. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.chillers.json +0 -293
  570. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +0 -12487
  571. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_sets.json +0 -1600
  572. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +0 -564
  573. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.elevators.json +0 -349
  574. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +0 -164
  575. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +0 -10663
  576. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps.json +0 -466
  577. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +0 -137
  578. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_rejection.json +0 -44
  579. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +0 -184
  580. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.prototype_inputs.json +0 -3094
  581. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_cases.json +0 -829
  582. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ref_lnup.json +0 -562
  583. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_compressors.json +0 -52
  584. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_condenser.json +0 -220
  585. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_system.json +0 -156
  586. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.refrigeration_walkins.json +0 -1316
  587. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +0 -21380
  588. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +0 -554
  589. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_heaters.json +0 -68
  590. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps.json +0 -28
  591. data/data/standards/export/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.water_source_heat_pumps_heating.json +0 -12
  592. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +0 -49
  593. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.chillers.json +0 -395
  594. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +0 -12487
  595. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_sets.json +0 -1600
  596. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +0 -592
  597. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.elevators.json +0 -349
  598. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +0 -550
  599. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +0 -164
  600. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +0 -10663
  601. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps.json +0 -466
  602. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +0 -137
  603. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_rejection.json +0 -44
  604. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +0 -238
  605. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.prototype_inputs.json +0 -3094
  606. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_cases.json +0 -829
  607. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ref_lnup.json +0 -562
  608. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_compressors.json +0 -52
  609. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_condenser.json +0 -220
  610. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_system.json +0 -156
  611. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.refrigeration_walkins.json +0 -1316
  612. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +0 -21548
  613. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +0 -554
  614. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_heaters.json +0 -68
  615. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps.json +0 -28
  616. data/data/standards/export/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.water_source_heat_pumps_heating.json +0 -12
  617. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +0 -64
  618. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.chillers.json +0 -871
  619. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +0 -12487
  620. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_sets.json +0 -1600
  621. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +0 -592
  622. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.elevators.json +0 -349
  623. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +0 -1096
  624. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +0 -164
  625. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +0 -10663
  626. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps.json +0 -886
  627. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +0 -194
  628. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_rejection.json +0 -44
  629. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +0 -247
  630. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.prototype_inputs.json +0 -3094
  631. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_cases.json +0 -829
  632. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ref_lnup.json +0 -562
  633. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_compressors.json +0 -52
  634. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_condenser.json +0 -220
  635. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_system.json +0 -156
  636. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.refrigeration_walkins.json +0 -1316
  637. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +0 -22079
  638. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +0 -994
  639. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_heaters.json +0 -68
  640. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps.json +0 -28
  641. data/data/standards/export/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.water_source_heat_pumps_heating.json +0 -12
  642. data/lib/openstudio-standards/utilities/convert_costing_constructions.rb +0 -105
@@ -1,12 +1,11 @@
1
1
  class Standard
2
2
  # @!group AirLoopHVAC
3
3
 
4
- # Apply multizone vav outdoor air method and
5
- # adjust multizone VAV damper positions
6
- # to achieve a system minimum ventilation effectiveness
7
- # of 0.6 per PNNL. Hard-size the resulting min OA
8
- # into the sizing:system object.
4
+ # Apply multizone vav outdoor air method and adjust multizone VAV damper positions
5
+ # to achieve a system minimum ventilation effectiveness of 0.6 per PNNL.
6
+ # Hard-size the resulting min OA into the sizing:system object.
9
7
  #
8
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
10
9
  # return [Bool] returns true if successful, false if not
11
10
  # @todo move building-type-specific code to Prototype classes
12
11
  def air_loop_hvac_apply_multizone_vav_outdoor_air_sizing(air_loop_hvac)
@@ -14,7 +13,7 @@ class Standard
14
13
  # Only applies to multi-zone vav systems
15
14
  # exclusion: for Outpatient: (1) both AHU1 and AHU2 in 'DOE Ref Pre-1980' and 'DOE Ref 1980-2004'
16
15
  # (2) AHU1 in 2004-2019
17
- # TODO refactor: move building-type-specific code to Prototype classes
16
+ # @todo refactor: move building-type-specific code to Prototype classes
18
17
  if air_loop_hvac_multizone_vav_system?(air_loop_hvac) && !(air_loop_hvac.name.to_s.include? 'Outpatient F1')
19
18
  air_loop_hvac_adjust_minimum_vav_damper_positions(air_loop_hvac)
20
19
  end
@@ -24,7 +23,8 @@ class Standard
24
23
 
25
24
  # Apply all standard required controls to the airloop
26
25
  #
27
- # @param (see #economizer_required?)
26
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
27
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
28
28
  # @return [Bool] returns true if successful, false if not
29
29
  # @todo optimum start
30
30
  # @todo night damper shutoff
@@ -56,8 +56,11 @@ class Standard
56
56
  air_loop_hvac_apply_vav_damper_action(air_loop_hvac)
57
57
 
58
58
  # Multizone VAV Optimization
59
- # This rule does not apply to two hospital and one outpatient systems (TODO add hospital two systems as exception)
60
- unless air_loop_hvac.name.to_s.include? 'Outpatient F1'
59
+ # This rule does not apply to two hospital and one outpatient systems
60
+ unless (@instvarbuilding_type == 'Hospital' && (air_loop_hvac.name.to_s.include?('VAV_ER') || air_loop_hvac.name.to_s.include?('VAV_ICU') ||
61
+ air_loop_hvac.name.to_s.include?('VAV_OR') || air_loop_hvac.name.to_s.include?('VAV_LABS') ||
62
+ air_loop_hvac.name.to_s.include?('VAV_PATRMS'))) ||
63
+ (@instvarbuilding_type == 'Outpatient' && air_loop_hvac.name.to_s.include?('Outpatient F1'))
61
64
  if air_loop_hvac_multizone_vav_optimization_required?(air_loop_hvac, climate_zone)
62
65
  air_loop_hvac_enable_multizone_vav_optimization(air_loop_hvac)
63
66
  else
@@ -160,14 +163,32 @@ class Standard
160
163
  end
161
164
  air_loop_hvac_apply_single_zone_controls(air_loop_hvac, climate_zone)
162
165
  end
166
+
167
+ # Standby mode occupancy control
168
+ unless air_loop_hvac.thermalZones.empty?
169
+ thermal_zones = air_loop_hvac.thermalZones
170
+
171
+ standby_mode_spaces = []
172
+ thermal_zones.sort.each do |thermal_zone|
173
+ thermal_zone.spaces.sort.each do |space|
174
+ if space_occupancy_standby_mode_required?(space)
175
+ standby_mode_spaces << space
176
+ end
177
+ end
178
+ end
179
+
180
+ if !standby_mode_spaces.empty?
181
+ air_loop_hvac_standby_mode_occupancy_control(air_loop_hvac, standby_mode_spaces)
182
+ end
183
+ end
163
184
  end
164
185
 
165
186
  # Apply all PRM baseline required controls to the airloop.
166
- # Only applies those controls that differ from the normal
167
- # prescriptive controls, which are added via
168
- # air_loop_hvac_apply_standard_controls(AirLoopHVAC)
187
+ # Only applies those controls that differ from the normal prescriptive controls,
188
+ # which are added via air_loop_hvac_apply_standard_controls(air_loop_hvac, climate_zone)
169
189
  #
170
- # @param (see #economizer_required?)
190
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
191
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
171
192
  # @return [Bool] returns true if successful, false if not
172
193
  def air_loop_hvac_apply_prm_baseline_controls(air_loop_hvac, climate_zone)
173
194
  # Economizers
@@ -201,9 +222,10 @@ class Standard
201
222
  end
202
223
 
203
224
  # Determines if optimum start control is required.
204
- # Defaults to 90.1-2004 logic, which requires
205
- # optimum start if > 10,000 cfm
225
+ # Defaults to 90.1-2004 logic, which requires optimum start if > 10,000 cfm
206
226
  #
227
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
228
+ # @return [Bool] returns true if required, false if not
207
229
  def air_loop_hvac_optimum_start_required?(air_loop_hvac)
208
230
  opt_start_required = false
209
231
 
@@ -237,6 +259,8 @@ class Standard
237
259
 
238
260
  # Adds optimum start control to the airloop.
239
261
  #
262
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
263
+ # @return [Bool] returns true if successful, false if not
240
264
  def air_loop_hvac_enable_optimum_start(air_loop_hvac)
241
265
  # Get the heating and cooling setpoint schedules
242
266
  # for all zones on this airloop.
@@ -325,17 +349,15 @@ class Standard
325
349
  return true
326
350
  end
327
351
 
328
- # Calculate and apply the performance rating method
329
- # baseline fan power to this air loop.
330
- # Fan motor efficiency will be set, and then
331
- # fan pressure rise adjusted so that the
352
+ # Calculate and apply the performance rating method baseline fan power to this air loop.
353
+ # Fan motor efficiency will be set, and then fan pressure rise adjusted so that the
332
354
  # fan power is the maximum allowable.
333
- # Also adjusts the fan power and flow rates
334
- # of any parallel PIU terminals on the system.
335
- #
355
+ # Also adjusts the fan power and flow rates of any parallel PIU terminals on the system.
336
356
  # @todo Figure out how to split fan power between multiple fans
337
- # if the proposed model had multiple fans (supply, return, exhaust, etc.)
338
- # return [Bool] true if successful, false if not.
357
+ # if the proposed model had multiple fans (supply, return, exhaust, etc.)
358
+ #
359
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
360
+ # return [Bool] true if successful, false if not
339
361
  def air_loop_hvac_apply_prm_baseline_fan_power(air_loop_hvac)
340
362
  # Main AHU fans
341
363
 
@@ -375,8 +397,8 @@ class Standard
375
397
  # Determine the fan power limitation pressure drop adjustment
376
398
  # Per Table 6.5.3.1.1B
377
399
  #
378
- # @return [Double] fan power limitation pressure drop adjustment
379
- # units = horsepower
400
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
401
+ # @return [Double] fan power limitation pressure drop adjustment, in units of horsepower
380
402
  # @todo Determine the presence of MERV filters and other stuff in Table 6.5.3.1.1B. May need to extend AirLoopHVAC data model
381
403
  def air_loop_hvac_fan_power_limitation_pressure_drop_adjustment_brake_horsepower(air_loop_hvac)
382
404
  # Get design supply air flow rate (whether autosized or hard-sized)
@@ -392,12 +414,12 @@ class Standard
392
414
  OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirLoopHVAC', "* #{dsn_air_flow_cfm.round} cfm = Hard sized Design Supply Air Flow Rate.")
393
415
  end
394
416
 
395
- # TODO: determine the presence of MERV filters and other stuff
417
+ # @todo determine the presence of MERV filters and other stuff
396
418
  # in Table 6.5.3.1.1B
397
419
  # perhaps need to extend AirLoopHVAC data model
398
420
  has_fully_ducted_return_and_or_exhaust_air_systems = false
399
- has_MERV_9_through_12 = false
400
- has_MERV_13_through_15 = false
421
+ has_merv_9_through_12 = false
422
+ has_merv_13_through_15 = false
401
423
 
402
424
  # Calculate Fan Power Limitation Pressure Drop Adjustment (in wc)
403
425
  fan_pwr_adjustment_in_wc = 0
@@ -410,14 +432,14 @@ class Standard
410
432
  end
411
433
 
412
434
  # MERV 9 through 12
413
- if has_MERV_9_through_12
435
+ if has_merv_9_through_12
414
436
  adj_in_wc = 0.5
415
437
  fan_pwr_adjustment_in_wc += adj_in_wc
416
438
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "--Added #{adj_in_wc} in wc for Particulate Filtration Credit: MERV 9 through 12")
417
439
  end
418
440
 
419
441
  # MERV 13 through 15
420
- if has_MERV_13_through_15
442
+ if has_merv_13_through_15
421
443
  adj_in_wc = 0.9
422
444
  fan_pwr_adjustment_in_wc += adj_in_wc
423
445
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "--Added #{adj_in_wc} in wc for Particulate Filtration Credit: MERV 13 through 15")
@@ -434,8 +456,8 @@ class Standard
434
456
  # Determine the allowable fan system brake horsepower
435
457
  # Per Table 6.5.3.1.1A
436
458
  #
437
- # @return [Double] allowable fan system brake horsepower
438
- # units = horsepower
459
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
460
+ # @return [Double] allowable fan system brake horsepower, in units of horsepower
439
461
  def air_loop_hvac_allowable_system_brake_horsepower(air_loop_hvac)
440
462
  # Get design supply air flow rate (whether autosized or hard-sized)
441
463
  dsn_air_flow_m3_per_s = 0
@@ -532,6 +554,7 @@ class Standard
532
554
 
533
555
  # Get all of the supply, return, exhaust, and relief fans on this system
534
556
  #
557
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
535
558
  # @return [Array] an array of FanConstantVolume, FanVariableVolume, and FanOnOff objects
536
559
  def air_loop_hvac_supply_return_exhaust_relief_fans(air_loop_hvac)
537
560
  # Fans on the supply side of the airloop directly, or inside of unitary equipment.
@@ -571,11 +594,11 @@ class Standard
571
594
  # Determine the total brake horsepower of the fans on the system
572
595
  # with or without the fans inside of fan powered terminals.
573
596
  #
597
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
574
598
  # @param include_terminal_fans [Bool] if true, power from fan powered terminals will be included
575
- # @return [Double] total brake horsepower of the fans on the system
576
- # units = horsepower
599
+ # @return [Double] total brake horsepower of the fans on the system, in units of horsepower
577
600
  def air_loop_hvac_system_fan_brake_horsepower(air_loop_hvac, include_terminal_fans = true)
578
- # TODO: get the template from the parent model itself?
601
+ # @todo get the template from the parent model itself?
579
602
  # Or not because maybe you want to see the difference between two standards?
580
603
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "#{air_loop_hvac.name}-Determining #{template} allowable system fan power.")
581
604
 
@@ -614,6 +637,8 @@ class Standard
614
637
  # Set the fan pressure rises that will result in
615
638
  # the system hitting the baseline allowable fan power
616
639
  #
640
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
641
+ # @return [Bool] returns true if successful, false if not
617
642
  def air_loop_hvac_apply_baseline_fan_pressure_rise(air_loop_hvac)
618
643
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "#{air_loop_hvac.name}-Setting #{template} baseline fan power.")
619
644
 
@@ -632,12 +657,12 @@ class Standard
632
657
  # Get all fans
633
658
  fans = air_loop_hvac_supply_return_exhaust_relief_fans(air_loop_hvac)
634
659
 
635
- # TODO: improve description
660
+ # @todo improve description
636
661
  # Loop through the fans, changing the pressure rise
637
662
  # until the fan bhp is the same percentage of the baseline allowable bhp
638
663
  # as it was on the proposed system.
639
664
  fans.each do |fan|
640
- # TODO: Yixing Check the model of the Fan Coil Unit
665
+ # @todo Yixing Check the model of the Fan Coil Unit
641
666
  next if fan.name.to_s.include?('Fan Coil fan')
642
667
  next if fan.name.to_s.include?('UnitHeater Fan')
643
668
 
@@ -690,15 +715,16 @@ class Standard
690
715
 
691
716
  # Calculate the total bhp of the system to make sure it matches the goal
692
717
  calc_sys_bhp = air_loop_hvac_system_fan_brake_horsepower(air_loop_hvac, false)
693
- if ((calc_sys_bhp - allowable_fan_bhp) / allowable_fan_bhp).abs > 0.02
694
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.AirLoopHVAC', "#{air_loop_hvac.name} baseline system bhp supposed to be #{allowable_fan_bhp}, but is #{calc_sys_bhp}.")
695
- end
718
+ return true unless ((calc_sys_bhp - allowable_fan_bhp) / allowable_fan_bhp).abs > 0.02
719
+
720
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.AirLoopHVAC', "#{air_loop_hvac.name} baseline system bhp supposed to be #{allowable_fan_bhp}, but is #{calc_sys_bhp}.")
721
+ return false
696
722
  end
697
723
 
698
724
  # Get the total cooling capacity for the air loop
699
725
  #
700
- # @return [Double] total cooling capacity
701
- # units = Watts (W)
726
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
727
+ # @return [Double] total cooling capacity in watts
702
728
  # @todo Change to pull water coil nominal capacity instead of design load; not a huge difference, but water coil nominal capacity not available in sizing table.
703
729
  # @todo Handle all additional cooling coil types. Currently only handles CoilCoolingDXSingleSpeed, CoilCoolingDXTwoSpeed, and CoilCoolingWater
704
730
  def air_loop_hvac_total_cooling_capacity(air_loop_hvac)
@@ -716,7 +742,6 @@ class Standard
716
742
  else
717
743
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
718
744
  end
719
- # CoilCoolingDXTwoSpeed
720
745
  elsif sc.to_CoilCoolingDXTwoSpeed.is_initialized
721
746
  coil = sc.to_CoilCoolingDXTwoSpeed.get
722
747
  if coil.ratedHighSpeedTotalCoolingCapacity.is_initialized
@@ -729,7 +754,8 @@ class Standard
729
754
  # CoilCoolingWater
730
755
  elsif sc.to_CoilCoolingWater.is_initialized
731
756
  coil = sc.to_CoilCoolingWater.get
732
- if coil.autosizedDesignCoilLoad.is_initialized # TODO: Change to pull water coil nominal capacity instead of design load
757
+ if coil.autosizedDesignCoilLoad.is_initialized
758
+ # @todo Change to pull water coil nominal capacity instead of design load
733
759
  total_cooling_capacity_w += coil.autosizedDesignCoilLoad.get
734
760
  else
735
761
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
@@ -771,7 +797,8 @@ class Standard
771
797
  # CoilCoolingWater
772
798
  elsif clg_coil.to_CoilCoolingWater.is_initialized
773
799
  coil = clg_coil.to_CoilCoolingWater.get
774
- if coil.autosizedDesignCoilLoad.is_initialized # TODO: Change to pull water coil nominal capacity instead of design load
800
+ if coil.autosizedDesignCoilLoad.is_initialized
801
+ # @todo Change to pull water coil nominal capacity instead of design load
775
802
  total_cooling_capacity_w += coil.autosizedDesignCoilLoad.get
776
803
  else
777
804
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
@@ -814,7 +841,8 @@ class Standard
814
841
  # CoilCoolingWater
815
842
  elsif clg_coil.to_CoilCoolingWater.is_initialized
816
843
  coil = clg_coil.to_CoilCoolingWater.get
817
- if coil.autosizedDesignCoilLoad.is_initialized # TODO: Change to pull water coil nominal capacity instead of design load
844
+ if coil.autosizedDesignCoilLoad.is_initialized
845
+ # @todo Change to pull water coil nominal capacity instead of design load
818
846
  total_cooling_capacity_w += coil.autosizedDesignCoilLoad.get
819
847
  else
820
848
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
@@ -828,6 +856,36 @@ class Standard
828
856
  coil = clg_coil.to_CoilCoolingDXMultiSpeed.get
829
857
  total_cooling_capacity_w = coil_cooling_dx_multi_speed_find_capacity(coil)
830
858
  end
859
+ elsif sc.to_CoilCoolingDXVariableSpeed.is_initialized
860
+ coil = sc.to_CoilCoolingDXVariableSpeed.get
861
+ if coil.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.is_initialized
862
+ # autosized capacity needs to be corrected for actual flow rate and fan power
863
+ sys_fans = []
864
+ air_loop_hvac.supplyComponents.each do |comp|
865
+ if comp.to_FanConstantVolume.is_initialized
866
+ sys_fans << comp.to_FanConstantVolume.get
867
+ elsif comp.to_FanVariableVolume.is_initialized
868
+ sys_fans << comp.to_FanVariableVolume.get
869
+ end
870
+ end
871
+ max_pd = 0.0
872
+ supply_fan = nil
873
+ sys_fans.each do |fan|
874
+ if fan.pressureRise.to_f > max_pd
875
+ max_pd = fan.pressureRise.to_f
876
+ supply_fan = fan # assume supply fan has higher pressure drop
877
+ end
878
+ end
879
+ fan_power = supply_fan.autosizedMaximumFlowRate.to_f * supply_fan.pressureRise.to_f / supply_fan.fanTotalEfficiency.to_f
880
+ nominal_cooling_capacity_w = coil.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.to_f
881
+ nominal_flow_rate_factor = supply_fan.autosizedMaximumFlowRate.to_f / coil.autosizedRatedAirFlowRateAtSelectedNominalSpeedLevel.to_f
882
+ fan_power_adjustment_w = fan_power / coil.speeds.last.referenceUnitGrossRatedSensibleHeatRatio.to_f
883
+ total_cooling_capacity_w += nominal_cooling_capacity_w * nominal_flow_rate_factor + fan_power_adjustment_w
884
+ elsif coil.grossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.is_initialized
885
+ total_cooling_capacity_w += coil.grossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.to_f
886
+ else
887
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name} capacity of #{coil.name} is not available, total cooling capacity of air loop will be incorrect when applying standard.")
888
+ end
831
889
  elsif sc.to_CoilCoolingDXMultiSpeed.is_initialized ||
832
890
  sc.to_CoilCoolingCooledBeam.is_initialized ||
833
891
  sc.to_AirLoopHVACUnitaryHeatCoolVAVChangeoverBypass.is_initialized ||
@@ -845,13 +903,10 @@ class Standard
845
903
  return total_cooling_capacity_w
846
904
  end
847
905
 
848
- # Determine whether or not this system
849
- # is required to have an economizer.
906
+ # Determine whether or not this system is required to have an economizer.
850
907
  #
851
- # @param climate_zone [String] valid choices: 'ASHRAE 169-2013-1A', 'ASHRAE 169-2013-1B', 'ASHRAE 169-2013-2A', 'ASHRAE 169-2013-2B',
852
- # 'ASHRAE 169-2013-3A', 'ASHRAE 169-2013-3B', 'ASHRAE 169-2013-3C', 'ASHRAE 169-2013-4A', 'ASHRAE 169-2013-4B', 'ASHRAE 169-2013-4C',
853
- # 'ASHRAE 169-2013-5A', 'ASHRAE 169-2013-5B', 'ASHRAE 169-2013-5C', 'ASHRAE 169-2013-6A', 'ASHRAE 169-2013-6B', 'ASHRAE 169-2013-7A',
854
- # 'ASHRAE 169-2013-7B', 'ASHRAE 169-2013-8A', 'ASHRAE 169-2013-8B'
908
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
909
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
855
910
  # @return [Bool] returns true if an economizer is required, false if not
856
911
  def air_loop_hvac_economizer_required?(air_loop_hvac, climate_zone)
857
912
  economizer_required = false
@@ -926,7 +981,8 @@ class Standard
926
981
  # Set the economizer limits per the standard. Limits are based on the economizer
927
982
  # type currently specified in the ControllerOutdoorAir object on this air loop.
928
983
  #
929
- # @param (see #economizer_required?)
984
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
985
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
930
986
  # @return [Bool] returns true if successful, false if not
931
987
  def air_loop_hvac_apply_economizer_limits(air_loop_hvac, climate_zone)
932
988
  # EnergyPlus economizer types
@@ -941,11 +997,9 @@ class Standard
941
997
 
942
998
  # Get the OA system and OA controller
943
999
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
944
- if oa_sys.is_initialized
945
- oa_sys = oa_sys.get
946
- else
947
- return false # No OA system
948
- end
1000
+ return false unless oa_sys.is_initialized
1001
+
1002
+ oa_sys = oa_sys.get
949
1003
  oa_control = oa_sys.getControllerOutdoorAir
950
1004
  economizer_type = oa_control.getEconomizerControlType
951
1005
 
@@ -995,8 +1049,10 @@ class Standard
995
1049
  return true
996
1050
  end
997
1051
 
998
- # Determine the limits for the type of economizer present
999
- # on the AirLoopHVAC, if any.
1052
+ # Determine the limits for the type of economizer present on the AirLoopHVAC, if any.
1053
+ #
1054
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1055
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1000
1056
  # @return [Array<Double>] [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
1001
1057
  def air_loop_hvac_economizer_limits(air_loop_hvac, climate_zone)
1002
1058
  drybulb_limit_f = nil
@@ -1005,11 +1061,9 @@ class Standard
1005
1061
 
1006
1062
  # Get the OA system and OA controller
1007
1063
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
1008
- if oa_sys.is_initialized
1009
- oa_sys = oa_sys.get
1010
- else
1011
- return [nil, nil, nil] # No OA system
1012
- end
1064
+ return [nil, nil, nil] unless oa_sys.is_initialized
1065
+
1066
+ oa_sys = oa_sys.get
1013
1067
  oa_control = oa_sys.getControllerOutdoorAir
1014
1068
  economizer_type = oa_control.getEconomizerControlType
1015
1069
 
@@ -1033,12 +1087,12 @@ class Standard
1033
1087
  return [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
1034
1088
  end
1035
1089
 
1036
- # For systems required to have an economizer, set the economizer
1037
- # to integrated on non-integrated per the standard.
1090
+ # For systems required to have an economizer,
1091
+ # set the economizer to integrated on non-integrated per the standard.
1092
+ # @note this method assumes you previously checked that an economizer is required at all via #economizer_required?
1038
1093
  #
1039
- # @note this method assumes you previously checked that an economizer is required at all
1040
- # via #economizer_required?
1041
- # @param (see #economizer_required?)
1094
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1095
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1042
1096
  # @return [Bool] returns true if successful, false if not
1043
1097
  def air_loop_hvac_apply_economizer_integration(air_loop_hvac, climate_zone)
1044
1098
  # Determine if an integrated economizer is required
@@ -1073,6 +1127,7 @@ class Standard
1073
1127
 
1074
1128
  # Determine if the airloop includes hydronic cooling coils
1075
1129
  #
1130
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1076
1131
  # @return [Bool] returns true if hydronic coolings coils are included on the airloop
1077
1132
  def air_loop_hvac_include_hydronic_cooling_coil?(air_loop_hvac)
1078
1133
  air_loop_hvac.supplyComponents.each do |comp|
@@ -1083,6 +1138,7 @@ class Standard
1083
1138
 
1084
1139
  # Determine if the airloop includes WSHP cooling coils
1085
1140
  #
1141
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1086
1142
  # @return [Bool] returns true if WSHP cooling coils are included on the airloop
1087
1143
  def air_loop_hvac_include_wshp?(air_loop_hvac)
1088
1144
  air_loop_hvac.supplyComponents.each do |comp|
@@ -1097,8 +1153,23 @@ class Standard
1097
1153
  return false
1098
1154
  end
1099
1155
 
1156
+ # Determine if the air loop includes a unitary system
1157
+ #
1158
+ # @return [Bool] returns true if a unitary system is included on the air loop
1159
+ def air_loop_hvac_include_unitary_system?(air_loop_hvac)
1160
+ air_loop_hvac.supplyComponents.each do |comp|
1161
+ return true if comp.to_AirLoopHVACUnitarySystem.is_initialized
1162
+ end
1163
+
1164
+ return false
1165
+ end
1166
+
1100
1167
  # Determine if the system economizer must be integrated or not.
1101
1168
  # Default logic is from 90.1-2004.
1169
+ #
1170
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1171
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1172
+ # @return [Bool] returns true if required, false if not
1102
1173
  def air_loop_hvac_integrated_economizer_required?(air_loop_hvac, climate_zone)
1103
1174
  # Determine if it is a VAV system
1104
1175
  is_vav = air_loop_hvac_vav_system?(air_loop_hvac)
@@ -1174,7 +1245,8 @@ class Standard
1174
1245
  # Determine if an economizer is required per the PRM.
1175
1246
  # Default logic from 90.1-2007
1176
1247
  #
1177
- # @param (see #economizer_required?)
1248
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1249
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1178
1250
  # @return [Bool] returns true if required, false if not
1179
1251
  def air_loop_hvac_prm_baseline_economizer_required?(air_loop_hvac, climate_zone)
1180
1252
  economizer_required = false
@@ -1235,7 +1307,8 @@ class Standard
1235
1307
 
1236
1308
  # Apply the PRM economizer type and set temperature limits
1237
1309
  #
1238
- # @param (see #economizer_required?)
1310
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1311
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1239
1312
  # @return [Bool] returns true if successful, false if not
1240
1313
  def air_loop_hvac_apply_prm_baseline_economizer(air_loop_hvac, climate_zone)
1241
1314
  # EnergyPlus economizer types
@@ -1253,11 +1326,9 @@ class Standard
1253
1326
 
1254
1327
  # Get the OA system and OA controller
1255
1328
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
1256
- if oa_sys.is_initialized
1257
- oa_sys = oa_sys.get
1258
- else
1259
- return false # No OA system
1260
- end
1329
+ return false unless oa_sys.is_initialized
1330
+
1331
+ oa_sys = oa_sys.get
1261
1332
  oa_control = oa_sys.getControllerOutdoorAir
1262
1333
 
1263
1334
  # Set the economizer type
@@ -1298,6 +1369,9 @@ class Standard
1298
1369
 
1299
1370
  # Determine the economizer type and limits for the the PRM
1300
1371
  # Defaults to 90.1-2007 logic.
1372
+ #
1373
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1374
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1301
1375
  # @return [Array<Double>] [economizer_type, drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
1302
1376
  def air_loop_hvac_prm_economizer_type_and_limits(air_loop_hvac, climate_zone)
1303
1377
  economizer_type = 'NoEconomizer'
@@ -1353,9 +1427,10 @@ class Standard
1353
1427
  # Check the economizer type currently specified in the ControllerOutdoorAir object on this air loop
1354
1428
  # is acceptable per the standard. Defaults to 90.1-2007 logic.
1355
1429
  #
1356
- # @param (see #economizer_required?)
1357
- # @return [Bool] Returns true if allowable, if the system has no economizer or no OA system.
1358
- # Returns false if the economizer type is not allowable.
1430
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1431
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1432
+ # @return [Bool] returns true if allowable, if the system has no economizer or no OA system
1433
+ # Returns false if the economizer type is not allowable.
1359
1434
  def air_loop_hvac_economizer_type_allowable?(air_loop_hvac, climate_zone)
1360
1435
  # EnergyPlus economizer types
1361
1436
  # 'NoEconomizer'
@@ -1369,18 +1444,14 @@ class Standard
1369
1444
 
1370
1445
  # Get the OA system and OA controller
1371
1446
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
1372
- if oa_sys.is_initialized
1373
- oa_sys = oa_sys.get
1374
- else
1375
- return true # No OA system
1376
- end
1447
+ return true unless oa_sys.is_initialized
1448
+
1449
+ oa_sys = oa_sys.get
1377
1450
  oa_control = oa_sys.getControllerOutdoorAir
1378
1451
  economizer_type = oa_control.getEconomizerControlType
1379
1452
 
1380
1453
  # Return true if no economizer is present
1381
- if economizer_type == 'NoEconomizer'
1382
- return true
1383
- end
1454
+ return true if economizer_type == 'NoEconomizer'
1384
1455
 
1385
1456
  # Determine the prohibited types
1386
1457
  prohibited_types = []
@@ -1441,8 +1512,9 @@ class Standard
1441
1512
 
1442
1513
  # Check if ERV is required on this airloop.
1443
1514
  #
1444
- # @param (see #economizer_required?)
1445
- # @return [Bool] Returns true if required, false if not.
1515
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1516
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1517
+ # @return [Bool] returns true if required, false if not
1446
1518
  # @todo Add exception logic for systems serving parking garage, warehouse, or multifamily
1447
1519
  def air_loop_hvac_energy_recovery_ventilator_required?(air_loop_hvac, climate_zone)
1448
1520
  # ERV Not Applicable for AHUs that serve
@@ -1457,7 +1529,7 @@ class Standard
1457
1529
 
1458
1530
  erv_required = nil
1459
1531
  # ERV not applicable for medical AHUs (AHU1 in Outpatient), per AIA 2001 - 7.31.D2.
1460
- # TODO refactor: move building type specific code
1532
+ # @todo refactor: move building type specific code
1461
1533
  if air_loop_hvac.name.to_s.include? 'Outpatient F1'
1462
1534
  erv_required = false
1463
1535
  return erv_required
@@ -1472,7 +1544,8 @@ class Standard
1472
1544
  return erv_required
1473
1545
  end
1474
1546
  case template
1475
- when '90.1-2004', '90.1-2007' # TODO: Refactor figure out how to remove this.
1547
+ when '90.1-2004', '90.1-2007'
1548
+ # @todo Refactor figure out how to remove this.
1476
1549
  if air_loop_hvac.name.to_s.include? 'VAV_ICU'
1477
1550
  erv_required = false
1478
1551
  return erv_required
@@ -1541,19 +1614,26 @@ class Standard
1541
1614
  return erv_required
1542
1615
  end
1543
1616
 
1544
- # Determine the airflow limits that govern whether or not
1545
- # an ERV is required. Based on climate zone and % OA.
1617
+ # Determine the airflow limits that govern whether or not an ERV is required.
1618
+ # Based on climate zone and % OA.
1546
1619
  # Defaults to DOE Ref Pre-1980, not required.
1547
- # @return [Double] the flow rate above which an ERV is required.
1548
- # if nil, ERV is never required.
1620
+ #
1621
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1622
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1623
+ # @param pct_oa [Double] percentage of outdoor air
1624
+ # @return [Double] the flow rate above which an ERV is required. if nil, ERV is never required.
1549
1625
  def air_loop_hvac_energy_recovery_ventilator_flow_limit(air_loop_hvac, climate_zone, pct_oa)
1550
1626
  erv_cfm = nil # Not required
1551
1627
  return erv_cfm
1552
1628
  end
1553
1629
 
1554
- # Determine whether to apply an Energy Recovery Ventilator 'ERV' or a Heat Recovery Ventilator 'HRV' depending on the climate zone
1630
+ # Determine whether to apply an Energy Recovery Ventilator 'ERV'
1631
+ # or a Heat Recovery Ventilator 'HRV' depending on the climate zone
1555
1632
  # Defaults to ERV.
1556
- # @return [String] the ERV type
1633
+ #
1634
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1635
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1636
+ # @return [String] the erv type
1557
1637
  def air_loop_hvac_energy_recovery_ventilator_type(air_loop_hvac, climate_zone)
1558
1638
  erv_type = 'ERV'
1559
1639
  return erv_type
@@ -1561,16 +1641,40 @@ class Standard
1561
1641
 
1562
1642
  # Determine whether to use a Plate-Frame or Rotary Wheel style ERV depending on air loop outdoor air flow rate
1563
1643
  # Defaults to Rotary.
1564
- # @return [String] the ERV type
1644
+ #
1645
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1646
+ # @return [String] the erv type
1565
1647
  def air_loop_hvac_energy_recovery_ventilator_heat_exchanger_type(air_loop_hvac)
1566
1648
  heat_exchanger_type = 'Rotary'
1567
1649
  return heat_exchanger_type
1568
1650
  end
1569
1651
 
1652
+ def air_loop_hvac_remove_erv(air_loop_hvac)
1653
+ # Get the OA system
1654
+ oa_sys = nil
1655
+ if air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
1656
+ oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem.get
1657
+ else
1658
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}, ERV cannot be removed because the system has no OA intake.")
1659
+ return false
1660
+ end
1661
+
1662
+ # Get the existing ERV or create an ERV and add it to the OA system
1663
+ oa_sys.oaComponents.each do |oa_comp|
1664
+ if oa_comp.to_HeatExchangerAirToAirSensibleAndLatent.is_initialized
1665
+ erv = oa_comp.to_HeatExchangerAirToAirSensibleAndLatent.get
1666
+ erv.remove
1667
+ end
1668
+ end
1669
+
1670
+ return true
1671
+ end
1672
+
1570
1673
  # Add an ERV to this airloop
1571
1674
  #
1572
- # @param (see #economizer_required?)
1573
- # @return [Bool] Returns true if required, false if not.
1675
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1676
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1677
+ # @return [Bool] returns true if required, false if not
1574
1678
  # @todo Add exception logic for systems serving parking garage, warehouse, or multifamily
1575
1679
  def air_loop_hvac_apply_energy_recovery_ventilator(air_loop_hvac, climate_zone)
1576
1680
  # Get the OA system
@@ -1664,7 +1768,7 @@ class Standard
1664
1768
  # @param erv [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
1665
1769
  # @param erv_type [String] erv type ERV or HRV
1666
1770
  # @param heat_exchanger_type [String] heat exchanger type Rotary or Plate
1667
- # @return erv [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
1771
+ # @return [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
1668
1772
  def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ERV', heat_exchanger_type: 'Rotary')
1669
1773
  erv.setSensibleEffectivenessat100HeatingAirFlow(0.7)
1670
1774
  erv.setLatentEffectivenessat100HeatingAirFlow(0.6)
@@ -1680,11 +1784,10 @@ class Standard
1680
1784
  # Determine if multizone vav optimization is required.
1681
1785
  # Defaults to 90.1-2007 logic, where it is not required.
1682
1786
  #
1683
- # @param (see #economizer_required?)
1684
- # @return [Bool] Returns true if required, false if not.
1685
- # @todo Add exception logic for
1686
- # systems with AIA healthcare ventilation requirements
1687
- # dual duct systems
1787
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1788
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1789
+ # @return [Bool] returns true if required, false if not
1790
+ # @todo Add exception logic for systems with AIA healthcare ventilation requirements dual duct systems
1688
1791
  def air_loop_hvac_multizone_vav_optimization_required?(air_loop_hvac, climate_zone)
1689
1792
  multizone_opt_required = false
1690
1793
  return multizone_opt_required
@@ -1693,7 +1796,8 @@ class Standard
1693
1796
  # Enable multizone vav optimization by changing the Outdoor Air Method
1694
1797
  # in the Controller:MechanicalVentilation object to 'VentilationRateProcedure'
1695
1798
  #
1696
- # @return [Bool] Returns true if required, false if not.
1799
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1800
+ # @return [Bool] returns true if required, false if not
1697
1801
  def air_loop_hvac_enable_multizone_vav_optimization(air_loop_hvac)
1698
1802
  # Enable multizone vav optimization
1699
1803
  # at each timestep.
@@ -1713,7 +1817,8 @@ class Standard
1713
1817
  # Disable multizone vav optimization by changing the Outdoor Air Method
1714
1818
  # in the Controller:MechanicalVentilation object to 'ZoneSum'
1715
1819
  #
1716
- # @return [Bool] Returns true if required, false if not.
1820
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1821
+ # @return [Bool] returns true if required, false if not
1717
1822
  def air_loop_hvac_disable_multizone_vav_optimization(air_loop_hvac)
1718
1823
  # Disable multizone vav optimization
1719
1824
  # at each timestep.
@@ -1731,9 +1836,10 @@ class Standard
1731
1836
 
1732
1837
  # Set the minimum VAV damper positions.
1733
1838
  #
1734
- # @param has_ddc [Bool] if true, will assume that there
1735
- # is DDC control of vav terminals. If false, assumes otherwise.
1736
- # @return [Bool] true if successful, false if not
1839
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1840
+ # @param has_ddc [Bool] if true, will assume that there is DDC control of vav terminals.
1841
+ # If false, assumes otherwise.
1842
+ # @return [Bool] returns true if successful, false if not
1737
1843
  def air_loop_hvac_apply_minimum_vav_damper_positions(air_loop_hvac, has_ddc = true)
1738
1844
  air_loop_hvac.thermalZones.each do |zone|
1739
1845
  zone.equipment.each do |equip|
@@ -1748,10 +1854,11 @@ class Standard
1748
1854
  return true
1749
1855
  end
1750
1856
 
1751
- # Adjust minimum VAV damper positions to the values
1857
+ # Adjust minimum VAV damper positions and set minimum design
1858
+ # system outdoor air flow
1752
1859
  #
1753
- # @param (see #economizer_required?)
1754
- # @return [Bool] Returns true if required, false if not.
1860
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
1861
+ # @return [Bool] returns true if required, false if not
1755
1862
  # @todo Add exception logic for systems serving parking garage, warehouse, or multifamily
1756
1863
  def air_loop_hvac_adjust_minimum_vav_damper_positions(air_loop_hvac)
1757
1864
  # Do not apply the adjustment to some of the system in
@@ -1964,11 +2071,16 @@ class Standard
1964
2071
  # object with the calculated min OA flow rate
1965
2072
  sizing_system = air_loop_hvac.sizingSystem
1966
2073
  sizing_system.setDesignOutdoorAirFlowRate(v_ot_adj)
2074
+ sizing_system.setSystemOutdoorAirMethod('ZoneSum')
1967
2075
 
1968
2076
  return true
1969
2077
  end
1970
2078
 
1971
2079
  # Set an air terminal's minimum damper position
2080
+ #
2081
+ # @param zone [OpenStudio::Model::ThermalZone] thermal zone
2082
+ # @param mdp [Double] minimum damper position
2083
+ # @return [Bool] returns true if successful, false if not
1972
2084
  def air_loop_hvac_set_minimum_damper_position(zone, mdp)
1973
2085
  zone.equipment.each do |equip|
1974
2086
  if equip.to_AirTerminalSingleDuctVAVHeatAndCoolNoReheat.is_initialized
@@ -1995,14 +2107,17 @@ class Standard
1995
2107
  # Reference: <Achieving the 30% Goal: Energy and Cost Savings Analysis of ASHRAE Standard 90.1-2010> Page109-111
1996
2108
  # For implementation purpose, since it is time-consuming to perform autosizing in three climate zones, just use
1997
2109
  # the results of the current climate zone
2110
+ #
2111
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2112
+ # @return [Bool] returns true if successful, false if not
1998
2113
  def air_loop_hvac_adjust_minimum_vav_damper_positions_outpatient(air_loop_hvac)
1999
2114
  air_loop_hvac.model.getSpaces.sort.each do |space|
2000
2115
  zone = space.thermalZone.get
2001
2116
  sizing_zone = zone.sizingZone
2002
2117
  space_area = space.floorArea
2003
- if sizing_zone.coolingDesignAirFlowMethod == 'DesignDay'
2004
- next
2005
- elsif sizing_zone.coolingDesignAirFlowMethod == 'DesignDayWithLimit'
2118
+ next if sizing_zone.coolingDesignAirFlowMethod == 'DesignDay'
2119
+
2120
+ if sizing_zone.coolingDesignAirFlowMethod == 'DesignDayWithLimit'
2006
2121
  minimum_airflow_per_zone_floor_area = sizing_zone.coolingMinimumAirFlowperZoneFloorArea
2007
2122
  minimum_airflow_per_zone = minimum_airflow_per_zone_floor_area * space_area
2008
2123
  # get the autosized maximum air flow of the VAV terminal
@@ -2028,13 +2143,12 @@ class Standard
2028
2143
  return true
2029
2144
  end
2030
2145
 
2031
- # Determine if demand control ventilation (DCV) is
2032
- # required for this air loop.
2146
+ # Determine if demand control ventilation (DCV) is required for this air loop.
2033
2147
  #
2034
- # @param (see #economizer_required?)
2035
- # @return [Bool] Returns true if required, false if not.
2036
- # @todo Add exception logic for
2037
- # systems that serve multifamily, parking garage, warehouse
2148
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2149
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
2150
+ # @return [Bool] returns true if required, false if not
2151
+ # @todo Add exception logic for systems that serve multifamily, parking garage, warehouse
2038
2152
  def air_loop_hvac_demand_control_ventilation_required?(air_loop_hvac, climate_zone)
2039
2153
  dcv_required = false
2040
2154
 
@@ -2113,9 +2227,10 @@ class Standard
2113
2227
  end
2114
2228
 
2115
2229
  # Determines the OA flow rates above which an economizer is required.
2116
- # Two separate rates, one for systems with an economizer and another
2117
- # for systems without. Defaults to pre-1980 logic, where the limits
2118
- # are zero for both types.
2230
+ # Two separate rates, one for systems with an economizer and another for systems without.
2231
+ # Defaults to pre-1980 logic, where the limits are zero for both types.
2232
+ #
2233
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2119
2234
  # @return [Array<Double>] [min_oa_without_economizer_cfm, min_oa_with_economizer_cfm]
2120
2235
  def air_loop_hvac_demand_control_ventilation_limits(air_loop_hvac)
2121
2236
  min_oa_without_economizer_cfm = 0
@@ -2125,18 +2240,21 @@ class Standard
2125
2240
 
2126
2241
  # Determine if the standard has an exception for demand control ventilation
2127
2242
  # when an energy recovery device is present. Defaults to true.
2243
+ #
2244
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2245
+ # @return [Bool] returns true if required, false if not
2128
2246
  def air_loop_hvac_dcv_required_when_erv(air_loop_hvac)
2129
2247
  dcv_required_when_erv_present = false
2130
2248
  return dcv_required_when_erv_present
2131
2249
  end
2132
2250
 
2133
2251
  # Enable demand control ventilation (DCV) for this air loop.
2134
- # Zones on this loop that require DCV preserve
2135
- # both per-area and per-person OA reqs.
2136
- # Other zones have OA reqs converted
2137
- # to per-area values only so that DCV won't impact these zones.
2252
+ # Zones on this loop that require DCV preserve both per-area and per-person OA reqs.
2253
+ # Other zones have OA reqs converted to per-area values only so that DCV won't impact these zones.
2138
2254
  #
2139
- # @return [Bool] Returns true if required, false if not.
2255
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2256
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
2257
+ # @return [Bool] returns true if required, false if not
2140
2258
  def air_loop_hvac_enable_demand_control_ventilation(air_loop_hvac, climate_zone)
2141
2259
  # Get the OA intake
2142
2260
  controller_oa = nil
@@ -2164,20 +2282,21 @@ class Standard
2164
2282
  return true
2165
2283
  end
2166
2284
 
2167
- # Determine if the system required supply air temperature
2168
- # (SAT) reset. Defaults to 90.1-2007, no SAT reset required.
2285
+ # Determine if the system required supply air temperature (SAT) reset.
2286
+ # Defaults to 90.1-2007, no SAT reset required.
2169
2287
  #
2170
- # @param (see #economizer_required?)
2171
- # @return [Bool] Returns true if required, false if not.
2288
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2289
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
2290
+ # @return [Bool] returns true if required, false if not
2172
2291
  def air_loop_hvac_supply_air_temperature_reset_required?(air_loop_hvac, climate_zone)
2173
2292
  is_sat_reset_required = false
2174
2293
  return is_sat_reset_required
2175
2294
  end
2176
2295
 
2177
- # Enable supply air temperature (SAT) reset based
2178
- # on the cooling demand of the warmest zone.
2296
+ # Enable supply air temperature (SAT) reset based on the cooling demand of the warmest zone.
2179
2297
  #
2180
- # @return [Bool] Returns true if successful, false if not.
2298
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2299
+ # @return [Bool] returns true if successful, false if not
2181
2300
  def air_loop_hvac_enable_supply_air_temperature_reset_warmest_zone(air_loop_hvac)
2182
2301
  # Get the current setpoint and calculate
2183
2302
  # the new setpoint.
@@ -2211,19 +2330,20 @@ class Standard
2211
2330
  # Determines supply air temperature (SAT) temperature.
2212
2331
  # Defaults to 90.1-2007, 5 delta-F (R)
2213
2332
  #
2214
- # @return [Double] the SAT reset amount (R)
2333
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2334
+ # @return [Double] the SAT reset amount in degrees Rankine
2215
2335
  def air_loop_hvac_enable_supply_air_temperature_reset_delta(air_loop_hvac)
2216
- sat_reset_r = 5
2336
+ sat_reset_r = 5.0
2217
2337
  return sat_reset_r
2218
2338
  end
2219
2339
 
2220
- # Enable supply air temperature (SAT) reset based
2221
- # on outdoor air conditions. SAT will be kept at the
2222
- # current design temperature when outdoor air is above 70F,
2223
- # increased by 5F when outdoor air is below 50F, and reset
2224
- # linearly when outdoor air is between 50F and 70F.
2340
+ # Enable supply air temperature (SAT) reset based on outdoor air conditions.
2341
+ # SAT will be kept at the current design temperature when outdoor air is above 70F,
2342
+ # increased by 5F when outdoor air is below 50F,
2343
+ # and reset linearly when outdoor air is between 50F and 70F.
2225
2344
  #
2226
- # @return [Bool] Returns true if successful, false if not.
2345
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2346
+ # @return [Bool] returns true if successful, false if not
2227
2347
  def air_loop_hvac_enable_supply_air_temperature_reset_outdoor_temperature(air_loop_hvac)
2228
2348
  # for AHU1 in Outpatient, SAT is 52F constant, no reset
2229
2349
  return true if air_loop_hvac.name.get == 'PVAV Outpatient F1'
@@ -2265,28 +2385,27 @@ class Standard
2265
2385
 
2266
2386
  # Determine if the system has an economizer
2267
2387
  #
2268
- # @return [Bool] Returns true if required, false if not.
2388
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2389
+ # @return [Bool] returns true if required, false if not
2269
2390
  def air_loop_hvac_economizer?(air_loop_hvac)
2270
2391
  # Get the OA system and OA controller
2271
2392
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
2272
- if oa_sys.is_initialized
2273
- oa_sys = oa_sys.get
2274
- else
2275
- return false # No OA system
2276
- end
2393
+ return false unless oa_sys.is_initialized
2394
+
2395
+ oa_sys = oa_sys.get
2277
2396
  oa_control = oa_sys.getControllerOutdoorAir
2278
2397
  economizer_type = oa_control.getEconomizerControlType
2279
2398
 
2280
2399
  # Return false if no economizer is present
2281
- if economizer_type == 'NoEconomizer'
2282
- return false
2283
- else
2284
- return true
2285
- end
2400
+ return false if economizer_type == 'NoEconomizer'
2401
+
2402
+ return true
2286
2403
  end
2287
2404
 
2288
- # Determine if the system is a VAV system based on the fan
2289
- # which may be inside of a unitary system.
2405
+ # Determine if the system is a VAV system based on the fan which may be inside of a unitary system.
2406
+ #
2407
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2408
+ # @return [Bool] returns true if vav system, false if not
2290
2409
  def air_loop_hvac_vav_system?(air_loop_hvac)
2291
2410
  is_vav = false
2292
2411
  air_loop_hvac.supplyComponents.reverse.each do |comp|
@@ -2312,7 +2431,8 @@ class Standard
2312
2431
 
2313
2432
  # Determine if the system is a multizone VAV system
2314
2433
  #
2315
- # @return [Bool] Returns true if required, false if not.
2434
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2435
+ # @return [Bool] returns true if multizone vav, false if not
2316
2436
  def air_loop_hvac_multizone_vav_system?(air_loop_hvac)
2317
2437
  multizone_vav_system = false
2318
2438
 
@@ -2335,7 +2455,8 @@ class Standard
2335
2455
 
2336
2456
  # Determine if the system has terminal reheat
2337
2457
  #
2338
- # @return [Bool] returns true if has one or more reheat terminals, false if it doesn't.
2458
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2459
+ # @return [Bool] returns true if has one or more reheat terminals, false if it doesn't
2339
2460
  def air_loop_hvac_terminal_reheat?(air_loop_hvac)
2340
2461
  has_term_rht = false
2341
2462
  air_loop_hvac.demandComponents.each do |sc|
@@ -2354,19 +2475,17 @@ class Standard
2354
2475
 
2355
2476
  # Determine if the system has energy recovery already
2356
2477
  #
2357
- # @return [Bool] Returns true if an ERV is present, false if not.
2478
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2479
+ # @return [Bool] returns true if an ERV is present, false if not
2358
2480
  def air_loop_hvac_energy_recovery?(air_loop_hvac)
2359
2481
  has_erv = false
2360
2482
 
2361
2483
  # Get the OA system
2362
2484
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
2363
- if oa_sys.is_initialized
2364
- oa_sys = oa_sys.get
2365
- else
2366
- return has_erv # No OA system
2367
- end
2485
+ return false unless oa_sys.is_initialized
2368
2486
 
2369
2487
  # Find any ERV on the OA system
2488
+ oa_sys = oa_sys.get
2370
2489
  oa_sys.oaComponents.each do |oa_comp|
2371
2490
  if oa_comp.to_HeatExchangerAirToAirSensibleAndLatent.is_initialized
2372
2491
  has_erv = true
@@ -2378,7 +2497,8 @@ class Standard
2378
2497
 
2379
2498
  # Determine if the air loop is a unitary system
2380
2499
  #
2381
- # @return [Bool] Returns true if a unitary system is present, false if not.
2500
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2501
+ # @return [Bool] returns true if a unitary system is present, false if not
2382
2502
  def air_loop_hvac_unitary_system?(air_loop_hvac)
2383
2503
  is_unitary_system = false
2384
2504
  air_loop_hvac.supplyComponents.each do |component|
@@ -2393,7 +2513,8 @@ class Standard
2393
2513
 
2394
2514
  # Set the VAV damper control to single maximum or dual maximum control depending on the standard.
2395
2515
  #
2396
- # @return [Bool] Returns true if successful, false if not
2516
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2517
+ # @return [Bool] returns true if successful, false if not
2397
2518
  # @todo see if this impacts the sizing run.
2398
2519
  def air_loop_hvac_apply_vav_damper_action(air_loop_hvac)
2399
2520
  damper_action = air_loop_hvac_vav_damper_action(air_loop_hvac)
@@ -2442,6 +2563,7 @@ class Standard
2442
2563
  # Determine whether the VAV damper control is single maximum or dual maximum control.
2443
2564
  # Defaults to 90.1-2007.
2444
2565
  #
2566
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2445
2567
  # @return [String] the damper control type: Single Maximum, Dual Maximum
2446
2568
  def air_loop_hvac_vav_damper_action(air_loop_hvac)
2447
2569
  damper_action = 'Dual Maximum'
@@ -2449,10 +2571,14 @@ class Standard
2449
2571
  end
2450
2572
 
2451
2573
  # Determine if a motorized OA damper is required
2574
+ #
2575
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2576
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
2577
+ # @return [Bool] returns true if required, false if not
2452
2578
  def air_loop_hvac_motorized_oa_damper_required?(air_loop_hvac, climate_zone)
2453
2579
  motorized_oa_damper_required = false
2454
2580
 
2455
- # TODO: refactor: Remove building type dependent logic
2581
+ # @todo refactor: Remove building type dependent logic
2456
2582
  if air_loop_hvac.name.to_s.include? 'Outpatient F1'
2457
2583
  motorized_oa_damper_required = true
2458
2584
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: always has a damper, the minimum OA schedule is the same as airloop availability schedule.")
@@ -2519,41 +2645,37 @@ class Standard
2519
2645
  return motorized_oa_damper_required
2520
2646
  end
2521
2647
 
2522
- # Determine the air flow and number of story limits
2523
- # for whether motorized OA damper is required. Defaults
2524
- # to DOE Ref Pre-1980 logic (never required).
2525
- # @return [Array<Double>] [minimum_oa_flow_cfm, maximum_stories].
2526
- # If both nil, never required
2648
+ # Determine the air flow and number of story limits for whether motorized OA damper is required.
2649
+ # Defaults to DOE Ref Pre-1980 logic (never required).
2650
+ #
2651
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2652
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
2653
+ # @return [Array<Double>] [minimum_oa_flow_cfm, maximum_stories]. If both nil, never required
2527
2654
  def air_loop_hvac_motorized_oa_damper_limits(air_loop_hvac, climate_zone)
2528
2655
  minimum_oa_flow_cfm = nil
2529
2656
  maximum_stories = nil
2530
2657
  return [minimum_oa_flow_cfm, maximum_stories]
2531
2658
  end
2532
2659
 
2533
- # Add a motorized damper by modifying the OA schedule
2534
- # to require zero OA during unoccupied hours. This means
2535
- # that even during morning warmup or nightcyling, no OA will
2536
- # be brought into the building, lowering heating/cooling load.
2537
- # If no occupancy schedule is supplied, one will be created.
2538
- # In this case, occupied is defined as the total percent
2539
- # occupancy for the loop for all zones served. If the OA schedule
2540
- # is already other than Always On, will assume that this schedule
2541
- # reflects a motorized OA damper and not change.
2660
+ # Add a motorized damper by modifying the OA schedule to require zero OA during unoccupied hours.
2661
+ # This means that even during morning warmup or nightcyling,
2662
+ # no OA will be brought into the building, lowering heating/cooling load.
2663
+ # If no occupancy schedule is supplied, one will be created. In this case,
2664
+ # occupied is defined as the total percent occupancy for the loop for all zones served.
2665
+ # If the OA schedule is already other than Always On,
2666
+ # will assume that this schedule reflects a motorized OA damper and not change.
2542
2667
  #
2543
- # @param min_occ_pct [Double] the fractional value below which
2544
- # the system will be considered unoccupied.
2668
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2669
+ # @param min_occ_pct [Double] the fractional value below which the system will be considered unoccupied.
2545
2670
  # @param occ_sch [OpenStudio::Model::Schedule] the occupancy schedule.
2546
- # If not supplied, one will be created based on the supplied
2547
- # occupancy threshold.
2548
- # @return [Bool] true if successful, false if not
2671
+ # If not supplied, one will be created based on the supplied occupancy threshold.
2672
+ # @return [Bool] returns true if successful, false if not
2549
2673
  def air_loop_hvac_add_motorized_oa_damper(air_loop_hvac, min_occ_pct = 0.05, occ_sch = nil)
2550
2674
  # Get the OA system and OA controller
2551
2675
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
2552
- if oa_sys.is_initialized
2553
- oa_sys = oa_sys.get
2554
- else
2555
- return false # No OA system
2556
- end
2676
+ return false unless oa_sys.is_initialized
2677
+
2678
+ oa_sys = oa_sys.get
2557
2679
  oa_control = oa_sys.getControllerOutdoorAir
2558
2680
 
2559
2681
  # Get the current min OA schedule and do nothing
@@ -2588,14 +2710,15 @@ class Standard
2588
2710
  # the damper will be open and OA will be brought into the building.
2589
2711
  # This reflects the use of a backdraft gravity damper, and
2590
2712
  # increases building loads unnecessarily during unoccupied hours.
2713
+ #
2714
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2715
+ # @return [Bool] returns true if successful, false if not
2591
2716
  def air_loop_hvac_remove_motorized_oa_damper(air_loop_hvac)
2592
2717
  # Get the OA system and OA controller
2593
2718
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
2594
- if oa_sys.is_initialized
2595
- oa_sys = oa_sys.get
2596
- else
2597
- return false # No OA system
2598
- end
2719
+ return false unless oa_sys.is_initialized
2720
+
2721
+ oa_sys = oa_sys.get
2599
2722
  oa_control = oa_sys.getControllerOutdoorAir
2600
2723
 
2601
2724
  # Set the minimum OA schedule to always 1 (100%)
@@ -2612,7 +2735,7 @@ class Standard
2612
2735
  # but other zones that are intermittently occupied by many people,
2613
2736
  # the first zone doesn't drive the entire system.
2614
2737
  #
2615
- # @param air_loop_hvac [<OpenStudio::Model::AirLoopHVAC>] air loop to create occupancy schedule
2738
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2616
2739
  # @param occupied_percentage_threshold [Double] the minimum fraction (0 to 1) that counts as occupied
2617
2740
  # @return [ScheduleRuleset] a ScheduleRuleset where 0 = unoccupied, 1 = occupied
2618
2741
  def air_loop_hvac_get_occupancy_schedule(air_loop_hvac, occupied_percentage_threshold: 0.05)
@@ -2623,9 +2746,10 @@ class Standard
2623
2746
  return sch_ruleset
2624
2747
  end
2625
2748
 
2626
- # Generate the EMS used to implement the economizer
2627
- # and staging controls for packaged single zone units.
2749
+ # Generate the EMS used to implement the economizer and staging controls for packaged single zone units.
2628
2750
  #
2751
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
2752
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
2629
2753
  # @return [Bool] returns true if successful, false if not
2630
2754
  def air_loop_hvac_apply_single_zone_controls(air_loop_hvac, climate_zone)
2631
2755
  # These controls only apply to systems with DX cooling
@@ -2668,11 +2792,9 @@ class Standard
2668
2792
 
2669
2793
  # Get the OA system and OA controller
2670
2794
  oa_sys = air_loop_hvac.airLoopHVACOutdoorAirSystem
2671
- if oa_sys.is_initialized
2672
- oa_sys = oa_sys.get
2673
- else
2674
- return false # No OA system
2675
- end
2795
+ return false unless oa_sys.is_initialized
2796
+
2797
+ oa_sys = oa_sys.get
2676
2798
  oa_control = oa_sys.getControllerOutdoorAir
2677
2799
  oa_node = oa_sys.outboardOANode.get
2678
2800
 
@@ -2683,6 +2805,10 @@ class Standard
2683
2805
  air_loop_hvac.model.alwaysOnDiscreteSchedule
2684
2806
  end
2685
2807
 
2808
+ # Create an economizer maximum OA fraction schedule with
2809
+ # a maximum of 70% to reflect damper leakage per PNNL
2810
+ max_oa_sch = set_maximum_fraction_outdoor_air_schedule(air_loop_hvac, oa_control, snc) unless air_loop_hvac_has_simple_transfer_air?(air_loop_hvac)
2811
+
2686
2812
  # Get the supply fan
2687
2813
  if air_loop_hvac.supplyFan.empty?
2688
2814
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirLoopHVAC', "For #{air_loop_hvac.name}: No supply fan found, cannot apply DX fan/economizer control.")
@@ -2725,15 +2851,6 @@ class Standard
2725
2851
  return false
2726
2852
  end
2727
2853
 
2728
- # Create an economizer maximum OA fraction schedule with
2729
- # a maximum of 70% to reflect damper leakage per PNNL
2730
- max_oa_sch_name = "#{snc}maxOASch"
2731
- max_oa_sch = OpenStudio::Model::ScheduleRuleset.new(air_loop_hvac.model)
2732
- max_oa_sch.setName(max_oa_sch_name)
2733
- max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}Default")
2734
- max_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.7)
2735
- oa_control.setMaximumFractionofOutdoorAirSchedule(max_oa_sch)
2736
-
2737
2854
  ### EMS shared by both programs ###
2738
2855
  # Sensors
2739
2856
  oat_db_c_sen = OpenStudio::Model::EnergyManagementSystemSensor.new(air_loop_hvac.model, 'Site Outdoor Air Drybulb Temperature')
@@ -2983,27 +3100,29 @@ class Standard
2983
3100
  return true
2984
3101
  end
2985
3102
 
2986
- # Determine the number of stages that should be used as controls
2987
- # for single zone DX systems. Defaults to zero, which means
2988
- # that no special single zone control is required.
3103
+ # Determine the number of stages that should be used as controls for single zone DX systems.
3104
+ # Defaults to zero, which means that no special single zone control is required.
2989
3105
  #
3106
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3107
+ # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
2990
3108
  # @return [Integer] the number of stages: 0, 1, 2
2991
3109
  def air_loop_hvac_single_zone_controls_num_stages(air_loop_hvac, climate_zone)
2992
3110
  num_stages = 0
2993
3111
  return num_stages
2994
3112
  end
2995
3113
 
2996
- # Determine if static pressure reset is required for this
2997
- # system. For 90.1, this determination needs information
2998
- # about whether or not the system has DDC control over the
2999
- # VAV terminals. Defaults to 90.1-2007 logic.
3114
+ # Determine if static pressure reset is required for this system.
3115
+ # For 90.1, this determination needs information about
3116
+ # whether or not the system has DDC control over the VAV terminals.
3117
+ # Defaults to 90.1-2007 logic.
3000
3118
  #
3001
3119
  # @todo Instead of requiring the input of whether a system
3002
3120
  # has DDC control of VAV terminals or not, determine this
3003
3121
  # from the system itself. This may require additional information
3004
3122
  # be added to the OpenStudio data model.
3005
- # @param has_ddc [Bool] whether or not the system has DDC control
3006
- # over VAV terminals.
3123
+ #
3124
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3125
+ # @param has_ddc [Bool] whether or not the system has DDC control over VAV terminals.
3007
3126
  # return [Bool] returns true if static pressure reset is required, false if not
3008
3127
  def air_loop_hvac_static_pressure_reset_required?(air_loop_hvac, has_ddc)
3009
3128
  sp_reset_required = false
@@ -3020,7 +3139,9 @@ class Standard
3020
3139
 
3021
3140
  # Determine if a system's fans must shut off when not required.
3022
3141
  # Per ASHRAE 90.1 section 6.4.3.3, HVAC systems are required to have off-hour controls
3023
- # @return [Bool] true if required, false if not
3142
+ #
3143
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3144
+ # @return [Bool] returns true if required, false if not
3024
3145
  def air_loop_hvac_unoccupied_fan_shutoff_required?(air_loop_hvac)
3025
3146
  shutoff_required = true
3026
3147
 
@@ -3033,27 +3154,23 @@ class Standard
3033
3154
  end
3034
3155
 
3035
3156
  # Default occupancy fraction threshold for determining if the spaces on the air loop are occupied
3157
+ # @return [Double] threshold at which the air loop space are considered unoccupied
3036
3158
  def air_loop_hvac_unoccupied_threshold
3037
3159
  return 0.15
3038
3160
  end
3039
3161
 
3040
3162
  # Shut off the system during unoccupied periods.
3041
- # During these times, systems will cycle on briefly
3042
- # if temperature drifts below setpoint. For systems
3043
- # with fan-powered terminals, the whole system
3044
- # (not just the terminal fans) will cycle on.
3045
- # Terminal-only night cycling is not used because the terminals cannot
3046
- # provide cooling, so terminal-only night cycling leads to excessive
3047
- # unmet cooling hours during unoccupied periods.
3048
- # If the system already has a schedule other than
3049
- # Always-On, no change will be made. If the system has
3050
- # an Always-On schedule assigned, a new schedule will be created.
3051
- # In this case, occupied is defined as the total percent
3052
- # occupancy for the loop for all zones served.
3053
- #
3054
- # @param min_occ_pct [Double] the fractional value below which
3055
- # the system will be considered unoccupied.
3056
- # @return [Bool] true if successful, false if not
3163
+ # During these times, systems will cycle on briefly if temperature drifts below setpoint.
3164
+ # For systems with fan-powered terminals, the whole system (not just the terminal fans) will cycle on.
3165
+ # Terminal-only night cycling is not used because the terminals cannot provide cooling,
3166
+ # so terminal-only night cycling leads to excessive unmet cooling hours during unoccupied periods.
3167
+ # If the system already has a schedule other than Always-On, no change will be made.
3168
+ # If the system has an Always-On schedule assigned, a new schedule will be created.
3169
+ # In this case, occupied is defined as the total percent occupancy for the loop for all zones served.
3170
+ #
3171
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3172
+ # @param min_occ_pct [Double] the fractional value below which the system will be considered unoccupied.
3173
+ # @return [Bool] returns true if successful, false if not
3057
3174
  def air_loop_hvac_enable_unoccupied_fan_shutoff(air_loop_hvac, min_occ_pct = 0.05)
3058
3175
  # Set the system to night cycle
3059
3176
  air_loop_hvac.setNightCycleControlType('CycleOnAny')
@@ -3083,11 +3200,10 @@ class Standard
3083
3200
  return true
3084
3201
  end
3085
3202
 
3086
- # Calculate the total floor area of all zones attached
3087
- # to the air loop, in m^2.
3203
+ # Calculate the total floor area of all zones attached to the air loop, in m^2.
3088
3204
  #
3089
- # return [Double] the total floor area of all zones attached
3090
- # to the air loop, in m^2.
3205
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3206
+ # return [Double] the total floor area of all zones attached to the air loop in m^2.
3091
3207
  def air_loop_hvac_floor_area_served(air_loop_hvac)
3092
3208
  total_area = 0.0
3093
3209
 
@@ -3098,11 +3214,10 @@ class Standard
3098
3214
  return total_area
3099
3215
  end
3100
3216
 
3101
- # Calculate the total floor area of all zones attached
3102
- # to the air loop that have no exterior surfaces, in m^2.
3217
+ # Calculate the total floor area of all zones attached to the air loop that have no exterior surfaces, in m^2.
3103
3218
  #
3104
- # return [Double] the total floor area of all zones attached
3105
- # to the air loop, in m^2.
3219
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3220
+ # return [Double] the total floor area of all zones attached to the air loop in m^2.
3106
3221
  def air_loop_hvac_floor_area_served_interior_zones(air_loop_hvac)
3107
3222
  total_area = 0.0
3108
3223
 
@@ -3116,11 +3231,10 @@ class Standard
3116
3231
  return total_area
3117
3232
  end
3118
3233
 
3119
- # Calculate the total floor area of all zones attached
3120
- # to the air loop that have at least one exterior surface, in m^2.
3234
+ # Calculate the total floor area of all zones attached to the air loop that have at least one exterior surface, in m^2.
3121
3235
  #
3122
- # return [Double] the total floor area of all zones attached
3123
- # to the air loop, in m^2.
3236
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3237
+ # return [Double] the total floor area of all zones attached to the air loop in m^2.
3124
3238
  def air_loop_hvac_floor_area_served_exterior_zones(air_loop_hvac)
3125
3239
  total_area = 0.0
3126
3240
 
@@ -3136,7 +3250,8 @@ class Standard
3136
3250
 
3137
3251
  # find design_supply_air_flow_rate
3138
3252
  #
3139
- # @return [Double] design_supply_air_flow_rate m^3/s
3253
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3254
+ # @return [Double] design supply air flow rate in m^3/s
3140
3255
  def air_loop_hvac_find_design_supply_air_flow_rate(air_loop_hvac)
3141
3256
  # Get the design_supply_air_flow_rate
3142
3257
  design_supply_air_flow_rate = nil
@@ -3153,7 +3268,8 @@ class Standard
3153
3268
 
3154
3269
  # Determine how much residential area the airloop serves
3155
3270
  #
3156
- # @returns [Double] res_area m^2
3271
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3272
+ # @return [Double] residential area served in m^2
3157
3273
  def air_loop_hvac_residential_area_served(air_loop_hvac)
3158
3274
  res_area = 0.0
3159
3275
 
@@ -3177,15 +3293,12 @@ class Standard
3177
3293
  return res_area
3178
3294
  end
3179
3295
 
3180
- # Determine how much data center
3181
- # area the airloop serves.
3296
+ # Determine how much data center area the airloop serves.
3182
3297
  #
3183
- # @return [Double] the area of data center is served,
3184
- # in m^2.
3185
- # @todo Add an is_data_center field to the
3186
- # standards space type spreadsheet instead
3187
- # of relying on the standards space type name to
3188
- # identify a data center.
3298
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3299
+ # @return [Double] the area of data center is served in m^2.
3300
+ # @todo Add an is_data_center field to the standards space type spreadsheet instead
3301
+ # of relying on the standards space type name to identify a data center.
3189
3302
  def air_loop_hvac_data_center_area_served(air_loop_hvac)
3190
3303
  dc_area_m2 = 0.0
3191
3304
 
@@ -3216,6 +3329,7 @@ class Standard
3216
3329
 
3217
3330
  # Determine how many humidifies are on the airloop
3218
3331
  #
3332
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3219
3333
  # @return [Integer] the number of humidifiers
3220
3334
  def air_loop_hvac_humidifier_count(air_loop_hvac)
3221
3335
  humidifiers = 0
@@ -3227,11 +3341,11 @@ class Standard
3227
3341
  return humidifiers
3228
3342
  end
3229
3343
 
3230
- # Sets the maximum reheat temperature to the specified
3231
- # value for all reheat terminals (of any type) on the loop.
3344
+ # Sets the maximum reheat temperature to the specified value for all reheat terminals (of any type) on the loop.
3232
3345
  #
3233
- # @param max_reheat_c [Double] the maximum reheat temperature, in C
3234
- # @return [Bool] returns true if successful, false if not.
3346
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3347
+ # @param max_reheat_c [Double] the maximum reheat temperature, in degrees Celsius
3348
+ # @return [Bool] returns true if successful, false if not
3235
3349
  def air_loop_hvac_apply_maximum_reheat_temperature(air_loop_hvac, max_reheat_c)
3236
3350
  air_loop_hvac.demandComponents.each do |sc|
3237
3351
  if sc.to_AirTerminalSingleDuctConstantVolumeReheat.is_initialized
@@ -3258,7 +3372,8 @@ class Standard
3258
3372
 
3259
3373
  # Set the system sizing properties based on the zone sizing information
3260
3374
  #
3261
- # @return [Bool] true if successful, false if not.
3375
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3376
+ # @return [Bool] returns true if successful, false if not
3262
3377
  def air_loop_hvac_apply_prm_sizing_temperatures(air_loop_hvac)
3263
3378
  # Get the design heating and cooling SAT information
3264
3379
  # for all zones served by the system.
@@ -3302,8 +3417,10 @@ class Standard
3302
3417
  return true
3303
3418
  end
3304
3419
 
3305
- # Determine if every zone on the system has an identical
3306
- # multiplier. If so, return this number. If not, return 1.
3420
+ # Determine if every zone on the system has an identical multiplier.
3421
+ # If so, return this number. If not, return 1.
3422
+ #
3423
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3307
3424
  # @return [Integer] an integer representing the system multiplier.
3308
3425
  def air_loop_hvac_system_multiplier(air_loop_hvac)
3309
3426
  mult = 1
@@ -3327,7 +3444,8 @@ class Standard
3327
3444
 
3328
3445
  # Determine if this Air Loop uses DX cooling.
3329
3446
  #
3330
- # @return [Bool] true if uses DX cooling, false if not.
3447
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3448
+ # @return [Bool] returns true if uses DX cooling, false if not
3331
3449
  def air_loop_hvac_dx_cooling?(air_loop_hvac)
3332
3450
  dx_clg = false
3333
3451
 
@@ -3374,7 +3492,8 @@ class Standard
3374
3492
 
3375
3493
  # Determine if this Air Loop uses multi-stage DX cooling.
3376
3494
  #
3377
- # @return [Bool] true if uses multi-stage DX cooling, false if not.
3495
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
3496
+ # @return [Bool] returns true if uses multi-stage DX cooling, false if not
3378
3497
  def air_loop_hvac_multi_stage_dx_cooling?(air_loop_hvac)
3379
3498
  dx_clg = false
3380
3499
 
@@ -3414,4 +3533,55 @@ class Standard
3414
3533
 
3415
3534
  return dx_clg
3416
3535
  end
3536
+
3537
+ # Add occupant standby controls to air loop
3538
+ # When the thermostat schedule is setup or setback
3539
+ # the ventilation is shutoff. Currently this is done
3540
+ # by scheduling air terminal dampers (so load can
3541
+ # still be met) and cycling unitary system fans
3542
+ #
3543
+ # @param air_loop_hvac [OpenStudio::model::AirLoopHVAC] OpenStudio AirLoopHVAC object
3544
+ # @param standby_mode_space [Array] List of all spaces required to have standby mode controls
3545
+ # @return [Boolean] true if sucessful, false otherwise
3546
+ def air_loop_hvac_standby_mode_occupancy_control(air_loop_hvac, standby_mode_spaces)
3547
+ return true
3548
+ end
3549
+
3550
+ # Create an economizer maximum OA fraction schedule with
3551
+ # For ASHRAE 90.1 2019, a maximum of 75% to reflect damper leakage per PNNL
3552
+ #
3553
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] HVAC air loop object
3554
+ # @param oa_control [OpenStudio::Model::ControllerOutdoorAir] Outdoor air controller object to have this maximum OA fraction schedule
3555
+ # @param snc [String] System name
3556
+ #
3557
+ # @return [OpenStudio::Model::ScheduleRuleset] Generated maximum outdoor air fraction schedule for later use
3558
+ def set_maximum_fraction_outdoor_air_schedule(air_loop_hvac, oa_control, snc)
3559
+ max_oa_sch_name = "#{snc}maxOASch"
3560
+ max_oa_sch = OpenStudio::Model::ScheduleRuleset.new(air_loop_hvac.model)
3561
+ max_oa_sch.setName(max_oa_sch_name)
3562
+ max_oa_sch.defaultDaySchedule.setName("#{max_oa_sch_name}Default")
3563
+ max_oa_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.7)
3564
+ oa_control.setMaximumFractionofOutdoorAirSchedule(max_oa_sch)
3565
+ max_oa_sch
3566
+ end
3567
+
3568
+ # Checks if zones served by the air loop use zone exhaust fan
3569
+ # a simplified approach to model transfer air
3570
+ #
3571
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] OpenStudio AirLoopHVAC object
3572
+ # @return [Boolean] true if simple transfer air is modeled, false otherwise
3573
+ def air_loop_hvac_has_simple_transfer_air?(air_loop_hvac)
3574
+ simple_transfer_air = false
3575
+ zones = air_loop_hvac.thermalZones
3576
+ zones_name = []
3577
+ zones.each do |zone|
3578
+ zones_name << zone.name.to_s
3579
+ end
3580
+ air_loop_hvac.model.getFanZoneExhausts.sort.each do |exhaust_fan|
3581
+ if (zones_name.include? exhaust_fan.thermalZone.get.name.to_s) && exhaust_fan.balancedExhaustFractionSchedule.is_initialized
3582
+ simple_transfer_air = true
3583
+ end
3584
+ end
3585
+ return simple_transfer_air
3586
+ end
3417
3587
  end