openstudio-standards 0.2.10 → 0.2.11.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (252) hide show
  1. checksums.yaml +5 -5
  2. data/data/geometry/ASHRAE90120042007LargeHotel.osm +101 -0
  3. data/data/geometry/ASHRAE90120042007RetailStandalone.osm +220 -0
  4. data/data/geometry/ASHRAE9012010LargeHotel.osm +101 -0
  5. data/data/geometry/ASHRAE9012010RetailStandalone.osm +218 -32
  6. data/data/geometry/ASHRAE9012013FullServiceRestaurant.osm +17 -0
  7. data/data/geometry/ASHRAE9012013Hospital.osm +288 -0
  8. data/data/geometry/ASHRAE9012013LargeHotel.osm +113 -12
  9. data/data/geometry/ASHRAE9012013LargeOffice.osm +205 -1
  10. data/data/geometry/ASHRAE9012013MediumOffice.osm +103 -1
  11. data/data/geometry/ASHRAE9012013Outpatient.osm +390 -102
  12. data/data/geometry/ASHRAE9012013PrimarySchool.osm +424 -0
  13. data/data/geometry/ASHRAE9012013QuickServiceRestaurant.osm +16 -0
  14. data/data/geometry/ASHRAE9012013RetailStandalone.osm +220 -0
  15. data/data/geometry/ASHRAE9012013SecondarySchool.osm +543 -0
  16. data/data/geometry/ASHRAE9012013SmallHotel.osm +50 -0
  17. data/data/geometry/ASHRAE9012013SmallOffice.osm +33 -0
  18. data/data/geometry/ASHRAE9012013Warehouse.osm +475 -238
  19. data/data/geometry/ASHRAEFullServiceRestaurant.osm +16 -0
  20. data/data/geometry/ASHRAEHospital.osm +288 -0
  21. data/data/geometry/ASHRAELargeOffice.osm +205 -1
  22. data/data/geometry/ASHRAELargeOfficeDetailed.osm +32 -32
  23. data/data/geometry/ASHRAEMediumOffice.osm +103 -1
  24. data/data/geometry/ASHRAEOutpatient.osm +390 -102
  25. data/data/geometry/ASHRAEPrimarySchool.osm +424 -0
  26. data/data/geometry/ASHRAEQuickServiceRestaurant.osm +16 -0
  27. data/data/geometry/ASHRAESecondarySchool.osm +1011 -162
  28. data/data/geometry/ASHRAESmallHotel.osm +50 -0
  29. data/data/geometry/ASHRAESmallOffice.osm +33 -0
  30. data/data/geometry/ASHRAEWarehouse.osm +476 -238
  31. data/data/standards/manage_OpenStudio_Standards.rb +1 -1
  32. data/data/standards/openstudio_standards_duplicates_log.csv +16 -0
  33. data/data/standards/test_performance_expected_dd_results.csv +1216 -1216
  34. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.ddy +536 -0
  35. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.epw +8768 -0
  36. data/data/weather/ARE_Abu.Dhabi.412170_IWEC.stat +544 -0
  37. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.ddy +533 -0
  38. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.epw +8768 -0
  39. data/data/weather/ARE_Dubai.Intl.AP.411940_IWEC2.stat +553 -0
  40. data/data/weather/VNM_Hanoi.488200_IWEC.ddy +533 -0
  41. data/data/weather/VNM_Hanoi.488200_IWEC.epw +8768 -0
  42. data/data/weather/VNM_Hanoi.488200_IWEC.stat +544 -0
  43. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.ddy +533 -0
  44. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.epw +8768 -0
  45. data/data/weather/VNM_Ho.Chi.Minh.City-Tan.Son.Nhat.AP.489000_IWEC2.stat +546 -0
  46. data/lib/openstudio-standards.rb +27 -0
  47. data/lib/openstudio-standards/btap/btap.model.rb +4 -4
  48. data/lib/openstudio-standards/btap/btap_result.rb +8 -8
  49. data/lib/openstudio-standards/btap/economics.rb +11 -11
  50. data/lib/openstudio-standards/btap/envelope.rb +5 -5
  51. data/lib/openstudio-standards/btap/hvac.rb +55 -11
  52. data/lib/openstudio-standards/btap/measures.rb +7 -7
  53. data/lib/openstudio-standards/btap/spaceloads.rb +4 -4
  54. data/lib/openstudio-standards/hvac_sizing/Siz.AirLoopHVAC.rb +105 -1
  55. data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +2 -2
  56. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirTerminalSingleDuctVAVReheat.rb +0 -8
  57. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.AirTerminalSingleDuctVAVReheat.rb +0 -8
  58. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +0 -8
  59. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +0 -8
  60. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +6 -1
  61. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  62. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.Model.rb +3 -1
  63. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +22 -0
  64. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanConstantVolume.rb +32 -0
  65. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanOnOff.rb +33 -0
  66. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +32 -0
  67. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerAirToAirSensibleAndLatent.rb +9 -0
  68. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.elevators.rb +25 -0
  69. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +35 -0
  70. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.hvac_systems.rb +11 -0
  71. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +17 -3
  72. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +9 -0
  73. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +9 -0
  74. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOfficeDetailed.rb +22 -3
  75. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +9 -0
  76. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOfficeDetailed.rb +9 -0
  77. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +107 -5
  78. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +9 -0
  79. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.RetailStandalone.rb +3 -0
  80. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +9 -0
  81. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +0 -8
  82. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +2 -2
  83. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +2 -4
  84. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -4
  85. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +2 -2
  86. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +45 -5
  87. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ServiceWaterHeating.rb +1 -1
  88. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +21 -2
  89. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +251 -364
  90. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +4 -0
  91. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +4 -5
  92. data/lib/openstudio-standards/refs/references.rb +4 -0
  93. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +283 -97
  94. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +2 -2
  95. data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +1 -1
  96. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +1 -1
  97. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +1 -1
  98. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +5 -5
  99. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +3 -1
  100. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +1 -1
  101. data/lib/openstudio-standards/standards/Standards.Construction.rb +53 -45
  102. data/lib/openstudio-standards/standards/Standards.Fan.rb +10 -2
  103. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +4 -4
  104. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -1
  105. data/lib/openstudio-standards/standards/Standards.Model.rb +39 -18
  106. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +8 -8
  107. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +12 -12
  108. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +1 -1
  109. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +2 -2
  110. data/lib/openstudio-standards/standards/Standards.Space.rb +190 -181
  111. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +36 -59
  112. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +3 -3
  113. data/lib/openstudio-standards/standards/Standards.Surface.rb +1 -1
  114. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +16 -12
  115. data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +1 -1
  116. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +16 -5
  117. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.AirLoopHVAC.rb +1 -1
  118. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +159 -8
  119. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +1354 -1075
  120. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +557 -17
  121. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +28 -28
  122. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ground_temperatures.json +36 -36
  123. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +233 -6
  124. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +159 -8
  125. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.spc_typ.json +1356 -1077
  126. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +480 -0
  127. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +28 -28
  128. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ground_temperatures.json +36 -36
  129. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +241 -14
  130. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +0 -8
  131. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +12 -7
  132. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +159 -8
  133. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.spc_typ.json +1367 -1087
  134. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +480 -0
  135. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ground_temperatures.json +36 -36
  136. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +233 -5
  137. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +20 -27
  138. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +8 -3
  139. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +159 -8
  140. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.spc_typ.json +1432 -1138
  141. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +480 -0
  142. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ground_temperatures.json +36 -36
  143. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +241 -5
  144. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zone_sets.json +37 -0
  145. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.climate_zones.json +39 -15
  146. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +489 -7
  147. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +250 -0
  148. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
  149. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.materials.json +1920 -0
  150. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +5265 -9
  151. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +159 -8
  152. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.spc_typ.json +2441 -1925
  153. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.construction_properties.json +16658 -2578
  154. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +212 -8
  155. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +11 -1
  156. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +159 -8
  157. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.spc_typ.json +2403 -1889
  158. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.construction_properties.json +16664 -2584
  159. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +209 -7
  160. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +11 -1
  161. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_properties.json +4113 -513
  162. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.construction_sets.json +40 -40
  163. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.elevators.json +1 -1
  164. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ground_temperatures.json +650 -0
  165. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps.json +90 -2
  166. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.heat_pumps_heating.json +25 -5
  167. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +1909 -32
  168. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.water_heaters.json +8 -8
  169. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +147 -155
  170. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  171. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +29 -10
  172. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +4 -4
  173. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +45 -73
  174. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.ZoneHVACComponent.rb +4 -72
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.boilers.json +20 -0
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.chillers.json +400 -0
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_properties.json +4444 -0
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.construction_sets.json +391 -0
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +536 -0
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.elevators.json +36 -0
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +169 -0
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ground_temperatures.json +650 -0
  183. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps.json +290 -0
  184. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_pumps_heating.json +164 -0
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.heat_rejection.json +40 -0
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.motors.json +274 -0
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.prototype_inputs.json +704 -0
  188. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.refrigeration_compressors.json +22 -0
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +6424 -0
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.unitary_acs.json +142 -0
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_heaters.json +72 -0
  192. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps.json +31 -0
  193. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.water_source_heat_pumps_heating.json +13 -0
  194. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +829 -0
  195. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +24 -0
  196. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTower.rb +19 -0
  197. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerSingleSpeed.rb +5 -0
  198. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerTwoSpeed.rb +5 -0
  199. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.CoolingTowerVariableSpeed.rb +16 -0
  200. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.FanVariableVolume.rb +37 -0
  201. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +34 -0
  202. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +80 -0
  203. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +68 -0
  204. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +146 -0
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ThermalZone.rb +23 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.ZoneHVACComponent.rb +8 -0
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.rb +16 -0
  208. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.heat_pumps_heating.json +5 -5
  209. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.economizers.json +18 -0
  210. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.heat_pumps_heating.json +5 -5
  211. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.heat_pumps_heating.json +5 -5
  212. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.heat_pumps_heating.json +5 -5
  213. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.heat_pumps_heating.json +5 -5
  214. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.heat_pumps_heating.json +5 -5
  215. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.heat_pumps_heating.json +5 -5
  216. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.heat_pumps_heating.json +1 -1
  217. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.heat_pumps_heating.json +5 -5
  218. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.heat_pumps_heating.json +5 -5
  219. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.heat_pumps_heating.json +5 -5
  220. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.heat_pumps_heating.json +5 -5
  221. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.heat_pumps_heating.json +5 -5
  222. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.heat_pumps_heating.json +5 -5
  223. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.heat_pumps_heating.json +5 -5
  224. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.heat_pumps_heating.json +5 -5
  225. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.heat_pumps_heating.json +5 -5
  226. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.heat_pumps_heating.json +5 -5
  227. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.heat_pumps_heating.json +5 -5
  228. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.heat_pumps_heating.json +5 -5
  229. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.heat_pumps_heating.json +5 -5
  230. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_multi_speed.rb +5 -1
  231. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +5 -1
  232. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +5 -2
  233. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +8 -2
  234. data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +12 -12
  235. data/lib/openstudio-standards/version.rb +1 -1
  236. data/lib/openstudio-standards/weather/Weather.Model.rb +4 -0
  237. metadata +102 -18
  238. data/data/standards/OpenStudio_Standards-ashrae_90_1(space_types).xlsx +0 -0
  239. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  240. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  241. data/data/standards/OpenStudio_Standards-cbes(space_types).xlsx +0 -0
  242. data/data/standards/OpenStudio_Standards-cbes.xlsx +0 -0
  243. data/data/standards/OpenStudio_Standards-deer(space_types).xlsx +0 -0
  244. data/data/standards/OpenStudio_Standards-deer-ALL-comstock(space_types).xlsx +0 -0
  245. data/data/standards/OpenStudio_Standards-deer.xlsx +0 -0
  246. data/data/standards/OpenStudio_Standards_LA100.xlsx +0 -0
  247. data/data/standards/junk/legacy_dd_results - Copy.csv +0 -960
  248. data/data/standards/junk/legacy_dd_results.csv +0 -960
  249. data/data/standards/junk/legacy_dd_results_new - Copy.csv +0 -960
  250. data/data/standards/junk/legacy_dd_results_new.csv +0 -960
  251. data/data/standards/junk/legacy_dd_results_original.csv +0 -960
  252. data/lib/openstudio-standards/standards/necb/NECB2011/newway.json +0 -8102
@@ -983,7 +983,11 @@ class Standard
983
983
  sizing_system.setAllOutdoorAirinCooling(true)
984
984
  sizing_system.setAllOutdoorAirinHeating(true)
985
985
  # set minimum airflow ratio to 1.0 to avoid under-sizing heating coil
986
- sizing_system.setMinimumSystemAirFlowRatio(1.0)
986
+ if model.version < OpenStudio::VersionString.new('2.7.0')
987
+ sizing_system.setMinimumSystemAirFlowRatio(1.0)
988
+ else
989
+ sizing_system.setCentralHeatingMaximumSystemAirFlowRatio(1.0)
990
+ end
987
991
  sizing_system.setSizingOption('Coincident')
988
992
  sizing_system.setCentralCoolingDesignSupplyAirTemperature(clg_dsgn_sup_air_temp_c)
989
993
  sizing_system.setCentralHeatingDesignSupplyAirTemperature(htg_dsgn_sup_air_temp_c)
@@ -1143,7 +1147,6 @@ class Standard
1143
1147
  # @param econo_ctrl_mthd [String] economizer control type, default is Fixed Dry Bulb
1144
1148
  # If enabled, the DOAS will be sized for twice the ventilation minimum to allow economizing
1145
1149
  # @param include_exhaust_fan [Bool] if true, include an exhaust fan
1146
- # @param energy_recovery [Bool] if true, an ERV will be added to the system
1147
1150
  # @param clg_dsgn_sup_air_temp [Double] design cooling supply air temperature in degrees Fahrenheit, default 65F
1148
1151
  # @param htg_dsgn_sup_air_temp [Double] design heating supply air temperature in degrees Fahrenheit, default 75F
1149
1152
  # @return [OpenStudio::Model::AirLoopHVAC] the resulting DOAS air loop
@@ -1159,7 +1162,6 @@ class Standard
1159
1162
  fan_maximum_flow_rate: nil,
1160
1163
  econo_ctrl_mthd: 'NoEconomizer',
1161
1164
  include_exhaust_fan: true,
1162
- energy_recovery: true,
1163
1165
  demand_control_ventilation: false,
1164
1166
  doas_control_strategy: 'NeutralSupplyAir',
1165
1167
  clg_dsgn_sup_air_temp: 60.0,
@@ -1212,7 +1214,11 @@ class Standard
1212
1214
  sizing_system.setAllOutdoorAirinCooling(true)
1213
1215
  sizing_system.setAllOutdoorAirinHeating(true)
1214
1216
  # set minimum airflow ratio to 1.0 to avoid under-sizing heating coil
1215
- sizing_system.setMinimumSystemAirFlowRatio(1.0)
1217
+ if model.version < OpenStudio::VersionString.new('2.7.0')
1218
+ sizing_system.setMinimumSystemAirFlowRatio(1.0)
1219
+ else
1220
+ sizing_system.setCentralHeatingMaximumSystemAirFlowRatio(1.0)
1221
+ end
1216
1222
  sizing_system.setSizingOption('Coincident')
1217
1223
  sizing_system.setCentralCoolingDesignSupplyAirTemperature(clg_dsgn_sup_air_temp_c)
1218
1224
  sizing_system.setCentralHeatingDesignSupplyAirTemperature(htg_dsgn_sup_air_temp_c)
@@ -1323,9 +1329,9 @@ class Standard
1323
1329
  fan_name: 'DOAS Exhaust Fan',
1324
1330
  end_use_subcategory: 'DOAS Fans')
1325
1331
  end
1326
- # set pressure rise 0.5 inH2O lower than supply fan, 0.5 inH2O minimum
1327
- exhaust_fan_pressure_rise = supply_fan.pressureRise - OpenStudio.convert(0.5, 'inH_{2}O', 'Pa').get
1328
- exhaust_fan_pressure_rise = OpenStudio.convert(0.5, 'inH_{2}O', 'Pa').get if exhaust_fan_pressure_rise < OpenStudio.convert(0.5, 'inH_{2}O', 'Pa').get
1332
+ # set pressure rise 1.0 inH2O lower than supply fan, 1.0 inH2O minimum
1333
+ exhaust_fan_pressure_rise = supply_fan.pressureRise - OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get
1334
+ exhaust_fan_pressure_rise = OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get if exhaust_fan_pressure_rise < OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get
1329
1335
  exhaust_fan.setPressureRise(exhaust_fan_pressure_rise)
1330
1336
  exhaust_fan.addToNode(air_loop.supplyInletNode)
1331
1337
  end
@@ -1344,40 +1350,6 @@ class Standard
1344
1350
  air_loop.setAvailabilitySchedule(hvac_op_sch)
1345
1351
  air_loop.setNightCycleControlType('CycleOnAnyZoneFansOnly')
1346
1352
 
1347
- # add energy recovery if requested
1348
- if energy_recovery
1349
- # Get the OA system and its outboard OA node
1350
- oa_system = air_loop.airLoopHVACOutdoorAirSystem.get
1351
-
1352
- # create the ERV and set its properties
1353
- erv = OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent.new(model)
1354
- erv.setName("#{air_loop.name} Heat Exchanger")
1355
- erv.addToNode(oa_system.outboardOANode.get)
1356
- erv.setHeatExchangerType('Rotary')
1357
- erv.setSupplyAirOutletTemperatureControl(false)
1358
- erv.setSensibleEffectivenessat100HeatingAirFlow(0.76)
1359
- erv.setSensibleEffectivenessat75HeatingAirFlow(0.81)
1360
- erv.setLatentEffectivenessat100HeatingAirFlow(0.68)
1361
- erv.setLatentEffectivenessat75HeatingAirFlow(0.73)
1362
- erv.setSensibleEffectivenessat100CoolingAirFlow(0.76)
1363
- erv.setSensibleEffectivenessat75CoolingAirFlow(0.81)
1364
- erv.setLatentEffectivenessat100CoolingAirFlow(0.68)
1365
- erv.setLatentEffectivenessat75CoolingAirFlow(0.73)
1366
- erv.setEconomizerLockout(true)
1367
- # TODO: estimate ERV motor power which might require knowing airflow (like prototype buildings do)
1368
- # erv.setNominalElectricPower(value_new)
1369
- # TODO: set erv defrost control
1370
-
1371
- # increase fan static pressure to account for ERV
1372
- erv_pressure_rise = OpenStudio.convert(1.0, 'inH_{2}O', 'Pa').get
1373
- supply_fan_new_pressure_rise = supply_fan.pressureRise + erv_pressure_rise
1374
- supply_fan.setPressureRise(supply_fan_new_pressure_rise)
1375
- if include_exhaust_fan
1376
- exhaust_fan_new_pressure_rise = exhaust_fan.pressureRise + erv_pressure_rise
1377
- supply_fan.setPressureRise(exhaust_fan_new_pressure_rise)
1378
- end
1379
- end
1380
-
1381
1353
  # add thermal zones to airloop
1382
1354
  thermal_zones.each do |zone|
1383
1355
  # skip zones with no outdoor air flow rate
@@ -1401,18 +1373,46 @@ class Standard
1401
1373
  # VAV reheat terminal
1402
1374
  air_terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
1403
1375
  air_terminal.setZoneMinimumAirFlowMethod('Constant')
1404
- air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation # may not be necessary
1405
- else # 'DOASVAV'
1376
+ air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation
1377
+ else # 'DOASVAV'
1406
1378
  air_terminal = OpenStudio::Model::AirTerminalSingleDuctVAVNoReheat.new(model, model.alwaysOnDiscreteSchedule)
1407
1379
  air_terminal.setZoneMinimumAirFlowInputMethod('Constant')
1408
1380
  air_terminal.setConstantMinimumAirFlowFraction(0.1)
1409
- air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation # may not be necessary
1381
+ air_terminal.setControlForOutdoorAir(true) if demand_control_ventilation
1410
1382
  end
1411
1383
  air_terminal.setName("#{zone.name} Air Terminal")
1412
1384
 
1413
1385
  # attach new terminal to the zone and to the airloop
1414
1386
  air_loop.multiAddBranchForZone(zone, air_terminal.to_HVACComponent.get)
1415
1387
 
1388
+ # ensure the DOAS takes priority, so ventilation load is included when treated by other zonal systems
1389
+ # From EnergyPlus I/O reference:
1390
+ # "For situations where one or more equipment types has limited capacity or limited control capability, order the
1391
+ # sequence so that the most controllable piece of equipment runs last. For example, with a dedicated outdoor air
1392
+ # system (DOAS), the air terminal for the DOAS should be assigned Heating Sequence = 1 and Cooling Sequence = 1.
1393
+ # Any other equipment should be assigned sequence 2 or higher so that it will see the net load after the DOAS air
1394
+ # is added to the zone."
1395
+ zone.setCoolingPriority(air_terminal.to_ModelObject.get, 1)
1396
+ zone.setHeatingPriority(air_terminal.to_ModelObject.get, 1)
1397
+
1398
+ # set the cooling and heating fraction to zero so that if DCV is enabled,
1399
+ # the system will lower the ventilation rate rather than trying to meet the heating or cooling load.
1400
+ if model.version < OpenStudio::VersionString.new('2.8.0')
1401
+ if demand_control_ventilation
1402
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', 'Unable to add DOAS with DCV to model because the setSequentialCoolingFraction method is not available in OpenStudio versions less than 2.8.0.')
1403
+ else
1404
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', 'OpenStudio version is less than 2.8.0. The DOAS system will not be able to have DCV if changed at a later date.')
1405
+ end
1406
+ else
1407
+ zone.setSequentialCoolingFraction(air_terminal.to_ModelObject.get, 0.0)
1408
+ zone.setSequentialHeatingFraction(air_terminal.to_ModelObject.get, 0.0)
1409
+
1410
+ # if economizing, override to meet cooling load first with doas supply
1411
+ unless econo_ctrl_mthd == 'NoEconomizer'
1412
+ zone.setSequentialCoolingFraction(air_terminal.to_ModelObject.get, 1.0)
1413
+ end
1414
+ end
1415
+
1416
1416
  # DOAS sizing
1417
1417
  sizing_zone = zone.sizingZone
1418
1418
  sizing_zone.setAccountforDedicatedOutdoorAirSystem(true)
@@ -1484,7 +1484,13 @@ class Standard
1484
1484
  # default design temperatures and settings used across all air loops
1485
1485
  dsgn_temps = standard_design_sizing_temperatures
1486
1486
  sizing_system = adjust_sizing_system(air_loop, dsgn_temps)
1487
- sizing_system.setMinimumSystemAirFlowRatio(min_sys_airflow_ratio) unless min_sys_airflow_ratio.nil?
1487
+ if !min_sys_airflow_ratio.nil?
1488
+ if model.version < OpenStudio::VersionString.new('2.7.0')
1489
+ sizing_system.setMinimumSystemAirFlowRatio(min_sys_airflow_ratio)
1490
+ else
1491
+ sizing_system.setCentralHeatingMaximumSystemAirFlowRatio(min_sys_airflow_ratio)
1492
+ end
1493
+ end
1488
1494
  sizing_system.setSizingOption(vav_sizing_option) unless vav_sizing_option.nil?
1489
1495
  unless hot_water_loop.nil?
1490
1496
  hw_temp_c = hot_water_loop.sizingPlant.designLoopExitTemperature
@@ -1610,10 +1616,10 @@ class Standard
1610
1616
  terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
1611
1617
  terminal.setName("#{zone.name} VAV Terminal")
1612
1618
  terminal.setZoneMinimumAirFlowMethod('Constant')
1613
- air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
1614
1619
  terminal.setMaximumFlowFractionDuringReheat(0.5)
1615
1620
  terminal.setMaximumReheatAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
1616
1621
  air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
1622
+ air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
1617
1623
 
1618
1624
  # zone sizing
1619
1625
  sizing_zone = zone.sizingZone
@@ -1627,8 +1633,8 @@ class Standard
1627
1633
  terminal = OpenStudio::Model::AirTerminalSingleDuctVAVNoReheat.new(model, model.alwaysOnDiscreteSchedule)
1628
1634
  terminal.setName("#{zone.name} VAV Terminal")
1629
1635
  terminal.setZoneMinimumAirFlowInputMethod('Constant')
1630
- air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
1631
1636
  air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
1637
+ air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
1632
1638
 
1633
1639
  # zone sizing
1634
1640
  sizing_zone = zone.sizingZone
@@ -1641,6 +1647,9 @@ class Standard
1641
1647
  end
1642
1648
  end
1643
1649
 
1650
+ # Design outdoor air calculation based on VRP if applicable (prototypes maintained by PNNL)
1651
+ model_system_outdoor_air_sizing_vrp_method(air_loop)
1652
+
1644
1653
  # set the damper action based on the template
1645
1654
  air_loop_hvac_apply_vav_damper_action(air_loop)
1646
1655
 
@@ -1939,8 +1948,8 @@ class Standard
1939
1948
  terminal.setName("#{zone.name} VAV Terminal")
1940
1949
  terminal.setZoneMinimumAirFlowMethod('Constant')
1941
1950
  terminal.setMaximumReheatAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
1942
- air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
1943
1951
  air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
1952
+ air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
1944
1953
 
1945
1954
  unless return_plenum.nil?
1946
1955
  zone.setReturnPlenum(return_plenum)
@@ -1952,6 +1961,9 @@ class Standard
1952
1961
  sizing_zone.setZoneHeatingDesignSupplyAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
1953
1962
  end
1954
1963
 
1964
+ # Design outdoor air calculation based on VRP if applicable (prototypes maintained by PNNL)
1965
+ model_system_outdoor_air_sizing_vrp_method(air_loop)
1966
+
1955
1967
  # set the damper action based on the template
1956
1968
  air_loop_hvac_apply_vav_damper_action(air_loop)
1957
1969
 
@@ -2234,11 +2246,11 @@ class Standard
2234
2246
  terminal = OpenStudio::Model::AirTerminalSingleDuctVAVReheat.new(model, model.alwaysOnDiscreteSchedule, rht_coil)
2235
2247
  terminal.setName("#{zone.name} VAV Terminal")
2236
2248
  terminal.setZoneMinimumAirFlowMethod('Constant')
2237
- air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
2238
2249
  terminal.setMaximumFlowPerZoneFloorAreaDuringReheat(0.0)
2239
2250
  terminal.setMaximumFlowFractionDuringReheat(0.5)
2240
2251
  terminal.setMaximumReheatAirTemperature(dsgn_temps['zn_htg_dsgn_sup_air_temp_c'])
2241
2252
  air_loop.multiAddBranchForZone(zone, terminal.to_HVACComponent.get)
2253
+ air_terminal_single_duct_vav_reheat_apply_initial_prototype_damper_position(terminal, thermal_zone_outdoor_airflow_rate_per_area(zone))
2242
2254
 
2243
2255
  # zone sizing
2244
2256
  sizing_zone = zone.sizingZone
@@ -3422,11 +3434,26 @@ class Standard
3422
3434
  hvac_op_sch = model_add_schedule(model, hvac_op_sch)
3423
3435
  end
3424
3436
 
3437
+ # default design temperatures across all air loops
3438
+ dsgn_temps = standard_design_sizing_temperatures
3439
+
3440
+ # adjusted temperatures for minisplit
3441
+ dsgn_temps['zn_htg_dsgn_sup_air_temp_f'] = 122.0
3442
+ dsgn_temps['zn_htg_dsgn_sup_air_temp_c'] = OpenStudio.convert(dsgn_temps['zn_htg_dsgn_sup_air_temp_f'], 'F', 'C').get
3443
+ dsgn_temps['htg_dsgn_sup_air_temp_f'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_f']
3444
+ dsgn_temps['htg_dsgn_sup_air_temp_c'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_c']
3445
+
3446
+ minisplit_hps = []
3425
3447
  thermal_zones.each do |zone|
3426
3448
  air_loop = OpenStudio::Model::AirLoopHVAC.new(model)
3427
3449
  air_loop.setName("#{zone.name} Minisplit Heat Pump")
3428
3450
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding minisplit HP for #{zone.name}.")
3429
3451
 
3452
+ # default design settings used across all air loops
3453
+ sizing_system = adjust_sizing_system(air_loop, dsgn_temps, sizing_option: 'NonCoincident')
3454
+ sizing_system.setAllOutdoorAirinCooling(false)
3455
+ sizing_system.setAllOutdoorAirinHeating(false)
3456
+
3430
3457
  # create heating coil
3431
3458
  case heating_type
3432
3459
  when 'Single Speed DX'
@@ -3440,15 +3467,20 @@ class Standard
3440
3467
  htg_coil.setDefrostControl('OnDemand')
3441
3468
  htg_coil.resetDefrostTimePeriodFraction
3442
3469
  else
3443
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', "No cooling coil type selected for minisplit HP for #{zone.name}.")
3470
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', "No heating coil type selected for minisplit HP for #{zone.name}.")
3444
3471
  htg_coil = nil
3445
3472
  end
3446
3473
 
3474
+ # create backup heating coil
3475
+ supplemental_htg_coil = create_coil_heating_electric(model,
3476
+ name: "#{air_loop.name} Electric Backup Htg Coil")
3477
+
3447
3478
  # create cooling coil
3448
3479
  case cooling_type
3449
3480
  when 'Two Speed DX AC'
3450
3481
  clg_coil = create_coil_cooling_dx_two_speed(model,
3451
- name: "#{air_loop.name} 2spd DX AC Clg Coil")
3482
+ name: "#{air_loop.name} 2spd DX AC Clg Coil",
3483
+ type: 'Residential Minisplit HP')
3452
3484
  when 'Single Speed DX AC'
3453
3485
  clg_coil = create_coil_cooling_dx_single_speed(model,
3454
3486
  name: "#{air_loop.name} 1spd DX AC Clg Coil", type: 'Split AC')
@@ -3464,13 +3496,9 @@ class Standard
3464
3496
  fan = create_fan_by_name(model,
3465
3497
  'Minisplit_HP_Fan',
3466
3498
  fan_name: "#{air_loop.name} Fan",
3467
- end_use_subcategory: 'Supply Fans')
3499
+ end_use_subcategory: 'Minisplit HP Fans')
3468
3500
  fan.setAvailabilitySchedule(hvac_op_sch)
3469
3501
 
3470
- # create backup heating coil
3471
- supplemental_htg_coil = create_coil_heating_electric(model,
3472
- name: "#{air_loop.name} Electric Backup Htg Coil")
3473
-
3474
3502
  # create unitary system (holds the coils and fan)
3475
3503
  unitary = OpenStudio::Model::AirLoopHVACUnitarySystem.new(model)
3476
3504
  unitary.setName("#{air_loop.name} Unitary System")
@@ -3479,7 +3507,6 @@ class Standard
3479
3507
  unitary.setMaximumOutdoorDryBulbTemperatureforSupplementalHeaterOperation(OpenStudio.convert(40.0, 'F', 'C').get)
3480
3508
  unitary.setControllingZoneorThermostatLocation(zone)
3481
3509
  unitary.addToNode(air_loop.supplyInletNode)
3482
- unitary.setControllingZoneorThermostatLocation(zone)
3483
3510
  unitary.setSupplyAirFlowRateWhenNoCoolingorHeatingisRequired(0.0)
3484
3511
 
3485
3512
  # attach the coils and fan
@@ -3494,9 +3521,11 @@ class Standard
3494
3521
  diffuser = OpenStudio::Model::AirTerminalSingleDuctUncontrolled.new(model, model.alwaysOnDiscreteSchedule)
3495
3522
  diffuser.setName(" #{zone.name} Direct Air")
3496
3523
  air_loop.multiAddBranchForZone(zone, diffuser.to_HVACComponent.get)
3524
+
3525
+ minisplit_hps << air_loop
3497
3526
  end
3498
3527
 
3499
- return true
3528
+ return minisplit_hps
3500
3529
  end
3501
3530
 
3502
3531
  # Creates a PTAC system for each zone and adds it to the model.
@@ -3506,13 +3535,16 @@ class Standard
3506
3535
  # @param heating_type [String] valid choices are NaturalGas, Electricity, Water, nil (no heat)
3507
3536
  # @param hot_water_loop [OpenStudio::Model::PlantLoop] hot water loop to connect heating coil to. Set to nil for heating types besides water
3508
3537
  # @param fan_type [String] valid choices are ConstantVolume, Cycling
3538
+ # @param ventilation [Bool] If true, ventilation will be supplied through the unit. If false,
3539
+ # no ventilation will be supplied through the unit, with the expectation that it will be provided by a DOAS or separate system.
3509
3540
  # @return [Array<OpenStudio::Model::ZoneHVACPackagedTerminalAirConditioner>] an array of the resulting PTACs
3510
3541
  def model_add_ptac(model,
3511
3542
  thermal_zones,
3512
3543
  cooling_type: 'Two Speed DX AC',
3513
3544
  heating_type: 'Gas',
3514
3545
  hot_water_loop: nil,
3515
- fan_type: 'ConstantVolume')
3546
+ fan_type: 'ConstantVolume',
3547
+ ventilation: true)
3516
3548
 
3517
3549
  # default design temperatures used across all air loops
3518
3550
  dsgn_temps = standard_design_sizing_temperatures
@@ -3606,6 +3638,11 @@ class Standard
3606
3638
  elsif fan_type == 'Cycling'
3607
3639
  ptac_system.setSupplyAirFanOperatingModeSchedule(model.alwaysOffDiscreteSchedule)
3608
3640
  end
3641
+ unless ventilation
3642
+ ptac_system.setOutdoorAirFlowRateDuringCoolingOperation(0.0)
3643
+ ptac_system.setOutdoorAirFlowRateDuringHeatingOperation(0.0)
3644
+ ptac_system.setOutdoorAirFlowRateWhenNoCoolingorHeatingisNeeded(0.0)
3645
+ end
3609
3646
  ptac_system.addToThermalZone(zone)
3610
3647
  ptacs << ptac_system
3611
3648
  end
@@ -3617,10 +3654,13 @@ class Standard
3617
3654
  #
3618
3655
  # @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
3619
3656
  # @param fan_type [String] valid choices are ConstantVolume, Cycling
3657
+ # @param ventilation [Bool] If true, ventilation will be supplied through the unit. If false,
3658
+ # no ventilation will be supplied through the unit, with the expectation that it will be provided by a DOAS or separate system.
3620
3659
  # @return [Array<OpenStudio::Model::ZoneHVACPackagedTerminalAirConditioner>] an array of the resulting PTACs.
3621
3660
  def model_add_pthp(model,
3622
3661
  thermal_zones,
3623
- fan_type: 'Cycling')
3662
+ fan_type: 'Cycling',
3663
+ ventilation: true)
3624
3664
 
3625
3665
  # default design temperatures used across all air loops
3626
3666
  dsgn_temps = standard_design_sizing_temperatures
@@ -3683,6 +3723,11 @@ class Standard
3683
3723
  elsif fan_type == 'Cycling'
3684
3724
  pthp_system.setSupplyAirFanOperatingModeSchedule(model.alwaysOffDiscreteSchedule)
3685
3725
  end
3726
+ unless ventilation
3727
+ pthp_system.setOutdoorAirFlowRateDuringCoolingOperation(0.0)
3728
+ pthp_system.setOutdoorAirFlowRateDuringHeatingOperation(0.0)
3729
+ pthp_system.setOutdoorAirFlowRateWhenNoCoolingorHeatingisNeeded(0.0)
3730
+ end
3686
3731
  pthp_system.addToThermalZone(zone)
3687
3732
  pthps << pthp_system
3688
3733
  end
@@ -3811,27 +3856,29 @@ class Standard
3811
3856
  # @param thermal_zones [Array<OpenStudio::Model::ThermalZone>] array of zones to connect to this system
3812
3857
  # @param heating_type [String] valid choices are Gas, Electric
3813
3858
  # @param combustion_efficiency [Double] combustion efficiency as decimal
3859
+ # @param control_type [String] control type
3814
3860
  # @return [Array<OpenStudio::Model::ZoneHVACHighTemperatureRadiant>] an
3815
3861
  # array of the resulting radiant heaters.
3816
3862
  def model_add_high_temp_radiant(model,
3817
3863
  thermal_zones,
3818
- heating_type: 'Gas',
3819
- combustion_efficiency: 0.8)
3864
+ heating_type: 'NaturalGas',
3865
+ combustion_efficiency: 0.8,
3866
+ control_type: 'MeanAirTemperature')
3820
3867
 
3821
- # Make a high temp radiant heater for each zone
3868
+ # make a high temp radiant heater for each zone
3822
3869
  radiant_heaters = []
3823
3870
  thermal_zones.each do |zone|
3824
3871
  high_temp_radiant = OpenStudio::Model::ZoneHVACHighTemperatureRadiant.new(model)
3825
3872
  high_temp_radiant.setName("#{zone.name} High Temp Radiant")
3826
3873
 
3827
- if heating_type.nil?
3828
- high_temp_radiant.setFuelType('Gas')
3874
+ if heating_type.nil? || heating_type == 'Gas'
3875
+ high_temp_radiant.setFuelType('NaturalGas')
3829
3876
  else
3830
3877
  high_temp_radiant.setFuelType(heating_type)
3831
3878
  end
3832
3879
 
3833
3880
  if combustion_efficiency.nil?
3834
- if heating_type == 'Gas'
3881
+ if heating_type == 'NaturalGas' || heating_type == 'Gas'
3835
3882
  high_temp_radiant.setCombustionEfficiency(0.8)
3836
3883
  elsif heating_type == 'Electric'
3837
3884
  high_temp_radiant.setCombustionEfficiency(1.0)
@@ -3840,7 +3887,17 @@ class Standard
3840
3887
  high_temp_radiant.setCombustionEfficiency(combustion_efficiency)
3841
3888
  end
3842
3889
 
3890
+ # set heating setpoint schedule
3891
+ tstat = zone.thermostatSetpointDualSetpoint.get
3892
+ if tstat.heatingSetpointTemperatureSchedule.is_initialized
3893
+ htg_sch = tstat.heatingSetpointTemperatureSchedule.get
3894
+ else
3895
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "For #{zone.name}: Cannot find a heating setpoint schedule for this zone, cannot apply high temp radiant system.")
3896
+ return false
3897
+ end
3898
+
3843
3899
  # set defaults
3900
+ high_temp_radiant.setHeatingSetpointTemperatureSchedule(htg_sch)
3844
3901
  high_temp_radiant.setTemperatureControlType(control_type)
3845
3902
  high_temp_radiant.setFractionofInputConvertedtoRadiantEnergy(0.8)
3846
3903
  high_temp_radiant.setHeatingThrottlingRange(2)
@@ -4104,12 +4161,15 @@ class Standard
4104
4161
  # If nil, a zero-capacity, electric heating coil set to Always-Off will be included in the unit.
4105
4162
  # @param ventilation [Bool] If true, ventilation will be supplied through the unit. If false,
4106
4163
  # no ventilation will be supplied through the unit, with the expectation that it will be provided by a DOAS or separate system.
4164
+ # @param capacity_control_method [String] Capacity control method for the fan coil. Options are ConstantFanVariableFlow,
4165
+ # CyclingFan, VariableFanVariableFlow, and VariableFanConstantFlow. If VariableFan, the fan will be VariableVolume.
4107
4166
  # @return [Array<OpenStudio::Model::ZoneHVACFourPipeFanCoil>] array of fan coil units.
4108
4167
  def model_add_four_pipe_fan_coil(model,
4109
4168
  thermal_zones,
4110
4169
  chilled_water_loop,
4111
4170
  hot_water_loop: nil,
4112
- ventilation: false)
4171
+ ventilation: false,
4172
+ capacity_control_method: 'CyclingFan')
4113
4173
 
4114
4174
  # default design temperatures used across all air loops
4115
4175
  dsgn_temps = standard_design_sizing_temperatures
@@ -4144,10 +4204,18 @@ class Standard
4144
4204
  nominal_capacity: 0.0)
4145
4205
  end
4146
4206
 
4147
- fcu_fan = create_fan_by_name(model,
4148
- 'Fan_Coil_Fan',
4149
- fan_name: "#{zone.name} Fan Coil fan",
4150
- end_use_subcategory: 'FCU Fans')
4207
+ case capacity_control_method
4208
+ when 'VariableFanVariableFlow', 'VariableFanConstantFlow'
4209
+ fcu_fan = create_fan_by_name(model,
4210
+ 'Fan_Coil_VarSpeed_Fan',
4211
+ fan_name: "#{zone.name} Fan Coil Variable Fan",
4212
+ end_use_subcategory: 'FCU Fans')
4213
+ else
4214
+ fcu_fan = create_fan_by_name(model,
4215
+ 'Fan_Coil_Fan',
4216
+ fan_name: "#{zone.name} Fan Coil fan",
4217
+ end_use_subcategory: 'FCU Fans')
4218
+ end
4151
4219
  fcu_fan.setAvailabilitySchedule(model.alwaysOnDiscreteSchedule)
4152
4220
  fcu_fan.autosizeMaximumFlowRate
4153
4221
 
@@ -4157,7 +4225,7 @@ class Standard
4157
4225
  fcu_clg_coil,
4158
4226
  fcu_htg_coil)
4159
4227
  fcu.setName("#{zone.name} FCU")
4160
- fcu.setCapacityControlMethod('CyclingFan')
4228
+ fcu.setCapacityControlMethod(capacity_control_method)
4161
4229
  fcu.autosizeMaximumSupplyAirFlowRate
4162
4230
  unless ventilation
4163
4231
  fcu.setMaximumOutdoorAirFlowRate(0.0)
@@ -4222,7 +4290,7 @@ class Standard
4222
4290
  radiant_htg_dsgn_sup_wtr_temp_f = 110
4223
4291
  else
4224
4292
  climate_zone_set = model_find_climate_zone_set(model, climate_zone)
4225
- case climate_zone_set.gsub('ClimateZone ', '')
4293
+ case climate_zone_set.gsub('ClimateZone ', '').gsub('CEC T24 ', '')
4226
4294
  when '1'
4227
4295
  cz_mult = 2
4228
4296
  radiant_htg_dsgn_sup_wtr_temp_f = 90
@@ -4429,6 +4497,9 @@ class Standard
4429
4497
  radiant_loops = []
4430
4498
  thermal_zones.each do |zone|
4431
4499
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding radiant loop for #{zone.name}.")
4500
+ if zone.name.to_s.include? ':'
4501
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.Model.Model', "Thermal zone '#{zone.name}' has a restricted character ':' in the name and will not work with some EMS and output reporting objects. Please rename the zone.")
4502
+ end
4432
4503
 
4433
4504
  # create radiant coils
4434
4505
  if hot_water_loop
@@ -4727,6 +4798,15 @@ class Standard
4727
4798
  crank_case_heat_w = 0.0
4728
4799
  crank_case_max_temp_f = 55
4729
4800
 
4801
+ # default design temperatures across all air loops
4802
+ dsgn_temps = standard_design_sizing_temperatures
4803
+
4804
+ # adjusted temperatures for furnace_central_ac
4805
+ dsgn_temps['zn_htg_dsgn_sup_air_temp_f'] = 122.0
4806
+ dsgn_temps['zn_htg_dsgn_sup_air_temp_c'] = OpenStudio.convert(dsgn_temps['zn_htg_dsgn_sup_air_temp_f'], 'F', 'C').get
4807
+ dsgn_temps['htg_dsgn_sup_air_temp_f'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_f']
4808
+ dsgn_temps['htg_dsgn_sup_air_temp_c'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_c']
4809
+
4730
4810
  hps = []
4731
4811
  thermal_zones.each do |zone|
4732
4812
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.Model.Model', "Adding Central Air Source HP for #{zone.name}.")
@@ -4734,15 +4814,6 @@ class Standard
4734
4814
  air_loop = OpenStudio::Model::AirLoopHVAC.new(model)
4735
4815
  air_loop.setName("#{zone.name} Central Air Source HP")
4736
4816
 
4737
- # default design temperatures across all air loops
4738
- dsgn_temps = standard_design_sizing_temperatures
4739
-
4740
- # adjusted temperatures for furnace_central_ac
4741
- dsgn_temps['zn_htg_dsgn_sup_air_temp_f'] = 122.0
4742
- dsgn_temps['zn_htg_dsgn_sup_air_temp_c'] = OpenStudio.convert(dsgn_temps['zn_htg_dsgn_sup_air_temp_f'], 'F', 'C').get
4743
- dsgn_temps['htg_dsgn_sup_air_temp_f'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_f']
4744
- dsgn_temps['htg_dsgn_sup_air_temp_c'] = dsgn_temps['zn_htg_dsgn_sup_air_temp_c']
4745
-
4746
4817
  # default design settings used across all air loops
4747
4818
  sizing_system = adjust_sizing_system(air_loop, dsgn_temps, sizing_option: 'NonCoincident')
4748
4819
  sizing_system.setAllOutdoorAirinCooling(true)
@@ -4950,6 +5021,14 @@ class Standard
4950
5021
  zone.setCoolingPriority(zone_hvac.to_ModelObject.get, 1)
4951
5022
  zone.setHeatingPriority(zone_hvac.to_ModelObject.get, 1)
4952
5023
 
5024
+ # set the cooling and heating fraction to zero so that the ERV does not try to meet the heating or cooling load.
5025
+ if model.version < OpenStudio::VersionString.new('2.8.0')
5026
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', 'OpenStudio version is less than 2.8.0; ERV will attempt to meet heating and cooling load up to ventilation rate. If this is not intended, use a newer version of OpenStudio.')
5027
+ else
5028
+ zone.setSequentialCoolingFraction(zone_hvac.to_ModelObject.get, 0.0)
5029
+ zone.setSequentialHeatingFraction(zone_hvac.to_ModelObject.get, 0.0)
5030
+ end
5031
+
4953
5032
  # Calculate ERV SAT during sizing periods
4954
5033
  # Standard rating conditions based on AHRI Std 1060 - 2013
4955
5034
  # heating design
@@ -5578,6 +5657,9 @@ class Standard
5578
5657
  # @param air_loop_cooling_type [String] type of cooling coil serving main air loop, options are DX or Water
5579
5658
  # @param zone_equipment_ventilation [Bool] toggle whether to include outdoor air ventilation on zone equipment
5580
5659
  # including as fan coil units, VRF terminals, or water source heat pumps.
5660
+ # @param fan_coil_capacity_control_method [String] Only applicable to Fan Coil system type.
5661
+ # Capacity control method for the fan coil. Options are ConstantFanVariableFlow, CyclingFan, VariableFanVariableFlow,
5662
+ # and VariableFanConstantFlow. If VariableFan, the fan will be VariableVolume.
5581
5663
  # @return [Bool] returns true if successful, false if not
5582
5664
  def model_add_hvac_system(model,
5583
5665
  system_type,
@@ -5590,7 +5672,8 @@ class Standard
5590
5672
  heat_pump_loop_cooling_type: 'EvaporativeFluidCooler',
5591
5673
  air_loop_heating_type: 'Water',
5592
5674
  air_loop_cooling_type: 'Water',
5593
- zone_equipment_ventilation: true)
5675
+ zone_equipment_ventilation: true,
5676
+ fan_coil_capacity_control_method: 'CyclingFan')
5594
5677
 
5595
5678
  # don't do anything if there are no zones
5596
5679
  return true if zones.empty?
@@ -5619,12 +5702,14 @@ class Standard
5619
5702
  cooling_type: 'Single Speed DX AC',
5620
5703
  heating_type: heating_type,
5621
5704
  hot_water_loop: hot_water_loop,
5622
- fan_type: 'ConstantVolume')
5705
+ fan_type: 'ConstantVolume',
5706
+ ventilation: zone_equipment_ventilation)
5623
5707
 
5624
5708
  when 'PTHP'
5625
5709
  model_add_pthp(model,
5626
5710
  zones,
5627
- fan_type: 'ConstantVolume')
5711
+ fan_type: 'ConstantVolume',
5712
+ ventilation: zone_equipment_ventilation)
5628
5713
 
5629
5714
  when 'PSZ-AC'
5630
5715
  case main_heat_fuel
@@ -5728,7 +5813,8 @@ class Standard
5728
5813
  zones,
5729
5814
  chilled_water_loop,
5730
5815
  hot_water_loop: hot_water_loop,
5731
- ventilation: zone_equipment_ventilation)
5816
+ ventilation: zone_equipment_ventilation,
5817
+ capacity_control_method: fan_coil_capacity_control_method)
5732
5818
 
5733
5819
  when 'Radiant Slab'
5734
5820
  case main_heat_fuel
@@ -5781,6 +5867,12 @@ class Standard
5781
5867
  fan_pressure_rise: 0.2,
5782
5868
  heating_type: main_heat_fuel)
5783
5869
 
5870
+ when 'High Temp Radiant'
5871
+ model_add_high_temp_radiant(model,
5872
+ zones,
5873
+ heating_type: main_heat_fuel,
5874
+ combustion_efficiency: 0.8)
5875
+
5784
5876
  when 'Window AC'
5785
5877
  model_add_window_ac(model,
5786
5878
  zones)
@@ -5793,6 +5885,7 @@ class Standard
5793
5885
  ventilation: false)
5794
5886
 
5795
5887
  when 'Forced Air Furnace'
5888
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.Model.Model', 'If a Forced Air Furnace with ventilation serves a core zone, make sure the outdoor air is included in design sizing for the systems (typically occupancy, and therefore ventilation is zero during winter sizing), otherwise it may not be sized large enough to meet the heating load in some situations.')
5796
5889
  model_add_furnace_central_ac(model,
5797
5890
  zones,
5798
5891
  heating: true,
@@ -5926,8 +6019,12 @@ class Standard
5926
6019
  hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
5927
6020
  hot_water_loop_type: 'LowTemperature')
5928
6021
  else
5929
- hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
5930
- hot_water_loop_type: hot_water_loop_type)
6022
+ if air_loop_heating_type == 'Water'
6023
+ hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
6024
+ hot_water_loop_type: hot_water_loop_type)
6025
+ else
6026
+ heating_type = main_heat_fuel
6027
+ end
5931
6028
  end
5932
6029
 
5933
6030
  case cool_fuel
@@ -5948,6 +6045,7 @@ class Standard
5948
6045
  zones,
5949
6046
  hot_water_loop: hot_water_loop,
5950
6047
  chilled_water_loop: chilled_water_loop,
6048
+ heating_type: heating_type,
5951
6049
  electric_reheat: electric_reheat)
5952
6050
 
5953
6051
  when 'PVAV PFP Boxes'
@@ -6087,33 +6185,6 @@ class Standard
6087
6185
  doas_type: 'DOASVAV',
6088
6186
  econo_ctrl_mthd: 'FixedDryBulb')
6089
6187
 
6090
- when 'DOAS with DCV and Economizing'
6091
- if air_loop_heating_type == 'Water'
6092
- case main_heat_fuel
6093
- when 'AirSourceHeatPump'
6094
- hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
6095
- hot_water_loop_type: 'LowTemperature')
6096
- else
6097
- hot_water_loop = model_get_or_add_hot_water_loop(model, main_heat_fuel,
6098
- hot_water_loop_type: hot_water_loop_type)
6099
- end
6100
- else
6101
- hot_water_loop = nil
6102
- end
6103
- if air_loop_cooling_type == 'Water'
6104
- chilled_water_loop = model_get_or_add_chilled_water_loop(model, cool_fuel,
6105
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type)
6106
- else
6107
- chilled_water_loop = nil
6108
- end
6109
- model_add_doas(model,
6110
- zones,
6111
- hot_water_loop: hot_water_loop,
6112
- chilled_water_loop: chilled_water_loop,
6113
- doas_type: 'DOASVAV',
6114
- demand_control_ventilation: true,
6115
- econo_ctrl_mthd: 'FixedDryBulb')
6116
-
6117
6188
  when 'ERVs'
6118
6189
  model_add_zone_erv(model, zones)
6119
6190
 
@@ -6123,256 +6194,72 @@ class Standard
6123
6194
  when 'Ideal Air Loads'
6124
6195
  model_add_ideal_air_loads(model, zones)
6125
6196
 
6126
- ### Combination Systems ###
6127
- when 'Water Source Heat Pumps with ERVs'
6128
- model_add_hvac_system(model,
6129
- system_type = 'ERVs',
6130
- main_heat_fuel,
6131
- zone_heat_fuel,
6132
- cool_fuel,
6133
- zones)
6134
-
6135
- model_add_hvac_system(model,
6136
- system_type = 'Water Source Heat Pumps',
6137
- main_heat_fuel,
6138
- zone_heat_fuel,
6139
- cool_fuel,
6140
- zones,
6141
- heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6142
- zone_equipment_ventilation: false)
6143
-
6144
- when 'Water Source Heat Pumps with DOAS'
6145
- model_add_hvac_system(model,
6146
- system_type = 'DOAS',
6147
- main_heat_fuel,
6148
- zone_heat_fuel,
6149
- cool_fuel,
6150
- zones,
6151
- hot_water_loop_type: hot_water_loop_type,
6152
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6153
- air_loop_heating_type: air_loop_heating_type,
6154
- air_loop_cooling_type: air_loop_cooling_type)
6155
-
6156
- model_add_hvac_system(model,
6157
- system_type = 'Water Source Heat Pumps',
6158
- main_heat_fuel,
6159
- zone_heat_fuel,
6160
- cool_fuel,
6161
- zones,
6162
- hot_water_loop_type: hot_water_loop_type,
6163
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6164
- heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6165
- zone_equipment_ventilation: false)
6166
-
6167
- when 'Water Source Heat Pumps with DOAS with DCV'
6168
- model_add_hvac_system(model,
6169
- system_type = 'DOAS with DCV',
6170
- main_heat_fuel,
6171
- zone_heat_fuel,
6172
- cool_fuel,
6173
- zones,
6174
- hot_water_loop_type: hot_water_loop_type,
6175
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6176
- heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6177
- air_loop_heating_type: air_loop_heating_type,
6178
- air_loop_cooling_type: air_loop_cooling_type)
6179
-
6180
- model_add_hvac_system(model,
6181
- system_type = 'Water Source Heat Pumps',
6182
- main_heat_fuel,
6183
- zone_heat_fuel,
6184
- cool_fuel,
6185
- zones,
6186
- hot_water_loop_type: hot_water_loop_type,
6187
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6188
- zone_equipment_ventilation: false)
6189
-
6190
- when 'Ground Source Heat Pumps with ERVs'
6191
- model_add_hvac_system(model,
6192
- system_type = 'ERVs',
6193
- main_heat_fuel,
6194
- zone_heat_fuel,
6195
- cool_fuel,
6196
- zones)
6197
-
6198
- model_add_hvac_system(model,
6199
- system_type = 'Ground Source Heat Pumps',
6200
- main_heat_fuel,
6201
- zone_heat_fuel,
6202
- cool_fuel,
6203
- zones,
6204
- zone_equipment_ventilation: false)
6205
-
6206
- when 'Ground Source Heat Pumps with DOAS'
6207
- model_add_hvac_system(model,
6208
- system_type = 'DOAS',
6209
- main_heat_fuel,
6210
- zone_heat_fuel,
6211
- cool_fuel,
6212
- zones,
6213
- hot_water_loop_type: hot_water_loop_type,
6214
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6215
- air_loop_heating_type: air_loop_heating_type,
6216
- air_loop_cooling_type: air_loop_cooling_type)
6217
-
6218
- model_add_hvac_system(model,
6219
- system_type = 'Ground Source Heat Pumps',
6220
- main_heat_fuel,
6221
- zone_heat_fuel,
6222
- cool_fuel,
6223
- zones,
6224
- zone_equipment_ventilation: false)
6225
-
6226
- when 'Ground Source Heat Pumps with DOAS with DCV'
6227
- model_add_hvac_system(model,
6228
- system_type = 'DOAS with DCV',
6229
- main_heat_fuel,
6230
- zone_heat_fuel,
6231
- cool_fuel,
6232
- zones,
6233
- hot_water_loop_type: hot_water_loop_type,
6234
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6235
- air_loop_heating_type: air_loop_heating_type,
6236
- air_loop_cooling_type: air_loop_cooling_type)
6237
-
6238
- model_add_hvac_system(model,
6239
- system_type = 'Ground Source Heat Pumps',
6240
- main_heat_fuel,
6241
- zone_heat_fuel,
6242
- cool_fuel,
6243
- zones,
6244
- zone_equipment_ventilation: false)
6245
-
6246
- when 'Fan Coil with DOAS'
6247
- model_add_hvac_system(model,
6248
- system_type = 'DOAS',
6249
- main_heat_fuel,
6250
- zone_heat_fuel,
6251
- cool_fuel,
6252
- zones,
6253
- hot_water_loop_type: hot_water_loop_type,
6254
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6255
- air_loop_heating_type: 'Water',
6256
- air_loop_cooling_type: 'Water')
6257
-
6258
- model_add_hvac_system(model,
6259
- system_type = 'Fan Coil',
6260
- main_heat_fuel,
6261
- zone_heat_fuel,
6262
- cool_fuel,
6263
- zones,
6264
- hot_water_loop_type: hot_water_loop_type,
6265
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6266
- zone_equipment_ventilation: false)
6267
-
6268
- when 'Fan Coil with DOAS with DCV'
6269
- model_add_hvac_system(model,
6270
- system_type = 'DOAS with DCV',
6271
- main_heat_fuel,
6272
- zone_heat_fuel,
6273
- cool_fuel,
6274
- zones,
6275
- hot_water_loop_type: hot_water_loop_type,
6276
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6277
- air_loop_heating_type: 'Water',
6278
- air_loop_cooling_type: 'Water')
6279
-
6280
- model_add_hvac_system(model,
6281
- system_type = 'Fan Coil',
6282
- main_heat_fuel,
6283
- zone_heat_fuel,
6284
- cool_fuel,
6285
- zones,
6286
- hot_water_loop_type: hot_water_loop_type,
6287
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6288
- zone_equipment_ventilation: false)
6289
-
6290
- when 'Fan Coil with ERVs'
6291
- model_add_hvac_system(model,
6292
- system_type = 'ERVs',
6293
- main_heat_fuel,
6294
- zone_heat_fuel,
6295
- cool_fuel,
6296
- zones)
6297
-
6298
- model_add_hvac_system(model,
6299
- system_type = 'Fan Coil',
6300
- main_heat_fuel,
6301
- zone_heat_fuel,
6302
- cool_fuel,
6303
- zones,
6304
- hot_water_loop_type: hot_water_loop_type,
6305
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6306
- zone_equipment_ventilation: false)
6307
-
6308
- when 'VRF with DOAS'
6309
- model_add_hvac_system(model,
6310
- system_type = 'DOAS',
6311
- main_heat_fuel,
6312
- zone_heat_fuel,
6313
- cool_fuel,
6314
- zones,
6315
- hot_water_loop_type: hot_water_loop_type,
6316
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6317
- air_loop_heating_type: 'DX',
6318
- air_loop_cooling_type: 'DX')
6319
-
6320
- model_add_hvac_system(model,
6321
- system_type = 'VRF',
6322
- main_heat_fuel,
6323
- zone_heat_fuel,
6324
- cool_fuel,
6325
- zones,
6326
- zone_equipment_ventilation: false)
6327
-
6328
- when 'VRF with DOAS with DCV'
6329
- model_add_hvac_system(model,
6330
- system_type = 'DOAS with DCV',
6331
- main_heat_fuel,
6332
- zone_heat_fuel,
6333
- cool_fuel,
6334
- zones,
6335
- hot_water_loop_type: hot_water_loop_type,
6336
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6337
- air_loop_heating_type: 'DX',
6338
- air_loop_cooling_type: 'DX')
6339
-
6340
- model_add_hvac_system(model,
6341
- system_type = 'VRF',
6342
- main_heat_fuel,
6343
- zone_heat_fuel,
6344
- cool_fuel,
6345
- zones,
6346
- zone_equipment_ventilation: false)
6347
-
6348
- when 'Radiant Slab with DOAS'
6349
- model_add_hvac_system(model,
6350
- system_type = 'Radiant Slab',
6351
- main_heat_fuel,
6352
- zone_heat_fuel,
6353
- cool_fuel,
6354
- zones,
6355
- hot_water_loop_type: hot_water_loop_type,
6356
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6357
- rad_lock_str: rad_lock_str,
6358
- rad_lock_end: rad_lock_end)
6359
-
6360
- model_add_hvac_system(model,
6361
- system_type = 'DOAS',
6362
- main_heat_fuel,
6363
- zone_heat_fuel,
6364
- cool_fuel,
6365
- zones,
6366
- hot_water_loop_type: hot_water_loop_type,
6367
- chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6368
- air_loop_heating_type: 'Water',
6369
- air_loop_cooling_type: 'Water')
6370
-
6371
6197
  else
6372
-
6373
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "HVAC system type '#{system_type}' not recognized")
6374
- return false
6375
-
6198
+ # Combination Systems
6199
+ if system_type.include? 'with DOAS with DCV'
6200
+ # add DOAS DCV system
6201
+ model_add_hvac_system(model, 'DOAS with DCV', main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
6202
+ hot_water_loop_type: hot_water_loop_type,
6203
+ chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6204
+ heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6205
+ air_loop_heating_type: air_loop_heating_type,
6206
+ air_loop_cooling_type: air_loop_cooling_type,
6207
+ zone_equipment_ventilation: false,
6208
+ fan_coil_capacity_control_method: fan_coil_capacity_control_method)
6209
+ # add paired system type
6210
+ paired_system_type = system_type.gsub(' with DOAS with DCV', '')
6211
+ model_add_hvac_system(model, paired_system_type, main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
6212
+ hot_water_loop_type: hot_water_loop_type,
6213
+ chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6214
+ heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6215
+ air_loop_heating_type: air_loop_heating_type,
6216
+ air_loop_cooling_type: air_loop_cooling_type,
6217
+ zone_equipment_ventilation: false,
6218
+ fan_coil_capacity_control_method: fan_coil_capacity_control_method)
6219
+ elsif system_type.include? 'with DOAS'
6220
+ # add DOAS system
6221
+ model_add_hvac_system(model, 'DOAS', main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
6222
+ hot_water_loop_type: hot_water_loop_type,
6223
+ chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6224
+ heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6225
+ air_loop_heating_type: air_loop_heating_type,
6226
+ air_loop_cooling_type: air_loop_cooling_type,
6227
+ zone_equipment_ventilation: false,
6228
+ fan_coil_capacity_control_method: fan_coil_capacity_control_method)
6229
+ # add paired system type
6230
+ paired_system_type = system_type.gsub(' with DOAS', '')
6231
+ model_add_hvac_system(model, paired_system_type, main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
6232
+ hot_water_loop_type: hot_water_loop_type,
6233
+ chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6234
+ heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6235
+ air_loop_heating_type: air_loop_heating_type,
6236
+ air_loop_cooling_type: air_loop_cooling_type,
6237
+ zone_equipment_ventilation: false,
6238
+ fan_coil_capacity_control_method: fan_coil_capacity_control_method)
6239
+ elsif system_type.include? 'with ERVs'
6240
+ # add DOAS system
6241
+ model_add_hvac_system(model, 'ERVs', main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
6242
+ hot_water_loop_type: hot_water_loop_type,
6243
+ chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6244
+ heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6245
+ air_loop_heating_type: air_loop_heating_type,
6246
+ air_loop_cooling_type: air_loop_cooling_type,
6247
+ zone_equipment_ventilation: false,
6248
+ fan_coil_capacity_control_method: fan_coil_capacity_control_method)
6249
+ # add paired system type
6250
+ paired_system_type = system_type.gsub(' with ERVs', '')
6251
+ model_add_hvac_system(model, paired_system_type, main_heat_fuel, zone_heat_fuel, cool_fuel, zones,
6252
+ hot_water_loop_type: hot_water_loop_type,
6253
+ chilled_water_loop_cooling_type: chilled_water_loop_cooling_type,
6254
+ heat_pump_loop_cooling_type: heat_pump_loop_cooling_type,
6255
+ air_loop_heating_type: air_loop_heating_type,
6256
+ air_loop_cooling_type: air_loop_cooling_type,
6257
+ zone_equipment_ventilation: false,
6258
+ fan_coil_capacity_control_method: fan_coil_capacity_control_method)
6259
+ else
6260
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Model', "HVAC system type '#{system_type}' not recognized")
6261
+ return false
6262
+ end
6376
6263
  end
6377
6264
 
6378
6265
  # rename air loop and plant loop nodes for readability