openstudio-standards 0.4.0 → 0.5.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. checksums.yaml +4 -4
  2. data/data/inventory/thermal_bridging.csv +90 -0
  3. data/data/standards/OpenStudio_Standards-deer-comstock.xlsx +0 -0
  4. data/data/standards/manage_OpenStudio_Standards.rb +1 -1
  5. data/data/standards/test_performance_expected_dd_results.csv +2014 -1891
  6. data/lib/openstudio-standards/btap/analysis.rb +8 -8
  7. data/lib/openstudio-standards/btap/bridging.rb +664 -645
  8. data/lib/openstudio-standards/btap/btap.model.rb +14 -14
  9. data/lib/openstudio-standards/btap/btap.rb +7 -7
  10. data/lib/openstudio-standards/btap/btap_result.rb +1 -1
  11. data/lib/openstudio-standards/btap/economics.rb +23 -23
  12. data/lib/openstudio-standards/btap/envelope.rb +8 -8
  13. data/lib/openstudio-standards/btap/equest.rb +1 -1
  14. data/lib/openstudio-standards/btap/geometry.rb +2 -2
  15. data/lib/openstudio-standards/btap/mpc.rb +7 -7
  16. data/lib/openstudio-standards/btap/schedules.rb +1 -1
  17. data/lib/openstudio-standards/btap/simmanager.rb +4 -4
  18. data/lib/openstudio-standards/btap/spaceloads.rb +26 -26
  19. data/lib/openstudio-standards/btap/utilities.rb +6 -6
  20. data/lib/openstudio-standards/btap/vintagizer.rb +1 -1
  21. data/lib/openstudio-standards/constructions/information.rb +83 -0
  22. data/lib/openstudio-standards/constructions/materials/modify.rb +72 -0
  23. data/lib/openstudio-standards/constructions/modify.rb +80 -0
  24. data/lib/openstudio-standards/create_typical/create_typical.rb +983 -0
  25. data/lib/openstudio-standards/create_typical/enumerations.rb +484 -0
  26. data/lib/openstudio-standards/create_typical/space_type_blend.rb +791 -0
  27. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +494 -0
  28. data/lib/openstudio-standards/daylighting/space.rb +47 -0
  29. data/lib/openstudio-standards/geometry/create.rb +801 -0
  30. data/lib/openstudio-standards/geometry/create_bar.rb +2171 -0
  31. data/lib/openstudio-standards/geometry/information.rb +462 -0
  32. data/lib/openstudio-standards/geometry/modify.rb +48 -0
  33. data/lib/openstudio-standards/hvac/air_loop/information.rb +79 -0
  34. data/lib/openstudio-standards/hvac/cbecs_hvac.rb +616 -0
  35. data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +91 -0
  36. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +1 -1
  37. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +1 -1
  38. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  39. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +1 -1
  40. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  41. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +2 -2
  42. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +1 -1
  43. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  44. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -36
  45. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +1 -1
  46. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  47. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -36
  48. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +3 -3
  49. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +1 -1
  50. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +1 -1
  51. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +1 -1
  52. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +1 -1
  53. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +1 -1
  54. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +1 -1
  55. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  57. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +7 -7
  58. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +8 -8
  59. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +14 -14
  60. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +9 -9
  61. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +16 -16
  62. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +7 -7
  63. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +8 -8
  64. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +8 -8
  65. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +11 -11
  66. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +7 -7
  67. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +9 -9
  68. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +8 -8
  69. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +11 -11
  70. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +9 -9
  71. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +19 -19
  72. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +10 -10
  73. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +13 -13
  74. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +6 -6
  75. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +6 -6
  76. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -9
  77. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +8 -8
  78. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +8 -8
  79. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +8 -8
  80. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +8 -8
  81. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +11 -11
  82. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +10 -10
  83. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +19 -19
  84. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +18 -18
  85. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +6 -6
  86. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +957 -957
  87. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +1 -1
  88. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +1 -1
  89. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +84 -16
  90. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +1 -1
  91. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +1 -1
  92. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +61 -10
  93. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +1 -1
  94. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +1 -1
  95. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +1 -1
  96. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -1
  97. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -1
  98. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +1 -1
  99. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +1 -1
  100. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +2 -2
  101. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +4 -4
  102. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +4 -4
  103. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +43 -30
  104. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +1 -1
  105. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +18 -11
  106. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +1 -1
  107. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +774 -117
  108. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +340 -481
  109. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +3 -3
  110. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +3 -3
  111. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +22 -22
  112. data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
  113. data/lib/openstudio-standards/qaqc/calibration.rb +131 -0
  114. data/lib/openstudio-standards/qaqc/create_results.rb +983 -0
  115. data/lib/openstudio-standards/qaqc/envelope.rb +399 -0
  116. data/lib/openstudio-standards/qaqc/eui.rb +213 -0
  117. data/lib/openstudio-standards/qaqc/hvac.rb +1943 -0
  118. data/lib/openstudio-standards/qaqc/internal_loads.rb +568 -0
  119. data/lib/openstudio-standards/qaqc/reporting.rb +141 -0
  120. data/lib/openstudio-standards/qaqc/schedules.rb +129 -0
  121. data/lib/openstudio-standards/qaqc/service_water_heating.rb +273 -0
  122. data/lib/openstudio-standards/qaqc/weather_files.rb +497 -0
  123. data/lib/openstudio-standards/qaqc/zone_conditions.rb +278 -0
  124. data/lib/openstudio-standards/schedules/create.rb +364 -0
  125. data/lib/openstudio-standards/schedules/information.rb +169 -0
  126. data/lib/openstudio-standards/schedules/modify.rb +445 -0
  127. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +110 -71
  128. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
  129. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +4 -4
  130. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +2 -1
  131. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +16 -10
  132. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +4 -4
  133. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +1 -1
  134. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
  135. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +4 -4
  136. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +1 -1
  137. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +5 -5
  138. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +1 -1
  139. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
  140. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +1 -1
  141. data/lib/openstudio-standards/standards/Standards.Construction.rb +17 -18
  142. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +6 -6
  143. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +1 -1
  144. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +1 -1
  145. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +1 -1
  146. data/lib/openstudio-standards/standards/Standards.Fan.rb +6 -12
  147. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +2 -2
  148. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +1 -1
  149. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +1 -1
  150. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +3 -3
  151. data/lib/openstudio-standards/standards/Standards.Model.rb +411 -261
  152. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -2
  153. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -29
  154. data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -2
  155. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -2
  156. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +14 -14
  157. data/lib/openstudio-standards/standards/Standards.Space.rb +37 -30
  158. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +38 -29
  159. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +7 -7
  160. data/lib/openstudio-standards/standards/Standards.Surface.rb +13 -13
  161. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +109 -66
  162. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +11 -4
  163. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +6 -6
  164. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
  165. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +1 -1
  166. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Space.rb +1 -1
  167. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Space.rb +1 -1
  168. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +4 -4
  169. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  170. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +4 -4
  171. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +4 -4
  172. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  173. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +1 -1
  174. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +5 -21
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +4 -4
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ZoneHVACComponent.rb +1 -1
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +36 -4
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +1 -1
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +4 -4
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -1
  183. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/comstock_ashrae_90_1_2016.AirLoopHVAC.rb +26 -0
  184. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +53 -10
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +1 -1
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +6 -6
  188. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +2 -2
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/comstock_ashrae_90_1_2019.AirLoopHVAC.rb +26 -0
  190. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +211 -211
  191. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.economizers.json +14 -14
  192. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +4 -4
  193. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +1 -1
  194. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop.rb +1 -1
  195. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.economizers.json +14 -14
  196. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +4 -4
  197. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +1 -1
  198. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb +1 -1
  199. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +6 -6
  200. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  201. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +1 -1
  202. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +1 -1
  203. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +4 -4
  204. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +6 -6
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +1 -1
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +1 -1
  208. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +4 -4
  209. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +22 -28
  210. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctParallelPIUReheat.rb +1 -1
  211. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctVAVReheat.rb +2 -2
  212. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.BoilerHotWater.rb +1 -74
  213. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +7 -59
  214. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +1 -1
  215. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +1 -1
  216. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +1 -1
  217. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +1 -1
  218. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +1 -21
  219. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.DesignSpecificationOutdoorAir.rb +101 -0
  220. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +1 -1
  221. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +1 -1
  222. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanVariableVolume.rb +1 -1
  223. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.HeatExchangerSensLat.rb +1 -1
  224. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +643 -526
  225. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +8 -2
  226. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +17 -77
  227. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +74 -16
  228. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +96 -44
  229. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Surface.rb +6 -6
  230. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ThermalZone.rb +18 -6
  231. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +1 -1
  232. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +328 -74
  233. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +0 -118
  234. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +2 -1
  235. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_rejection.json +1 -1
  236. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/baseline_outdoor_air.md +35 -0
  237. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_plug_load_measures.md +1 -1
  238. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +228 -0
  239. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +131 -0
  240. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_space.csv +1 -1
  241. data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +5 -5
  242. data/lib/openstudio-standards/standards/cbes/cbes.Model.rb +1 -1
  243. data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +1 -1
  244. data/lib/openstudio-standards/standards/cbes/cbes.Space.rb +1 -1
  245. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.Space.rb +1 -1
  246. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.Space.rb +1 -1
  247. data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +109 -27
  248. data/lib/openstudio-standards/standards/deer/deer.Space.rb +1 -1
  249. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.economizers.json +246 -4
  250. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +246 -4
  251. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.economizers.json +246 -4
  252. data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.ThermalZone.rb +18 -18
  253. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.economizers.json +246 -4
  254. data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.ThermalZone.rb +18 -18
  255. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.economizers.json +246 -4
  256. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.ThermalZone.rb +18 -18
  257. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.economizers.json +248 -6
  258. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +3 -3
  259. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.ThermalZone.rb +18 -18
  260. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.economizers.json +248 -6
  261. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +3 -3
  262. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.ThermalZone.rb +18 -18
  263. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.economizers.json +248 -6
  264. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +3 -3
  265. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.ThermalZone.rb +18 -18
  266. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.economizers.json +248 -6
  267. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +18 -5
  268. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +1 -1
  269. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +3 -3
  270. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.ThermalZone.rb +18 -18
  271. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.economizers.json +248 -6
  272. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +3 -3
  273. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +1 -1
  274. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +3 -3
  275. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.economizers.json +248 -6
  276. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps.json +2 -2
  277. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +3 -3
  278. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +1 -1
  279. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +3 -3
  280. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.economizers.json +248 -6
  281. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +3 -3
  282. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +1 -1
  283. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +3 -3
  284. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.economizers.json +248 -6
  285. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +3 -3
  286. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +1 -1
  287. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +3 -3
  288. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.economizers.json +260 -0
  289. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +3 -3
  290. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +1 -1
  291. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +3 -3
  292. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.economizers.json +248 -6
  293. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +3 -3
  294. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +1 -1
  295. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +3 -3
  296. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.economizers.json +248 -6
  297. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +3 -3
  298. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +1 -1
  299. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +3 -3
  300. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.economizers.json +248 -6
  301. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +3 -3
  302. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +1 -1
  303. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +3 -3
  304. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.economizers.json +248 -6
  305. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +3 -3
  306. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +1 -1
  307. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +3 -3
  308. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.economizers.json +248 -6
  309. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +3 -3
  310. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +1 -1
  311. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +3 -3
  312. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.economizers.json +248 -6
  313. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +3 -3
  314. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +1 -1
  315. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +3 -3
  316. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.economizers.json +246 -4
  317. data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/data/space_types.json +447 -223
  318. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +1 -1
  319. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/space_types.json +447 -223
  320. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +5 -2
  321. data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_types.json +25 -0
  322. data/lib/openstudio-standards/standards/necb/ECMS/data/chillers.json +44 -0
  323. data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +225 -0
  324. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +2 -2
  325. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +193 -73
  326. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +1 -1
  327. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +10 -4
  328. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +7 -7
  329. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +4 -5
  330. data/lib/openstudio-standards/standards/necb/NECB2011/data/chiller_types.json +32 -0
  331. data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +1 -1
  332. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +36 -0
  333. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +7 -7
  334. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +47587 -0
  335. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +49764 -0
  336. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Warehouse.osm +283 -297
  337. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_type_unit_definitions.txt +2 -1
  338. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +447 -223
  339. data/lib/openstudio-standards/standards/necb/NECB2011/data/standards_data.rb +3 -3
  340. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +1 -1
  341. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +49 -27
  342. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +400 -202
  343. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +4 -4
  344. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +637 -318
  345. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +18 -1
  346. data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +3 -3
  347. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +637 -318
  348. data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -1
  349. data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +3 -3
  350. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +1 -1
  351. data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +615 -307
  352. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +4 -4
  353. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +10 -5
  354. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +1 -1
  355. data/lib/openstudio-standards/utilities/assertion.rb +128 -0
  356. data/lib/openstudio-standards/utilities/logging.rb +2 -3
  357. data/lib/openstudio-standards/utilities/object_info.rb +39 -18
  358. data/lib/openstudio-standards/utilities/schedule_translator.rb +8 -6
  359. data/lib/openstudio-standards/utilities/simulation.rb +24 -11
  360. data/lib/openstudio-standards/utilities/sqlfile.rb +10 -5
  361. data/lib/openstudio-standards/version.rb +1 -1
  362. data/lib/openstudio-standards/weather/Weather.Model.rb +8 -9
  363. data/lib/openstudio-standards/weather/Weather.stat_file.rb +3 -3
  364. data/lib/openstudio-standards/weather/information.rb +35 -0
  365. data/lib/openstudio-standards.rb +69 -5
  366. metadata +52 -16
  367. data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
  368. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +0 -59
  369. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingWater.rb +0 -13
  370. data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +0 -36
  371. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +0 -898
  372. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +0 -126
  373. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +0 -356
  374. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +0 -35
  375. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb +0 -110
  376. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTowerVariableSpeed.rb +0 -5
@@ -10,7 +10,7 @@ class ASHRAE901PRM < Standard
10
10
  #
11
11
  # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
12
12
  # @param min_occ_pct [Double] the fractional value below which the system will be considered unoccupied.
13
- # @return [Bool] returns true if successful, false if not
13
+ # @return [Boolean] returns true if successful, false if not
14
14
  def air_loop_hvac_enable_unoccupied_fan_shutoff(air_loop_hvac, min_occ_pct = 0.05)
15
15
  if air_loop_hvac.additionalProperties.hasFeature('zone_group_type')
16
16
  zone_group_type = air_loop_hvac.additionalProperties.getFeatureAsString('zone_group_type').get
@@ -92,25 +92,14 @@ class ASHRAE901PRM < Standard
92
92
  end
93
93
 
94
94
  # Determine if the system is a multizone VAV system
95
- #
96
- # @return [Bool] Returns true if required, false if not.
95
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
96
+ # @return [Boolean] Returns true if required, false if not.
97
97
  def air_loop_hvac_multizone_vav_system?(air_loop_hvac)
98
98
  return true if air_loop_hvac.name.to_s.include?('Sys5') || air_loop_hvac.name.to_s.include?('Sys6') || air_loop_hvac.name.to_s.include?('Sys7') || air_loop_hvac.name.to_s.include?('Sys8')
99
99
 
100
100
  return false
101
101
  end
102
102
 
103
- # Determine if multizone vav optimization is required.
104
- # Not required for stable baseline.
105
- #
106
- # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
107
- # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
108
- # @return [Bool] returns true if required, false if not
109
- def air_loop_hvac_multizone_vav_optimization_required?(air_loop_hvac, climate_zone)
110
- multizone_opt_required = false
111
- return multizone_opt_required
112
- end
113
-
114
103
  # Determine whether the VAV damper control is single maximum or dual maximum control.
115
104
  # Defaults to Single Maximum for stable baseline.
116
105
  #
@@ -132,7 +121,7 @@ class ASHRAE901PRM < Standard
132
121
  #
133
122
  # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
134
123
  # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
135
- # @return [Bool] returns true if required, false if not
124
+ # @return [Boolean] returns true if required, false if not
136
125
  def air_loop_hvac_integrated_economizer_required?(air_loop_hvac, climate_zone)
137
126
  return true
138
127
  end
@@ -165,7 +154,7 @@ class ASHRAE901PRM < Standard
165
154
  #
166
155
  # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
167
156
  # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
168
- # @return [Bool] returns true if required, false if not
157
+ # @return [Boolean] returns true if required, false if not
169
158
  def air_loop_hvac_prm_baseline_economizer_required?(air_loop_hvac, climate_zone)
170
159
  economizer_required = false
171
160
  baseline_system_type = air_loop_hvac.additionalProperties.getFeatureAsString('baseline_system_type').get
@@ -204,7 +193,7 @@ class ASHRAE901PRM < Standard
204
193
  end
205
194
 
206
195
  # Set fan curve for stable baseline to be VSD with fixed static pressure setpoint
207
- # @return [string] name of appropriate curve for this code version
196
+ # @return [String name of appropriate curve for this code version
208
197
  def air_loop_hvac_set_vsd_curve_type
209
198
  return 'Multi Zone VAV with VSD and Fixed SP Setpoint'
210
199
  end
@@ -213,7 +202,7 @@ class ASHRAE901PRM < Standard
213
202
  # PRM does not require optimum start - override it to false.
214
203
  #
215
204
  # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
216
- # @return [Bool] returns true if required, false if not
205
+ # @return [Boolean] returns true if required, false if not
217
206
  def air_loop_hvac_optimum_start_required?(air_loop_hvac)
218
207
  return false
219
208
  end
@@ -229,7 +218,7 @@ class ASHRAE901PRM < Standard
229
218
  # Also adjusts the fan power and flow rates
230
219
  # of any parallel PIU terminals on the system.
231
220
  #
232
- # return [Bool] true if successful, false if not.
221
+ # return [Boolean] true if successful, false if not.
233
222
  def air_loop_hvac_apply_prm_baseline_fan_power(air_loop_hvac)
234
223
  # Get system type associated with air loop
235
224
  system_type = air_loop_hvac.additionalProperties.getFeatureAsString('baseline_system_type').get
@@ -263,7 +252,12 @@ class ASHRAE901PRM < Standard
263
252
  # individual zone air flow
264
253
  air_loop_total_zone_design_airflow = 0
265
254
  air_loop_hvac.thermalZones.sort.each do |zone|
266
- zone_air_flow = zone.designAirFlowRate.to_f
255
+ # error if zone design air flow rate is not available
256
+ if zone.model.version < OpenStudio::VersionString.new('3.6.0')
257
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.ashrae_90_1_prm.AirLoopHVAC', 'Required ThermalZone method .autosizedDesignAirFlowRate is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
258
+ end
259
+
260
+ zone_air_flow = zone.autosizedDesignAirFlowRate.to_f
267
261
  air_loop_total_zone_design_airflow += zone_air_flow
268
262
  # Fractions variables are actually power at that point
269
263
  supply_fan_power_fraction += zone_air_flow * zone.additionalProperties.getFeatureAsDouble('supply_fan_w').get
@@ -415,6 +409,7 @@ class ASHRAE901PRM < Standard
415
409
  # Determine the allowable fan system brake horsepower
416
410
  # Per Section G3.1.2.9
417
411
  #
412
+ # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC]
418
413
  # @return [Double] allowable fan system brake horsepower
419
414
  # units = horsepower
420
415
  def air_loop_hvac_allowable_system_brake_horsepower(air_loop_hvac)
@@ -554,7 +549,7 @@ class ASHRAE901PRM < Standard
554
549
  # Get the air loop HVAC design outdoor air flow rate by reading Standard 62.1 Summary from the sizing sql
555
550
  # @author Xuechen (Jerry) Lei, PNNL
556
551
  # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
557
- # @return [Float] Design outdoor air flow rate (m^3/s)
552
+ # @return [Double] Design outdoor air flow rate (m^3/s)
558
553
  def get_airloop_hvac_design_oa_from_sql(air_loop_hvac)
559
554
  return false unless air_loop_hvac.airLoopHVACOutdoorAirSystem.is_initialized
560
555
 
@@ -570,9 +565,9 @@ class ASHRAE901PRM < Standard
570
565
  # Set the minimum VAV damper positions.
571
566
  #
572
567
  # @param air_loop_hvac [OpenStudio::Model::AirLoopHVAC] air loop
573
- # @param has_ddc [Bool] if true, will assume that there is DDC control of vav terminals.
568
+ # @param has_ddc [Boolean] if true, will assume that there is DDC control of vav terminals.
574
569
  # If false, assumes otherwise.
575
- # @return [Bool] returns true if successful, false if not
570
+ # @return [Boolean] returns true if successful, false if not
576
571
  def air_loop_hvac_apply_minimum_vav_damper_positions(air_loop_hvac, has_ddc = true)
577
572
  air_loop_hvac.thermalZones.each do |zone|
578
573
  zone.equipment.each do |equip|
@@ -756,28 +751,27 @@ class ASHRAE901PRM < Standard
756
751
 
757
752
  # Exception 2 - System exhausting toxic fumes
758
753
  if thermal_zone.additionalProperties.hasFeature('exhaust_energy_recovery_exception_for_toxic_fumes_etc')
759
- if thermal_zone.additionalProperties.getFeatureAsString('exhaust_energy_recovery_exception_for_toxic_fumes_etc').get == 'yes'
760
- return nil
754
+ if thermal_zone.additionalProperties.getFeatureAsBoolean('exhaust_energy_recovery_exception_for_toxic_fumes_etc')
761
755
  end
762
756
  end
763
757
 
764
758
  # Exception 3 - Commercial kitchen hoods
765
759
  if thermal_zone.additionalProperties.hasFeature('exhaust_energy_recovery_exception_for_type1_kitchen_hoods')
766
- if thermal_zone.additionalProperties.getFeatureAsString('exhaust_energy_recovery_exception_for_type1_kitchen_hoods').get == 'yes'
760
+ if thermal_zone.additionalProperties.getFeatureAsBoolean('exhaust_energy_recovery_exception_for_type1_kitchen_hoods')
767
761
  return nil
768
762
  end
769
763
  end
770
764
 
771
765
  # Exception 6 - Distributed exhaust
772
766
  if thermal_zone.additionalProperties.hasFeature('exhaust_energy_recovery_exception_for_type_distributed_exhaust')
773
- if thermal_zone.additionalProperties.getFeatureAsString('exhaust_energy_recovery_exception_for_type_distributed_exhaust').get == 'yes'
767
+ if thermal_zone.additionalProperties.getFeatureAsBoolean('exhaust_energy_recovery_exception_for_type_distributed_exhaust')
774
768
  return nil
775
769
  end
776
770
  end
777
771
 
778
772
  # Exception 7 - Dehumidification
779
773
  if thermal_zone.additionalProperties.hasFeature('exhaust_energy_recovery_exception_for_dehumidifcation_with_series_cooling_recovery')
780
- if thermal_zone.additionalProperties.getFeatureAsString('exhaust_energy_recovery_exception_for_dehumidifcation_with_series_cooling_recovery').get == 'yes'
774
+ if thermal_zone.additionalProperties.getFeatureAsBoolean('exhaust_energy_recovery_exception_for_dehumidifcation_with_series_cooling_recovery')
781
775
  return nil
782
776
  end
783
777
  end
@@ -3,7 +3,7 @@ class ASHRAE901PRM < Standard
3
3
 
4
4
  # Return the fan on flow fraction for a parallel PIU terminal
5
5
  #
6
- # @return [Float] returns nil or a float representing the fraction
6
+ # @return [Double] returns nil or a float representing the fraction
7
7
  def air_terminal_single_duct_parallel_piu_reheat_fan_on_flow_fraction
8
8
  return 0.0 # will make the secondary fans run for heating loads
9
9
  end
@@ -9,9 +9,9 @@ class ASHRAE901PRM < Standard
9
9
  # @param zone_min_oa [Double] the zone outdoor air flow rate, in m^3/s.
10
10
  # If supplied, this will be set as a minimum limit in addition to the minimum
11
11
  # damper position. EnergyPlus will use the larger of the two values during sizing.
12
- # @param has_ddc [Bool] whether or not there is DDC control of the VAV terminal,
12
+ # @param has_ddc [Boolean] whether or not there is DDC control of the VAV terminal,
13
13
  # which impacts the minimum damper position requirement.
14
- # @return [Bool] returns true if successful, false if not
14
+ # @return [Boolean] returns true if successful, false if not
15
15
  # @todo remove exception where older vintages don't have minimum positions adjusted.
16
16
  def air_terminal_single_duct_vav_reheat_apply_minimum_damper_position(air_terminal_single_duct_vav_reheat, zone_min_oa = nil, has_ddc = true)
17
17
  # Minimum damper position
@@ -1,83 +1,10 @@
1
1
  class ASHRAE901PRM < Standard
2
2
  # @!group BoilerHotWater
3
3
 
4
- # find search criteria
5
- #
6
- # @param boiler_hot_water [OpenStudio::Model::BoilerHotWater] hot water boiler object
7
- # @return [Hash] used for standards_lookup_table(model)
8
- def boiler_hot_water_find_search_criteria(boiler_hot_water)
9
- # Define the criteria to find the boiler properties
10
- # in the hvac standards data set.
11
- search_criteria = {}
12
- search_criteria['template'] = template
13
-
14
- # Get fuel type
15
- search_criteria['fuel_type'] = 'Gas'
16
-
17
- # Get the fluid type
18
- search_criteria['fluid_type'] = 'Hot Water'
19
-
20
- return search_criteria
21
- end
22
-
23
- # Finds lookup object in standards and return minimum thermal efficiency
24
- #
25
- # @param boiler_hot_water [OpenStudio::Model::BoilerHotWater] hot water boiler object
26
- # @param rename [Bool] returns true if successful, false if not
27
- # @return [Double] minimum thermal efficiency
28
- def boiler_hot_water_standard_minimum_thermal_efficiency(boiler_hot_water, rename = false)
29
- # Get the boiler properties
30
- search_criteria = boiler_hot_water_find_search_criteria(boiler_hot_water)
31
- capacity_w = boiler_hot_water_find_capacity(boiler_hot_water)
32
- capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
33
- capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
34
-
35
- # Get the minimum efficiency standards
36
- thermal_eff = nil
37
-
38
- # Get the boiler properties
39
- blr_props = model_find_object(standards_data['boilers'], search_criteria, capacity_btu_per_hr)
40
- unless blr_props
41
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{boiler_hot_water.name}, cannot find boiler properties, cannot apply efficiency standard.")
42
- successfully_set_all_properties = false
43
- return successfully_set_all_properties
44
- end
45
-
46
- # If specified as AFUE
47
- unless blr_props['minimum_annual_fuel_utilization_efficiency'].nil?
48
- min_afue = blr_props['minimum_annual_fuel_utilization_efficiency']
49
- thermal_eff = afue_to_thermal_eff(min_afue)
50
- new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE"
51
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: Gas Hot Water Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}")
52
- end
53
-
54
- # If specified as thermal efficiency
55
- unless blr_props['minimum_thermal_efficiency'].nil?
56
- thermal_eff = blr_props['minimum_thermal_efficiency']
57
- new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff"
58
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: Gas Hot Water Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}")
59
- end
60
-
61
- # If specified as combustion efficiency
62
- unless blr_props['minimum_combustion_efficiency'].nil?
63
- min_comb_eff = blr_props['minimum_combustion_efficiency']
64
- thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff)
65
- new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff"
66
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: Gas Hot Water Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}")
67
- end
68
-
69
- # Rename
70
- if rename
71
- boiler_hot_water.setName(new_comp_name)
72
- end
73
-
74
- return thermal_eff
75
- end
76
-
77
4
  # Applies the standard efficiency ratings to this object.
78
5
  #
79
6
  # @param boiler_hot_water [OpenStudio::Model::BoilerHotWater] hot water boiler object
80
- # @return [Bool] true if successful, false if not
7
+ # @return [Boolean] returns true if successful, false if not
81
8
  def boiler_hot_water_apply_efficiency_and_curves(boiler_hot_water)
82
9
  # Get the minimum efficiency standards
83
10
  thermal_eff = boiler_hot_water_standard_minimum_thermal_efficiency(boiler_hot_water)
@@ -1,72 +1,20 @@
1
1
  class ASHRAE901PRM < Standard
2
2
  # @!group ChillerElectricEIR
3
3
 
4
- # Finds the search criteria
5
- #
6
- # @param chiller_electric_eir [OpenStudio::Model::ChillerElectricEIR] chiller object
7
- # @return [hash] has for search criteria to be used for find object
8
- def chiller_electric_eir_find_search_criteria(chiller_electric_eir)
9
- search_criteria = {}
10
- search_criteria['template'] = template
11
-
12
- # In AppG prm models, all scenarios are WaterCooled for cooling type.
13
- cooling_type = 'WaterCooled'
14
-
15
- search_criteria['cooling_type'] = cooling_type
16
-
17
- # TODO: Standards replace this with a mechanism to store this
18
- # data in the chiller object itself.
19
- # For now, retrieve the condenser type from the name
20
- name = chiller_electric_eir.name.get
21
- condenser_type = nil
22
- compressor_type = nil
23
- if chiller_electric_eir.additionalProperties.hasFeature('compressor_type')
24
- compressor_type = chiller_electric_eir.additionalProperties.getFeatureAsString('compressor_type').get
25
- end
26
- unless condenser_type.nil?
27
- search_criteria['condenser_type'] = condenser_type
28
- end
29
- unless compressor_type.nil?
30
- search_criteria['compressor_type'] = compressor_type
31
- end
32
-
33
- return search_criteria
34
- end
35
-
36
- # Finds lookup object in standards and return full load efficiency
4
+ # Applies the standard efficiency ratings to this object.
37
5
  #
38
6
  # @param chiller_electric_eir [OpenStudio::Model::ChillerElectricEIR] chiller object
39
- # @return [Double] full load efficiency (COP), [Double] capacity in tons, [Double] kw/ton
40
- def chiller_electric_eir_standard_minimum_full_load_efficiency(chiller_electric_eir)
41
- # Get the chiller properties
42
- search_criteria = chiller_electric_eir_find_search_criteria(chiller_electric_eir)
7
+ # @return [Boolean] returns true if successful, false if not
8
+ def chiller_electric_eir_apply_efficiency_and_curves(chiller_electric_eir)
9
+ # Get the chiller capacity
43
10
  capacity_w = chiller_electric_eir_find_capacity(chiller_electric_eir)
44
- unless capacity_w
45
- return nil
46
- end
47
11
 
12
+ # Convert capacity to tons
48
13
  capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
49
- chlr_props = model_find_object(standards_data['chillers'], search_criteria, capacity_tons, Date.today)
50
-
51
- if chlr_props.nil? || !chlr_props['minimum_full_load_efficiency']
52
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find minimum full load efficiency.")
53
- return nil
54
- else
55
- # lookup the efficiency value
56
- kw_per_ton = chlr_props['minimum_full_load_efficiency']
57
- cop = kw_per_ton_to_cop(kw_per_ton)
58
- end
59
14
 
60
- return cop, capacity_tons, kw_per_ton
61
- end
62
-
63
- # Applies the standard efficiency ratings to this object.
64
- #
65
- # @param chiller_electric_eir [OpenStudio::Model::ChillerElectricEIR] chiller object
66
- # @return [Bool] true if successful, false if not
67
- def chiller_electric_eir_apply_efficiency_and_curves(chiller_electric_eir)
68
15
  # Set the efficiency value
69
- cop, capacity_tons, kw_per_ton = chiller_electric_eir_standard_minimum_full_load_efficiency(chiller_electric_eir)
16
+ cop = chiller_electric_eir_standard_minimum_full_load_efficiency(chiller_electric_eir)
17
+ kw_per_ton = cop_to_kw_per_ton(cop)
70
18
  if cop.nil?
71
19
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find minimum full load efficiency, will not be set.")
72
20
  successfully_set_all_properties = false
@@ -82,7 +82,7 @@ class ASHRAE901PRM < Standard
82
82
  #
83
83
  # @param coil_cooling_dx_single_speed [OpenStudio::Model::CoilCoolingDXSingleSpeed] coil cooling dx single speed object
84
84
  # @param sys_type [String] HVAC system type
85
- # @param rename [Bool] if true, object will be renamed to include capacity and efficiency level
85
+ # @param rename [Boolean] if true, object will be renamed to include capacity and efficiency level
86
86
  # @return [Double] full load efficiency (COP)
87
87
  def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_speed, sys_type, rename = false)
88
88
  # find properties
@@ -43,7 +43,7 @@ class ASHRAE901PRM < Standard
43
43
  #
44
44
  # @param coil_cooling_dx_two_speed [OpenStudio::Model::CoilCoolingDXTwoSpeed] coil cooling dx two speed object
45
45
  # @param sys_type [String] HVAC system type
46
- # @param rename [Bool] if true, object will be renamed to include capacity and efficiency level
46
+ # @param rename [Boolean] if true, object will be renamed to include capacity and efficiency level
47
47
  # @return [Double] full load efficiency (COP)
48
48
  def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, sys_type, rename = false)
49
49
  # find properties
@@ -49,7 +49,7 @@ module ASHRAEPRMCoilDX
49
49
  # @param coil_dx [OpenStudio::Model::StraightComponent] coil cooling object
50
50
  # @param capacity [Double] capacity in btu/hr
51
51
  # @param sys_type [String] HVAC system type
52
- # @return [hash] has for search criteria to be used for find object
52
+ # @return [Hash] has for search criteria to be used for find object
53
53
  def coil_dx_find_search_criteria(coil_dx, capacity, sys_type)
54
54
  search_criteria = {}
55
55
  search_criteria['template'] = template
@@ -137,7 +137,7 @@ class ASHRAE901PRM < Standard
137
137
  #
138
138
  # @param coil_heating_dx_single_speed [OpenStudio::Model::CoilHeatingDXSingleSpeed] coil heating dx single speed object
139
139
  # @param sys_type [String] HVAC system type
140
- # @param rename [Bool] if true, object will be renamed to include capacity and efficiency level
140
+ # @param rename [Boolean] if true, object will be renamed to include capacity and efficiency level
141
141
  # @return [Double] full load efficiency (COP)
142
142
  def coil_heating_dx_single_speed_standard_minimum_cop(coil_heating_dx_single_speed, sys_type, rename = false)
143
143
  # find ac properties
@@ -23,31 +23,11 @@ class ASHRAE901PRM < Standard
23
23
  return search_criteria
24
24
  end
25
25
 
26
- # find furnace capacity
27
- #
28
- # @param coil_heating_gas [OpenStudio::Model::CoilHeatingGas] coil heating gas object
29
- # @return [Double] capacity in W to be used for find object
30
- def coil_heating_gas_find_capacity(coil_heating_gas)
31
- # Get the coil capacity
32
- capacity_w = nil
33
- if coil_heating_gas.nominalCapacity.is_initialized
34
- capacity_w = coil_heating_gas.nominalCapacity.get
35
- elsif coil_heating_gas.autosizedNominalCapacity.is_initialized
36
- capacity_w = coil_heating_gas.autosizedNominalCapacity.get
37
- else
38
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingGas', "For #{coil_heating_gas.name} capacity is not available, cannot apply efficiency standard.")
39
- successfully_set_all_properties = false
40
- return successfully_set_all_properties
41
- end
42
-
43
- return capacity_w
44
- end
45
-
46
26
  # Finds lookup object in standards and return minimum thermal efficiency
47
27
  #
48
28
  # @param coil_heating_gas [OpenStudio::Model::CoilHeatingGas] coil heating gas object
49
29
  # @param sys_type [String] HVAC system type
50
- # @param rename [Bool] if true, object will be renamed to include capacity and efficiency level
30
+ # @param rename [Boolean] if true, object will be renamed to include capacity and efficiency level
51
31
  # @return [Double] minimum thermal efficiency
52
32
  def coil_heating_gas_standard_minimum_thermal_efficiency(coil_heating_gas, sys_type, rename = false)
53
33
  # Get the coil properties
@@ -0,0 +1,101 @@
1
+ class ASHRAE901PRM2019 < ASHRAE901PRM
2
+ # @!group DesignSpecification:OutdoorAir
3
+ # Sets the rules on outdoor air specifications on spaces / spaceType
4
+
5
+ # Function applies user specified OA to the model
6
+ # @param model [OpenStudio::Model::Model] model object
7
+ # @return [Boolean] returns true if successful, false if not
8
+ def model_apply_userdata_outdoor_air(model)
9
+ # Step 1: Create a hash that maps design_spec_oa to a list of spaces
10
+ # Also create a map that maps each design_spec_oa name to design_spec_oa.
11
+ oa_spec_to_spaces = {}
12
+ oa_spec_hash = {}
13
+ model.getSpaces.each do |space|
14
+ oa_spec = space.designSpecificationOutdoorAir
15
+ if oa_spec.is_initialized
16
+ oa_spec = oa_spec.get
17
+ oa_spec_name = oa_spec.name.get
18
+ unless oa_spec_to_spaces.key?(oa_spec_name)
19
+ # init oa_spec_name associate zone name list.
20
+ oa_spec_to_spaces[oa_spec_name] = []
21
+ end
22
+ unless oa_spec_hash.key?(oa_spec_name)
23
+ # init the map of oa_spec_name to oa_spec object
24
+ oa_spec_hash[oa_spec_name] = oa_spec
25
+ end
26
+ oa_spec_to_spaces[oa_spec_name].push(space)
27
+ end
28
+ end
29
+
30
+ # Step 2: Loop the hash (oa_spec_name -> space_lists)
31
+ oa_spec_to_spaces.each do |oa_spec_name, space_list|
32
+ design_spec_oa = oa_spec_hash[oa_spec_name]
33
+ if design_spec_oa.additionalProperties.hasFeature('has_user_data')
34
+ outdoor_air_method = design_spec_oa.outdoorAirMethod
35
+
36
+ outdoor_airflow_per_person = get_additional_property_as_double(design_spec_oa, 'outdoor_airflow_per_person')
37
+ outdoor_airflow_per_floor_area = get_additional_property_as_double(design_spec_oa, 'outdoor_airflow_per_floor_area')
38
+ outdoor_air_flowrate = get_additional_property_as_double(design_spec_oa, 'outdoor_air_flowrate')
39
+ outdoor_air_flow_air_changes_per_hour = get_additional_property_as_double(design_spec_oa, 'outdoor_air_flow_air_changes_per_hour')
40
+
41
+ # Area SQL - TabularDataWithStrings -> InputVerificationResultsSummary -> Entire Facility -> Zone Summary -> Zone Name -> Area
42
+ total_modeled_area_oa = 0.0 # m2
43
+ total_user_area_oa = 0.0 # m2
44
+ total_modeled_people_oa = 0.0 # m3/s-person
45
+ total_user_people_oa = 0.0 # m3/s-person
46
+ total_modeled_airflow_oa = 0.0 # m3/s
47
+ total_user_airflow_oa = 0.0 # m3/s
48
+ total_modeled_ach_oa = 0.0 # ach
49
+ total_user_ach_oa = 0.0 # ach
50
+ space_list.each do |space|
51
+ floor_area = space.floorArea
52
+ volume = space.volume
53
+ number_people = space.numberOfPeople
54
+ total_modeled_area_oa += floor_area * design_spec_oa.outdoorAirFlowperFloorArea
55
+ total_user_area_oa += floor_area * outdoor_airflow_per_floor_area
56
+
57
+ total_modeled_people_oa += number_people * design_spec_oa.outdoorAirFlowperPerson
58
+ total_user_people_oa += number_people * outdoor_airflow_per_person
59
+
60
+ total_modeled_airflow_oa += design_spec_oa.outdoorAirFlowRate
61
+ total_user_airflow_oa += outdoor_air_flowrate
62
+ # convert to m3/s -> ach * volume / 3600
63
+ total_modeled_ach_oa += design_spec_oa.outdoorAirFlowAirChangesperHour * volume / 3600
64
+ total_user_ach_oa += outdoor_air_flow_air_changes_per_hour * volume / 3600
65
+ end
66
+
67
+ # calculate the amount of total outdoor air
68
+ if outdoor_air_method.casecmp('sum') == 0
69
+ total_modeled_airflow = total_modeled_area_oa + total_modeled_people_oa + total_modeled_airflow_oa + total_modeled_ach_oa
70
+ total_user_airflow = total_user_area_oa + total_user_people_oa + total_user_airflow_oa + total_user_ach_oa
71
+ elsif outdoor_air_method.casecmp('maximum') == 0
72
+ total_modeled_airflow = [total_modeled_area_oa, total_modeled_people_oa, total_modeled_airflow_oa, total_modeled_ach_oa].max
73
+ total_user_airflow = [total_user_area_oa, total_user_people_oa, total_user_airflow_oa, total_user_ach_oa].max
74
+ else
75
+ # No outdoor air method specified or match to the options available in OpenStudio
76
+ # Raise exception to flag the modeling error
77
+ error_msg = "DesignSpecification:OutdoorAir: #{design_spec_oa.name.get} is missing a method or the method is not one of the options {'Maximum', 'Sum'}."
78
+ OpenStudio.logFree(OpenStudio::Warn, 'prm.log', error_msg)
79
+ prm_raise(false,
80
+ @sizing_run_dir,
81
+ error_msg)
82
+ end
83
+
84
+ if total_modeled_airflow < total_user_airflow
85
+ # Do not modify the model outdoor air if the total user airflow is lower than total modeled airflow
86
+ OpenStudio.logFree(OpenStudio::Warn, 'prm.log', "The calculated total airflow for DesignSpecification:OutdoorAir is #{total_modeled_airflow} m3/s, which is smaller than the calculated user total airflow #{total_user_airflow} m3/s. Skip modifying the Outdoor Air.")
87
+ else
88
+ # set values.
89
+ design_spec_oa.setOutdoorAirFlowperFloorArea(outdoor_airflow_per_floor_area)
90
+ OpenStudio.logFree(OpenStudio::Info, 'prm.log', "Update DesignSpecification:OutdoorAir #{oa_spec_name} Outdoor Air Flow Per Floor Area to #{outdoor_airflow_per_floor_area} m3/s-m2.")
91
+ design_spec_oa.setOutdoorAirFlowperPerson(outdoor_airflow_per_person)
92
+ OpenStudio.logFree(OpenStudio::Info, 'prm.log', "Update DesignSpecification:OutdoorAir #{oa_spec_name} Outdoor Air Flow Per Person to #{outdoor_airflow_per_person} m3/s-person.")
93
+ design_spec_oa.setOutdoorAirFlowRate(outdoor_air_flowrate)
94
+ OpenStudio.logFree(OpenStudio::Info, 'prm.log', "Update DesignSpecification:OutdoorAir #{oa_spec_name} Outdoor Air Flow Rate to #{outdoor_air_flowrate} m3/s.")
95
+ design_spec_oa.setOutdoorAirFlowAirChangesperHour(outdoor_air_flow_air_changes_per_hour)
96
+ OpenStudio.logFree(OpenStudio::Info, 'prm.log', "Update DesignSpecification:OutdoorAir #{oa_spec_name} Outdoor Air ACH to #{outdoor_air_flow_air_changes_per_hour}.")
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -2,4 +2,4 @@ class ASHRAE901PRM
2
2
  # @!group FanConstantVolume
3
3
 
4
4
  include ASHRAE901PRMFan
5
- end
5
+ end
@@ -2,4 +2,4 @@ class ASHRAE901PRM
2
2
  # @!group FanOnOff
3
3
 
4
4
  include ASHRAE901PRMFan
5
- end
5
+ end
@@ -6,7 +6,7 @@ class ASHRAE901PRM
6
6
  # Determines whether there is a requirement to have a VSD or some other method to reduce fan power at low part load ratios.
7
7
  # Required for all VAV fans for stable baseline
8
8
  # @param fan_variable_volume [OpenStudio::Model::FanVariableVolume] variable volume fan object
9
- # @return [Bool] returns true if required, false if not
9
+ # @return [Boolean] returns true if required, false if not
10
10
  def fan_variable_volume_part_load_fan_power_limitation?(fan_variable_volume)
11
11
  part_load_control_required = true
12
12
  return part_load_control_required
@@ -48,7 +48,7 @@ class ASHRAE901PRM < Standard
48
48
  # Determine the required enthalpy recovery ratio (ERR)
49
49
  #
50
50
  # @param heat_exchanger_air_to_air_sensible_and_latent [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] OpenStudio heat exchanger object
51
- # @return [Float] ERR
51
+ # @return [Double] enthalpy recovery ratio
52
52
  def heat_exchanger_air_to_air_sensible_and_latent_enthalpy_recovery_ratio(heat_exchanger_air_to_air_sensible_and_latent)
53
53
  return 0.5
54
54
  end