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
@@ -4,7 +4,7 @@ class Standard
4
4
  # Returns standards data for selected space type and template
5
5
  #
6
6
  # @param space_type [OpenStudio::Model::SpaceType] space type object
7
- # @return [hash] hash of internal loads for different load types
7
+ # @return [Hash] hash of internal loads for different load types
8
8
  def space_type_get_standards_data(space_type)
9
9
  standards_building_type = if space_type.standardsBuildingType.is_initialized
10
10
  space_type.standardsBuildingType.get
@@ -48,7 +48,13 @@ class Standard
48
48
  interior_lighting_properties = model_find_object(standards_data['prm_interior_lighting'], search_criteria)
49
49
 
50
50
  if interior_lighting_properties.nil?
51
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.SpaceType', "Interior lighting PRM properties lookup failed: #{search_criteria}.")
51
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.SpaceType', "Interior lighting PRM properties lookup failed: #{search_criteria}. Trying to search with primary_space_type. It is highly recommended to update the standard space type to one of the lighting types listed in: https://pnnl.github.io/BEM-for-PRM/user_guide/model_requirements/standards_space_type/")
52
+ search_criteria = {
53
+ 'template' => template,
54
+ 'primary_space_type' => standards_space_type
55
+ }
56
+ interior_lighting_properties = model_find_object(standards_data['prm_interior_lighting'], search_criteria)
57
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.SpaceType', "Interior Lighting PRM properties lookup failed: #{search_criteria}")
52
58
  interior_lighting_properties = {}
53
59
  end
54
60
 
@@ -58,7 +64,7 @@ class Standard
58
64
  # Sets the color for the space types as shown in the SketchUp plugin using render by space type.
59
65
  #
60
66
  # @param space_type [OpenStudio::Model::SpaceType] space type object
61
- # @return [Bool] returns true if successful, false if not
67
+ # @return [Boolean] returns true if successful, false if not
62
68
  def space_type_apply_rendering_color(space_type)
63
69
  # Get the standards data
64
70
  space_type_properties = space_type_get_standards_data(space_type)
@@ -91,16 +97,16 @@ class Standard
91
97
  # loads directly assigned to spaces. This method skips plenums.
92
98
  #
93
99
  # @param space_type [OpenStudio::Model::SpaceType] space type object
94
- # @param set_people [Bool] if true, set the people density.
100
+ # @param set_people [Boolean] if true, set the people density.
95
101
  # Also, assign reasonable clothing, air velocity, and work efficiency inputs
96
102
  # to allow reasonable thermal comfort metrics to be calculated.
97
- # @param set_lights [Bool] if true, set the lighting density, lighting fraction
103
+ # @param set_lights [Boolean] if true, set the lighting density, lighting fraction
98
104
  # to return air, fraction radiant, and fraction visible.
99
- # @param set_electric_equipment [Bool] if true, set the electric equipment density
100
- # @param set_gas_equipment [Bool] if true, set the gas equipment density
101
- # @param set_ventilation [Bool] if true, set the ventilation rates (per-person and per-area)
102
- # @param set_infiltration [Bool] if true, set the infiltration rates
103
- # @return [Bool] returns true if successful, false if not
105
+ # @param set_electric_equipment [Boolean] if true, set the electric equipment density
106
+ # @param set_gas_equipment [Boolean] if true, set the gas equipment density
107
+ # @param set_ventilation [Boolean] if true, set the ventilation rates (per-person and per-area)
108
+ # @param set_infiltration [Boolean] if true, set the infiltration rates
109
+ # @return [Boolean] returns true if successful, false if not
104
110
  def space_type_apply_internal_loads(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation, set_infiltration)
105
111
  # Skip plenums
106
112
  # Check if the space type name
@@ -478,8 +484,9 @@ class Standard
478
484
  # Initially, only lighting power density will be set
479
485
  # Possibly infiltration will also be set from here
480
486
  #
481
- # @param model [OpenStudio::Model::SpaceType] OpenStudio space type object
487
+ # @param space_type [OpenStudio::Model::SpaceType] OpenStudio space type object
482
488
  # @param model [OpenStudio::Model::Model] OpenStudio model object
489
+ # @return [Boolean] returns true if successful, false if not
483
490
  def space_type_apply_int_loads_prm(space_type, model)
484
491
  # Skip plenums
485
492
  # Check if the space type name
@@ -522,14 +529,14 @@ class Standard
522
529
  else
523
530
  lighting_per_area_hash = {}
524
531
  multiple_lpd_value_check = true
525
- space_type.spaces.each do |space|
532
+ space_type.spaces.each do |space_type_space|
526
533
  # Space height
527
- space_volume = space.volume
528
- space_area = space.floorArea
534
+ space_volume = space_type_space.volume
535
+ space_area = space_type_space.floorArea
529
536
  space_height = space_volume / space_area
530
537
  # New lpd values
531
538
  lighting_per_area_new = lighting_per_area + lighting_per_length * space_height
532
- lighting_per_area_hash[space.name.to_s] = lighting_per_area_new
539
+ lighting_per_area_hash[space_type_space.name.to_s] = lighting_per_area_new
533
540
  end
534
541
  end
535
542
  end
@@ -564,10 +571,10 @@ class Standard
564
571
  end
565
572
  end
566
573
  else
567
- space_type.spaces.each do |space|
574
+ space_type.spaces.each do |space_type_space|
568
575
  new_space_type = space_type.clone.to_SpaceType.get
569
- space.setSpaceType(new_space_type)
570
- lighting_per_area = lighting_per_area_hash[space.name.to_s]
576
+ space_type_space.setSpaceType(new_space_type)
577
+ lighting_per_area = lighting_per_area_hash[space_type_space.name.to_s]
571
578
  new_space_type.lights.sort.each do |inst|
572
579
  definition = inst.lightsDefinition
573
580
  unless lighting_per_area.zero?
@@ -580,11 +587,13 @@ class Standard
580
587
  space_type.remove
581
588
  end
582
589
  end
590
+ return true
583
591
  end
584
592
 
585
593
  # Modify the lighting schedules for Appendix G PRM for 2016 and later
586
594
  #
587
595
  # @param model [OpenStudio::Model::Model] OpenStudio model object
596
+ # @return [Boolean] returns true if successful, false if not
588
597
  def space_type_light_sch_change(model)
589
598
  return true
590
599
  end
@@ -597,15 +606,15 @@ class Standard
597
606
  # does not inherit from the default schedule set.
598
607
  #
599
608
  # @param space_type [OpenStudio::Model::SpaceType] space type object
600
- # @param set_people [Bool] if true, set the occupancy and activity schedules
601
- # @param set_lights [Bool] if true, set the lighting schedule
602
- # @param set_electric_equipment [Bool] if true, set the electric schedule schedule
603
- # @param set_gas_equipment [Bool] if true, set the gas equipment density
604
- # @param set_infiltration [Bool] if true, set the infiltration schedule
605
- # @param make_thermostat [Bool] if true, makes a thermostat for this space type from the
609
+ # @param set_people [Boolean] if true, set the occupancy and activity schedules
610
+ # @param set_lights [Boolean] if true, set the lighting schedule
611
+ # @param set_electric_equipment [Boolean] if true, set the electric schedule schedule
612
+ # @param set_gas_equipment [Boolean] if true, set the gas equipment density
613
+ # @param set_infiltration [Boolean] if true, set the infiltration schedule
614
+ # @param make_thermostat [Boolean] if true, makes a thermostat for this space type from the
606
615
  # schedules listed for the space type. This thermostat is not hooked to any zone by this method,
607
616
  # but may be found and used later.
608
- # @return [Bool] returns true if successful, false if not
617
+ # @return [Boolean] returns true if successful, false if not
609
618
  def space_type_apply_internal_load_schedules(space_type, set_people, set_lights, set_electric_equipment, set_gas_equipment, set_ventilation, set_infiltration, make_thermostat)
610
619
  # Get the standards data
611
620
  space_type_properties = space_type_get_standards_data(space_type)
@@ -697,7 +706,7 @@ class Standard
697
706
  # @param space_type [OpenStudio::Model::SpaceType] space type object
698
707
  # @param space_type_properties [Hash] hash of space type properties
699
708
  # @param default_sch_set [OpenStudio::Model::DefaultScheduleSet] default schedule set
700
- # @return [Bool] returns true if successful, false if not
709
+ # @return [Boolean] returns true if successful, false if not
701
710
  def apply_lighting_schedule(space_type, space_type_properties, default_sch_set)
702
711
  lighting_sch = space_type_properties['lighting_schedule']
703
712
  return false if lighting_sch.nil?
@@ -710,9 +719,9 @@ class Standard
710
719
  # Returns standards data for selected construction
711
720
  #
712
721
  # @param space_type [OpenStudio::Model::SpaceType] space type object
713
- # @param intended_surface_type [string] the type of surface
714
- # @param standards_construction_type [string] the type of construction
715
- # @return [hash] hash of construction properties
722
+ # @param intended_surface_type [String] the type of surface
723
+ # @param standards_construction_type [String] the type of construction
724
+ # @return [Hash] hash of construction properties
716
725
  def space_type_get_construction_properties(space_type, intended_surface_type, standards_construction_type)
717
726
  # get building_category value
718
727
  building_category = if !space_type_get_standards_data(space_type).nil? && space_type_get_standards_data(space_type)['is_residential'] == 'Yes'
@@ -78,7 +78,7 @@ class Standard
78
78
  #
79
79
  # @param sub_surface [OpenStudio::Model::SubSurface] sub surface object
80
80
  # @param percent_reduction [Double] the fractional amount to reduce the area
81
- # @return [Bool] returns true if successful, false if not
81
+ # @return [Boolean] returns true if successful, false if not
82
82
  def sub_surface_reduce_area_by_percent_by_shrinking_toward_centroid(sub_surface, percent_reduction)
83
83
  # if percent_reduction > 1=> percent increase instead of reduction
84
84
  mult = percent_reduction <= 1 ? 1 - percent_reduction : percent_reduction
@@ -113,7 +113,7 @@ class Standard
113
113
  #
114
114
  # @param sub_surface [OpenStudio::Model::SubSurface] sub surface object
115
115
  # @param percent_reduction [Double] the fractional amount to reduce the area.
116
- # @return [Bool] returns true if successful, false if not
116
+ # @return [Boolean] returns true if successful, false if not
117
117
  def sub_surface_reduce_area_by_percent_by_raising_sill(sub_surface, percent_reduction)
118
118
  mult = 1 - percent_reduction
119
119
 
@@ -162,7 +162,7 @@ class Standard
162
162
  # meaning a rectangle where the bottom is parallel to the ground.
163
163
  #
164
164
  # @param sub_surface [OpenStudio::Model::SubSurface] sub surface object
165
- # @return [Bool] returns true if the surface is a vertical rectangle, false if not
165
+ # @return [Boolean] returns true if the surface is a vertical rectangle, false if not
166
166
  def sub_surface_vertical_rectangle?(sub_surface)
167
167
  # Get the vertices once
168
168
  verts = sub_surface.vertices
@@ -195,7 +195,7 @@ class Standard
195
195
  #
196
196
  # @param surface [OpenStudio::Model::Surface] surface object
197
197
  # @param area_fraction [Double] fraction of area of the larger surface
198
- # @return [Bool] returns true if successful, false if not
198
+ # @return [Boolean] returns true if successful, false if not
199
199
  def sub_surface_create_centered_subsurface_from_scaled_surface(surface, area_fraction)
200
200
  # Get rid of all existing subsurfaces.
201
201
  remove_all_subsurfaces(surface: surface)
@@ -245,7 +245,7 @@ class Standard
245
245
  # @param surface [OpenStudio::Model::Surface] surface object
246
246
  # @param area_fraction [Double] fraction of area of the larger surface
247
247
  # @param construction [OpenStudio::Model::Construction] construction to use for the new surface
248
- # @return [Bool] returns true if successful, false if not
248
+ # @return [Boolean] returns true if successful, false if not
249
249
  def sub_surface_create_scaled_subsurfaces_from_surface(surface:, area_fraction:, construction:)
250
250
  # Set geometry tolerences:
251
251
  geometry_tolerence = 12
@@ -334,7 +334,7 @@ class Standard
334
334
  # @param surface [OpenStudio::Model::Surface] surface object
335
335
  # @param area_fraction [Double] fraction of area of the larger surface
336
336
  # @param construction [OpenStudio::Model::Construction] construction to use for the new surface
337
- # @return [Bool] returns true if successful, false if not
337
+ # @return [Boolean] returns true if successful, false if not
338
338
  def set_window_to_wall_ratio_set_name(surface:, area_fraction:, construction:)
339
339
  surface.setWindowToWallRatio(area_fraction)
340
340
  surface.subSurfaces.sort.each do |sub_surf|
@@ -350,7 +350,7 @@ class Standard
350
350
  # Is a preparation for replaceing windows or clearing doors before adding windows.
351
351
  #
352
352
  # @param surface [OpenStudio::Model::Surface] surface object
353
- # @return [Bool] returns true if successful, false if not
353
+ # @return [Boolean] returns true if successful, false if not
354
354
  def remove_all_subsurfaces(surface:)
355
355
  surface.subSurfaces.sort.each(&:remove)
356
356
  return true
@@ -50,7 +50,8 @@ class Standard
50
50
  when 'Floor'
51
51
  infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['slab_on_grade']
52
52
  end
53
- when 'TODO Surface'
53
+ when 'Surface'
54
+ # @todo edit
54
55
  case surface_type
55
56
  when 'Floor'
56
57
  infil_rate_cfm_per_ft2 = component_infil_rates_cfm_per_ft2[type]['floor_over_unconditioned']
@@ -89,7 +90,7 @@ class Standard
89
90
  # @param sill_height_m [Double] sill height in meters
90
91
  # @param window_height_m [Double] window height in meters
91
92
  # @param fdwr [Double] fdwr
92
- # @return [Bool] returns true if successful, false if not
93
+ # @return [Boolean] returns true if successful, false if not
93
94
  def surface_replace_existing_subsurfaces_with_centered_subsurface(model, sill_height_m, window_height_m, fdwr)
94
95
  vertical_surfaces = find_exposed_conditioned_vertical_surfaces(model)
95
96
  vertical_surfaces.each do |vertical_surface|
@@ -381,9 +382,8 @@ class Standard
381
382
 
382
383
  # Returns the surface and subsurface UA product
383
384
  #
384
- # @param [OpenStudio::Model::Surface] OpenStudio model surface object
385
- #
386
- # @retrun [Double] UA product in W/K
385
+ # @param surface [OpenStudio::Model::Surface] OpenStudio model surface object
386
+ # @return [Double] UA product in W/K
387
387
  def surface_subsurface_ua(surface)
388
388
  # Compute the surface UA product
389
389
  if surface.outsideBoundaryCondition.to_s == 'GroundFCfactorMethod' && surface.construction.is_initialized
@@ -489,9 +489,9 @@ class Standard
489
489
 
490
490
  # Calculate the wwr of a surface
491
491
  #
492
- # @param surface [OpenStudio::Model::Surface]
493
- # @return [Float] window to wall ratio of a surface
494
- def surface_get_wwr_of_a_surface(surface)
492
+ # @param surface [OpenStudio::Model::Surface] OpenStudio Surface object
493
+ # @return [Double] window to wall ratio of a surface
494
+ def surface_get_wwr(surface)
495
495
  surface_area = surface.grossArea
496
496
  surface_fene_area = 0.0
497
497
  surface.subSurfaces.sort.each do |ss|
@@ -505,9 +505,9 @@ class Standard
505
505
  # Adjust the fenestration area to the values specified by the reduction value in a surface
506
506
  #
507
507
  # @param surface [OpenStudio::Model:Surface] openstudio surface object
508
- # @param reduction [Float] ratio of adjustments
508
+ # @param reduction [Double] ratio of adjustments
509
509
  # @param model [OpenStudio::Model::Model] openstudio model
510
- # @return [Bool] return true if successful, false if not
510
+ # @return [Boolean] returns true if successful, false if not
511
511
  def surface_adjust_fenestration_in_a_surface(surface, reduction, model)
512
512
  # Subsurfaces in this surface
513
513
  # Default case only handles reduction
@@ -527,9 +527,9 @@ class Standard
527
527
 
528
528
  # Calculate the door ratio of a surface
529
529
  #
530
- # @param surface [OpenStudio::Model::Surface]
531
- # @return [Float] window to wall ratio of a surface
532
- def surface_get_door_ratio_of_a_surface(surface)
530
+ # @param surface [OpenStudio::Model::Surface] OpenStudio Surface object
531
+ # @return [Double] window to wall ratio of a surface
532
+ def surface_get_door_ratio(surface)
533
533
  surface_area = surface.grossArea
534
534
  surface_door_area = 0.0
535
535
  surface.subSurfaces.sort.each do |ss|
@@ -96,7 +96,7 @@ class Standard
96
96
  # Convert total minimum OA requirement to a per-area value.
97
97
  #
98
98
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
99
- # @return [Bool] returns true if successful, false if not
99
+ # @return [Boolean] returns true if successful, false if not
100
100
  def thermal_zone_convert_oa_req_to_per_area(thermal_zone)
101
101
  # For each space in the zone, convert
102
102
  # all design OA to per-area
@@ -561,7 +561,7 @@ class Standard
561
561
  # In the event that they are equal, it will be assumed nonresidential.
562
562
  #
563
563
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
564
- # return [Bool] true if residential, false if nonresidential
564
+ # return [Boolean] true if residential, false if nonresidential
565
565
  def thermal_zone_residential?(thermal_zone)
566
566
  # Determine the respective areas
567
567
  res_area_m2 = 0
@@ -591,7 +591,7 @@ class Standard
591
591
  # This is as-defined by 90.1 Appendix G.
592
592
  #
593
593
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
594
- # @return [Bool] true if Fossil Fuel, Fossil/Electric Hybrid, and Purchased Heat zone,
594
+ # @return [Boolean] true if Fossil Fuel, Fossil/Electric Hybrid, and Purchased Heat zone,
595
595
  # false if Electric or Other.
596
596
  # @todo It's not doing it properly right now.
597
597
  # If you have a zone with a VRF + a DOAS (via an ATU SingleDUct Uncontrolled)
@@ -603,19 +603,30 @@ class Standard
603
603
  # Get an array of the heating fuels
604
604
  # used by the zone. Possible values are
605
605
  # Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
606
- # Coal, Diesel, Gasoline, DistrictHeating,
607
- # and SolarEnergy.
608
- htg_fuels = thermal_zone.heating_fuels
609
-
610
- if htg_fuels.include?('NaturalGas') ||
611
- htg_fuels.include?('Propane') ||
612
- htg_fuels.include?('PropaneGas') ||
613
- htg_fuels.include?('FuelOilNo1') ||
614
- htg_fuels.include?('FuelOilNo2') ||
615
- htg_fuels.include?('Coal') ||
616
- htg_fuels.include?('Diesel') ||
617
- htg_fuels.include?('Gasoline') ||
618
- htg_fuels.include?('DistrictHeating')
606
+ # Coal, Diesel, Gasoline, SolarEnergy,
607
+ # DistrictHeating, DistrictHeatingWater, and DistrictHeatingSteam.
608
+
609
+ # error if HVACComponent heating fuels method is not available
610
+ if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
611
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent method .heatingFuelTypes is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
612
+ end
613
+
614
+ htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
615
+
616
+ if htg_fuels.include?('Gas')
617
+ htg_fuels.include?('NaturalGas') ||
618
+ htg_fuels.include?('Propane') ||
619
+ htg_fuels.include?('PropaneGas') ||
620
+ htg_fuels.include?('FuelOil_1') ||
621
+ htg_fuels.include?('FuelOilNo1') ||
622
+ htg_fuels.include?('FuelOil_2') ||
623
+ htg_fuels.include?('FuelOilNo2') ||
624
+ htg_fuels.include?('Coal') ||
625
+ htg_fuels.include?('Diesel') ||
626
+ htg_fuels.include?('Gasoline') ||
627
+ htg_fuels.include?('DistrictHeating') ||
628
+ htg_fuels.include?('DistrictHeatingWater') ||
629
+ htg_fuels.include?('DistrictHeatingSteam')
619
630
 
620
631
  is_fossil = true
621
632
  end
@@ -626,10 +637,10 @@ class Standard
626
637
  end
627
638
 
628
639
  # for 2013 and prior, baseline fuel = proposed fuel
629
- # @param themal_zone
630
- # @return [string] with applicable DistrictHeating and/or DistrictCooling
631
- def thermal_zone_get_zone_fuels_for_occ_and_fuel_type(zone)
632
- zone_fuels = thermal_zone_fossil_or_electric_type(zone, '')
640
+ # @param thermal_zone
641
+ # @return [String with applicable DistrictHeating and/or DistrictCooling
642
+ def thermal_zone_get_zone_fuels_for_occ_and_fuel_type(thermal_zone)
643
+ zone_fuels = thermal_zone_fossil_or_electric_type(thermal_zone, '')
633
644
  return zone_fuels
634
645
  end
635
646
 
@@ -647,17 +658,27 @@ class Standard
647
658
  fossil = false
648
659
  electric = false
649
660
 
661
+ # error if HVACComponent heating fuels method is not available
662
+ if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
663
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent methods .heatingFuelTypes and .coolingFuelTypes are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
664
+ end
665
+
650
666
  # Fossil heating
651
- htg_fuels = thermal_zone.heating_fuels
652
- if htg_fuels.include?('NaturalGas') ||
653
- htg_fuels.include?('Propane') ||
654
- htg_fuels.include?('PropaneGas') ||
655
- htg_fuels.include?('FuelOilNo1') ||
656
- htg_fuels.include?('FuelOilNo2') ||
657
- htg_fuels.include?('Coal') ||
658
- htg_fuels.include?('Diesel') ||
659
- htg_fuels.include?('Gasoline') ||
660
- htg_fuels.include?('DistrictHeating')
667
+ htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
668
+ if htg_fuels.include?('Gas')
669
+ htg_fuels.include?('NaturalGas') ||
670
+ htg_fuels.include?('Propane') ||
671
+ htg_fuels.include?('PropaneGas') ||
672
+ htg_fuels.include?('FuelOil_1') ||
673
+ htg_fuels.include?('FuelOilNo1') ||
674
+ htg_fuels.include?('FuelOil_2') ||
675
+ htg_fuels.include?('FuelOilNo2') ||
676
+ htg_fuels.include?('Coal') ||
677
+ htg_fuels.include?('Diesel') ||
678
+ htg_fuels.include?('Gasoline') ||
679
+ htg_fuels.include?('DistrictHeating') ||
680
+ htg_fuels.include?('DistrictHeatingWater') ||
681
+ htg_fuels.include?('DistrictHeatingSteam')
661
682
  fossil = true
662
683
  end
663
684
 
@@ -668,7 +689,7 @@ class Standard
668
689
 
669
690
  # Cooling fuels, for determining
670
691
  # unconditioned zones
671
- clg_fuels = thermal_zone.cooling_fuels
692
+ clg_fuels = thermal_zone.coolingFuelTypes
672
693
 
673
694
  # Categorize
674
695
  fuel_type = nil
@@ -707,33 +728,42 @@ class Standard
707
728
  # Determine if the thermal zone is Fossil/Purchased Heat/Electric Hybrid
708
729
  #
709
730
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
710
- # @return [Bool] true if mixed Fossil/Electric Hybrid, and Purchased Heat zone, false if not
731
+ # @return [Boolean] true if mixed Fossil/Electric Hybrid, and Purchased Heat zone, false if not
711
732
  def thermal_zone_mixed_heating_fuel?(thermal_zone)
712
733
  is_mixed = false
713
734
 
735
+ # error if HVACComponent heating fuels method is not available
736
+ if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
737
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent method .heatingFuelTypes is not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
738
+ end
739
+
714
740
  # Get an array of the heating fuels
715
741
  # used by the zone. Possible values are
716
742
  # Electricity, NaturalGas, Propane, PropaneGas, FuelOilNo1, FuelOilNo2,
717
- # Coal, Diesel, Gasoline, DistrictHeating,
718
- # and SolarEnergy.
719
- htg_fuels = thermal_zone.heating_fuels
743
+ # Coal, Diesel, Gasoline, SolarEnergy,
744
+ # DistrictHeating, DistrictHeatingWater, and DistrictHeatingSteam.
745
+ htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
720
746
 
721
747
  # Includes fossil
722
748
  fossil = false
723
- if htg_fuels.include?('NaturalGas') ||
724
- htg_fuels.include?('Propane') ||
725
- htg_fuels.include?('PropaneGas') ||
726
- htg_fuels.include?('FuelOilNo1') ||
727
- htg_fuels.include?('FuelOilNo2') ||
728
- htg_fuels.include?('Coal') ||
729
- htg_fuels.include?('Diesel') ||
730
- htg_fuels.include?('Gasoline')
749
+ if htg_fuels.include?('Gas')
750
+ htg_fuels.include?('NaturalGas') ||
751
+ htg_fuels.include?('Propane') ||
752
+ htg_fuels.include?('PropaneGas') ||
753
+ htg_fuels.include?('FuelOil_1') ||
754
+ htg_fuels.include?('FuelOilNo1') ||
755
+ htg_fuels.include?('FuelOil_2') ||
756
+ htg_fuels.include?('FuelOilNo2') ||
757
+ htg_fuels.include?('Coal') ||
758
+ htg_fuels.include?('Diesel') ||
759
+ htg_fuels.include?('Gasoline')
731
760
 
732
761
  fossil = true
733
762
  end
734
763
 
735
764
  # Electric and fossil and district
736
- if htg_fuels.include?('Electricity') && htg_fuels.include?('DistrictHeating') && fossil
765
+ has_district_heating = (htg_fuels.include?('DistrictHeating') || htg_fuels.include?('DistrictHeatingWater') || htg_fuels.include?('DistrictHeatingSteam'))
766
+ if htg_fuels.include?('Electricity') && has_district_heating && fossil
737
767
  is_mixed = true
738
768
  OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "For #{thermal_zone.name}, heating mixed electricity, fossil, and district.")
739
769
  end
@@ -745,13 +775,13 @@ class Standard
745
775
  end
746
776
 
747
777
  # Electric and district
748
- if htg_fuels.include?('Electricity') && htg_fuels.include?('DistrictHeating')
778
+ if htg_fuels.include?('Electricity') && has_district_heating
749
779
  is_mixed = true
750
780
  OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "For #{thermal_zone.name}, heating mixed electricity and district.")
751
781
  end
752
782
 
753
783
  # Fossil and district
754
- if fossil && htg_fuels.include?('DistrictHeating')
784
+ if fossil && has_district_heating
755
785
  is_mixed = true
756
786
  OpenStudio.logFree(OpenStudio::Debug, 'openstudio.Standards.ThermalZone', "For #{thermal_zone.name}, heating mixed fossil and district.")
757
787
  end
@@ -837,9 +867,14 @@ class Standard
837
867
  end
838
868
  end
839
869
 
870
+ # error if HVACComponent heating fuels method is not available
871
+ if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
872
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required HVACComponent methods .heatingFuelTypes and .coolingFuelTypes are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
873
+ end
874
+
840
875
  # Get the zone heating and cooling fuels
841
- htg_fuels = thermal_zone.heating_fuels
842
- clg_fuels = thermal_zone.cooling_fuels
876
+ htg_fuels = thermal_zone.heatingFuelTypes.map(&:valueName)
877
+ clg_fuels = thermal_zone.coolingFuelTypes.map(&:valueName)
843
878
  is_fossil = thermal_zone_fossil_hybrid_or_purchased_heat?(thermal_zone)
844
879
 
845
880
  # Infer the HVAC type
@@ -944,7 +979,7 @@ class Standard
944
979
  #
945
980
  # @author Andrew Parker, Julien Marrec
946
981
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
947
- # @return [Bool] returns true if heated, false if not
982
+ # @return [Boolean] returns true if heated, false if not
948
983
  def thermal_zone_heated?(thermal_zone)
949
984
  temp_f = 41
950
985
  temp_c = OpenStudio.convert(temp_f, 'F', 'C').get
@@ -1094,7 +1129,7 @@ class Standard
1094
1129
  #
1095
1130
  # @author Andrew Parker, Julien Marrec
1096
1131
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1097
- # @return [Bool] returns true if cooled, false if not
1132
+ # @return [Boolean] returns true if cooled, false if not
1098
1133
  def thermal_zone_cooled?(thermal_zone)
1099
1134
  temp_f = 91
1100
1135
  temp_c = OpenStudio.convert(temp_f, 'F', 'C').get
@@ -1235,7 +1270,7 @@ class Standard
1235
1270
  # Determine if the thermal zone is a plenum based on whether a majority of the spaces in the zone are plenums or not.
1236
1271
  #
1237
1272
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1238
- # @return [Bool] returns true if majority plenum, false if not
1273
+ # @return [Boolean] returns true if majority plenum, false if not
1239
1274
  def thermal_zone_plenum?(thermal_zone)
1240
1275
  plenum_status = false
1241
1276
 
@@ -1261,7 +1296,7 @@ class Standard
1261
1296
  # Zone must be less than 200 ft^2 and also have an infiltration object specified using Flow/Zone.
1262
1297
  #
1263
1298
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1264
- # @return [Bool] returns true if vestibule, false if not
1299
+ # @return [Boolean] returns true if vestibule, false if not
1265
1300
  def thermal_zone_vestibule?(thermal_zone)
1266
1301
  is_vest = false
1267
1302
 
@@ -1286,24 +1321,31 @@ class Standard
1286
1321
  # Logic to detect indirectly-conditioned spaces cannot be implemented
1287
1322
  # as part of this measure as it would need to call itself.
1288
1323
  # It is implemented as part of space_conditioning_category().
1289
- # TODO: Add addendum db rules to 90.1-2019 for 90.1-2022 (use stable baseline value for zones designated as semiheated using proposed sizing run)
1324
+ # @todo Add addendum db rules to 90.1-2019 for 90.1-2022 (use stable baseline value for zones designated as semiheated using proposed sizing run)
1290
1325
  #
1291
1326
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1292
1327
  # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1293
1328
  # @return [String] NonResConditioned, ResConditioned, Semiheated, Unconditioned
1294
1329
  def thermal_zone_conditioning_category(thermal_zone, climate_zone)
1330
+ # error if zone design load methods are not available
1331
+ if thermal_zone.model.version < OpenStudio::VersionString.new('3.6.0')
1332
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Standards.ThermalZone', 'Required ThermalZone methods .autosizedHeatingDesignLoad and .autosizedCoolingDesignLoad are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.')
1333
+ end
1334
+
1295
1335
  # Get the heating load
1296
1336
  htg_load_btu_per_ft2 = 0.0
1297
- htg_load_w_per_m2 = thermal_zone.heatingDesignLoad
1298
- if htg_load_w_per_m2.is_initialized
1299
- htg_load_btu_per_ft2 = OpenStudio.convert(htg_load_w_per_m2.get, 'W/m^2', 'Btu/hr*ft^2').get
1337
+ htg_load_w = thermal_zone.autosizedHeatingDesignLoad
1338
+ if htg_load_w.is_initialized
1339
+ htg_load_w_per_m2 = thermal_zone.autosizedHeatingDesignLoad.get / thermal_zone.floorArea
1340
+ htg_load_btu_per_ft2 = OpenStudio.convert(htg_load_w_per_m2, 'W/m^2', 'Btu/hr*ft^2').get
1300
1341
  end
1301
1342
 
1302
1343
  # Get the cooling load
1303
1344
  clg_load_btu_per_ft2 = 0.0
1304
- clg_load_w_per_m2 = thermal_zone.coolingDesignLoad
1305
- if clg_load_w_per_m2.is_initialized
1306
- clg_load_btu_per_ft2 = OpenStudio.convert(clg_load_w_per_m2.get, 'W/m^2', 'Btu/hr*ft^2').get
1345
+ clg_load_w = thermal_zone.autosizedCoolingDesignLoad
1346
+ if clg_load_w.is_initialized
1347
+ clg_load_w_per_m2 = thermal_zone.autosizedCoolingDesignLoad.get / thermal_zone.floorArea
1348
+ clg_load_btu_per_ft2 = OpenStudio.convert(clg_load_w_per_m2, 'W/m^2', 'Btu/hr*ft^2').get
1307
1349
  end
1308
1350
 
1309
1351
  # Determine the heating limit based on climate zone
@@ -1523,7 +1565,7 @@ class Standard
1523
1565
  # This value determines zone air flows, which will be summed during system design airflow calculation.
1524
1566
  #
1525
1567
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1526
- # @return [Bool] returns true if successful, false if not
1568
+ # @return [Boolean] returns true if successful, false if not
1527
1569
  def thermal_zone_apply_prm_baseline_supply_temperatures(thermal_zone)
1528
1570
  # Skip spaces that aren't heated or cooled
1529
1571
  return true unless thermal_zone_heated?(thermal_zone) || thermal_zone_cooled?(thermal_zone)
@@ -1553,7 +1595,7 @@ class Standard
1553
1595
  # or cooled by thermal_zone_cooled?() and thermal_zone_heated?()
1554
1596
  #
1555
1597
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1556
- # @return [Bool] returns true if successful, false if not
1598
+ # @return [Boolean] returns true if successful, false if not
1557
1599
  def thermal_zone_add_unconditioned_thermostat(thermal_zone)
1558
1600
  # Heated to 0F (below thermal_zone_heated?(thermal_zone) threshold)
1559
1601
  htg_t_f = 0
@@ -1767,7 +1809,7 @@ class Standard
1767
1809
  #
1768
1810
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1769
1811
  # @param climate_zone [String] ASHRAE climate zone, e.g. 'ASHRAE 169-2013-4A'
1770
- # @return [Bool] Returns true if required, false if not
1812
+ # @return [Boolean] Returns true if required, false if not
1771
1813
  # @todo Add exception logic for 90.1-2013
1772
1814
  # for cells, sickrooms, labs, barbers, salons, and bowling alleys
1773
1815
  def thermal_zone_demand_control_ventilation_required?(thermal_zone, climate_zone)
@@ -1778,6 +1820,7 @@ class Standard
1778
1820
 
1779
1821
  # Not required if both limits nil
1780
1822
  if min_area_m2.nil? && min_area_m2_per_occ.nil?
1823
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ThermalZone', "For #{thermal_zone.name}: DCV is not required due to lack of minimum area requirements.")
1781
1824
  return dcv_required
1782
1825
  end
1783
1826
 
@@ -1964,7 +2007,7 @@ class Standard
1964
2007
  # returns adjacent zones that share a wall with the zone
1965
2008
  #
1966
2009
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1967
- # @param same_floor [Bool] only valid option for now is true
2010
+ # @param same_floor [Boolean] only valid option for now is true
1968
2011
  # @return [Array<OpenStudio::Model::ThermalZone>] array of adjacent thermal zones
1969
2012
  def thermal_zone_get_adjacent_zones_with_shared_wall_areas(thermal_zone, same_floor = true)
1970
2013
  adjacent_zones = []
@@ -1988,16 +2031,16 @@ class Standard
1988
2031
  # returns true if DCV is required for exhaust fan for specified tempate
1989
2032
  #
1990
2033
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1991
- # @return [Bool] returns true if DCV is required for exhaust fan for specified template, false if not
2034
+ # @return [Boolean] returns true if DCV is required for exhaust fan for specified template, false if not
1992
2035
  def thermal_zone_exhaust_fan_dcv_required?(thermal_zone); end
1993
2036
 
1994
2037
  # Add DCV to exhaust fan and if requsted to related objects
1995
2038
  #
1996
2039
  # @param thermal_zone [OpenStudio::Model::ThermalZone] thermal zone
1997
- # @param change_related_objects [Bool] change related objects
2040
+ # @param change_related_objects [Boolean] change related objects
1998
2041
  # @param zone_mixing_objects [Array<OpenStudio::Model::ZoneMixing>] array of zone mixing objects
1999
2042
  # @param transfer_air_source_zones [Array<OpenStudio::Model::ThermalZone>] array thermal zones that transfer air
2000
- # @return [Bool] returns true if successful, false if not
2043
+ # @return [Boolean] returns true if successful, false if not
2001
2044
  # @todo this method is currently empty
2002
2045
  def thermal_zone_add_exhaust_fan_dcv(thermal_zone, change_related_objects = true, zone_mixing_objects = [], transfer_air_source_zones = [])
2003
2046
  # set flow fraction schedule for all zone exhaust fans and then set zone mixing schedule to the intersection of exhaust availability and exhaust fractional schedule