openstudio-standards 0.2.14 → 0.2.15.pre.rc1

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