openstudio-standards 0.7.1 → 0.8.0.rc2

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 (363) 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 +22 -21
  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.CentralAirSourceHeatPump.rb +1 -1
  34. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -7
  35. data/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +36 -18
  36. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +1 -1
  37. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +121 -239
  38. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +179 -151
  39. data/lib/openstudio-standards/prototypes/common/objects/Prototype.refrigeration.rb +0 -466
  40. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +18 -2
  41. data/lib/openstudio-standards/refrigeration/create_case.rb +125 -0
  42. data/lib/openstudio-standards/refrigeration/create_compressor.rb +78 -0
  43. data/lib/openstudio-standards/refrigeration/create_compressor_rack.rb +48 -0
  44. data/lib/openstudio-standards/refrigeration/create_refrigeration_system.rb +74 -0
  45. data/lib/openstudio-standards/refrigeration/create_typical_refrigeration.rb +161 -0
  46. data/lib/openstudio-standards/refrigeration/create_walkin.rb +116 -0
  47. data/lib/openstudio-standards/refrigeration/data/refrigerated_cases.csv +31 -0
  48. data/lib/openstudio-standards/refrigeration/data/refrigerated_walkins.csv +76 -0
  49. data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +13 -0
  50. data/lib/openstudio-standards/refrigeration/data/typical_refrigerated_cases.csv +17 -0
  51. data/lib/openstudio-standards/refrigeration/data/typical_refrigerated_walkins.csv +53 -0
  52. data/lib/openstudio-standards/refrigeration/information.rb +130 -0
  53. data/lib/openstudio-standards/schedules/parametric.rb +1 -1
  54. data/lib/openstudio-standards/service_water_heating/create_typical.rb +299 -0
  55. data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +16 -14
  56. data/lib/openstudio-standards/service_water_heating/data/convert_data.rb +119 -0
  57. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.csv +54 -0
  58. data/lib/openstudio-standards/service_water_heating/data/typical_water_use_equipment.json +810 -0
  59. data/lib/openstudio-standards/service_water_heating/information.rb +69 -0
  60. data/lib/openstudio-standards/sql_file/fenestration.rb +1 -1
  61. data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +154 -0
  62. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +35 -12
  63. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +110 -61
  64. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +128 -29
  65. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +103 -38
  66. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +1 -1
  67. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +106 -5
  68. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +8 -8
  69. data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +44 -17
  70. data/lib/openstudio-standards/standards/Standards.Fan.rb +32 -21
  71. data/lib/openstudio-standards/standards/Standards.FluidCooler.rb +45 -18
  72. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +14 -9
  73. data/lib/openstudio-standards/standards/Standards.Model.rb +294 -76
  74. data/lib/openstudio-standards/standards/Standards.Motor.rb +66 -0
  75. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +2 -1
  76. data/lib/openstudio-standards/standards/Standards.Pump.rb +34 -20
  77. data/lib/openstudio-standards/standards/Standards.ServiceWaterHeating.rb +0 -353
  78. data/lib/openstudio-standards/standards/Standards.Space.rb +3 -107
  79. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +2 -57
  80. data/lib/openstudio-standards/standards/Standards.Surface.rb +11 -3
  81. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +1 -120
  82. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.computer_room_acs.json +142 -0
  83. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.economizers.json +1006 -596
  84. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.energy_recovery.json +724 -0
  85. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.ext_ltg.json +1258 -163
  86. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.motors.json +1070 -140
  87. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +33 -3374
  88. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.unitary_acs.json +1400 -340
  89. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.vrfs.json +769 -0
  90. 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
  91. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.computer_room_acs.json +142 -0
  92. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.economizers.json +1006 -596
  93. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.energy_recovery.json +724 -0
  94. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.ext_ltg.json +1258 -163
  95. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.motors.json +1070 -140
  96. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +15 -3343
  97. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.unitary_acs.json +1840 -372
  98. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.vrfs.json +769 -0
  99. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirLoopHVAC.rb +20 -10
  100. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.Space.rb +0 -9
  101. 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
  102. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.computer_room_acs.json +142 -0
  103. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.economizers.json +1006 -628
  104. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.energy_recovery.json +718 -712
  105. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.ext_ltg.json +1438 -163
  106. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.motors.json +2552 -182
  107. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +14 -3368
  108. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.unitary_acs.json +2348 -352
  109. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.vrfs.json +769 -0
  110. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirLoopHVAC.rb +47 -61
  111. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Model.rb +6 -0
  112. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Motor.rb +11 -0
  113. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.Space.rb +0 -9
  114. 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
  115. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.computer_room_acs.json +142 -0
  116. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.economizers.json +1006 -628
  117. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.energy_recovery.json +1358 -1346
  118. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.ext_ltg.json +1438 -163
  119. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.motors.json +1359 -189
  120. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +19 -3451
  121. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.unitary_acs.json +2176 -616
  122. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.vrfs.json +616 -0
  123. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirLoopHVAC.rb +47 -61
  124. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +9 -0
  125. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Motor.rb +11 -0
  126. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Space.rb +0 -9
  127. 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
  128. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.computer_room_acs.json +142 -0
  129. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.economizers.json +1006 -628
  130. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.energy_recovery.json +1188 -1424
  131. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.ext_ltg.json +1498 -163
  132. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.motors.json +1769 -189
  133. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +15 -3422
  134. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.unitary_acs.json +1807 -408
  135. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.vrfs.json +1024 -0
  136. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +70 -87
  137. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +9 -0
  138. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Motor.rb +11 -0
  139. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Space.rb +0 -9
  140. 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
  141. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.computer_room_acs.json +142 -0
  142. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.economizers.json +1006 -628
  143. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.energy_recovery.json +2806 -3296
  144. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.ext_ltg.json +1558 -163
  145. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.motors.json +1759 -189
  146. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +16 -3448
  147. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.unitary_acs.json +2758 -422
  148. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.vrfs.json +684 -0
  149. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +14 -3318
  150. 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
  151. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.chillers.json +1 -1
  152. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.economizers.json +953 -207
  153. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.energy_recovery.json +724 -0
  154. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.ext_ltg.json +5 -5
  155. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +11 -2858
  156. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.AirConditionerVariableRefrigerantFlow.rb +13 -0
  157. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.Model.rb +0 -18
  158. 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
  159. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.chillers.json +0 -51
  160. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.economizers.json +953 -207
  161. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.energy_recovery.json +724 -0
  162. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.ext_ltg.json +5 -5
  163. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +9 -2830
  164. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.AirConditionerVariableRefrigerantFlow.rb +13 -0
  165. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.Model.rb +0 -18
  166. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.economizers.json +1006 -564
  167. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.energy_recovery.json +1264 -0
  168. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.ext_ltg.json +5 -5
  169. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/data/nrel_zne_ready_2017.spc_typ.json +0 -1079
  170. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +132 -288
  171. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.HeatExchangerSensLat.rb +44 -20
  172. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Model.rb +11 -0
  173. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.Space.rb +0 -8
  174. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.economizers.json +1006 -564
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.energy_recovery.json +1264 -0
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.ext_ltg.json +5 -5
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/data/ze_aedg_multifamily.spc_typ.json +0 -1079
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirLoopHVAC.rb +137 -288
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.HeatExchangerSensLat.rb +44 -20
  180. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Model.rb +11 -0
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.Space.rb +0 -9
  182. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +12 -10
  183. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +8 -6
  184. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +8 -6
  185. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +9 -3
  186. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Fan.rb +6 -40
  187. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +30 -337
  188. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +4 -5
  189. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -2
  190. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +56 -3
  191. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +80 -0
  192. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +0 -10
  193. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +35 -0
  194. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.economizers.json +550 -0
  195. 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
  196. 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
  197. 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
  198. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.motors.json +225 -245
  199. 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
  200. 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
  201. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +19 -3
  202. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_airloop_hvac.json +185 -0
  203. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_airloop_hvac_doas.json +127 -0
  204. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_building.json +121 -0
  205. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_design_specification_outdoor_air.json +49 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_electric_equipment.json +113 -0
  207. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_exterior_lights.json +120 -0
  208. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_space.json +388 -0
  209. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_spacetype.json +367 -0
  210. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_thermal_zone.json +56 -0
  211. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_connections.json +37 -0
  212. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_equipment.json +69 -0
  213. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_json/userdata_wateruse_equipment_definition.json +37 -0
  214. data/lib/openstudio-standards/standards/cbes/cbes_pre_1978/data/cbes_pre_1978.ext_ltg.json +5 -5
  215. data/lib/openstudio-standards/standards/cbes/cbes_t24_1978/data/cbes_t24_1978.ext_ltg.json +5 -5
  216. data/lib/openstudio-standards/standards/cbes/cbes_t24_1992/data/cbes_t24_1992.ext_ltg.json +5 -5
  217. data/lib/openstudio-standards/standards/cbes/cbes_t24_2001/data/cbes_t24_2001.ext_ltg.json +5 -5
  218. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/data/cbes_t24_2005.ext_ltg.json +5 -5
  219. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/data/cbes_t24_2008.ext_ltg.json +5 -5
  220. data/lib/openstudio-standards/standards/deer/deer_1985/comstock_deer_1985/data/comstock_deer_1985.ext_ltg.json +5 -5
  221. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ext_ltg.json +5 -5
  222. data/lib/openstudio-standards/standards/deer/deer_1996/comstock_deer_1996/data/comstock_deer_1996.ext_ltg.json +5 -5
  223. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ext_ltg.json +5 -5
  224. data/lib/openstudio-standards/standards/deer/deer_2003/comstock_deer_2003/data/comstock_deer_2003.ext_ltg.json +5 -5
  225. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ext_ltg.json +5 -5
  226. data/lib/openstudio-standards/standards/deer/deer_2007/comstock_deer_2007/data/comstock_deer_2007.ext_ltg.json +5 -5
  227. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ext_ltg.json +5 -5
  228. data/lib/openstudio-standards/standards/deer/deer_2011/comstock_deer_2011/data/comstock_deer_2011.ext_ltg.json +5 -5
  229. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ext_ltg.json +5 -5
  230. data/lib/openstudio-standards/standards/deer/deer_2014/comstock_deer_2014/data/comstock_deer_2014.ext_ltg.json +5 -5
  231. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ext_ltg.json +5 -5
  232. data/lib/openstudio-standards/standards/deer/deer_2015/comstock_deer_2015/data/comstock_deer_2015.ext_ltg.json +5 -5
  233. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ext_ltg.json +5 -5
  234. data/lib/openstudio-standards/standards/deer/deer_2017/comstock_deer_2017/data/comstock_deer_2017.ext_ltg.json +5 -5
  235. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ext_ltg.json +5 -5
  236. data/lib/openstudio-standards/standards/deer/deer_2020/comstock_deer_2020/data/comstock_deer_2020.ext_ltg.json +5 -5
  237. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ext_ltg.json +5 -5
  238. data/lib/openstudio-standards/standards/deer/deer_2025/comstock_deer_2025/data/comstock_deer_2025.ext_ltg.json +5 -5
  239. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ext_ltg.json +5 -5
  240. data/lib/openstudio-standards/standards/deer/deer_2030/comstock_deer_2030/data/comstock_deer_2030.ext_ltg.json +5 -5
  241. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ext_ltg.json +5 -5
  242. data/lib/openstudio-standards/standards/deer/deer_2035/comstock_deer_2035/data/comstock_deer_2035.ext_ltg.json +5 -5
  243. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ext_ltg.json +5 -5
  244. data/lib/openstudio-standards/standards/deer/deer_2040/comstock_deer_2040/data/comstock_deer_2040.ext_ltg.json +5 -5
  245. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ext_ltg.json +5 -5
  246. data/lib/openstudio-standards/standards/deer/deer_2045/comstock_deer_2045/data/comstock_deer_2045.ext_ltg.json +5 -5
  247. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ext_ltg.json +5 -5
  248. data/lib/openstudio-standards/standards/deer/deer_2050/comstock_deer_2050/data/comstock_deer_2050.ext_ltg.json +5 -5
  249. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ext_ltg.json +5 -5
  250. data/lib/openstudio-standards/standards/deer/deer_2055/comstock_deer_2055/data/comstock_deer_2055.ext_ltg.json +5 -5
  251. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ext_ltg.json +5 -5
  252. data/lib/openstudio-standards/standards/deer/deer_2060/comstock_deer_2060/data/comstock_deer_2060.ext_ltg.json +5 -5
  253. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ext_ltg.json +5 -5
  254. data/lib/openstudio-standards/standards/deer/deer_2065/comstock_deer_2065/data/comstock_deer_2065.ext_ltg.json +5 -5
  255. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ext_ltg.json +5 -5
  256. data/lib/openstudio-standards/standards/deer/deer_2070/comstock_deer_2070/data/comstock_deer_2070.ext_ltg.json +5 -5
  257. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ext_ltg.json +5 -5
  258. data/lib/openstudio-standards/standards/deer/deer_2075/comstock_deer_2075/data/comstock_deer_2075.ext_ltg.json +5 -5
  259. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ext_ltg.json +5 -5
  260. data/lib/openstudio-standards/standards/deer/deer_pre_1975/comstock_deer_pre_1975/data/comstock_deer_pre_1975.ext_ltg.json +5 -5
  261. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ext_ltg.json +5 -5
  262. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +10 -1
  263. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/unitary_acs.json +20 -20
  264. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +379 -27
  265. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +1 -4
  266. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +0 -1
  267. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +1 -1
  268. data/lib/openstudio-standards/standards/necb/NECB2011/data/unitary_acs.json +20 -20
  269. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +34 -22
  270. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +76 -23
  271. data/lib/openstudio-standards/standards/necb/NECB2011/necb_shw_calculation.xlsx +0 -0
  272. data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +4 -5
  273. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +6 -2
  274. data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +26 -24
  275. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -1
  276. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +38 -32
  277. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +215 -18
  278. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +190 -15
  279. data/lib/openstudio-standards/standards/necb/common/national_carbon_price_sched_feb_2025.json +60 -0
  280. data/lib/openstudio-standards/standards/necb/common/utility_pricing_2025-02-20.csv +92 -0
  281. data/lib/openstudio-standards/utilities/ruleset_check.rb +204 -0
  282. data/lib/openstudio-standards/version.rb +1 -1
  283. data/lib/openstudio-standards/weather/information.rb +1 -1
  284. data/lib/openstudio-standards.rb +32 -12
  285. metadata +78 -80
  286. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_1980_2004/doe_ref_1980_2004.refrigeration.rb +0 -13
  287. data/lib/openstudio-standards/prototypes/ashrae_90_1/doe_ref_pre_1980/doe_ref_pre_1980.refrigeration.rb +0 -13
  288. data/lib/openstudio-standards/prototypes/cbes/cbes.refrigeration.rb +0 -13
  289. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.exterior_lights.rb +0 -432
  290. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Space.rb +0 -11
  291. 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
  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_cases.json +0 -1456
  293. 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
  294. 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
  295. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.Space.rb +0 -11
  296. 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
  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_cases.json +0 -1456
  298. 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
  299. 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
  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_cases.json +0 -1456
  301. 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
  302. 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
  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_cases.json +0 -1456
  304. 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
  305. 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
  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_cases.json +0 -763
  307. 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
  308. 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
  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_cases.json +0 -763
  310. 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
  311. 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
  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_cases.json +0 -1456
  313. 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
  314. 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
  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_cases.json +0 -1456
  316. 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
  317. 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
  318. data/lib/openstudio-standards/standards/cbes/cbes.Space.rb +0 -11
  319. data/lib/openstudio-standards/standards/cbes/cbes_t24_2005/cbes_t24_2005.Space.rb +0 -11
  320. data/lib/openstudio-standards/standards/cbes/cbes_t24_2008/cbes_t24_2008.Space.rb +0 -11
  321. data/lib/openstudio-standards/standards/deer/deer.Space.rb +0 -20
  322. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ref_cases.json +0 -1456
  323. data/lib/openstudio-standards/standards/deer/deer_1985/data/deer_1985.ref_lnup.json +0 -562
  324. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ref_cases.json +0 -1456
  325. data/lib/openstudio-standards/standards/deer/deer_1996/data/deer_1996.ref_lnup.json +0 -562
  326. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ref_cases.json +0 -1456
  327. data/lib/openstudio-standards/standards/deer/deer_2003/data/deer_2003.ref_lnup.json +0 -562
  328. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ref_cases.json +0 -1456
  329. data/lib/openstudio-standards/standards/deer/deer_2007/data/deer_2007.ref_lnup.json +0 -562
  330. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ref_cases.json +0 -1456
  331. data/lib/openstudio-standards/standards/deer/deer_2011/data/deer_2011.ref_lnup.json +0 -562
  332. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ref_cases.json +0 -1456
  333. data/lib/openstudio-standards/standards/deer/deer_2014/data/deer_2014.ref_lnup.json +0 -562
  334. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ref_cases.json +0 -1456
  335. data/lib/openstudio-standards/standards/deer/deer_2015/data/deer_2015.ref_lnup.json +0 -562
  336. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ref_cases.json +0 -1456
  337. data/lib/openstudio-standards/standards/deer/deer_2017/data/deer_2017.ref_lnup.json +0 -562
  338. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ref_cases.json +0 -1456
  339. data/lib/openstudio-standards/standards/deer/deer_2020/data/deer_2020.ref_lnup.json +0 -562
  340. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ref_cases.json +0 -1456
  341. data/lib/openstudio-standards/standards/deer/deer_2025/data/deer_2025.ref_lnup.json +0 -562
  342. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ref_cases.json +0 -1456
  343. data/lib/openstudio-standards/standards/deer/deer_2030/data/deer_2030.ref_lnup.json +0 -562
  344. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ref_cases.json +0 -1456
  345. data/lib/openstudio-standards/standards/deer/deer_2035/data/deer_2035.ref_lnup.json +0 -562
  346. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ref_cases.json +0 -1456
  347. data/lib/openstudio-standards/standards/deer/deer_2040/data/deer_2040.ref_lnup.json +0 -562
  348. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ref_cases.json +0 -1456
  349. data/lib/openstudio-standards/standards/deer/deer_2045/data/deer_2045.ref_lnup.json +0 -562
  350. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ref_cases.json +0 -1456
  351. data/lib/openstudio-standards/standards/deer/deer_2050/data/deer_2050.ref_lnup.json +0 -562
  352. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ref_cases.json +0 -1456
  353. data/lib/openstudio-standards/standards/deer/deer_2055/data/deer_2055.ref_lnup.json +0 -562
  354. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ref_cases.json +0 -1456
  355. data/lib/openstudio-standards/standards/deer/deer_2060/data/deer_2060.ref_lnup.json +0 -562
  356. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ref_cases.json +0 -1456
  357. data/lib/openstudio-standards/standards/deer/deer_2065/data/deer_2065.ref_lnup.json +0 -562
  358. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ref_cases.json +0 -1456
  359. data/lib/openstudio-standards/standards/deer/deer_2070/data/deer_2070.ref_lnup.json +0 -562
  360. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ref_cases.json +0 -1456
  361. data/lib/openstudio-standards/standards/deer/deer_2075/data/deer_2075.ref_lnup.json +0 -562
  362. data/lib/openstudio-standards/standards/deer/deer_pre_1975/data/deer_pre_1975.ref_cases.json +0 -1456
  363. 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
  }