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
@@ -0,0 +1,69 @@
1
+ module OpenstudioStandards
2
+ # The ServiceWaterHeating module provides methods to create, modify, and get information about service water heating
3
+ module ServiceWaterHeating
4
+ # @!group Information
5
+ # Methods to add get information about service water heating equipment and loops
6
+
7
+ # Determines water heater capacity and volume from an array of water use equipment.
8
+ #
9
+ # @param water_use_equipment_array [Array<OpenStudio::Model::WaterUseEquipment>] Array of water use equipment objects served by this water heater
10
+ # @param capacity_to_volume_ratio [Double] storage volume in gallons per kBtu/hr of capacity
11
+ # @param water_heater_efficiency [Double] water heater thermal efficiency, fraction
12
+ # @param inlet_temperature [Double] inlet cold water temperature, degrees Fahrenheit
13
+ # @param supply_temperature [Double] supply water temperature from the tank, degrees Fahrenheit
14
+ # @param peak_flow_fraction [Double] a variable for system diversity as fraction of peak flow when setting water heater capacity
15
+ # @param minimum_volume [Double] minimum allowable volume of the water heater, in gallons
16
+ # @return [Hash] hash with water_heater_capacity in watts and water_heater_volume in m^3
17
+ def self.water_heater_sizing_from_water_use_equipment(water_use_equipment_array,
18
+ capacity_to_volume_ratio: 1.0,
19
+ water_heater_efficiency: 0.8,
20
+ inlet_temperature: 40.0,
21
+ supply_temperature: 140.0,
22
+ peak_flow_fraction: 1.0,
23
+ minimum_volume: 40.0)
24
+ # Initialize hash
25
+ water_heater_sizing = {}
26
+
27
+ # Get the maximum flow rates for all pieces of water use equipment
28
+ adjusted_max_flow_rates_gal_per_hr = []
29
+ water_use_equipment_array.sort.each do |water_use_equip|
30
+ water_use_equip_sch = water_use_equip.flowRateFractionSchedule
31
+ next if water_use_equip_sch.empty?
32
+
33
+ water_use_equip_sch = water_use_equip_sch.get
34
+ max_sch_value = OpenstudioStandards::Schedules.schedule_get_min_max(water_use_equip_sch)['max']
35
+
36
+ # Get peak flow rate from water use equipment definition
37
+ peak_flow_rate_m3_per_s = water_use_equip.waterUseEquipmentDefinition.peakFlowRate
38
+
39
+ # Calculate adjusted flow rate based on the peak fraction found in the flow rate fraction schedule
40
+ adjusted_peak_flow_rate_m3_per_s = max_sch_value * peak_flow_rate_m3_per_s
41
+ adjusted_max_flow_rates_gal_per_hr << OpenStudio.convert(adjusted_peak_flow_rate_m3_per_s, 'm^3/s', 'gal/hr').get
42
+ end
43
+
44
+ # Sum gph values from water use equipment to use in formula
45
+ total_adjusted_flow_rate_gal_per_hr = adjusted_max_flow_rates_gal_per_hr.sum
46
+
47
+ # Calculate capacity based on analysis of combined water use equipment maximum flow rates and schedules
48
+ # Max gal/hr * 8.4 lb/gal * 1 Btu/lb F * (120F - 40F)/0.8 = Btu/hr
49
+ water_heater_capacity_btu_per_hr = peak_flow_fraction * total_adjusted_flow_rate_gal_per_hr * 8.4 * 1.0 * (supply_temperature - inlet_temperature) / water_heater_efficiency
50
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Capacity of #{water_heater_capacity_btu_per_hr.round} Btu/hr = #{peak_flow_fraction} peak fraction * #{total_adjusted_flow_rate_gal_per_hr.round} gal/hr * 8.4 lb/gal * 1.0 Btu/lb F * (#{supply_temperature.round} - #{inlet_temperature.round} deltaF / #{water_heater_efficiency} htg eff).")
51
+ water_heater_capacity_w = OpenStudio.convert(water_heater_capacity_btu_per_hr, 'Btu/hr', 'W').get
52
+
53
+ # Calculate volume based on capacity
54
+ # A.1.4 Total Storage Volume and Water Heater Capacity of PrototypeModelEnhancements_2014_0.pdf shows 1 gallon of storage to 1 kBtu/h of capacity
55
+ water_heater_capacity_kbtu_per_hr = OpenStudio.convert(water_heater_capacity_btu_per_hr, 'Btu/hr', 'kBtu/hr').get
56
+ water_heater_volume_gal = water_heater_capacity_kbtu_per_hr * capacity_to_volume_ratio
57
+
58
+ # increase tank size to the minimum volume if calculated value is smaller
59
+ water_heater_volume_gal = minimum_volume if water_heater_volume_gal < minimum_volume # gal
60
+ water_heater_volume_m3 = OpenStudio.convert(water_heater_volume_gal, 'gal', 'm^3').get
61
+
62
+ # Populate return hash
63
+ water_heater_sizing[:water_heater_capacity] = water_heater_capacity_w
64
+ water_heater_sizing[:water_heater_volume] = water_heater_volume_m3
65
+
66
+ return water_heater_sizing
67
+ end
68
+ end
69
+ end
@@ -12,7 +12,7 @@ module OpenstudioStandards
12
12
  # check for sql file
13
13
  sql = construction.model.sqlFile
14
14
  unless sql.is_initialized
15
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.SqlFile', 'Model has no sql file containing results, cannot lookup data.')
15
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.SqlFile', 'Model has no sql file containing results, cannot lookup data.')
16
16
  return false
17
17
  end
18
18
  sql = sql.get
@@ -0,0 +1,154 @@
1
+ class Standard
2
+ # @!group AirConditionerVariableRefrigerantFlow
3
+
4
+ # find search criteria
5
+ #
6
+ # @param air_conditioner_variable_refrigerant_flow [OpenStudio::Model::AirConditionerVariableRefrigerantFlow] vrf object
7
+ # @return [Hash] used for standards_lookup_table(model)
8
+ def air_conditioner_variable_refrigerant_flow_find_search_criteria(air_conditioner_variable_refrigerant_flow)
9
+ # Define the criteria to find the boiler properties
10
+ # in the hvac standards data set.
11
+ search_criteria = {}
12
+ search_criteria['template'] = template
13
+
14
+ search_criteria['subcategory'] = 'VRF multisplit system'
15
+ if air_conditioner_variable_refrigerant_flow.condenserType == 'AirCooled'
16
+ search_criteria['equipment_type'] = 'AirCooled'
17
+ elsif air_conditioner_variable_refrigerant_flow.condenserType == 'WaterCooled'
18
+ search_criteria['equipment_type'] = 'WaterSource'
19
+ else
20
+ search_criteria['equipment_type'] = ''
21
+ end
22
+
23
+ return search_criteria
24
+ end
25
+
26
+ # Find capacity in W
27
+ #
28
+ # @param air_conditioner_variable_refrigerant_flow [OpenStudio::Model::AirConditionerVariableRefrigerantFlow] vrf unit
29
+ # @return [Double] capacity in W
30
+ def air_conditioner_variable_refrigerant_flow_find_capacity(air_conditioner_variable_refrigerant_flow)
31
+ capacity_w = nil
32
+ if air_conditioner_variable_refrigerant_flow.grossRatedTotalCoolingCapacity.is_initialized
33
+ capacity_w = air_conditioner_variable_refrigerant_flow.grossRatedTotalCoolingCapacity.get
34
+ elsif air_conditioner_variable_refrigerant_flow.autosizedGrossRatedTotalCoolingCapacity.is_initialized
35
+ capacity_w = air_conditioner_variable_refrigerant_flow.autosizedGrossRatedTotalCoolingCapacity.get
36
+ else
37
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{air_conditioner_variable_refrigerant_flow.name} capacity is not available, cannot apply efficiency standard.")
38
+ return false
39
+ end
40
+
41
+ return capacity_w
42
+ end
43
+
44
+ # Finds lookup object in standards and return minimum thermal efficiency
45
+ #
46
+ # @param air_conditioner_variable_refrigerant_flow [OpenStudio::Model::AirConditionerVariableRefrigerantFlow] vrf unit
47
+ # @return [Boolean] returns true if successful, false if not
48
+ def air_conditioner_variable_refrigerant_flow_apply_efficiency_and_curves(air_conditioner_variable_refrigerant_flow)
49
+ successfully_set_all_properties = false
50
+
51
+ # Define the criteria to find the vrf properties
52
+ # in the hvac standards data set.
53
+ search_criteria = air_conditioner_variable_refrigerant_flow_find_search_criteria(air_conditioner_variable_refrigerant_flow)
54
+
55
+ # Get the capacity
56
+ capacity_w = air_conditioner_variable_refrigerant_flow_find_capacity(air_conditioner_variable_refrigerant_flow)
57
+
58
+ # Convert capacity to Btu/hr
59
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
60
+ capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
61
+
62
+ # Get the vrf properties
63
+ search_criteria['equipment_type'] << 'CoolingMode'
64
+ vrf_props_cooling = model_find_object(standards_data['vrfs'], search_criteria, capacity_btu_per_hr)
65
+ unless vrf_props_cooling
66
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{air_conditioner_variable_refrigerant_flow.name}, cannot find VRF cooling properties with search criteria #{search_criteria}, cannot apply efficiency standard.")
67
+ successfully_set_all_properties = false
68
+ return successfully_set_all_properties
69
+ end
70
+ search_criteria['equipment_type'].sub('Cooling', 'Heating')
71
+ vrf_props_heating = model_find_object(standards_data['vrfs'], search_criteria, capacity_btu_per_hr)
72
+ unless vrf_props_heating
73
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{air_conditioner_variable_refrigerant_flow.name}, cannot find VRF heating properties with search criteria #{search_criteria}, cannot apply efficiency standard.")
74
+ successfully_set_all_properties = false
75
+ return successfully_set_all_properties
76
+ end
77
+
78
+ # Get the minimum efficiency standards
79
+ cooling_cop = nil
80
+ heating_cop = nil
81
+
82
+ # If specified as SEER
83
+ unless vrf_props_cooling['minimum_seasonal_energy_efficiency_ratio'].nil?
84
+ min_seer = vrf_props_cooling['minimum_seasonal_energy_efficiency_ratio']
85
+ cooling_cop = seer_to_cop_no_fan(min_seer)
86
+ new_comp_name = "#{air_conditioner_variable_refrigerant_flow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
87
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{air_conditioner_variable_refrigerant_flow.name}: Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
88
+ end
89
+
90
+ # If specified as SEER2
91
+ # TODO: assumed to be the same as SEER for now
92
+ unless vrf_props_cooling['minimum_seasonal_energy_efficiency_ratio_2'].nil?
93
+ min_seer = vrf_props_cooling['minimum_seasonal_energy_efficiency_ratio_2']
94
+ cooling_cop = seer_to_cop_no_fan(min_seer)
95
+ new_comp_name = "#{air_conditioner_variable_refrigerant_flow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
96
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{air_conditioner_variable_refrigerant_flow.name}: Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
97
+ end
98
+
99
+ # If specified as EER
100
+ unless vrf_props_cooling['minimum_energy_efficiency_ratio'].nil?
101
+ min_eer = vrf_props_cooling['minimum_energy_efficiency_ratio']
102
+ cooling_cop = eer_to_cop_no_fan(min_eer)
103
+ new_comp_name = "#{air_conditioner_variable_refrigerant_flow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
104
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{air_conditioner_variable_refrigerant_flow.name}: Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
105
+ end
106
+
107
+ # If specified as EER2
108
+ # TODO: assumed to be the same as EER for now
109
+ unless vrf_props_cooling['minimum_energy_efficiency_ratio_2'].nil?
110
+ min_eer = vrf_props_cooling['minimum_energy_efficiency_ratio_2']
111
+ cooling_cop = eer_to_cop_no_fan(min_eer)
112
+ new_comp_name = "#{air_conditioner_variable_refrigerant_flow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
113
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{air_conditioner_variable_refrigerant_flow.name}: Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
114
+ end
115
+
116
+ # If specified as HSPF
117
+ unless vrf_props_heating['minimum_heating_seasonal_performance_factor'].nil?
118
+ min_hspf = vrf_props_heating['minimum_heating_seasonal_performance_factor']
119
+ heating_cop = hspf_to_cop_no_fan(min_hspf)
120
+ new_comp_name = "#{air_conditioner_variable_refrigerant_flow.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF"
121
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{air_conditioner_variable_refrigerant_flow.name}: Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
122
+ end
123
+
124
+ # If specified as HSPF2
125
+ # TODO: assumed to be the same as HSPF for now
126
+ unless vrf_props_heating['minimum_heating_seasonal_performance_factor_2'].nil?
127
+ min_hspf = vrf_props_heating['minimum_heating_seasonal_performance_factor_2']
128
+ heating_cop = hspf_to_cop_no_fan(min_hspf)
129
+ new_comp_name = "#{air_conditioner_variable_refrigerant_flow.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF"
130
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{air_conditioner_variable_refrigerant_flow.name}: Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}")
131
+ end
132
+
133
+ # If specified as COP
134
+ unless vrf_props_heating['minimum_coefficient_of_performance_heating'].nil?
135
+ min_coph = vrf_props_heating['minimum_coefficient_of_performance_heating']
136
+ heating_cop = cop_heating_to_cop_heating_no_fan(min_coph, OpenStudio.convert(capacity_kbtu_per_hr, 'kBtu/hr', 'W').get)
137
+ new_comp_name = "#{air_conditioner_variable_refrigerant_flow.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_coph.round(1)}COPH"
138
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{air_conditioner_variable_refrigerant_flow.name}: Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; COPH = #{min_coph}")
139
+ end
140
+
141
+ # Set the name
142
+ air_conditioner_variable_refrigerant_flow.setName(new_comp_name)
143
+
144
+ # Set the efficiency values
145
+ unless cooling_cop.nil?
146
+ air_conditioner_variable_refrigerant_flow.setGrossRatedCoolingCOP(cooling_cop)
147
+ end
148
+ unless heating_cop.nil?
149
+ air_conditioner_variable_refrigerant_flow.setGrossRatedHeatingCOP(heating_cop)
150
+ end
151
+
152
+ return successfully_set_all_properties
153
+ end
154
+ end
@@ -965,6 +965,11 @@ class Standard
965
965
  is_dc = true
966
966
  end
967
967
 
968
+ # Process climate zone:
969
+ # Moisture regime is not needed for climate zone 8
970
+ climate_zone = climate_zone.split('-')[-1]
971
+ climate_zone = '8' if climate_zone.include?('8')
972
+
968
973
  # Retrieve economizer limits from JSON
969
974
  search_criteria = {
970
975
  'template' => template,
@@ -978,7 +983,7 @@ class Standard
978
983
  end
979
984
 
980
985
  # Determine the minimum capacity and whether or not it is a data center
981
- minimum_capacity_btu_per_hr = econ_limits['capacity_limit']
986
+ minimum_capacity_btu_per_hr = econ_limits['minimum_capacity']
982
987
 
983
988
  # A big number of btu per hr as the minimum requirement if nil in spreadsheet
984
989
  infinity_btu_per_hr = 999_999_999_999
@@ -1115,6 +1120,11 @@ class Standard
1115
1120
  when 'NoEconomizer'
1116
1121
  return [nil, nil, nil]
1117
1122
  when 'FixedDryBulb'
1123
+ # Process climate zone:
1124
+ # Moisture regime is not needed for climate zone 8
1125
+ climate_zone = climate_zone.split('-')[-1]
1126
+ climate_zone = '8' if climate_zone.include?('8')
1127
+
1118
1128
  search_criteria = {
1119
1129
  'template' => template,
1120
1130
  'climate_zone' => climate_zone
@@ -1122,10 +1132,10 @@ class Standard
1122
1132
  econ_limits = model_find_object(standards_data['economizers'], search_criteria)
1123
1133
  drybulb_limit_f = econ_limits['fixed_dry_bulb_high_limit_shutoff_temp']
1124
1134
  when 'FixedEnthalpy'
1125
- enthalpy_limit_btu_per_lb = 28
1135
+ enthalpy_limit_btu_per_lb = 28.0
1126
1136
  when 'FixedDewPointAndDryBulb'
1127
- drybulb_limit_f = 75
1128
- dewpoint_limit_f = 55
1137
+ drybulb_limit_f = 75.0
1138
+ dewpoint_limit_f = 55.0
1129
1139
  end
1130
1140
 
1131
1141
  return [drybulb_limit_f, enthalpy_limit_btu_per_lb, dewpoint_limit_f]
@@ -1890,14 +1900,27 @@ class Standard
1890
1900
  # @param heat_exchanger_type [String] heat exchanger type Rotary or Plate
1891
1901
  # @return [OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent] erv to apply efficiency values
1892
1902
  def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ERV', heat_exchanger_type: 'Rotary')
1893
- erv.setSensibleEffectivenessat100HeatingAirFlow(0.7)
1894
- erv.setLatentEffectivenessat100HeatingAirFlow(0.6)
1895
- erv.setSensibleEffectivenessat75HeatingAirFlow(0.7)
1896
- erv.setLatentEffectivenessat75HeatingAirFlow(0.6)
1897
- erv.setSensibleEffectivenessat100CoolingAirFlow(0.75)
1898
- erv.setLatentEffectivenessat100CoolingAirFlow(0.6)
1899
- erv.setSensibleEffectivenessat75CoolingAirFlow(0.75)
1900
- erv.setLatentEffectivenessat75CoolingAirFlow(0.6)
1903
+ if erv.model.version < OpenStudio::VersionString.new('3.8.0')
1904
+ erv.setSensibleEffectivenessat100HeatingAirFlow(0.7)
1905
+ erv.setLatentEffectivenessat100HeatingAirFlow(0.6)
1906
+ erv.setSensibleEffectivenessat75HeatingAirFlow(0.7)
1907
+ erv.setLatentEffectivenessat75HeatingAirFlow(0.6)
1908
+ erv.setSensibleEffectivenessat100CoolingAirFlow(0.75)
1909
+ erv.setLatentEffectivenessat100CoolingAirFlow(0.6)
1910
+ erv.setSensibleEffectivenessat75CoolingAirFlow(0.75)
1911
+ erv.setLatentEffectivenessat75CoolingAirFlow(0.6)
1912
+ else
1913
+ values = Hash.new{|hash, key| hash[key] = Hash.new}
1914
+ values['Sensible Heating'][0.75] = 0.7
1915
+ values['Sensible Heating'][1.0] = 0.7
1916
+ values['Latent Heating'][0.75] = 0.6
1917
+ values['Latent Heating'][1.0] = 0.6
1918
+ values['Sensible Cooling'][0.75] = 0.75
1919
+ values['Sensible Cooling'][1.0] = 0.75
1920
+ values['Latent Cooling'][0.75] = 0.6
1921
+ values['Latent Cooling'][1.0] = 0.6
1922
+ erv = OpenstudioStandards::HVAC.heat_exchanger_air_to_air_set_effectiveness_values(erv, defaults: false, values: values)
1923
+ end
1901
1924
  return erv
1902
1925
  end
1903
1926
 
@@ -84,13 +84,24 @@ class Standard
84
84
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
85
85
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
86
86
 
87
- # Lookup efficiencies depending on whether it is a unitary AC or a heat pump
88
- ac_props = nil
89
- ac_props = if heat_pump == true
90
- model_find_object(standards_data['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
91
- else
92
- model_find_object(standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
93
- end
87
+ # Get efficiencies data depending on whether it is a unitary AC or a heat pump
88
+ coil_efficiency_data = if coil_dx_heat_pump?(coil_cooling_dx_multi_speed)
89
+ standards_data['heat_pumps']
90
+ else
91
+ standards_data['unitary_acs']
92
+ end
93
+
94
+ # Additional search criteria
95
+ if (coil_efficiency_data[0].keys.include?('equipment_type') || ((template == 'NECB2011') || (template == 'NECB2015') || (template == 'NECB2017') || (template == 'NECB2020') || (template == 'BTAPPRE1980') ||
96
+ (template == 'BTAP1980TO2010'))) && !coil_dx_heat_pump?(coil_cooling_dx_multi_speed)
97
+ search_criteria['equipment_type'] = 'Air Conditioners'
98
+ end
99
+ if coil_efficiency_data[0].keys.include?('region')
100
+ search_criteria['region'] = nil # non-nil values are currently used for residential products
101
+ end
102
+
103
+ # Lookup efficiency
104
+ ac_props = model_find_object(coil_efficiency_data, search_criteria, capacity_btu_per_hr, Date.today)
94
105
 
95
106
  # Check to make sure properties were found
96
107
  if ac_props.nil?
@@ -100,7 +111,13 @@ class Standard
100
111
  end
101
112
 
102
113
  # Make the COOL-CAP-FT curve
103
- cool_cap_ft = model_add_curve(model, ac_props['cool_cap_ft'], standards)
114
+ cool_cap_ft = nil
115
+ if ac_props['cool_cap_ft']
116
+ cool_cap_ft = model_add_curve(coil_cooling_dx_multi_speed.model, ac_props['cool_cap_ft'])
117
+ else
118
+ cool_cap_ft_curve_name = coil_dx_cap_ft(coil_cooling_dx_multi_speed)
119
+ cool_cap_ft = model_add_curve(coil_cooling_dx_multi_speed.model, cool_cap_ft_curve_name)
120
+ end
104
121
  if cool_cap_ft
105
122
  clg_stages.each do |stage|
106
123
  stage.setTotalCoolingCapacityFunctionofTemperatureCurve(cool_cap_ft)
@@ -111,7 +128,13 @@ class Standard
111
128
  end
112
129
 
113
130
  # Make the COOL-CAP-FFLOW curve
114
- cool_cap_fflow = model_add_curve(model, ac_props['cool_cap_fflow'], standards)
131
+ cool_cap_fflow = nil
132
+ if ac_props['cool_cap_fflow']
133
+ cool_cap_fflow = model_add_curve(coil_coolingcoil_cooling_dx_multi_speed_dx_two_speed.model, ac_props['cool_cap_fflow'])
134
+ else
135
+ cool_cap_fflow_curve_name = coil_dx_cap_fff(coil_cooling_dx_multi_speed)
136
+ cool_cap_fflow = model_add_curve(coil_cooling_dx_multi_speed.model, cool_cap_fflow_curve_name)
137
+ end
115
138
  if cool_cap_fflow
116
139
  clg_stages.each do |stage|
117
140
  stage.setTotalCoolingCapacityFunctionofFlowFractionCurve(cool_cap_fflow)
@@ -122,7 +145,13 @@ class Standard
122
145
  end
123
146
 
124
147
  # Make the COOL-EIR-FT curve
125
- cool_eir_ft = model_add_curve(model, ac_props['cool_eir_ft'], standards)
148
+ cool_eir_ft = nil
149
+ if ac_props['cool_eir_ft']
150
+ cool_eir_ft = model_add_curve(coil_cooling_dx_multi_speed.model, ac_props['cool_eir_ft'])
151
+ else
152
+ cool_eir_ft_curve_name = coil_dx_eir_ft(coil_cooling_dx_multi_speed)
153
+ cool_eir_ft = model_add_curve(coil_cooling_dx_multi_speed.model, cool_eir_ft_curve_name)
154
+ end
126
155
  if cool_eir_ft
127
156
  clg_stages.each do |stage|
128
157
  stage.setEnergyInputRatioFunctionofTemperatureCurve(cool_eir_ft)
@@ -133,7 +162,13 @@ class Standard
133
162
  end
134
163
 
135
164
  # Make the COOL-EIR-FFLOW curve
136
- cool_eir_fflow = model_add_curve(model, ac_props['cool_eir_fflow'], standards)
165
+ cool_eir_fflow = nil
166
+ if ac_props['cool_eir_fflow']
167
+ cool_eir_fflow = model_add_curve(coil_cooling_dx_multi_speed.model, ac_props['cool_eir_fflow'])
168
+ else
169
+ cool_eir_fflow_curve_name = coil_dx_eir_fff(coil_cooling_dx_multi_speed)
170
+ cool_eir_fflow = model_add_curve(coil_cooling_dx_multi_speed.model, cool_eir_fflow_curve_name)
171
+ end
137
172
  if cool_eir_fflow
138
173
  clg_stages.each do |stage|
139
174
  stage.setEnergyInputRatioFunctionofFlowFractionCurve(cool_eir_fflow)
@@ -144,7 +179,13 @@ class Standard
144
179
  end
145
180
 
146
181
  # Make the COOL-PLF-FPLR curve
147
- cool_plf_fplr = model_add_curve(model, ac_props['cool_plf_fplr'], standards)
182
+ cool_plf_fplr = nil
183
+ if ac_props['cool_plf_fplr']
184
+ cool_plf_fplr = model_add_curve(coil_cooling_dx_multi_speed.model, ac_props['cool_plf_fplr'])
185
+ else
186
+ cool_plf_fplr_curve_name = coil_dx_plf_fplr(coil_cooling_dx_multi_speed)
187
+ cool_plf_fplr = model_add_curve(coil_cooling_dx_multi_speed.model, cool_plf_fplr_curve_name)
188
+ end
148
189
  if cool_plf_fplr
149
190
  clg_stages.each do |stage|
150
191
  stage.setPartLoadFractionCorrelationCurve(cool_plf_fplr)
@@ -164,50 +205,22 @@ class Standard
164
205
  capacity_btu_per_hr = 15_000 if capacity_btu_per_hr > 15_000
165
206
  ptac_eer = ptac_eer_coeff_1 + (ptac_eer_coeff_2 * capacity_btu_per_hr)
166
207
  cop = eer_to_cop_no_fan(ptac_eer)
167
- # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{ptac_eer}EER")
168
208
  new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{ptac_eer}EER"
169
209
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{ptac_eer}")
170
210
  end
171
211
 
172
- # If specified as SEER
173
- unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
174
- min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
175
- cop = seer_to_cop_no_fan(min_seer)
176
- new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
177
- # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER")
178
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
179
- end
180
-
181
- # If specified as EER
182
- unless ac_props['minimum_energy_efficiency_ratio'].nil?
183
- min_eer = ac_props['minimum_energy_efficiency_ratio']
184
- cop = eer_to_cop_no_fan(min_eer)
185
- new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
186
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
187
- end
212
+ # Preserve the original name
213
+ orig_name = coil_cooling_dx_single_speed.name.to_s
188
214
 
189
- # if specified as SEER (heat pump)
190
- unless ac_props['minimum_seasonal_efficiency'].nil?
191
- min_seer = ac_props['minimum_seasonal_efficiency']
192
- cop = seer_to_cop_no_fan(min_seer)
193
- new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
194
- # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER")
195
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
196
- end
215
+ # Find the minimum COP and rename with efficiency rating
216
+ new_comp_name, cop = coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed)
197
217
 
198
- # If specified as EER (heat pump)
199
- unless ac_props['minimum_full_load_efficiency'].nil?
200
- min_eer = ac_props['minimum_full_load_efficiency']
201
- cop = eer_to_cop_no_fan(min_eer)
202
- new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
203
- OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
204
- end
218
+ sql_db_vars_map[new_comp_name] = orig_name
205
219
 
206
- sql_db_vars_map[new_comp_name] = name.to_s
220
+ # Set the new name
207
221
  coil_cooling_dx_multi_speed.setName(new_comp_name)
208
222
 
209
223
  # Set the efficiency values
210
-
211
224
  unless cop.nil?
212
225
  clg_stages.each do |istage|
213
226
  istage.setGrossRatedCoolingCOP(cop)
@@ -226,14 +239,14 @@ class Standard
226
239
  clg_stages = coil_cooling_dx_multi_speed.stages
227
240
  if clg_stages.last.grossRatedTotalCoolingCapacity.is_initialized
228
241
  capacity_w = clg_stages.last.grossRatedTotalCoolingCapacity.get
229
- elsif (clg_stages.size == 1) && coil_cooling_dx_multi_speed.autosizedSpeed1GrossRatedTotalCoolingCapacity.is_initialized
230
- capacity_w = coil_cooling_dx_multi_speed.autosizedSpeed1GrossRatedTotalCoolingCapacity.get
231
- elsif (clg_stages.size == 2) && coil_cooling_dx_multi_speed.autosizedSpeed2GrossRatedTotalCoolingCapacity.is_initialized
232
- capacity_w = coil_cooling_dx_multi_speed.autosizedSpeed2GrossRatedTotalCoolingCapacity.get
233
- elsif (clg_stages.size == 3) && coil_cooling_dx_multi_speed.autosizedSpeed3GrossRatedTotalCoolingCapacity.is_initialized
234
- capacity_w = coil_cooling_dx_multi_speed.autosizedSpeed3GrossRatedTotalCoolingCapacity.get
235
- elsif (clg_stages.size == 4) && coil_cooling_dx_multi_speed.autosizedSpeed4GrossRatedTotalCoolingCapacity.is_initialized
236
- capacity_w = coil_cooling_dx_multi_speed.autosizedSpeed4GrossRatedTotalCoolingCapacity.get
242
+ elsif (clg_stages.size == 1) && coil_cooling_dx_multi_speed.stages[0].autosizedSpeedRatedTotalCoolingCapacity.is_initialized
243
+ capacity_w = coil_cooling_dx_multi_speed.stages[0].autosizedSpeedRatedTotalCoolingCapacity.get
244
+ elsif (clg_stages.size == 2) && coil_cooling_dx_multi_speed.stages[1].autosizedGrossRatedTotalCoolingCapacity.is_initialized
245
+ capacity_w = coil_cooling_dx_multi_speed.stages[1].autosizedGrossRatedTotalCoolingCapacity.get
246
+ elsif (clg_stages.size == 3) && coil_cooling_dx_multi_speed.stages[2].autosizedGrossRatedTotalCoolingCapacity.is_initialized
247
+ capacity_w = coil_cooling_dx_multi_speed.stages[2].autosizedSpeedRatedTotalCoolingCapacity.get
248
+ elsif (clg_stages.size == 4) && coil_cooling_dx_multi_speed.stages[3].autosizedGrossRatedTotalCoolingCapacity.is_initialized
249
+ capacity_w = coil_cooling_dx_multi_speed.stages[3].autosizedGrossRatedTotalCoolingCapacity.get
237
250
  else
238
251
  OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{coil_cooling_dx_multi_speed.name} capacity is not available, cannot apply efficiency standard.")
239
252
  successfully_set_all_properties = false
@@ -258,13 +271,25 @@ class Standard
258
271
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
259
272
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
260
273
 
274
+ # Define database
275
+ if coil_dx_heat_pump?(coil_cooling_dx_multi_speed)
276
+ database = standards_data['heat_pumps']
277
+ else
278
+ database = standards_data['unitary_acs']
279
+ end
280
+
281
+ # Additional search criteria
282
+ if (database[0].keys.include?('equipment_type') || ((template == 'NECB2011') || (template == 'NECB2015') || (template == 'NECB2017') || (template == 'NECB2020') || (template == 'BTAPPRE1980') ||
283
+ (template == 'BTAP1980TO2010'))) && !coil_dx_heat_pump?(coil_cooling_dx_multi_speed)
284
+ search_criteria['equipment_type'] = 'Air Conditioners'
285
+ end
286
+ if database[0].keys.include?('region')
287
+ search_criteria['region'] = nil # non-nil values are currently used for residential products
288
+ end
289
+
261
290
  # Lookup efficiencies depending on whether it is a unitary AC or a heat pump
262
291
  ac_props = nil
263
- ac_props = if coil_dx_heat_pump?(coil_cooling_dx_multi_speed)
264
- model_find_object(standards_data['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
265
- else
266
- model_find_object(standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
267
- end
292
+ ac_props = model_find_object(database, search_criteria, capacity_btu_per_hr, Date.today)
268
293
 
269
294
  # Get the minimum efficiency standards
270
295
  cop = nil
@@ -274,10 +299,18 @@ class Standard
274
299
  min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
275
300
  cop = seer_to_cop_no_fan(min_seer)
276
301
  new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
277
- # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER")
278
302
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
279
303
  end
280
304
 
305
+ # If specified as SEER2
306
+ # TODO: assumed to be the same as SEER for now
307
+ unless ac_props['minimum_seasonal_energy_efficiency_ratio_2'].nil?
308
+ min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio_2']
309
+ cop = seer_to_cop_no_fan(min_seer)
310
+ new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
311
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
312
+ end
313
+
281
314
  # If specified as EER
282
315
  unless ac_props['minimum_energy_efficiency_ratio'].nil?
283
316
  min_eer = ac_props['minimum_energy_efficiency_ratio']
@@ -286,12 +319,28 @@ class Standard
286
319
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
287
320
  end
288
321
 
322
+ # If specified as EER2
323
+ # TODO: assumed to be the same as EER for now
324
+ unless ac_props['minimum_energy_efficiency_ratio_2'].nil?
325
+ min_eer = ac_props['minimum_energy_efficiency_ratio_2']
326
+ cop = eer_to_cop_no_fan(min_eer)
327
+ new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
328
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
329
+ end
330
+
331
+ # If specific as IEER
332
+ if !ac_props['minimum_integrated_energy_efficiency_ratio'].nil? && cop.nil?
333
+ min_ieer = ac_props['minimum_integrated_energy_efficiency_ratio']
334
+ cop = ieer_to_cop_no_fan(min_ieer)
335
+ new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_ieer}IEER"
336
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; IEER = #{min_ieer}")
337
+ end
338
+
289
339
  # if specified as SEER (heat pump)
290
340
  unless ac_props['minimum_seasonal_efficiency'].nil?
291
341
  min_seer = ac_props['minimum_seasonal_efficiency']
292
342
  cop = seer_to_cop_no_fan(min_seer)
293
343
  new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
294
- # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER")
295
344
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
296
345
  end
297
346