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
@@ -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)