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
@@ -255,7 +255,6 @@ class ECMS
255
255
  end
256
256
  end
257
257
  max_net_vert_distance = max_vert_distance + min_vert_distance
258
- max_net_vert_distance = [max_net_vert_distance, 0.000001].max
259
258
 
260
259
  return max_equiv_distance, max_net_vert_distance
261
260
  end
@@ -467,10 +466,10 @@ class ECMS
467
466
  # =============================================================================================================================
468
467
  # The first 5 letters of the air loop name designate the system type (sys_abbr). This method updates the system type designation
469
468
  # in the air loop name. At the same time the chosen air loop names are checked to avoid duplicate names from being used in the
470
- # hash for system to zomes.
469
+ # hash for system to zones.
471
470
  def update_system_zones_map_keys(system_zones_map,sys_abbr)
472
471
  updated_system_zones_map = {}
473
- system_zones_map.sort.each do |sname,zones|
472
+ system_zones_map.each do |sname,zones|
474
473
  updated_sys_name = "#{sys_abbr}#{sname[5..-1]}"
475
474
  if !updated_system_zones_map.has_key? updated_sys_name
476
475
  updated_system_zones_map[updated_sys_name] = zones
@@ -595,12 +594,12 @@ class ECMS
595
594
 
596
595
  # =============================================================================================================================
597
596
  # Apply efficiencies for ECM 'hs08_ccashp_vrf'
598
- def apply_efficiency_ecm_hs08_ccashp_vrf(model, air_sys_eqpt_type: 'ccashp')
597
+ def apply_efficiency_ecm_hs08_ccashp_vrf(model, standard, air_sys_eqpt_type: 'ccashp')
599
598
  # Use same performance data as ECM 'hs09_ccashpsys' for air system
600
599
  if air_sys_eqpt_type == 'ccashp'
601
- apply_efficiency_ecm_hs09_ccashp_baseboard(model)
600
+ apply_efficiency_ecm_hs09_ccashp_baseboard(model,standard)
602
601
  elsif air_sys_eqpt_type == 'ashp'
603
- apply_efficiency_ecm_hs12_ashp_baseboard(model)
602
+ apply_efficiency_ecm_hs12_ashp_baseboard(model,standard)
604
603
  end
605
604
  # Apply efficiency for VRF units
606
605
  eqpt_name = 'Mitsubishi_Hyper_Heating_VRF_Outdoor_Unit'
@@ -1042,8 +1041,13 @@ class ECMS
1042
1041
  htg_eqpt = nil
1043
1042
  case loop_htg_eqpt_type.downcase
1044
1043
  when "district_heating"
1045
- htg_eqpt = OpenStudio::Model::DistrictHeating.new(model)
1046
- htg_eqpt.setName("DistrictHeating")
1044
+ if model.version < OpenStudio::VersionString.new('3.7.0')
1045
+ htg_eqpt = OpenStudio::Model::DistrictHeating.new(model)
1046
+ else
1047
+ htg_eqpt = OpenStudio::Model::DistrictHeatingWater.new(model)
1048
+ end
1049
+ htg_eqpt.setName("DistrictHeating")
1050
+
1047
1051
  when "heatpump_watertowater_equationfit"
1048
1052
  htg_eqpt = OpenStudio::Model::HeatPumpWaterToWaterEquationFitHeating.new(model)
1049
1053
  htg_eqpt.setName("HeatPumpWaterToWaterEquationFitHeating")
@@ -1106,7 +1110,11 @@ class ECMS
1106
1110
  heat_rej_eqpt = OpenStudio::Model::GroundHeatExchangerVertical.new(model)
1107
1111
  heat_rej_eqpt.setName("GroundHeatExchangerVertical")
1108
1112
  when "district_heating"
1109
- heat_rej_eqpt = OpenStudio::Model::DistrictHeating.new(model)
1113
+ if model.version < OpenStudio::VersionString.new('3.7.0')
1114
+ heat_rej_eqpt = OpenStudio::Model::DistrictHeating.new(model)
1115
+ else
1116
+ heat_rej_eqpt = OpenStudio::Model::DistrictHeatingWater.new(model)
1117
+ end
1110
1118
  heat_rej_eqpt.setName("DistrictHeating")
1111
1119
  when "district_cooling"
1112
1120
  heat_rej_eqpt = OpenStudio::Model::DistrictCooling.new(model)
@@ -1253,13 +1261,16 @@ class ECMS
1253
1261
  coil_cooling_dx_variable_speed_apply_curves(clg_dx_coil, eqpt_name)
1254
1262
  coil_heating_dx_variable_speed_apply_curves(htg_dx_coil, eqpt_name)
1255
1263
  # add zone equipment and diffuser
1256
- zone_htg_eqpt_type = 'baseboard_hotwater' if heating_fuel == 'NaturalGas'
1257
- zone_htg_eqpt_type = 'baseboard_electric' if heating_fuel == 'Electricity'
1258
- zone_htg_eqpt_type = 'ptac_electric_off' if sys_info['sys_vent_type'] == 'doas'
1259
- zone_clg_eqpt_type = 'none'
1260
- zone_clg_eqpt_type = 'ptac_electric_off' if sys_info['sys_vent_type'] == 'doas'
1261
- zone_fan_type = 'none'
1262
- zone_fan_type = 'constant_volume' if sys_info['sys_vent_type'] == 'doas'
1264
+ if sys_info['sys_vent_type'] == 'doas'
1265
+ zone_htg_eqpt_type = 'ptac_electric_off'
1266
+ zone_clg_eqpt_type = 'ptac_electric_off'
1267
+ zone_fan_type = 'constant_volume'
1268
+ else
1269
+ zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
1270
+ zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
1271
+ zone_clg_eqpt_type = 'none'
1272
+ zone_fan_type = 'none'
1273
+ end
1263
1274
  add_zone_eqpt(model: model,
1264
1275
  airloop: airloop,
1265
1276
  zones: zones,
@@ -1271,9 +1282,9 @@ class ECMS
1271
1282
  zone_fan_type: zone_fan_type,
1272
1283
  hw_loop: hw_loop)
1273
1284
  # for doas use baseboard electric or hotwater as backup for PTAC units
1274
- zone_htg_eqpt_type = 'baseboard_hotwater' if heating_fuel == 'NaturalGas'
1275
- zone_htg_eqpt_type = 'baseboard_electric' if heating_fuel == 'Electricity'
1276
1285
  if sys_info['sys_vent_type'] == 'doas'
1286
+ zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
1287
+ zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
1277
1288
  add_zone_eqpt(model: model,
1278
1289
  airloop: airloop,
1279
1290
  zones: zones,
@@ -1294,7 +1305,7 @@ class ECMS
1294
1305
 
1295
1306
  # =============================================================================================================================
1296
1307
  # Apply effiencies for ECM "hs09_ccashp_baseboard"
1297
- def apply_efficiency_ecm_hs09_ccashp_baseboard(model)
1308
+ def apply_efficiency_ecm_hs09_ccashp_baseboard(model,standard)
1298
1309
  # fraction of electric backup heating coil capacity assigned to dx heating coil
1299
1310
  fr_backup_coil_cap_as_dx_coil_cap = 0.5
1300
1311
  model.getAirLoopHVACs.sort.each do |isys|
@@ -1464,9 +1475,9 @@ class ECMS
1464
1475
 
1465
1476
  # =============================================================================================================================
1466
1477
  # Apply efficiencies and performance curves for ECM "hs11_ashp_pthp"
1467
- def apply_efficiency_ecm_hs11_ashp_pthp(model)
1478
+ def apply_efficiency_ecm_hs11_ashp_pthp(model,standard)
1468
1479
  fr_backup_coil_cap_as_dx_coil_cap = 0.5 # fraction of electric backup heating coil capacity assigned to dx heating coil
1469
- apply_efficiency_ecm_hs12_ashp_baseboard(model)
1480
+ apply_efficiency_ecm_hs12_ashp_baseboard(model,standard)
1470
1481
  pthp_eqpt_name = 'HS11_PTHP'
1471
1482
  model.getAirLoopHVACs.sort.each do |isys|
1472
1483
  isys.thermalZones.each do |zone|
@@ -1576,13 +1587,16 @@ class ECMS
1576
1587
  coil_cooling_dx_single_speed_apply_curves(clg_dx_coil,eqpt_name)
1577
1588
  coil_heating_dx_single_speed_apply_curves(htg_dx_coil,eqpt_name)
1578
1589
  # add zone equipment and diffuser
1579
- zone_htg_eqpt_type = 'baseboard_hotwater' if heating_fuel == 'NaturalGas'
1580
- zone_htg_eqpt_type = 'baseboard_electric' if heating_fuel == 'Electricity'
1581
- zone_htg_eqpt_type = 'ptac_electric_off' if sys_info['sys_vent_type'] == 'doas'
1582
- zone_clg_eqpt_type = 'none'
1583
- zone_clg_eqpt_type = 'ptac_electric_off' if sys_info['sys_vent_type'] == 'doas'
1584
- zone_fan_type = 'none'
1585
- zone_fan_type = 'constant_volume' if sys_info['sys_vent_type'] == 'doas'
1590
+ if sys_info['sys_vent_type'] == 'doas'
1591
+ zone_htg_eqpt_type = 'ptac_electric_off'
1592
+ zone_clg_eqpt_type = 'ptac_electric_off'
1593
+ zone_fan_type = 'constant_volume'
1594
+ else
1595
+ zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
1596
+ zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
1597
+ zone_clg_eqpt_type = 'none'
1598
+ zone_fan_type = 'none'
1599
+ end
1586
1600
  add_zone_eqpt(model: model,
1587
1601
  airloop: airloop,
1588
1602
  zones: zones,
@@ -1595,6 +1609,8 @@ class ECMS
1595
1609
  hw_loop: hw_loop)
1596
1610
  # for doas use baseboard electric or hotwater as backup for PTAC units
1597
1611
  if sys_info['sys_vent_type'] == 'doas'
1612
+ zone_htg_eqpt_type = 'baseboard_electric' if updated_heating_fuel == 'Electricity'
1613
+ zone_htg_eqpt_type = 'baseboard_hotwater' if updated_heating_fuel == 'NaturalGas'
1598
1614
  add_zone_eqpt(model: model,
1599
1615
  airloop: airloop,
1600
1616
  zones: zones,
@@ -1630,7 +1646,7 @@ class ECMS
1630
1646
 
1631
1647
  # =============================================================================================================================
1632
1648
  # Apply efficiencies and performance curves for ECM "hs12_ashp_baseboard"
1633
- def apply_efficiency_ecm_hs12_ashp_baseboard(model)
1649
+ def apply_efficiency_ecm_hs12_ashp_baseboard(model,standard)
1634
1650
  fr_backup_coil_cap_as_dx_coil_cap = 0.5 # fraction of electric backup heating coil capacity assigned to dx heating coil
1635
1651
  ashp_eqpt_name = 'NECB2015_ASHP'
1636
1652
  model.getAirLoopHVACs.sort.each do |isys|
@@ -1706,9 +1722,9 @@ class ECMS
1706
1722
 
1707
1723
  # =============================================================================================================================
1708
1724
  # Apply efficiencies and performance curves for ECM "hs12_ashp_vrf"
1709
- def apply_efficiency_ecm_hs13_ashp_vrf(model)
1725
+ def apply_efficiency_ecm_hs13_ashp_vrf(model,standard)
1710
1726
  # call method for ECM hs08 with ASHP in air system
1711
- apply_efficiency_ecm_hs08_ccashp_vrf(model, air_sys_eqpt_type: 'ashp')
1727
+ apply_efficiency_ecm_hs08_ccashp_vrf(model, standard, air_sys_eqpt_type: 'ashp')
1712
1728
  end
1713
1729
 
1714
1730
  # =============================================================================================================================
@@ -1825,7 +1841,7 @@ class ECMS
1825
1841
  loop_spm_type: 'Scheduled',
1826
1842
  loop_setpoint: 50.0,
1827
1843
  loop_temp_diff: 5.0)
1828
- model.getCoilHeatingWaters.each {|coil| hw_loop.addDemandBranchForComponent(coil)}
1844
+ model.getCoilHeatingWaters.sort.each {|coil| hw_loop.addDemandBranchForComponent(coil)}
1829
1845
  hcapf_curve_name = "HEATPUMP_WATERTOWATER_HCAPF"
1830
1846
  hcapf_curve = model_add_curve(model, hcapf_curve_name)
1831
1847
  if hcapf_curve
@@ -1857,7 +1873,7 @@ class ECMS
1857
1873
 
1858
1874
  chw_loop_clg_eqpt.setName('ChillerWaterCooled')
1859
1875
  chw_loop_clg_eqpt.setCondenserType("WaterCooled")
1860
- model.getCoilCoolingWaters.each {|coil| chw_loop.addDemandBranchForComponent(coil)}
1876
+ model.getCoilCoolingWaters.sort.each {|coil| chw_loop.addDemandBranchForComponent(coil)}
1861
1877
  sec_chiller = OpenStudio::Model::ChillerElectricEIR.new(model)
1862
1878
  chw_loop_clg_eqpt_outlet_node = chw_loop_clg_eqpt.supplyOutletModelObject.get.to_Node.get
1863
1879
  sec_chiller.addToNode(chw_loop_clg_eqpt_outlet_node)
@@ -1900,20 +1916,23 @@ class ECMS
1900
1916
 
1901
1917
  #=============================================================================================================================
1902
1918
  # Appy efficiencies for ECM "hs14_cgshp_fancoils"
1903
- def apply_efficiency_ecm_hs14_cgshp_fancoils(model)
1919
+ def apply_efficiency_ecm_hs14_cgshp_fancoils(model,standard)
1904
1920
  heatpump_siz_f = 0.4 # sizing factor for water-source heat pump (heating mode)
1905
1921
  chiller_siz_f = 0.4 # sizing factor for water-cooled chiller
1906
- # get water-source heat pump
1922
+ # get water-source heat pump and boiler
1907
1923
  hw_loops = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'heating'}
1908
1924
  hw_heatpump_loop = nil
1909
1925
  hw_heatpump = nil
1926
+ hw_boiler = nil
1910
1927
  hw_loops.each do |hw_loop|
1911
1928
  hw_heatpumps = hw_loop.supplyComponents.select {|comp| comp.to_HeatPumpWaterToWaterEquationFitHeating.is_initialized}
1912
1929
  if !hw_heatpumps.empty?
1913
1930
  hw_heatpump_loop = hw_loop
1914
1931
  hw_heatpump = hw_heatpumps[0].to_HeatPumpWaterToWaterEquationFitHeating.get
1915
- break
1916
1932
  end
1933
+ hw_boilers = hw_loop.supplyComponents.select {|comp| comp.to_BoilerHotWater.is_initialized}
1934
+ hw_boiler = hw_boilers[0].to_BoilerHotWater.get if !hw_boilers.empty?
1935
+ break if !hw_heatpump_loop.nil? && !hw_heatpump.nil? && !hw_boiler.nil?
1917
1936
  end
1918
1937
  raise("apply_efficiency_ecm_hs14_cgshp_fancoils: no water-source heat pump found in heating loop #{hw_loops.name.to_s}") if hw_heatpump.nil?
1919
1938
  cw_loop = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'condenser'}[0]
@@ -1937,8 +1956,10 @@ class ECMS
1937
1956
  cw_loop.setMaximumLoopFlowRate(cw_loop_max_flow)
1938
1957
  cw_loop_pump = cw_loop.supplyComponents.select {|comp| comp.to_PumpVariableSpeed.is_initialized}[0].to_PumpVariableSpeed.get
1939
1958
  cw_loop_pump.setRatedFlowRate(cw_loop_max_flow)
1940
- # set heating capacity of water-source heat pump
1941
- if hw_heatpump.ratedHeatingCapacity.is_initialized
1959
+ # set heating capacity of water-source heat pump and boiler
1960
+ if hw_heatpump.autosizedRatedHeatingCapacity.is_initialized
1961
+ cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
1962
+ elsif hw_heatpump.ratedHeatingCapacity.is_initialized
1942
1963
  cap = hw_heatpump.ratedHeatingCapacity.to_f
1943
1964
  elsif hw_heatpump.autosizedRatedHeatingCapacity.is_initialized
1944
1965
  cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
@@ -1946,18 +1967,22 @@ class ECMS
1946
1967
  raise("apply_efficiency_ecm_hs14_cgshp_fancoils: capacity of water-source heat pump #{hw_heatpump.name.to_s} is not defined")
1947
1968
  end
1948
1969
  hw_heatpump.setRatedHeatingCapacity(heatpump_siz_f*cap)
1949
- # set cooling capacity of water-cooled chiller
1970
+ hw_boiler.setNominalCapacity((1.0-heatpump_siz_f)*cap)
1971
+ # set cooling capacity of chillers
1950
1972
  chillers = chw_loop.supplyComponents.select {|comp| comp.to_ChillerElectricEIR.is_initialized}
1951
1973
  chiller_water_cooled = nil
1974
+ chiller_air_cooled = nil
1952
1975
  chillers.each do |comp|
1953
1976
  chlr = comp.to_ChillerElectricEIR.get
1954
- if chlr.name.to_s.include? 'ChillerWaterCooled'
1955
- chiller_water_cooled = chlr
1956
- break
1957
- end
1958
- end
1977
+ chiller_water_cooled = chlr if chlr.name.to_s.include? 'ChillerWaterCooled'
1978
+ chiller_air_cooled = chlr if chlr.name.to_s.include? 'ChillerAirCooled'
1979
+ break if !chiller_water_cooled.nil? && !chiller_air_cooled.nil?
1980
+ end
1959
1981
  raise("apply_efficiency_ecm_hs14_cgshp_fancoils: no water-cooled chiller found in cooling loop #{chw_loop.name.to_s}") if chiller_water_cooled.nil?
1960
- if chiller_water_cooled.referenceCapacity.is_initialized
1982
+ raise("apply_efficiency_ecm_hs14_cgshp_fancoils: no air-cooled chiller found in cooling loop #{chw_loop.name.to_s}") if chiller_air_cooled.nil?
1983
+ if chiller_water_cooled.autosizedReferenceCapacity.is_initialized
1984
+ cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
1985
+ elsif chiller_water_cooled.referenceCapacity.is_initialized
1961
1986
  cap = chiller_water_cooled.referenceCapacity.to_f
1962
1987
  elsif chiller_water_cooled.autosizedReferenceCapacity.is_initialized
1963
1988
  cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
@@ -1965,6 +1990,24 @@ class ECMS
1965
1990
  raise("apply_efficiency_ecm_hs14_cgshp_fancoils: cooling capacity of chiller #{chiller_water_cooled.name.to_s} is not defined")
1966
1991
  end
1967
1992
  chiller_water_cooled.setReferenceCapacity(chiller_siz_f*cap)
1993
+ chiller_air_cooled.setReferenceCapacity((1.0-chiller_siz_f)*cap)
1994
+ # call standard efficiency method again for water-cooled chiller
1995
+ new_chlr_name = chiller_water_cooled.name.to_s.chomp!(chiller_water_cooled.name.to_s.split.last).strip
1996
+ new_chlr_name = new_chlr_name.chomp!(new_chlr_name.split.last).strip
1997
+ new_chlr_name = new_chlr_name.chomp!(new_chlr_name.split.last).strip
1998
+ chiller_water_cooled.setName(new_chlr_name)
1999
+ standard.chiller_electric_eir_apply_efficiency_and_curves(chiller_water_cooled,nil)
2000
+ # set curves and cop of air-cooled chiller
2001
+ chlr_cap_w = (1.0-chiller_siz_f)*cap
2002
+ chlr_cap_ton = OpenStudio.convert(chlr_cap_w, 'W', 'ton').get
2003
+ search_criteria = {}
2004
+ search_criteria['cooling_type'] = 'AirCooled'
2005
+ chlr_props = model_find_object(standards_data['tables']['chiller_types_ecm']['table'], search_criteria, chlr_cap_ton)
2006
+ chiller_air_cooled.setName("ChillerAirCooled #{chlr_props['compressor_type']}")
2007
+ search_criteria = {}
2008
+ search_criteria['name'] = 'NECB2020_AirCooledChiller'
2009
+ search_criteria['compressor_type'] = chlr_props['compressor_type']
2010
+ chiller_electric_eir_apply_curves_and_cop(chiller_air_cooled, search_criteria)
1968
2011
  end
1969
2012
 
1970
2013
  #=============================================================================================================================
@@ -1975,11 +2018,20 @@ class ECMS
1975
2018
  # maximum district cooling rate on the summer design day.
1976
2019
 
1977
2020
  cw_loops = model.getPlantLoops.select{|loop| loop.sizingPlant.loopType.to_s.downcase == 'condenser'}
1978
- ghx_loops = cw_loops.select {|loop| loop.name.to_s.downcase.include? 'glhx'}
2021
+ ghx_loops = cw_loops.select { |loop| loop.name.to_s.downcase.include? 'glhx' }
1979
2022
  return if ghx_loops.empty?
1980
2023
  ghx_loop = ghx_loops[0]
1981
- dist_htg_eqpts = ghx_loop.supplyComponents.select {|comp| comp.to_DistrictHeating.is_initialized}
1982
- dist_htg_eqpt = dist_htg_eqpts[0].to_DistrictHeating.get if !dist_htg_eqpts.empty?
2024
+ dist_htg_eqpts = ghx_loop.supplyComponents.select { |comp| comp.iddObjectType.valueName.to_s.include?('DistrictHeating') }
2025
+ if !dist_htg_eqpts.empty?
2026
+ case dist_htg_eqpts[0].iddObjectType.valueName.to_s
2027
+ when 'OS_DistrictHeating'
2028
+ dist_htg_eqpt = dist_htg_eqpts[0].to_DistrictHeating.get
2029
+ when 'OS_DistrictHeatingWater'
2030
+ dist_htg_eqpt = dist_htg_eqpts[0].to_DistrictHeatingWater.get
2031
+ when 'OS_DistrictHeatingSteam'
2032
+ dist_htg_eqpt = dist_htg_eqpts[0].to_DistrictHeatingSteam.get
2033
+ end
2034
+ end
1983
2035
  dist_clg_eqpts = ghx_loop.supplyComponents.select {|comp| comp.to_DistrictCooling.is_initialized}
1984
2036
  dist_clg_eqpt = dist_clg_eqpts[0].to_DistrictCooling.get if !dist_clg_eqpts.empty?
1985
2037
  raise("set_cond_loop_district_cap: condenser loop doesn't have a district heating and district cooling objects") if dist_htg_eqpts.empty? || dist_clg_eqpts.empty?
@@ -2101,14 +2153,13 @@ class ECMS
2101
2153
  capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed)
2102
2154
  capacity_w = [1.0,capacity_w].max
2103
2155
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2104
- capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
2105
2156
 
2106
2157
  # Lookup efficiencies
2107
2158
  props = model_find_object(standards_data['tables']['heat_pump_heating_ecm']['table'], search_criteria, capacity_btu_per_hr)
2108
2159
 
2109
2160
  # Check to make sure properties were found
2110
2161
  if props.nil?
2111
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
2162
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}.")
2112
2163
  successfully_set_all_properties = false
2113
2164
  end
2114
2165
 
@@ -2168,6 +2219,62 @@ class ECMS
2168
2219
 
2169
2220
  end
2170
2221
 
2222
+ # =============================================================================================================================
2223
+ # Applies the performance curves "ChillerElectricEIR" object.
2224
+ def chiller_electric_eir_apply_curves_and_cop(chiller_electric_eir, search_criteria)
2225
+ successfully_set_all_properties = true
2226
+
2227
+ # Get the capacity
2228
+ capacity_w = chiller_electric_eir_find_capacity(chiller_electric_eir)
2229
+ capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
2230
+
2231
+ # Lookup performance curves
2232
+ chlr_props = model_find_object(standards_data['tables']['chillers_ecm']['table'], search_criteria, capacity_tons)
2233
+
2234
+ # Check to make sure properties were found
2235
+ if chlr_props.nil?
2236
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find efficiency info using #{search_criteria}")
2237
+ successfully_set_all_properties = false
2238
+ end
2239
+
2240
+ # CAP-FT curve
2241
+ capft = model_add_curve(chiller_electric_eir.model, chlr_props['capft'])
2242
+ if capft
2243
+ chiller_electric_eir.setCoolingCapacityFunctionOfTemperature(capft)
2244
+ else
2245
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find cap_ft curve, will not be set.")
2246
+ successfully_set_all_properties = false
2247
+ end
2248
+
2249
+ # EIR-FT curve
2250
+ eirft = model_add_curve(chiller_electric_eir.model, chlr_props['eirft'])
2251
+ if eirft
2252
+ chiller_electric_eir.setElectricInputToCoolingOutputRatioFunctionOfTemperature(eirft)
2253
+ else
2254
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find eir_ft curve, will not be set.")
2255
+ successfully_set_all_properties = false
2256
+ end
2257
+
2258
+ # EIR-FPLR curve
2259
+ eirfplr = model_add_curve(chiller_electric_eir.model, chlr_props['eirfplr'])
2260
+ if eirfplr
2261
+ chiller_electric_eir.setElectricInputToCoolingOutputRatioFunctionOfPLR(eirfplr)
2262
+ else
2263
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find eir_fplr curve, will not be set.")
2264
+ successfully_set_all_properties = false
2265
+ end
2266
+
2267
+ # set COP
2268
+ cop = chlr_props['minimum_coefficient_of_performance_cooling'].to_f
2269
+ if cop
2270
+ chiller_electric_eir.setReferenceCOP(cop)
2271
+ else
2272
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find cop, will not be set.")
2273
+ successfully_set_all_properties = false
2274
+ end
2275
+
2276
+ end
2277
+
2171
2278
  # =============================================================================================================================
2172
2279
  # Applies the performance curves "CoilCoolingDXVariableSpeed" object.
2173
2280
  def coil_cooling_dx_variable_speed_apply_curves(coil_cooling_dx_variable_speed, eqpt_name)
@@ -2177,7 +2284,6 @@ class ECMS
2177
2284
  capacity_w = coil_cooling_dx_variable_speed_find_capacity(coil_cooling_dx_variable_speed)
2178
2285
  capacity_w = [1.0,capacity_w].max
2179
2286
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2180
- capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
2181
2287
 
2182
2288
  # Lookup performance curves
2183
2289
  search_criteria = {}
@@ -2250,14 +2356,13 @@ class ECMS
2250
2356
  capacity_w = coil_heating_dx_variable_speed_find_capacity(coil_heating_dx_variable_speed)
2251
2357
  capacity_w = [1.0,capacity_w].max
2252
2358
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2253
- capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
2254
2359
 
2255
2360
  # Lookup performance curves
2256
2361
  props = model_find_object(standards_data['tables']['heat_pump_heating_ecm']['table'], search_criteria, capacity_btu_per_hr)
2257
2362
 
2258
2363
  # Check to make sure properties were found
2259
2364
  if props.nil?
2260
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
2365
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}.")
2261
2366
  successfully_set_all_properties = false
2262
2367
  end
2263
2368
 
@@ -2328,7 +2433,6 @@ class ECMS
2328
2433
  capacity_w = airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
2329
2434
  capacity_w = [1.0,capacity_w].max
2330
2435
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2331
- capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
2332
2436
 
2333
2437
  # Lookup performance curves
2334
2438
  props = model_find_object(standards_data['tables']['heat_pump_cooling_ecm']['table'], search_criteria, capacity_btu_per_hr)
@@ -2460,7 +2564,6 @@ class ECMS
2460
2564
  capacity_w = airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
2461
2565
  capacity_w = [1.0,capacity_w].max
2462
2566
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2463
- capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
2464
2567
 
2465
2568
  # Lookup performance curves
2466
2569
  props = model_find_object(standards_data['tables']['heat_pump_heating_ecm']['table'], search_criteria, capacity_btu_per_hr)
@@ -2587,12 +2690,12 @@ class ECMS
2587
2690
 
2588
2691
  # Check to make sure properties were found
2589
2692
  if ac_props.nil?
2590
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
2693
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}.")
2591
2694
  successfully_set_all_properties = false
2592
2695
  return successfully_set_all_properties
2593
2696
  end
2594
2697
 
2595
- # Get the minimum efficiency standards
2698
+ # Get the minimum efficiency
2596
2699
  cop = nil
2597
2700
 
2598
2701
  # If specified as SEER
@@ -2659,12 +2762,12 @@ class ECMS
2659
2762
 
2660
2763
  # Check to make sure properties were found
2661
2764
  if props.nil?
2662
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
2765
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{coil_heating_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}")
2663
2766
  successfully_set_all_properties = false
2664
2767
  return successfully_set_all_properties
2665
2768
  end
2666
2769
 
2667
- # Get the minimum efficiency standards
2770
+ # Get the minimum efficiency
2668
2771
  cop = nil
2669
2772
 
2670
2773
  # If specified as EER
@@ -2723,12 +2826,12 @@ class ECMS
2723
2826
 
2724
2827
  # Check to make sure properties were found
2725
2828
  if ac_props.nil?
2726
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
2829
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}.")
2727
2830
  successfully_set_all_properties = false
2728
2831
  return successfully_set_all_properties
2729
2832
  end
2730
2833
 
2731
- # Get the minimum efficiency standards
2834
+ # Get the minimum efficiency
2732
2835
  cop = nil
2733
2836
 
2734
2837
  # If specified as SEER
@@ -2795,12 +2898,12 @@ class ECMS
2795
2898
 
2796
2899
  # Check to make sure properties were found
2797
2900
  if props.nil?
2798
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
2901
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name}, cannot find efficiency info using #{search_criteria}.")
2799
2902
  successfully_set_all_properties = false
2800
2903
  return successfully_set_all_properties
2801
2904
  end
2802
2905
 
2803
- # Get the minimum efficiency standards
2906
+ # Get the minimum efficiency
2804
2907
  cop = nil
2805
2908
 
2806
2909
  # If specified as EER
@@ -2859,12 +2962,12 @@ class ECMS
2859
2962
 
2860
2963
  # Check to make sure properties were found
2861
2964
  if props.nil?
2862
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
2965
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find efficiency info using #{search_criteria}.")
2863
2966
  successfully_set_all_properties = false
2864
2967
  return successfully_set_all_properties
2865
2968
  end
2866
2969
 
2867
- # Get the minimum efficiency standards
2970
+ # Get the minimum efficiency
2868
2971
  cop = nil
2869
2972
 
2870
2973
  # If specified as EER
@@ -2923,12 +3026,12 @@ class ECMS
2923
3026
 
2924
3027
  # Check to make sure properties were found
2925
3028
  if props.nil?
2926
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find heating efficiency info using #{search_criteria}, cannot apply efficiency standard.")
3029
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name}, cannot find heating efficiency info using #{search_criteria}.")
2927
3030
  successfully_set_all_properties = false
2928
3031
  return successfully_set_all_properties
2929
3032
  end
2930
3033
 
2931
- # Get the minimum efficiency standards
3034
+ # Get the minimum efficiency
2932
3035
  cop = nil
2933
3036
 
2934
3037
  # If specified as EER
@@ -2981,7 +3084,7 @@ class ECMS
2981
3084
  elsif coil_cooling_dx_variable_speed.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.is_initialized
2982
3085
  capacity_w = coil_cooling_dx_variable_speed.autosizedGrossRatedTotalCoolingCapacityAtSelectedNominalSpeedLevel.get
2983
3086
  else
2984
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name} capacity is not available, cannot apply efficiency standard.")
3087
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{coil_cooling_dx_variable_speed.name} capacity is not available.")
2985
3088
  return 0.0
2986
3089
  end
2987
3090
 
@@ -2997,7 +3100,7 @@ class ECMS
2997
3100
  elsif coil_heating_dx_variable_speed.autosizedRatedHeatingCapacityAtSelectedNominalSpeedLevel.is_initialized
2998
3101
  capacity_w = coil_heating_dx_variable_speed.autosizedRatedHeatingCapacityAtSelectedNominalSpeedLevel.get
2999
3102
  else
3000
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name} capacity is not available, cannot apply efficiency standard.")
3103
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{coil_heating_dx_variable_speed.name} capacity is not available.")
3001
3104
  return 0.0
3002
3105
  end
3003
3106
 
@@ -3014,7 +3117,7 @@ class ECMS
3014
3117
  capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalCoolingCapacity.get
3015
3118
  airconditioner_variablerefrigerantflow.setRatedTotalCoolingCapacity(capacity_w)
3016
3119
  else
3017
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} cooling capacity is not available, cannot apply efficiency standard.")
3120
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} cooling capacity is not available.")
3018
3121
  return 0.0
3019
3122
  end
3020
3123
 
@@ -3031,7 +3134,24 @@ class ECMS
3031
3134
  capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalHeatingCapacity.get
3032
3135
  airconditioner_variablerefrigerantflow.setRatedTotalHeatingCapacity(capacity_w)
3033
3136
  else
3034
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} heating capacity is not available, cannot apply efficiency standard.")
3137
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} heating capacity is not available.")
3138
+ return 0.0
3139
+ end
3140
+
3141
+ return capacity_w
3142
+ end
3143
+
3144
+ # =============================================================================================================================
3145
+ # Find cooling capacity for "ChillerElectricEIR" object
3146
+ def chiller_electric_eir_find_capacity(chiller_electric_eir)
3147
+ capacity_w = nil
3148
+ if chiller_electric_eir.referenceCapacity.is_initialized
3149
+ capacity_w = chiller_electric_eir.referenceCapacity.get
3150
+ elsif chiller_electric_eir.autosizedRererenceCapacity.is_initialized
3151
+ capacity_w = chiller_electric_eir.autosizedRerenceCapacity.get
3152
+ chiller_electric_eir.setReferenceCapacity(capacity_w)
3153
+ else
3154
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name} capacity not available")
3035
3155
  return 0.0
3036
3156
  end
3037
3157
 
@@ -3234,7 +3354,7 @@ class ECMS
3234
3354
  # If an efficiency is set but is not between 0.01 and 1.0 it returns an error. Otherwise, it looks for mixed water
3235
3355
  # heaters. If it finds any it then calls the reset_shw_efficiency method which resets the the shw efficiency and the
3236
3356
  # part load curve. It also renames the shw tank with the following pattern:
3237
- # {valume}Gal {eff_name} Water Heater - {Capacity}kBtu/hr {efficiency} Therm Eff
3357
+ # {volume}Gal {eff_name} Water Heater - {Capacity}kBtu/hr {efficiency} Therm Eff
3238
3358
  def modify_shw_efficiency(model:, shw_eff: nil)
3239
3359
  return if shw_eff.nil?
3240
3360
 
@@ -3279,7 +3399,7 @@ class ECMS
3279
3399
  # This method sets the efficiency of the shw heater to whatever is entered in eff["efficiency"]. It then looks for the
3280
3400
  # "part_load_curve" value in the curves.json file. If it does not find one it returns an error. If it finds one it
3281
3401
  # resets the part load curve to whatever was found. It then renames the shw tank according to the following pattern:
3282
- # {valume}Gal {eff_name} Water Heater - {Capacity}kBtu/hr {efficiency} Therm Eff
3402
+ # {volume}Gal {eff_name} Water Heater - {Capacity}kBtu/hr {efficiency} Therm Eff
3283
3403
  def reset_shw_efficiency(model:, component:, eff:)
3284
3404
  return if component.heaterFuelType.to_s.upcase == 'ELECTRICITY'
3285
3405
 
@@ -90,7 +90,7 @@ class ECMS
90
90
  # Method for calculating footprint of the building model
91
91
  def calculate_building_footprint(model:)
92
92
  building_footprint_m2_array = []
93
- lowest_floor = 10000000000.0 # dummy number as initialization to find the lowest floor among spaces #TODO: Question:it it fine that it has been assumed that the floor of all lowest spaces are at the same level?
93
+ lowest_floor = 10000000000.0 # dummy number as initialization to find the lowest floor among spaces # @todo Question:it it fine that it has been assumed that the floor of all lowest spaces are at the same level?
94
94
  model.getSpaces.sort.each do |space|
95
95
  space.surfaces.sort.select { |surface| (surface.surfaceType == 'Floor') && (surface.outsideBoundaryCondition != 'Surface') && (surface.outsideBoundaryCondition != 'Adiabatic') }.each do |surface|
96
96
  floor_vertices = surface.vertices
@@ -4,7 +4,7 @@ class NECB2011
4
4
  # e.g. (Prototype.secondary_school.rb) file.
5
5
  #
6
6
  # @param (see #add_constructions)
7
- # @return [Bool] returns true if successful, false if not
7
+ # @return [Boolean] returns true if successful, false if not
8
8
  def model_create_thermal_zones(model, space_multiplier_map = nil)
9
9
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Started creating thermal zones')
10
10
  space_multiplier_map = {} if space_multiplier_map.nil?
@@ -193,8 +193,14 @@ class NECB2011
193
193
  @stored_space_cooling_sizing_loads = {}
194
194
  model.getSpaces.sort.each do |space|
195
195
  space_type = space.spaceType.get.standardsSpaceType.get
196
- @stored_space_heating_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.heatingDesignLoad.get
197
- @stored_space_cooling_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.coolingDesignLoad.get
196
+
197
+ # error if zone design load methods are not available
198
+ if space.model.version < OpenStudio::VersionString.new('3.6.0')
199
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.autozone', "Required ThermalZone methods .autosizedHeatingDesignLoad and .autosizedCoolingDesignLoad are not available in pre-OpenStudio 3.6.0 versions. Use a more recent version of OpenStudio.")
200
+ end
201
+
202
+ @stored_space_heating_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.autosizedHeatingDesignLoad.get / space.floorArea
203
+ @stored_space_cooling_sizing_loads[space] = space_type == '- undefined -' ? 0.0 : space.thermalZone.get.autosizedCoolingDesignLoad.get / space.floorArea
198
204
  end
199
205
  end
200
206
 
@@ -795,7 +801,7 @@ class NECB2011
795
801
  end
796
802
 
797
803
  # This model determines the dominant NECB schedule type
798
- # @param model [OpenStudio::model::Model] A model object
804
+ # @param model [OpenStudio::Model::Model] A model object
799
805
  # return s.each [String]
800
806
  def determine_dominant_necb_schedule_type(model)
801
807
  return determine_dominant_schedule(model.getSpaces)