openstudio-standards 0.7.1 → 0.8.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 (362) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAE90120162019LargeHotel.json +58 -13
  3. data/data/geometry/ASHRAELargeHotel.json +58 -13
  4. data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
  5. data/data/standards/export_OpenStudio_libraries.rb +2 -2
  6. data/data/standards/manage_OpenStudio_Standards.rb +6 -6
  7. data/data/standards/openstudio_standards_duplicates_log.csv +7961 -1
  8. data/data/standards/test_performance_expected_dd_results.csv +2016 -2004
  9. data/lib/openstudio-standards/btap/fileio.rb +171 -5
  10. data/lib/openstudio-standards/constructions/create.rb +38 -4
  11. data/lib/openstudio-standards/constructions/modify.rb +10 -3
  12. data/lib/openstudio-standards/create_typical/create_typical.rb +42 -28
  13. data/lib/openstudio-standards/create_typical/space_type_information.rb +160 -0
  14. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +16 -19
  15. data/lib/openstudio-standards/exterior_lighting/create.rb +454 -0
  16. data/lib/openstudio-standards/exterior_lighting/data/entryways.csv +52 -0
  17. data/lib/openstudio-standards/exterior_lighting/data/parking.csv +54 -0
  18. data/lib/openstudio-standards/exterior_lighting/data/typical_exterior_lighting.json +37 -0
  19. data/lib/openstudio-standards/exterior_lighting/information.rb +202 -0
  20. data/lib/openstudio-standards/geometry/information.rb +49 -2
  21. data/lib/openstudio-standards/hvac/components/create.rb +169 -0
  22. data/lib/openstudio-standards/hvac/components/modify.rb +42 -0
  23. data/lib/openstudio-standards/hvac/exhaust/create_exhaust_fan.rb +108 -0
  24. data/lib/openstudio-standards/hvac/exhaust/data/convert_data.rb +86 -0
  25. data/lib/openstudio-standards/hvac/exhaust/data/typical_exhaust.csv +18 -0
  26. data/lib/openstudio-standards/hvac/exhaust/data/typical_exhaust.json +89 -0
  27. data/lib/openstudio-standards/infiltration/nist_infiltration.rb +25 -13
  28. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +0 -64
  29. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +0 -25
  30. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +0 -25
  31. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Warehouse.rb +1 -11
  32. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +5 -1
  33. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -7
  34. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +36 -18
  35. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +1 -1
  36. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +121 -239
  37. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +179 -151
  38. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +0 -466
  39. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +18 -2
  40. data/lib/openstudio-standards/refrigeration/create_case.rb +125 -0
  41. data/lib/openstudio-standards/refrigeration/create_compressor.rb +78 -0
  42. data/lib/openstudio-standards/refrigeration/create_compressor_rack.rb +48 -0
  43. data/lib/openstudio-standards/refrigeration/create_refrigeration_system.rb +74 -0
  44. data/lib/openstudio-standards/refrigeration/create_typical_refrigeration.rb +161 -0
  45. data/lib/openstudio-standards/refrigeration/create_walkin.rb +116 -0
  46. data/lib/openstudio-standards/refrigeration/data/refrigerated_cases.csv +31 -0
  47. data/lib/openstudio-standards/refrigeration/data/refrigerated_walkins.csv +76 -0
  48. data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +13 -0
  49. data/lib/openstudio-standards/refrigeration/data/typical_refrigerated_cases.csv +17 -0
  50. data/lib/openstudio-standards/refrigeration/data/typical_refrigerated_walkins.csv +53 -0
  51. data/lib/openstudio-standards/refrigeration/information.rb +130 -0
  52. data/lib/openstudio-standards/schedules/parametric.rb +1 -1
  53. data/lib/openstudio-standards/service_water_heating/create_typical.rb +299 -0
  54. data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +16 -14
  55. data/lib/openstudio-standards/service_water_heating/data/convert_data.rb +119 -0
  56. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.csv +54 -0
  57. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.json +810 -0
  58. data/lib/openstudio-standards/service_water_heating/information.rb +69 -0
  59. data/lib/openstudio-standards/sql_file/fenestration.rb +1 -1
  60. data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +154 -0
  61. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +35 -12
  62. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +110 -61
  63. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +128 -29
  64. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +103 -38
  65. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
  66. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +106 -5
  67. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +8 -8
  68. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +44 -17
  69. data/lib/openstudio-standards/standards/Standards.Fan.rb +32 -21
  70. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +45 -18
  71. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +14 -9
  72. data/lib/openstudio-standards/standards/Standards.Model.rb +294 -76
  73. data/lib/openstudio-standards/standards/Standards.Motor.rb +66 -0
  74. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -1
  75. data/lib/openstudio-standards/standards/Standards.Pump.rb +34 -20
  76. data/lib/openstudio-standards/standards/Standards.ServiceWaterHeating.rb +0 -353
  77. data/lib/openstudio-standards/standards/Standards.Space.rb +3 -107
  78. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +2 -57
  79. data/lib/openstudio-standards/standards/Standards.Surface.rb +11 -3
  80. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +1 -120
  81. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.computer_room_acs.json +142 -0
  82. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +1006 -596
  83. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.energy_recovery.json +724 -0
  84. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +1258 -163
  85. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +1070 -140
  86. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +33 -3374
  87. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +1400 -340
  88. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.vrfs.json +769 -0
  89. 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 +2 -5338
  90. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.computer_room_acs.json +142 -0
  91. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +1006 -596
  92. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.energy_recovery.json +724 -0
  93. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +1258 -163
  94. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +1070 -140
  95. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +15 -3343
  96. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +1840 -372
  97. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.vrfs.json +769 -0
  98. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +20 -10
  99. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +0 -9
  100. 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 +0 -5382
  101. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.computer_room_acs.json +142 -0
  102. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +1006 -628
  103. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +718 -712
  104. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +1438 -163
  105. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +2552 -182
  106. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +14 -3368
  107. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +2348 -352
  108. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.vrfs.json +769 -0
  109. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +47 -61
  110. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +6 -0
  111. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Motor.rb +11 -0
  112. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +0 -9
  113. 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 +2 -5522
  114. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.computer_room_acs.json +142 -0
  115. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +1006 -628
  116. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +1358 -1346
  117. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +1438 -163
  118. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +1359 -189
  119. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +19 -3451
  120. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +2176 -616
  121. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.vrfs.json +616 -0
  122. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +47 -61
  123. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +9 -0
  124. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Motor.rb +11 -0
  125. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +0 -9
  126. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.spc_typ.json +8 -6055
  127. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.computer_room_acs.json +142 -0
  128. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.economizers.json +1006 -628
  129. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +1188 -1424
  130. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ext_ltg.json +1498 -163
  131. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.motors.json +1769 -189
  132. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +15 -3422
  133. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +1807 -408
  134. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.vrfs.json +1024 -0
  135. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +70 -87
  136. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +9 -0
  137. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Motor.rb +11 -0
  138. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +0 -9
  139. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.spc_typ.json +8 -6080
  140. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.computer_room_acs.json +142 -0
  141. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.economizers.json +1006 -628
  142. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2806 -3296
  143. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ext_ltg.json +1558 -163
  144. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.motors.json +1759 -189
  145. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +16 -3448
  146. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +2758 -422
  147. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.vrfs.json +684 -0
  148. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +14 -3318
  149. 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 +2 -4786
  150. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.chillers.json +1 -1
  151. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.economizers.json +953 -207
  152. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.energy_recovery.json +724 -0
  153. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.ext_ltg.json +5 -5
  154. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +11 -2858
  155. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirConditionerVariableRefrigerantFlow.rb +13 -0
  156. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +0 -18
  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 +1 -4739
  158. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.chillers.json +0 -51
  159. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.economizers.json +953 -207
  160. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.energy_recovery.json +724 -0
  161. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.ext_ltg.json +5 -5
  162. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +9 -2830
  163. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirConditionerVariableRefrigerantFlow.rb +13 -0
  164. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +0 -18
  165. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.economizers.json +1006 -564
  166. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.energy_recovery.json +1264 -0
  167. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ext_ltg.json +5 -5
  168. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +0 -1079
  169. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +132 -288
  170. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +44 -20
  171. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +11 -0
  172. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +0 -8
  173. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +1006 -564
  174. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.energy_recovery.json +1264 -0
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +5 -5
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +0 -1079
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +137 -288
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +44 -20
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +11 -0
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +0 -9
  181. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +12 -10
  182. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +8 -6
  183. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +8 -6
  184. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +9 -3
  185. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Fan.rb +6 -40
  186. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +30 -337
  187. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +4 -5
  188. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -2
  189. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +56 -3
  190. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +80 -0
  191. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +0 -10
  192. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +35 -0
  193. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.economizers.json +550 -0
  194. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.energy_recovery.json +724 -0
  195. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.ext_ltg.json +1216 -0
  196. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +5 -5
  197. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.motors.json +225 -245
  198. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.unitary_acs.json +174 -78
  199. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +354 -317
  200. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +19 -3
  201. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_airloop_hvac.json +185 -0
  202. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_airloop_hvac_doas.json +127 -0
  203. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_building.json +121 -0
  204. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_design_specification_outdoor_air.json +49 -0
  205. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_electric_equipment.json +113 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_exterior_lights.json +120 -0
  207. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_space.json +388 -0
  208. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_spacetype.json +367 -0
  209. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_thermal_zone.json +56 -0
  210. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_connections.json +37 -0
  211. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_equipment.json +69 -0
  212. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_equipment_definition.json +37 -0
  213. data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.ext_ltg.json +5 -5
  214. data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.ext_ltg.json +5 -5
  215. data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.ext_ltg.json +5 -5
  216. data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.ext_ltg.json +5 -5
  217. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.ext_ltg.json +5 -5
  218. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.ext_ltg.json +5 -5
  219. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +5 -5
  220. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ext_ltg.json +5 -5
  221. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +5 -5
  222. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ext_ltg.json +5 -5
  223. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +5 -5
  224. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ext_ltg.json +5 -5
  225. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +5 -5
  226. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ext_ltg.json +5 -5
  227. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +5 -5
  228. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ext_ltg.json +5 -5
  229. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +5 -5
  230. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ext_ltg.json +5 -5
  231. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +5 -5
  232. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ext_ltg.json +5 -5
  233. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +5 -5
  234. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ext_ltg.json +5 -5
  235. data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/data/comstock_deer_2020.ext_ltg.json +5 -5
  236. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ext_ltg.json +5 -5
  237. data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/data/comstock_deer_2025.ext_ltg.json +5 -5
  238. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ext_ltg.json +5 -5
  239. data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/data/comstock_deer_2030.ext_ltg.json +5 -5
  240. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ext_ltg.json +5 -5
  241. data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/data/comstock_deer_2035.ext_ltg.json +5 -5
  242. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ext_ltg.json +5 -5
  243. data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/data/comstock_deer_2040.ext_ltg.json +5 -5
  244. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ext_ltg.json +5 -5
  245. data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/data/comstock_deer_2045.ext_ltg.json +5 -5
  246. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ext_ltg.json +5 -5
  247. data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/data/comstock_deer_2050.ext_ltg.json +5 -5
  248. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ext_ltg.json +5 -5
  249. data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/data/comstock_deer_2055.ext_ltg.json +5 -5
  250. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ext_ltg.json +5 -5
  251. data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/data/comstock_deer_2060.ext_ltg.json +5 -5
  252. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ext_ltg.json +5 -5
  253. data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/data/comstock_deer_2065.ext_ltg.json +5 -5
  254. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ext_ltg.json +5 -5
  255. data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/data/comstock_deer_2070.ext_ltg.json +5 -5
  256. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ext_ltg.json +5 -5
  257. data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/data/comstock_deer_2075.ext_ltg.json +5 -5
  258. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ext_ltg.json +5 -5
  259. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +5 -5
  260. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ext_ltg.json +5 -5
  261. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +10 -1
  262. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/unitary_acs.json +20 -20
  263. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +379 -27
  264. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +1 -4
  265. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +0 -1
  266. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +1 -1
  267. data/lib/openstudio-standards/standards/necb/NECB2011/data/unitary_acs.json +20 -20
  268. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +34 -22
  269. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +76 -23
  270. data/lib/openstudio-standards/standards/necb/NECB2011/necb_shw_calculation.xlsx +0 -0
  271. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +4 -5
  272. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +6 -2
  273. data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +26 -24
  274. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -1
  275. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +38 -32
  276. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +215 -18
  277. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +190 -15
  278. data/lib/openstudio-standards/standards/necb/common/national_carbon_price_sched_feb_2025.json +60 -0
  279. data/lib/openstudio-standards/standards/necb/common/utility_pricing_2025-02-20.csv +92 -0
  280. data/lib/openstudio-standards/utilities/ruleset_check.rb +204 -0
  281. data/lib/openstudio-standards/version.rb +1 -1
  282. data/lib/openstudio-standards/weather/information.rb +1 -1
  283. data/lib/openstudio-standards.rb +32 -12
  284. metadata +78 -80
  285. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +0 -13
  286. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +0 -13
  287. data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +0 -13
  288. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +0 -432
  289. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Space.rb +0 -11
  290. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ext_ltg.json +0 -169
  291. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ref_cases.json +0 -1456
  292. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.ref_lnup.json +0 -562
  293. 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 +0 -20804
  294. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Space.rb +0 -11
  295. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ext_ltg.json +0 -169
  296. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ref_cases.json +0 -1456
  297. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/comstock_ashrae_90_1_2007.ref_lnup.json +0 -562
  298. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ext_ltg.json +0 -169
  299. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ref_cases.json +0 -1456
  300. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/comstock_ashrae_90_1_2010.ref_lnup.json +0 -562
  301. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ext_ltg.json +0 -169
  302. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ref_cases.json +0 -1456
  303. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/comstock_ashrae_90_1_2013.ref_lnup.json +0 -562
  304. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ext_ltg.json +0 -169
  305. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ref_cases.json +0 -763
  306. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/comstock_ashrae_90_1_2016.ref_lnup.json +0 -562
  307. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ext_ltg.json +0 -169
  308. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ref_cases.json +0 -763
  309. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/comstock_ashrae_90_1_2019.ref_lnup.json +0 -562
  310. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ext_ltg.json +0 -169
  311. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ref_cases.json +0 -1456
  312. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/comstock_doe_ref_1980_2004.ref_lnup.json +0 -562
  313. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ext_ltg.json +0 -169
  314. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ref_cases.json +0 -1456
  315. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/comstock_doe_ref_pre_1980.ref_lnup.json +0 -562
  316. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_economizers.json +0 -213
  317. data/lib/openstudio-standards/standards/cbes/cbes.Space.rb +0 -11
  318. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.Space.rb +0 -11
  319. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.Space.rb +0 -11
  320. data/lib/openstudio-standards/standards/deer/deer.Space.rb +0 -20
  321. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ref_cases.json +0 -1456
  322. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ref_lnup.json +0 -562
  323. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ref_cases.json +0 -1456
  324. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ref_lnup.json +0 -562
  325. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ref_cases.json +0 -1456
  326. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ref_lnup.json +0 -562
  327. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ref_cases.json +0 -1456
  328. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ref_lnup.json +0 -562
  329. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ref_cases.json +0 -1456
  330. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ref_lnup.json +0 -562
  331. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ref_cases.json +0 -1456
  332. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ref_lnup.json +0 -562
  333. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ref_cases.json +0 -1456
  334. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ref_lnup.json +0 -562
  335. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ref_cases.json +0 -1456
  336. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ref_lnup.json +0 -562
  337. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ref_cases.json +0 -1456
  338. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ref_lnup.json +0 -562
  339. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ref_cases.json +0 -1456
  340. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ref_lnup.json +0 -562
  341. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ref_cases.json +0 -1456
  342. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ref_lnup.json +0 -562
  343. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ref_cases.json +0 -1456
  344. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ref_lnup.json +0 -562
  345. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ref_cases.json +0 -1456
  346. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ref_lnup.json +0 -562
  347. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ref_cases.json +0 -1456
  348. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ref_lnup.json +0 -562
  349. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ref_cases.json +0 -1456
  350. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ref_lnup.json +0 -562
  351. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ref_cases.json +0 -1456
  352. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ref_lnup.json +0 -562
  353. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ref_cases.json +0 -1456
  354. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ref_lnup.json +0 -562
  355. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ref_cases.json +0 -1456
  356. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ref_lnup.json +0 -562
  357. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ref_cases.json +0 -1456
  358. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ref_lnup.json +0 -562
  359. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ref_cases.json +0 -1456
  360. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ref_lnup.json +0 -562
  361. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ref_cases.json +0 -1456
  362. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ref_lnup.json +0 -562
@@ -270,7 +270,11 @@ class ECMS
270
270
  outdoor_vrf_unit.setName('VRF Outdoor Unit')
271
271
  outdoor_vrf_unit.setHeatPumpWasteHeatRecovery(true)
272
272
  outdoor_vrf_unit.setRatedHeatingCOP(4.0)
273
- outdoor_vrf_unit.setRatedCoolingCOP(4.0)
273
+ if model.version < OpenStudio::VersionString.new('2.9.0')
274
+ outdoor_vrf_unit.setRatedCoolingCOP(4.0)
275
+ else
276
+ outdoor_vrf_unit.setGrossRatedCoolingCOP(4.0)
277
+ end
274
278
  outdoor_vrf_unit.setMinimumOutdoorTemperatureinHeatingMode(-25.0)
275
279
  outdoor_vrf_unit.setHeatingPerformanceCurveOutdoorTemperatureType('WetBulbTemperature')
276
280
  outdoor_vrf_unit.setMasterThermostatPriorityControlType('ThermostatOffsetPriority')
@@ -1050,6 +1054,9 @@ class ECMS
1050
1054
  when "heatpump_watertowater_equationfit"
1051
1055
  htg_eqpt = OpenStudio::Model::HeatPumpWaterToWaterEquationFitHeating.new(model)
1052
1056
  htg_eqpt.setName("HeatPumpWaterToWaterEquationFitHeating")
1057
+ when "heatpump_plantloop_eir_heating"
1058
+ htg_eqpt = OpenStudio::Model::HeatPumpPlantLoopEIRHeating.new(model)
1059
+ htg_eqpt.setName("HeatPumpPlantLoopEIRHeating")
1053
1060
  end
1054
1061
 
1055
1062
  return htg_eqpt
@@ -1070,6 +1077,9 @@ class ECMS
1070
1077
  when "heatpump_watertowater_equationfit"
1071
1078
  clg_eqpt = OpenStudio::Model::HeatPumpWaterToWaterEquationFitCooling.new(model)
1072
1079
  clg_eqpt.setName("HeatPumpWaterToWaterEquationFitCooling")
1080
+ when "heatpump_plantloop_eir_cooling"
1081
+ clg_eqpt = OpenStudio::Model::HeatPumpPlantLoopEIRCooling.new(model)
1082
+ clg_eqpt.setName("HeatPumpPlantLoopEIRCooling")
1073
1083
  end
1074
1084
 
1075
1085
  return clg_eqpt
@@ -1317,6 +1327,8 @@ class ECMS
1317
1327
  backup_coil = icomp.to_CoilHeatingElectric.get
1318
1328
  elsif icomp.to_CoilHeatingGas.is_initialized
1319
1329
  backup_coil = icomp.to_CoilHeatingGas.get
1330
+ elsif icomp.to_CoilHeatingWater.is_initialized
1331
+ backup_coil = icomp.to_CoilHeatingWater.get
1320
1332
  elsif icomp.to_FanConstantVolume.is_initialized
1321
1333
  fans << icomp.to_FanConstantVolume.get
1322
1334
  elsif icomp.to_FanVariableVolume.is_initialized
@@ -1362,12 +1374,24 @@ class ECMS
1362
1374
  end
1363
1375
  htg_dx_coil_init_name = get_hvac_comp_init_name(htg_dx_coil, false)
1364
1376
  htg_dx_coil.setName(htg_dx_coil_init_name)
1365
- if backup_coil.nominalCapacity.is_initialized
1366
- backup_coil_cap = backup_coil.nominalCapacity.to_f
1367
- elsif backup_coil.autosizedNominalCapacity.is_initialized
1368
- backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
1377
+ if (backup_coil.class.name.to_s.include? "CoilHeatingGas") || (backup_coil.class.name.to_s.include? "CoilHeatingElectric")
1378
+ if backup_coil.nominalCapacity.is_initialized
1379
+ backup_coil_cap = backup_coil.nominalCapacity.to_f
1380
+ elsif backup_coil.autosizedNominalCapacity.is_initialized
1381
+ backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
1382
+ else
1383
+ raise "Nominal capacity is undefiled for coil #{backup_coil.name.to_s}"
1384
+ end
1385
+ elsif backup_coil.class.name.to_s.include? "CoilHeatingWater"
1386
+ if backup_coil.ratedCapacity.is_initialized
1387
+ backup_coil_cap = backup_coil.ratedCapacity.to_f
1388
+ elsif backup_coil.autosizedRatedCapacity.is_initialized
1389
+ backup_coil_cap = backup_coil.autosizedRatedCapacity.to_f
1390
+ else
1391
+ raise "Rated capacity is undefiled for coil #{backup_coil.name.to_s}"
1392
+ end
1369
1393
  else
1370
- raise "Nominal capacity is undefiled for coil #{backup_coil.name.to_s}"
1394
+ raise("Backup coil type is not supported")
1371
1395
  end
1372
1396
  # Set the DX capacities to the maximum of the fraction of the backup coil capacity or the cooling capacity needed
1373
1397
  dx_cap = fr_backup_coil_cap_as_dx_coil_cap * backup_coil_cap
@@ -1646,6 +1670,8 @@ class ECMS
1646
1670
  backup_coil = icomp.to_CoilHeatingElectric.get
1647
1671
  elsif icomp.to_CoilHeatingGas.is_initialized
1648
1672
  backup_coil = icomp.to_CoilHeatingGas.get
1673
+ elsif icomp.to_CoilHeatingWater.is_initialized
1674
+ backup_coil = icomp.to_CoilHeatingWater.get
1649
1675
  end
1650
1676
  end
1651
1677
  if clg_dx_coil && htg_dx_coil && backup_coil
@@ -1661,12 +1687,24 @@ class ECMS
1661
1687
  end
1662
1688
  htg_dx_coil_init_name = get_hvac_comp_init_name(htg_dx_coil, true)
1663
1689
  htg_dx_coil.setName(htg_dx_coil_init_name)
1664
- if backup_coil.nominalCapacity.is_initialized
1665
- backup_coil_cap = backup_coil.nominalCapacity.to_f
1666
- elsif backup_coil.autosizedNominalCapacity.is_initialized
1667
- backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
1690
+ if (backup_coil.class.name.include? "CoilHeatingElectric") || (backup_coil.class.name.include? "CoilHeatingGas")
1691
+ if backup_coil.nominalCapacity.is_initialized
1692
+ backup_coil_cap = backup_coil.nominalCapacity.to_f
1693
+ elsif backup_coil.autosizedNominalCapacity.is_initialized
1694
+ backup_coil_cap = backup_coil.autosizedNominalCapacity.to_f
1695
+ else
1696
+ raise "Nominal capacity is undefined for coil #{backup_coil.name.to_s}"
1697
+ end
1698
+ elsif backup_coil.class.name.include? "CoilHeatingWater"
1699
+ if backup_coil.ratedCapacity.is_initialized
1700
+ backup_coil_cap = backup_coil.ratedCapacity.to_f
1701
+ elsif backup_coil.autosizedRatedCapacity.is_initialized
1702
+ backup_coil_cap = backup_coil.autosizedRatedCapacity.to_f
1703
+ else
1704
+ raise "Rated capacity is undefined for coil #{backup_coil.name.to_s}"
1705
+ end
1668
1706
  else
1669
- raise "Nominal capacity is undefined for coil #{backup_coil.name.to_s}"
1707
+ raise("Backup coil type is not supported")
1670
1708
  end
1671
1709
  # set the DX capacities to the maximum of the fraction of the backup coil capacity or the cooling capacity needed
1672
1710
  dx_cap = fr_backup_coil_cap_as_dx_coil_cap * backup_coil_cap
@@ -1793,11 +1831,19 @@ class ECMS
1793
1831
  else
1794
1832
  raise("Can not find curve hpowerf for #{hw_loop_htg_eqpt.name}")
1795
1833
  end
1796
- boiler = OpenStudio::Model::BoilerHotWater.new(model)
1797
- boiler.setFuelType(heating_fuel)
1834
+ # Add one boiler if the primary and backup boiler fuel types are the same. Add two boilers if the primary and
1835
+ # secondary boiler fuel types differ.
1836
+ boiler_fuels = []
1837
+ boiler_fuels[0] = standard.fuel_type_set.boiler_fueltype
1838
+ boiler_fuels[1] = standard.fuel_type_set.backup_boiler_fueltype unless standard.fuel_type_set.backup_boiler_fueltype == boiler_fuels[0]
1798
1839
  hw_loop_htg_eqpt_outlet_node = hw_loop_htg_eqpt.supplyOutletModelObject.get.to_Node.get
1799
- boiler.addToNode(hw_loop_htg_eqpt_outlet_node)
1800
-
1840
+ hw_boilers = []
1841
+ boiler_fuels.each do |boiler_fuel|
1842
+ boiler = OpenStudio::Model::BoilerHotWater.new(model)
1843
+ boiler.setFuelType(boiler_fuel)
1844
+ hw_boilers << boiler
1845
+ end
1846
+ hw_boilers.reverse().each {|boiler| boiler.addToNode(hw_loop_htg_eqpt_outlet_node)}
1801
1847
  # add chilled-water loop
1802
1848
  chw_loop,chw_loop_clg_eqpt = add_plantloop(model: model,
1803
1849
  loop_htg_eqpt_type: 'none',
@@ -1839,7 +1885,7 @@ class ECMS
1839
1885
  heat_rej_loop.addDemandBranchForComponent(hw_loop_htg_eqpt)
1840
1886
  heat_rej_loop.addDemandBranchForComponent(chw_loop_clg_eqpt)
1841
1887
 
1842
- # add output variables for district heating and cooling
1888
+ # add output variables for district heating and cooling
1843
1889
  model.getOutputVariables.each {|ivar| ivar.remove}
1844
1890
  dist_htg_var = OpenStudio::Model::OutputVariable.new("District Heating Water Rate",model)
1845
1891
  dist_htg_var.setReportingFrequency("hourly")
@@ -1860,7 +1906,7 @@ class ECMS
1860
1906
  hw_loops = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'heating'}
1861
1907
  hw_heatpump_loop = nil
1862
1908
  hw_heatpump = nil
1863
- hw_boiler = nil
1909
+ hw_boilers = nil
1864
1910
  hw_loops.each do |hw_loop|
1865
1911
  hw_heatpumps = hw_loop.supplyComponents.select {|comp| comp.to_HeatPumpWaterToWaterEquationFitHeating.is_initialized}
1866
1912
  if !hw_heatpumps.empty?
@@ -1868,8 +1914,7 @@ class ECMS
1868
1914
  hw_heatpump = hw_heatpumps[0].to_HeatPumpWaterToWaterEquationFitHeating.get
1869
1915
  end
1870
1916
  hw_boilers = hw_loop.supplyComponents.select {|comp| comp.to_BoilerHotWater.is_initialized}
1871
- hw_boiler = hw_boilers[0].to_BoilerHotWater.get if !hw_boilers.empty?
1872
- break if !hw_heatpump_loop.nil? && !hw_heatpump.nil? && !hw_boiler.nil?
1917
+ break if !hw_heatpump_loop.nil? && !hw_heatpump.nil? && !hw_boilers.empty?
1873
1918
  end
1874
1919
  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?
1875
1920
  cw_loop = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'condenser'}[0]
@@ -1898,13 +1943,22 @@ class ECMS
1898
1943
  cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
1899
1944
  elsif hw_heatpump.ratedHeatingCapacity.is_initialized
1900
1945
  cap = hw_heatpump.ratedHeatingCapacity.to_f
1901
- elsif hw_heatpump.autosizedRatedHeatingCapacity.is_initialized
1902
- cap = hw_heatpump.autosizedRatedHeatingCapacity.to_f
1903
1946
  else
1904
1947
  raise("apply_efficiency_ecm_hs14_cgshp_fancoils: capacity of water-source heat pump #{hw_heatpump.name.to_s} is not defined")
1905
1948
  end
1906
1949
  hw_heatpump.setRatedHeatingCapacity(heatpump_siz_f*cap)
1907
- hw_boiler.setNominalCapacity((1.0-heatpump_siz_f)*cap)
1950
+ # If two boilers are present set their capacities by multiplying the capacity not handled by the GSHP by the defined
1951
+ # primary and secondary boiler capacity ratios, respectively. If one boiler is defined then set its capacity to the
1952
+ # amount not handled by the GSHP.
1953
+ tot_hw_boiler_cap = (1.0-heatpump_siz_f)*cap
1954
+ hw_boiler_cap = [ 1.0 ]
1955
+ if hw_boilers.size > 1
1956
+ standard.fuel_type_set.primary_boiler_cap_frac.nil? ? hw_boiler_cap[0] = 0.75 : hw_boiler_cap[0] = standard.fuel_type_set.primary_boiler_cap_frac
1957
+ standard.fuel_type_set.secondary_boiler_cap_frac.nil? ? hw_boiler_cap[1] = 1.0 - hw_boiler_cap[0] : hw_boiler_cap[1] = standard.fuel_type_set.secondary_boiler_cap_frac
1958
+ end
1959
+ hw_boilers.each_with_index do |hw_boiler, boiler_index|
1960
+ hw_boiler.to_BoilerHotWater.get.setNominalCapacity((tot_hw_boiler_cap*hw_boiler_cap[boiler_index]))
1961
+ end
1908
1962
  # set cooling capacity of chillers
1909
1963
  chillers = chw_loop.supplyComponents.select {|comp| comp.to_ChillerElectricEIR.is_initialized}
1910
1964
  chiller_water_cooled = nil
@@ -1921,8 +1975,6 @@ class ECMS
1921
1975
  cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
1922
1976
  elsif chiller_water_cooled.referenceCapacity.is_initialized
1923
1977
  cap = chiller_water_cooled.referenceCapacity.to_f
1924
- elsif chiller_water_cooled.autosizedReferenceCapacity.is_initialized
1925
- cap = chiller_water_cooled.autosizedReferenceCapacity.to_f
1926
1978
  else
1927
1979
  raise("apply_efficiency_ecm_hs14_cgshp_fancoils: cooling capacity of chiller #{chiller_water_cooled.name.to_s} is not defined")
1928
1980
  end
@@ -2007,6 +2059,302 @@ class ECMS
2007
2059
  dist_clg_eqpt.setNominalCapacity(max_clg_load)
2008
2060
  end
2009
2061
 
2062
+ #=============================================================================================================================
2063
+ # Add equipment for ECM "hs15_cawhp_fancoils"
2064
+ # -Constant volume DOAS with hydronic htg and clg coils served by central air-to-water heat pump.
2065
+ # -Zonal terminal fan coil (4-pipe) connected to central air-to-water heat pump.
2066
+ # -Plant has a heating loop with air-to-water heat pump with one or two backup boiler(s).
2067
+ def add_ecm_hs15_cawhp_fancoils(model:,
2068
+ system_zones_map:,
2069
+ system_doas_flags:,
2070
+ ecm_system_zones_map_option:,
2071
+ standard:,
2072
+ sys_htg_eqpt_type: 'coil_hw',
2073
+ sys_clg_eqpt_type: 'coil_chw',
2074
+ sys_supp_htg_eqpt_type: 'none')
2075
+ # Update system zones map if needed
2076
+ system_zones_map = update_system_zones_map_keys(system_zones_map,'sys_1')
2077
+ system_zones_map = update_system_zones_map(model,system_zones_map,ecm_system_zones_map_option,'sys_1') if ecm_system_zones_map_option != 'NECB_Default'
2078
+ # Update system doas flags
2079
+ system_doas_flags = {}
2080
+ system_zones_map.keys.each { |sname| system_doas_flags[sname] = true }
2081
+ # generate new air system and zonal equipment
2082
+ systems = []
2083
+ system_zones_map.sort.each do |sys_name, zones|
2084
+ sys_info = air_sys_comps_assumptions(sys_name: sys_name,
2085
+ zones: zones,
2086
+ system_doas_flags: system_doas_flags)
2087
+ airloop,clg_coil,htg_coil,return_fan = add_air_system(model: model,
2088
+ zones: zones,
2089
+ sys_abbr: sys_info['sys_abbr'],
2090
+ sys_vent_type: sys_info['sys_vent_type'],
2091
+ sys_heat_rec_type: sys_info['sys_heat_rec_type'],
2092
+ sys_htg_eqpt_type: sys_htg_eqpt_type,
2093
+ sys_supp_htg_eqpt_type: sys_supp_htg_eqpt_type,
2094
+ sys_clg_eqpt_type: sys_clg_eqpt_type,
2095
+ sys_supp_fan_type: sys_info['sys_supp_fan_type'],
2096
+ sys_ret_fan_type: sys_info['sys_ret_fan_type'],
2097
+ sys_setpoint_mgr_type: 'warmest')
2098
+ if sys_htg_eqpt_type == 'ashp' && sys_clg_eqpt_type == 'ashp'
2099
+ eqpt_name = 'NECB2015_ASHP'
2100
+ coil_cooling_dx_single_speed_apply_curves(clg_coil,eqpt_name)
2101
+ coil_heating_dx_single_speed_apply_curves(htg_coil,eqpt_name)
2102
+ end
2103
+ # add zone fan coil equipment and diffuser
2104
+ zone_htg_eqpt_type = 'fancoil_4pipe'
2105
+ zone_clg_eqpt_type = 'fancoil_4pipe'
2106
+ zone_supp_htg_eqpt_type = 'none'
2107
+ zone_fan_type = 'on_off'
2108
+ add_zone_eqpt(model: model,
2109
+ airloop: airloop,
2110
+ zones: zones,
2111
+ outdoor_unit: nil,
2112
+ zone_diffuser_type: sys_info['zone_diffuser_type'],
2113
+ zone_htg_eqpt_type: zone_htg_eqpt_type,
2114
+ zone_supp_htg_eqpt_type: zone_supp_htg_eqpt_type,
2115
+ zone_clg_eqpt_type: zone_clg_eqpt_type,
2116
+ zone_fan_type: zone_fan_type)
2117
+ return_fan.addToNode(airloop.returnAirNode.get) if return_fan
2118
+ systems << airloop
2119
+ end
2120
+ # add hot-water loop with heat pump for heating
2121
+ hw_loop,hw_loop_htg_eqpt = add_plantloop(model: model,
2122
+ loop_htg_eqpt_type: 'HeatPump_PlantLoop_EIR_Heating',
2123
+ loop_clg_eqpt_type: 'none',
2124
+ loop_heat_rej_eqpt_type: 'none',
2125
+ loop_pump_type: 'variable_speed',
2126
+ loop_spm_type: 'Scheduled',
2127
+ loop_setpoint: 50.0,
2128
+ loop_temp_diff: 5.0)
2129
+ # set additional parameters for heating heat pump
2130
+ hw_loop_htg_eqpt.setCondenserType('AirSoure')
2131
+ hw_loop_htg_eqpt.setMinimumSourceInletTemperature(-15.0)
2132
+ hw_loop_htg_eqpt.setReferenceCoefficientofPerformance(3.0)
2133
+ hw_loop_htg_eqpt.setHeatPumpSizingMethod('CoolingCapacity')
2134
+ hw_loop_htg_eqpt.setHeatPumpDefrostControl('OnDemand')
2135
+ hw_loop_htg_eqpt.setFlowMode('VariableSpeedPumping')
2136
+ hw_loop_htg_eqpt.setControlType('Setpoint')
2137
+ hw_loop_htg_eqpt.setMinimumPartLoadRatio(0.2)
2138
+ hw_loop.setLoadDistributionScheme('SequentialLoad')
2139
+ model.getCoilHeatingWaters.sort.each {|coil| hw_loop.addDemandBranchForComponent(coil)}
2140
+ # add one boiler if the primary and backup boiler fuel types are the same. Add two boilers if the primary and
2141
+ # secondary boiler fuel types differ.
2142
+ hw_loop_htg_eqpt_outlet_node = hw_loop_htg_eqpt.supplyOutletModelObject.get.to_Node.get
2143
+ boiler_fuels = []
2144
+ boiler_fuels[0] = standard.fuel_type_set.boiler_fueltype
2145
+ boiler_fuels[1] = standard.fuel_type_set.backup_boiler_fueltype unless standard.fuel_type_set.backup_boiler_fueltype == boiler_fuels[0]
2146
+ hw_boilers = []
2147
+ boiler_fuels.each do |boiler_fuel|
2148
+ boiler = OpenStudio::Model::BoilerHotWater.new(model)
2149
+ boiler.setFuelType(boiler_fuel)
2150
+ hw_boilers << boiler
2151
+ end
2152
+ hw_boilers.reverse().each {|boiler| boiler.addToNode(hw_loop_htg_eqpt_outlet_node)}
2153
+ # add setpoint manager at the exit of the heat pump heating comp
2154
+ sch = OpenStudio::Model::ScheduleConstant.new(model)
2155
+ sch.setValue(50.0)
2156
+ spm = OpenStudio::Model::SetpointManagerScheduled.new(model,sch)
2157
+ spm.setName("HeatPumpHtgSetpointManager")
2158
+ spm.addToNode(hw_loop_htg_eqpt_outlet_node)
2159
+ # add chilled-water loop with heat pump for cooling
2160
+ chw_loop,chw_loop_clg_eqpt = add_plantloop(model: model,
2161
+ loop_htg_eqpt_type: 'none',
2162
+ loop_clg_eqpt_type: 'HeatPump_PlantLoop_EIR_Cooling',
2163
+ loop_heat_rej_eqpt_type: 'none',
2164
+ loop_pump_type: 'variable_speed',
2165
+ loop_spm_type: 'Scheduled',
2166
+ loop_setpoint: 7.0,
2167
+ loop_temp_diff: 6.0)
2168
+ # set additional parameter for heat pump for cooling
2169
+ chw_loop_clg_eqpt.setCondenserType('AirSource')
2170
+ chw_loop_clg_eqpt.setFlowMode('VariableSpeedPumping')
2171
+ chw_loop_clg_eqpt.setReferenceCoefficientofPerformance(3.0)
2172
+ chw_loop_clg_eqpt.setFlowMode('VariableSpeedPumping')
2173
+ chw_loop_clg_eqpt.setControlType('Load')
2174
+ chw_loop_clg_eqpt.setMinimumPartLoadRatio(0.2)
2175
+ hw_loop_htg_eqpt.setCompanionCoolingHeatPump(chw_loop_clg_eqpt)
2176
+ model.getCoilCoolingWaters.sort.each {|coil| chw_loop.addDemandBranchForComponent(coil)}
2177
+ # use performance curves given in one of the E+ examples for a central air-to-water heat pump from Trane
2178
+ # heating capft curve
2179
+ hcapft = OpenStudio::Model::CurveBiquadratic.new(model)
2180
+ hcapft.setCoefficient1Constant(0.794900878202383)
2181
+ hcapft.setCoefficient2x(0.00388524034840032)
2182
+ hcapft.setCoefficient3xPOW2(-0.0000575169230965453)
2183
+ hcapft.setCoefficient4y(0.0278109488428528)
2184
+ hcapft.setCoefficient5yPOW2(0.000318168)
2185
+ hcapft.setCoefficient6xTIMESY(-0.000130572089253355)
2186
+ hcapft.setMinimumValueofx(15.0)
2187
+ hcapft.setMaximumValueofx(70.0)
2188
+ hcapft.setMinimumValueofy(-17.0)
2189
+ hcapft.setMaximumValueofy(37.22)
2190
+ hcapft.setMinimumCurveOutput(0.0)
2191
+ hcapft.setMaximumCurveOutput(1.55)
2192
+ hw_loop_htg_eqpt.setCapacityModifierFunctionofTemperatureCurve(hcapft)
2193
+ # heating eirft curve
2194
+ heirft = OpenStudio::Model::CurveBiquadratic.new(model)
2195
+ heirft.setCoefficient1Constant(0.530730392560108)
2196
+ heirft.setCoefficient2x(0.00655164780603528)
2197
+ heirft.setCoefficient3xPOW2(0.000263599226028026)
2198
+ heirft.setCoefficient4y(-0.03620668194737)
2199
+ heirft.setCoefficient5yPOW2(0.00126617163409192)
2200
+ heirft.setCoefficient6xTIMESY(-0.000791224057761721)
2201
+ heirft.setMinimumValueofx(15.0)
2202
+ heirft.setMaximumValueofx(70.0)
2203
+ heirft.setMinimumValueofy(-17.0)
2204
+ heirft.setMaximumValueofy(37.22)
2205
+ heirft.setMinimumCurveOutput(0.4)
2206
+ heirft.setMaximumCurveOutput(1.48)
2207
+ hw_loop_htg_eqpt.setElectricInputtoOutputRatioModifierFunctionofTemperatureCurve(heirft)
2208
+ # cooling capft curves
2209
+ ccapft = OpenStudio::Model::CurveBiquadratic.new(model)
2210
+ ccapft.setCoefficient1Constant(1.06722728893252)
2211
+ ccapft.setCoefficient2x(0.0460678063570057)
2212
+ ccapft.setCoefficient3xPOW2(0.00034604993757372)
2213
+ ccapft.setCoefficient4y(-0.0069704934525177)
2214
+ ccapft.setCoefficient5yPOW2(-0.0000288618548923695)
2215
+ ccapft.setCoefficient6xTIMESY(-0.000475762640861958)
2216
+ ccapft.setMinimumValueofx(2.0)
2217
+ ccapft.setMaximumValueofx(20.0)
2218
+ ccapft.setMinimumValueofy(4.2)
2219
+ ccapft.setMaximumValueofy(37.0)
2220
+ ccapft.setMinimumCurveOutput(0.0)
2221
+ ccapft.setMaximumCurveOutput(1.55)
2222
+ chw_loop_clg_eqpt.setCapacityModifierFunctionofTemperatureCurve(ccapft)
2223
+ # cooling eirft curve
2224
+ ceirft = OpenStudio::Model::CurveBiquadratic.new(model)
2225
+ ceirft.setCoefficient1Constant(0.440305821838175)
2226
+ ceirft.setCoefficient2x(-0.0241323110030793)
2227
+ ceirft.setCoefficient3xPOW2(0.000537914626055751)
2228
+ ceirft.setCoefficient4y(0.0118716162533228)
2229
+ ceirft.setCoefficient5yPOW2(0.000305785618883187)
2230
+ ceirft.setCoefficient6xTIMESY(-0.000617329632749052)
2231
+ ceirft.setMinimumValueofx(2.0)
2232
+ ceirft.setMaximumValueofx(20.0)
2233
+ ceirft.setMinimumValueofy(4.2)
2234
+ ceirft.setMaximumValueofy(37.0)
2235
+ ceirft.setMinimumCurveOutput(0.4)
2236
+ ceirft.setMaximumCurveOutput(1.48)
2237
+ chw_loop_clg_eqpt.setElectricInputtoOutputRatioModifierFunctionofTemperatureCurve(ceirft)
2238
+ return
2239
+ end
2240
+
2241
+ #=============================================================================================================================
2242
+ # Apply efficiency for ECM 'hs15_cawhp_fancoils'
2243
+ def apply_efficiency_ecm_hs15_cawhp_fancoils(model, standard)
2244
+ heatpump_siz_f = 0.4 # heating heat pump sizing fraction
2245
+ # get heat pump heating and boiler objects
2246
+ hw_loop = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'heating'}
2247
+ raise("apply_efficiency_ecm_hs15_cawhp_fancoils: no hot-water loop is found") if hw_loop.empty?
2248
+ hw_loop = hw_loop[0].to_PlantLoop.get
2249
+ heatpump_htg = hw_loop.supplyComponents.select {|comp| comp.to_HeatPumpPlantLoopEIRHeating.is_initialized}
2250
+ hw_boilers = hw_loop.supplyComponents.select {|comp| comp.to_BoilerHotWater.is_initialized}
2251
+ raise("apply_efficiency_ecm_hs15_cawhp_fancoils: no air-source heat pump found on hot-water loop #{hw_loop.name.to_s}") if heatpump_htg.empty?
2252
+ raise("apply_efficiency_ecm_hs15_cawhp_fancoils: no boiler found on hot-water loop #{hw_loop.name.to_s}") if hw_boilers.empty?
2253
+ heatpump_htg = heatpump_htg[0].to_HeatPumpPlantLoopEIRHeating.get
2254
+ primary_boiler = hw_boilers[0].to_BoilerHotWater.get
2255
+ # boiler total capacity
2256
+ if primary_boiler.autosizedNominalCapacity.is_initialized
2257
+ tot_hw_boiler_cap = primary_boiler.autosizedNominalCapacity.to_f
2258
+ elsif primary_boiler.nominalCapacity.is_initialized
2259
+ tot_hw_boiler_cap = primary_boiler.nominalCapacity.to_f
2260
+ else
2261
+ raise("apply_efficiency_ecm_hs15_cawhp_fancoils: capacity of boiler #{primary_boiler.name.to_s} is not defined")
2262
+ end
2263
+ # If two boilers are present set their capacities by multiplying the total capacity by the defined primary and secondary
2264
+ # boiler capacity ratios, respectively.
2265
+ hw_boiler_cap = [ 1.0 ]
2266
+ if hw_boilers.size > 1
2267
+ standard.fuel_type_set.primary_boiler_cap_frac.nil? ? hw_boiler_cap[0] = 0.75 : hw_boiler_cap[0] = standard.fuel_type_set.primary_boiler_cap_frac
2268
+ standard.fuel_type_set.secondary_boiler_cap_frac.nil? ? hw_boiler_cap[1] = 1.0 - hw_boiler_cap[0] : hw_boiler_cap[1] = standard.fuel_type_set.secondary_boiler_cap_frac
2269
+ end
2270
+ hw_boilers.each_with_index do |hw_boiler, boiler_index|
2271
+ hw_boiler.to_BoilerHotWater.get.setNominalCapacity((tot_hw_boiler_cap*hw_boiler_cap[boiler_index]))
2272
+ end
2273
+ # get heat pump cooling object
2274
+ chw_loop = model.getPlantLoops.select {|loop| loop.sizingPlant.loopType.to_s.downcase == 'cooling'}
2275
+ raise("apply_efficiency_ecm_hs15_cawhp_fancoils: no chilled-water loop is found") if chw_loop.empty?
2276
+ chw_loop = chw_loop[0].to_PlantLoop.get
2277
+ heatpump_clg = chw_loop.supplyComponents.select {|comp| comp.to_HeatPumpPlantLoopEIRCooling.is_initialized}
2278
+ raise("apply_efficiency_ecm_hs15_cawhp_fancoils: no heat pump on chilled-water loop #{chw_loop.name} is found") if heatpump_clg.empty?
2279
+ heatpump_clg = heatpump_clg[0].to_HeatPumpPlantLoopEIRCooling.get
2280
+ # get cooling capacity of air-source heat pump
2281
+ if heatpump_clg.autosizedReferenceCapacity.is_initialized
2282
+ hp_clg_cap = heatpump_clg.autosizedReferenceCapacity.to_f
2283
+ elsif heatpump_clg.ratedReferenceCapacity.is_initialized
2284
+ hp_clg_cap = heatpump_clg.ratedReferenceCapacity.to_f
2285
+ else
2286
+ raise("apply_efficiency_ecm_hs15_cawhp_fancoils: capacity of air-source heat pump #{heatpump_htg.name.to_s} is not defined")
2287
+ end
2288
+ # set final heating capacity and cooling capacities of air-source heat pump
2289
+ hp_htg_cap = heatpump_siz_f*tot_hw_boiler_cap
2290
+ hp_htg_cap = hp_clg_cap if hp_clg_cap > hp_htg_cap
2291
+ heatpump_htg.setReferenceCapacity(hp_htg_cap)
2292
+ heatpump_clg.setReferenceCapacity(hp_htg_cap)
2293
+ # sensor for heat pump cooling load side heat transfer
2294
+ heatpump_clg_load_s = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Heat Pump Load Side Heat Transfer Rate')
2295
+ heatpump_clg_load_s.setName('HeatPumpClgLoad')
2296
+ heatpump_clg_load_s.setKeyName(heatpump_clg.name.to_s)
2297
+ # actuator for heat pump heating outlet node setpoint schedule
2298
+ heatpump_htg_outlet_node = heatpump_htg.supplyOutletModelObject.get.to_Node.get
2299
+ heatpump_htg_sch = heatpump_htg_outlet_node.setpointManagers[0].to_SetpointManagerScheduled.get.schedule.to_ScheduleConstant.get
2300
+ heatpump_htg_sch_a = OpenStudio::Model::EnergyManagementSystemActuator.new(heatpump_htg_sch, 'Schedule:Constant', 'Schedule Value')
2301
+ heatpump_htg_sch_a.setName('heatpump_htg_sch_a')
2302
+ # energy management program to turn off heat pump heating side when the cooling side is on
2303
+ heatpump_cltr_prg = OpenStudio::Model::EnergyManagementSystemProgram.new(model)
2304
+ heatpump_cltr_prg.setName('HeatPumpCtrlPrg')
2305
+ body = <<-EMS
2306
+ IF (HeatPumpClgLoad > 0.0)
2307
+ SET heatpump_htg_sch_a = -99.0
2308
+ ELSE
2309
+ SET heatpump_htg_sch_a = 50.0
2310
+ ENDIF
2311
+ EMS
2312
+ heatpump_cltr_prg.setBody(body)
2313
+ heat_pump_ctlr_pcm = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(model)
2314
+ heat_pump_ctlr_pcm.setName('HeatPumpCtrlPCM')
2315
+ heat_pump_ctlr_pcm.setCallingPoint('InsideHVACSystemIterationLoop')
2316
+ heat_pump_ctlr_pcm.addProgram(heatpump_cltr_prg)
2317
+
2318
+ return
2319
+ end
2320
+
2321
+ #=============================================================================================================================
2322
+ # Add equipment for ECM "hs16_ashp_cawhp_fancoils"
2323
+ # -Constant volume DOAS with ashp for heating and cooling with a backup heating coil.
2324
+ # -Zonal terminal fan coil (4-pipe) connected to central air-to-water heat pump.
2325
+ # -Plant has a heating loop with air-to-water heat pump with one or two backup boiler(s).
2326
+ def add_ecm_hs16_ashp_cawhp_fancoils(model:,
2327
+ system_zones_map:,
2328
+ system_doas_flags:,
2329
+ ecm_system_zones_map_option:,
2330
+ standard:)
2331
+ # Get the heating fuel type from the system fuels object defined by the standards object
2332
+ heating_fuel = standard.fuel_type_set.ecm_fueltype
2333
+ # Set supplemental heaing for airloop
2334
+ sys_supp_htg_eqpt_type = 'coil_electric'
2335
+ sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
2336
+ # call ecm HS15 to add the air loop
2337
+ add_ecm_hs15_cawhp_fancoils(model: model,
2338
+ system_zones_map: system_zones_map,
2339
+ system_doas_flags: system_doas_flags,
2340
+ ecm_system_zones_map_option: ecm_system_zones_map_option,
2341
+ standard: standard,
2342
+ sys_htg_eqpt_type: 'ashp',
2343
+ sys_clg_eqpt_type: 'ashp',
2344
+ sys_supp_htg_eqpt_type: sys_supp_htg_eqpt_type)
2345
+ return
2346
+ end
2347
+
2348
+ #=============================================================================================================================
2349
+ # Apply efficiency for ECM 'hs16_ashp_cawhp_fancoils'
2350
+ def apply_efficiency_ecm_hs16_ashp_cawhp_fancoils(model, standard)
2351
+ # The air loop is the same as in ECM HS12
2352
+ apply_efficiency_ecm_hs12_ashp_baseboard(model, standard)
2353
+ # The plant loop is the same as in ECM HS15
2354
+ apply_efficiency_ecm_hs15_cawhp_fancoils(model, standard)
2355
+ return
2356
+ end
2357
+
2010
2358
  # =============================================================================================================================
2011
2359
  # Applies the performance curves "CoilCoolingDXSingleSpeed" object.
2012
2360
  def coil_cooling_dx_single_speed_apply_curves(coil_cooling_dx_single_speed, eqpt_name)
@@ -2028,7 +2376,6 @@ class ECMS
2028
2376
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standard.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency.")
2029
2377
  successfully_set_all_properties = false
2030
2378
  end
2031
-
2032
2379
  # Make the COOL-CAP-FT curve
2033
2380
  cool_cap_ft = model_add_curve(coil_cooling_dx_single_speed.model, ac_props['cool_cap_ft'])
2034
2381
 
@@ -2946,8 +3293,13 @@ class ECMS
2946
3293
  end
2947
3294
 
2948
3295
  # Set COP
2949
- airconditioner_variablerefrigerantflow.setRatedCoolingCOP(cop.to_f) unless cop.nil?
2950
-
3296
+ unless cop.nil?
3297
+ if airconditioner_variablerefrigerantflow.model.version < OpenStudio::VersionString.new('2.9.0')
3298
+ airconditioner_variablerefrigerantflow.setRatedCoolingCOP(cop.to_f)
3299
+ else
3300
+ airconditioner_variablerefrigerantflow.setGrossRatedCoolingCOP(cop.to_f)
3301
+ end
3302
+ end
2951
3303
  end
2952
3304
 
2953
3305
  # =============================================================================================================================
@@ -94,8 +94,6 @@ class NECB2011
94
94
  # Organizes Zones and assigns them to appropriate systems according to NECB 2011-17 systems spacetype rules in Sec 8.
95
95
  # requires requires fuel type to be assigned for each system aspect. Defaults to gas hydronic.
96
96
  def apply_systems(model:,
97
- primary_heating_fuel:,
98
- swh_fuel:,
99
97
  sizing_run_dir:,
100
98
  shw_scale:,
101
99
  baseline_system_zones_map_option:)
@@ -181,7 +179,6 @@ class NECB2011
181
179
  mau_type: self.fuel_type_set.mau_type
182
180
  )
183
181
  model_add_swh(model: model,
184
- swh_fueltype: swh_fuel,
185
182
  shw_scale: shw_scale)
186
183
  model_apply_sizing_parameters(model)
187
184
  # set a larger tolerance for unmet hours from default 0.2 to 1.0C
@@ -751,7 +748,7 @@ class NECB2011
751
748
  new_spacetype.setStandardsSpaceType(new_spacetype_name)
752
749
  new_spacetype.setName("#{space.spaceType.get.standardsBuildingType.get} #{new_spacetype_name}")
753
750
  space_type_apply_internal_loads(space_type: new_spacetype, lights_type: lights_type, lights_scale: lights_scale)
754
- space_type_apply_internal_load_schedules(new_spacetype, true, true, true, true, true, true, true)
751
+ space_type_apply_internal_load_schedules(new_spacetype, true, true, true, true, true, true)
755
752
  end
756
753
  space.setSpaceType(new_spacetype)
757
754
  # sanity check.
@@ -22,7 +22,6 @@ class NECB2011
22
22
  true,
23
23
  true,
24
24
  true,
25
- true,
26
25
  true)
27
26
  end
28
27
  end
@@ -126,7 +126,7 @@
126
126
  "hp_supp_heating_coil_type": null,
127
127
  "necb_reference_hp":false,
128
128
  "fan_type": "var_speed_drive",
129
- "swh_fueltype": "Electricity",
129
+ "swh_fueltype": "FuelOilNo2",
130
130
  "ecm_fueltype": "Electricity"
131
131
 
132
132
  }