openstudio-standards 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (378) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +33 -0
  3. data/data/inventory/thermal_bridging.csv +90 -0
  4. data/data/standards/OpenStudio_Standards-deer-comstock.xlsx +0 -0
  5. data/data/standards/manage_OpenStudio_Standards.rb +1 -1
  6. data/data/standards/test_performance_expected_dd_results.csv +2014 -1891
  7. data/lib/openstudio-standards/btap/analysis.rb +8 -8
  8. data/lib/openstudio-standards/btap/bridging.rb +664 -645
  9. data/lib/openstudio-standards/btap/btap.model.rb +14 -14
  10. data/lib/openstudio-standards/btap/btap.rb +7 -7
  11. data/lib/openstudio-standards/btap/btap_result.rb +1 -1
  12. data/lib/openstudio-standards/btap/economics.rb +23 -23
  13. data/lib/openstudio-standards/btap/envelope.rb +8 -8
  14. data/lib/openstudio-standards/btap/equest.rb +1 -1
  15. data/lib/openstudio-standards/btap/geometry.rb +2 -2
  16. data/lib/openstudio-standards/btap/mpc.rb +7 -7
  17. data/lib/openstudio-standards/btap/schedules.rb +1 -1
  18. data/lib/openstudio-standards/btap/simmanager.rb +4 -4
  19. data/lib/openstudio-standards/btap/spaceloads.rb +26 -26
  20. data/lib/openstudio-standards/btap/utilities.rb +6 -6
  21. data/lib/openstudio-standards/btap/vintagizer.rb +1 -1
  22. data/lib/openstudio-standards/constructions/information.rb +83 -0
  23. data/lib/openstudio-standards/constructions/materials/modify.rb +72 -0
  24. data/lib/openstudio-standards/constructions/modify.rb +80 -0
  25. data/lib/openstudio-standards/create_typical/create_typical.rb +983 -0
  26. data/lib/openstudio-standards/create_typical/enumerations.rb +484 -0
  27. data/lib/openstudio-standards/create_typical/space_type_blend.rb +791 -0
  28. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +494 -0
  29. data/lib/openstudio-standards/daylighting/space.rb +47 -0
  30. data/lib/openstudio-standards/geometry/create.rb +801 -0
  31. data/lib/openstudio-standards/geometry/create_bar.rb +2170 -0
  32. data/lib/openstudio-standards/geometry/information.rb +462 -0
  33. data/lib/openstudio-standards/geometry/modify.rb +48 -0
  34. data/lib/openstudio-standards/hvac/air_loop/information.rb +79 -0
  35. data/lib/openstudio-standards/hvac/cbecs_hvac.rb +616 -0
  36. data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +91 -0
  37. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +1 -1
  38. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +1 -1
  39. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  40. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Model.rb +1 -1
  41. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  42. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +2 -2
  43. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.hvac_systems.rb +1 -1
  44. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  45. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -36
  46. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.hvac_systems.rb +1 -1
  47. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  48. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -36
  49. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +3 -3
  50. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.hvac_systems.rb +1 -1
  51. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirTerminalSingleDuctVAVReheat.rb +1 -1
  52. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.elevators.rb +1 -1
  53. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirTerminalSingleDuctVAVReheat.rb +1 -1
  54. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.CoilHeatingGas.rb +1 -1
  55. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.elevators.rb +1 -1
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  58. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +7 -7
  59. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Courthouse.rb +8 -8
  60. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.FullServiceRestaurant.rb +14 -14
  61. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +9 -9
  62. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +16 -16
  63. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +7 -7
  64. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterHighITE.rb +8 -8
  65. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeDataCenterLowITE.rb +8 -8
  66. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +11 -11
  67. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +7 -7
  68. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +9 -9
  69. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +8 -8
  70. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +11 -11
  71. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MidriseApartment.rb +9 -9
  72. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +19 -19
  73. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +10 -10
  74. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.QuickServiceRestaurant.rb +13 -13
  75. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +6 -6
  76. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStripmall.rb +6 -6
  77. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -9
  78. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterHighITE.rb +8 -8
  79. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallDataCenterLowITE.rb +8 -8
  80. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallHotel.rb +8 -8
  81. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOffice.rb +8 -8
  82. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +11 -11
  83. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperMarket.rb +10 -10
  84. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SuperTallBuilding.rb +19 -19
  85. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.TallBuilding.rb +18 -18
  86. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +6 -6
  87. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +957 -957
  88. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +1 -1
  89. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +1 -1
  90. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +84 -16
  91. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +1 -1
  92. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +1 -1
  93. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +61 -10
  94. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +1 -1
  95. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoolingTower.rb +1 -1
  96. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +1 -1
  97. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -1
  98. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -1
  99. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +1 -1
  100. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +1 -1
  101. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +2 -2
  102. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +4 -4
  103. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +4 -4
  104. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +43 -30
  105. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.swh.rb +1 -1
  106. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +18 -11
  107. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +1 -1
  108. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +774 -117
  109. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +340 -481
  110. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +3 -3
  111. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +3 -3
  112. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +22 -22
  113. data/lib/openstudio-standards/prototypes/deer/deer.Model.rb +1 -1
  114. data/lib/openstudio-standards/qaqc/calibration.rb +131 -0
  115. data/lib/openstudio-standards/qaqc/create_results.rb +983 -0
  116. data/lib/openstudio-standards/qaqc/envelope.rb +399 -0
  117. data/lib/openstudio-standards/qaqc/eui.rb +213 -0
  118. data/lib/openstudio-standards/qaqc/hvac.rb +1943 -0
  119. data/lib/openstudio-standards/qaqc/internal_loads.rb +568 -0
  120. data/lib/openstudio-standards/qaqc/reporting.rb +141 -0
  121. data/lib/openstudio-standards/qaqc/schedules.rb +129 -0
  122. data/lib/openstudio-standards/qaqc/service_water_heating.rb +273 -0
  123. data/lib/openstudio-standards/qaqc/weather_files.rb +497 -0
  124. data/lib/openstudio-standards/qaqc/zone_conditions.rb +278 -0
  125. data/lib/openstudio-standards/schedules/create.rb +364 -0
  126. data/lib/openstudio-standards/schedules/information.rb +169 -0
  127. data/lib/openstudio-standards/schedules/modify.rb +445 -0
  128. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +110 -71
  129. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +3 -3
  130. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +4 -4
  131. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +2 -1
  132. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +16 -10
  133. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +4 -4
  134. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +1 -1
  135. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
  136. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +4 -4
  137. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +1 -1
  138. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +5 -5
  139. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +1 -1
  140. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
  141. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +1 -1
  142. data/lib/openstudio-standards/standards/Standards.Construction.rb +17 -18
  143. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +6 -6
  144. data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +1 -1
  145. data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +1 -1
  146. data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +1 -1
  147. data/lib/openstudio-standards/standards/Standards.Fan.rb +6 -12
  148. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +2 -2
  149. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +1 -1
  150. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +1 -1
  151. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +3 -3
  152. data/lib/openstudio-standards/standards/Standards.Model.rb +411 -261
  153. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -2
  154. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +94 -29
  155. data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -2
  156. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +2 -2
  157. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +14 -14
  158. data/lib/openstudio-standards/standards/Standards.Space.rb +37 -30
  159. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +38 -29
  160. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +7 -7
  161. data/lib/openstudio-standards/standards/Standards.Surface.rb +13 -13
  162. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +109 -66
  163. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +11 -4
  164. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +6 -6
  165. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
  166. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +1 -1
  167. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Space.rb +1 -1
  168. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Space.rb +1 -1
  169. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +4 -4
  170. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  171. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +4 -4
  172. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +4 -4
  173. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  174. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.CoolingTowerVariableSpeed.rb +1 -1
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +5 -21
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +4 -4
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.WaterHeaterMixed.rb +1 -1
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.ZoneHVACComponent.rb +1 -1
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +36 -4
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.CoolingTowerVariableSpeed.rb +1 -1
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +4 -4
  183. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.ZoneHVACComponent.rb +1 -1
  184. 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
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +53 -10
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoolingTowerVariableSpeed.rb +1 -1
  188. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +6 -6
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.ZoneHVACComponent.rb +2 -2
  190. 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
  191. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +211 -211
  192. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.economizers.json +14 -14
  193. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirLoopHVAC.rb +4 -4
  194. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +1 -1
  195. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.PlantLoop.rb +1 -1
  196. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.economizers.json +14 -14
  197. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirLoopHVAC.rb +4 -4
  198. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +1 -1
  199. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.PlantLoop.rb +1 -1
  200. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +6 -6
  201. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  202. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.CoolingTowerVariableSpeed.rb +1 -1
  203. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +1 -1
  204. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +4 -4
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +6 -6
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +1 -1
  208. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +1 -1
  209. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +4 -4
  210. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +22 -28
  211. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctParallelPIUReheat.rb +1 -1
  212. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctVAVReheat.rb +2 -2
  213. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.BoilerHotWater.rb +1 -74
  214. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +7 -59
  215. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +1 -1
  216. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +1 -1
  217. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +1 -1
  218. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +1 -1
  219. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +1 -21
  220. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.DesignSpecificationOutdoorAir.rb +101 -0
  221. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +1 -1
  222. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +1 -1
  223. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanVariableVolume.rb +1 -1
  224. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.HeatExchangerSensLat.rb +1 -1
  225. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +643 -526
  226. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +8 -2
  227. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +17 -77
  228. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +74 -16
  229. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +96 -44
  230. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Surface.rb +6 -6
  231. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ThermalZone.rb +18 -6
  232. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +1 -1
  233. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +328 -74
  234. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +0 -118
  235. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +2 -1
  236. 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
  237. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/baseline_outdoor_air.md +35 -0
  238. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_plug_load_measures.md +1 -1
  239. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +228 -0
  240. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +131 -0
  241. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_space.csv +1 -1
  242. data/lib/openstudio-standards/standards/cbes/cbes.AirLoopHVAC.rb +5 -5
  243. data/lib/openstudio-standards/standards/cbes/cbes.Model.rb +1 -1
  244. data/lib/openstudio-standards/standards/cbes/cbes.PlantLoop.rb +1 -1
  245. data/lib/openstudio-standards/standards/cbes/cbes.Space.rb +1 -1
  246. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.Space.rb +1 -1
  247. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.Space.rb +1 -1
  248. data/lib/openstudio-standards/standards/deer/deer.AirLoopHVAC.rb +109 -27
  249. data/lib/openstudio-standards/standards/deer/deer.Space.rb +1 -1
  250. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.economizers.json +246 -4
  251. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +246 -4
  252. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.economizers.json +246 -4
  253. data/lib/openstudio-standards/standards/deer/deer_2003/deer_2003.ThermalZone.rb +18 -18
  254. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.economizers.json +246 -4
  255. data/lib/openstudio-standards/standards/deer/deer_2007/deer_2007.ThermalZone.rb +18 -18
  256. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.economizers.json +246 -4
  257. data/lib/openstudio-standards/standards/deer/deer_2011/deer_2011.ThermalZone.rb +18 -18
  258. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.economizers.json +248 -6
  259. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.Space.rb +3 -3
  260. data/lib/openstudio-standards/standards/deer/deer_2014/deer_2014.ThermalZone.rb +18 -18
  261. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.economizers.json +248 -6
  262. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.Space.rb +3 -3
  263. data/lib/openstudio-standards/standards/deer/deer_2015/deer_2015.ThermalZone.rb +18 -18
  264. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.economizers.json +248 -6
  265. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.Space.rb +3 -3
  266. data/lib/openstudio-standards/standards/deer/deer_2017/deer_2017.ThermalZone.rb +18 -18
  267. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.economizers.json +248 -6
  268. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.AirLoopHVAC.rb +18 -5
  269. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.FanVariableVolume.rb +1 -1
  270. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.Space.rb +3 -3
  271. data/lib/openstudio-standards/standards/deer/deer_2020/deer_2020.ThermalZone.rb +18 -18
  272. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.economizers.json +248 -6
  273. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.AirLoopHVAC.rb +3 -3
  274. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.FanVariableVolume.rb +1 -1
  275. data/lib/openstudio-standards/standards/deer/deer_2025/deer_2025.Space.rb +3 -3
  276. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.economizers.json +248 -6
  277. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps.json +2 -2
  278. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.AirLoopHVAC.rb +3 -3
  279. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.FanVariableVolume.rb +1 -1
  280. data/lib/openstudio-standards/standards/deer/deer_2030/deer_2030.Space.rb +3 -3
  281. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.economizers.json +248 -6
  282. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.AirLoopHVAC.rb +3 -3
  283. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.FanVariableVolume.rb +1 -1
  284. data/lib/openstudio-standards/standards/deer/deer_2035/deer_2035.Space.rb +3 -3
  285. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.economizers.json +248 -6
  286. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.AirLoopHVAC.rb +3 -3
  287. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.FanVariableVolume.rb +1 -1
  288. data/lib/openstudio-standards/standards/deer/deer_2040/deer_2040.Space.rb +3 -3
  289. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.economizers.json +260 -0
  290. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.AirLoopHVAC.rb +3 -3
  291. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.FanVariableVolume.rb +1 -1
  292. data/lib/openstudio-standards/standards/deer/deer_2045/deer_2045.Space.rb +3 -3
  293. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.economizers.json +248 -6
  294. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.AirLoopHVAC.rb +3 -3
  295. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.FanVariableVolume.rb +1 -1
  296. data/lib/openstudio-standards/standards/deer/deer_2050/deer_2050.Space.rb +3 -3
  297. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.economizers.json +248 -6
  298. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.AirLoopHVAC.rb +3 -3
  299. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.FanVariableVolume.rb +1 -1
  300. data/lib/openstudio-standards/standards/deer/deer_2055/deer_2055.Space.rb +3 -3
  301. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.economizers.json +248 -6
  302. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.AirLoopHVAC.rb +3 -3
  303. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.FanVariableVolume.rb +1 -1
  304. data/lib/openstudio-standards/standards/deer/deer_2060/deer_2060.Space.rb +3 -3
  305. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.economizers.json +248 -6
  306. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.AirLoopHVAC.rb +3 -3
  307. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.FanVariableVolume.rb +1 -1
  308. data/lib/openstudio-standards/standards/deer/deer_2065/deer_2065.Space.rb +3 -3
  309. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.economizers.json +248 -6
  310. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.AirLoopHVAC.rb +3 -3
  311. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.FanVariableVolume.rb +1 -1
  312. data/lib/openstudio-standards/standards/deer/deer_2070/deer_2070.Space.rb +3 -3
  313. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.economizers.json +248 -6
  314. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.AirLoopHVAC.rb +3 -3
  315. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.FanVariableVolume.rb +1 -1
  316. data/lib/openstudio-standards/standards/deer/deer_2075/deer_2075.Space.rb +3 -3
  317. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.economizers.json +246 -4
  318. data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/data/space_types.json +447 -223
  319. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +1 -1
  320. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/space_types.json +447 -223
  321. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +5 -2
  322. data/lib/openstudio-standards/standards/necb/ECMS/data/chiller_types.json +25 -0
  323. data/lib/openstudio-standards/standards/necb/ECMS/data/chillers.json +44 -0
  324. data/lib/openstudio-standards/standards/necb/ECMS/data/curves.json +225 -0
  325. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +2 -2
  326. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +193 -73
  327. data/lib/openstudio-standards/standards/necb/ECMS/pv_ground.rb +1 -1
  328. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +10 -4
  329. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +7 -7
  330. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +4 -5
  331. data/lib/openstudio-standards/standards/necb/NECB2011/data/chiller_types.json +32 -0
  332. data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +1 -1
  333. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +36 -0
  334. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +7 -7
  335. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +47587 -0
  336. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +49764 -0
  337. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Warehouse.osm +283 -297
  338. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_type_unit_definitions.txt +2 -1
  339. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +447 -223
  340. data/lib/openstudio-standards/standards/necb/NECB2011/data/standards_data.rb +3 -3
  341. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +1 -1
  342. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +49 -27
  343. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +400 -202
  344. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +4 -4
  345. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +637 -318
  346. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +18 -1
  347. data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +3 -3
  348. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +637 -318
  349. data/lib/openstudio-standards/standards/necb/NECB2017/hvac_systems.rb +1 -1
  350. data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +3 -3
  351. data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +1 -1
  352. data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +615 -307
  353. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +4 -4
  354. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +10 -5
  355. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +1 -1
  356. data/lib/openstudio-standards/utilities/assertion.rb +128 -0
  357. data/lib/openstudio-standards/utilities/logging.rb +2 -3
  358. data/lib/openstudio-standards/utilities/object_info.rb +39 -18
  359. data/lib/openstudio-standards/utilities/schedule_translator.rb +8 -6
  360. data/lib/openstudio-standards/utilities/simulation.rb +24 -11
  361. data/lib/openstudio-standards/utilities/sqlfile.rb +10 -5
  362. data/lib/openstudio-standards/version.rb +1 -1
  363. data/lib/openstudio-standards/weather/Weather.Model.rb +8 -9
  364. data/lib/openstudio-standards/weather/Weather.stat_file.rb +3 -3
  365. data/lib/openstudio-standards/weather/information.rb +35 -0
  366. data/lib/openstudio-standards.rb +69 -5
  367. metadata +54 -18
  368. data/License.txt +0 -65
  369. data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
  370. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +0 -59
  371. data/lib/openstudio-standards/hvac_sizing/Siz.CoilCoolingWater.rb +0 -13
  372. data/lib/openstudio-standards/hvac_sizing/Siz.HVACComponent.rb +0 -36
  373. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +0 -898
  374. data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +0 -126
  375. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +0 -356
  376. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +0 -35
  377. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb +0 -110
  378. 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