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,13 @@
1
+ curve_name,template,operation_type,curve_type,coefficient1,coefficient2,coefficient3,coefficient4,coefficient5,coefficient6,coefficient7,coefficient8,coefficient9,coefficient10,min_val_x,max_val_x,min_val_y,max_val_y
2
+ Old_Low_Temp_Comp_Pwr_Curve,old,LT,Power,29669.27106,1027.632052,18.10662623,-442.1997136,11.13352877,-20.38045192,0.139980653,-0.058866918,-0.218451538,0.203858467,-40,-17.8,4.4,54.4
3
+ Old_Med_Temp_Comp_Pwr_Curve,old,MT,Power,7438.922294,-269.5975647,-9.856104461,553.5732602,-3.385889614,14.86578782,-0.100796292,0.009822793,0.097362356,-0.039675217,-23.3,7.2,10,60
4
+ New_Low_Temp_Comp_Pwr_Curve,new,LT,Power,170751.8339,6102.903702,78.2619862,-2959.432648,19.78765887,-90.95810147,0.435964768,-0.041157653,-0.60884596,0.459133262,-40,-17.8,4.4,54.4
5
+ New_Med_Temp_Comp_Pwr_Curve,new,MT,Power,7438.922294,-269.5975647,-9.856104461,553.5732602,-3.385889614,14.86578782,-0.100796292,0.009822793,0.097362356,-0.039675217,-23.3,7.2,10,60
6
+ Advanced_Low_Temp_Comp_Pwr_Curve,advanced,LT,Power,170751.8339,6102.903702,78.2619862,-2959.432648,19.78765887,-90.95810147,0.435964768,-0.041157653,-0.60884596,0.459133262,-40,-17.8,4.4,54.4
7
+ Advanced_Med_Temp_Comp_Pwr_Curve,advanced,MT,Power,7438.922294,-269.5975647,-9.856104461,553.5732602,-3.385889614,14.86578782,-0.100796292,0.009822793,0.097362356,-0.039675217,-23.3,7.2,10,60
8
+ Old_Low_Temp_Comp_Cap_Curve,old,LT,Capacity,170751.8339,6102.903702,78.2619862,-2959.432648,19.78765887,-90.95810147,0.435964768,-0.041157653,-0.60884596,0.459133262,-40,-17.8,4.4,54.4
9
+ Old_Med_Temp_Comp_Cap_Curve,old,MT,Capacity,151166.4362,5266.347888,60.67271508,-1851.559382,5.731327549,-46.92771731,0.136401203,-0.035697884,-0.403053994,-0.039290478,-23.3,7.2,10,60
10
+ New_Low_Temp_Comp_Cap_Curve,new,LT,Capacity,58336.86118,1561.7435,6.606812861,-283.6500679,-0.120234941,-12.49574858,-0.116278559,0.002277001,-0.118148325,0.032839613,-40,-17.8,4.4,54.4
11
+ New_Med_Temp_Comp_Cap_Curve,new,MT,Capacity,61412.17466,1570.851906,13.53344913,-500.1952361,8.16391243,-3.689538504,0.054485574,-0.088096805,0.006381584,-0.037503058,-23.3,7.2,10,60
12
+ Advanced_Low_Temp_Comp_Cap_Curve,advanced,LT,Capacity,58336.86118,1561.7435,6.606812861,-283.6500679,-0.120234941,-12.49574858,-0.116278559,0.002277001,-0.118148325,0.032839613,-40,-17.8,4.4,54.4
13
+ Advanced_Med_Temp_Comp_Cap_Curve,advanced,MT,Capacity,61412.17466,1570.851906,13.53344913,-500.1952361,8.16391243,-3.689538504,0.054485574,-0.088096805,0.006381584,-0.037503058,-23.3,7.2,10,60
@@ -0,0 +1,17 @@
1
+ building_type,space_type,case_type,length_ft,reference_space_type_area_ft2
2
+ SuperMarket,Sales,Coffin - Frozen Food,80,27500
3
+ SuperMarket,Sales,Coffin - Ice Cream,20,27500
4
+ SuperMarket,Sales,Reach-in - Ice Cream,187,27500
5
+ SuperMarket,Sales,Reach-in - Frozen Food,52,27500
6
+ SuperMarket,Sales,Reach-in - Dairy Deli Beverage Case,320,27500
7
+ SuperMarket,Sales,Service - Meat Deli Bakery,85,27500
8
+ SuperMarket,Sales,Island - Deli Produce,18,27500
9
+ SuperMarket,Sales,Vertical Open - All,82,27500
10
+ Gro,GrocSales,Coffin - Frozen Food,80,40000
11
+ Gro,GrocSales,Coffin - Ice Cream,20,40000
12
+ Gro,GrocSales,Reach-in - Ice Cream,187,40000
13
+ Gro,GrocSales,Reach-in - Frozen Food,52,40000
14
+ Gro,GrocSales,Reach-in - Dairy Deli Beverage Case,320,40000
15
+ Gro,GrocSales,Service - Meat Deli Bakery,85,40000
16
+ Gro,GrocSales,Island - Deli Produce,18,40000
17
+ Gro,GrocSales,Vertical Open - All,82,40000
@@ -0,0 +1,53 @@
1
+ building_type,space_type,walkin_name,walkin_type,size_ft2,reference_space_type_area_ft2,notes
2
+ PrimarySchool,Kitchen,Walk-in Cooler,Walk-in Cooler,120,1800,
3
+ PrimarySchool,Kitchen,Walk-in Freezer,Walk-in Freezer,120,1800,
4
+ SecondarySchool,Kitchen,Walk-in Cooler,Walk-in Cooler,240,2325,
5
+ SecondarySchool,Kitchen,Walk-in Freezer,Walk-in Freezer,240,2325,
6
+ QuickServiceRestaurant,Kitchen,Walk-in Cooler,Walk-in Cooler,100,1250,
7
+ QuickServiceRestaurant,Kitchen,Walk-in Freezer,Walk-in Freezer,100,1250,
8
+ FullServiceRestaurant,Kitchen,Walk-in Cooler,Walk-in Cooler,100,1500,
9
+ FullServiceRestaurant,Kitchen,Walk-in Freezer,Walk-in Freezer,100,1500,
10
+ LargeHotel,Kitchen,Walk-in Cooler,Walk-in Cooler,120,1110,
11
+ LargeHotel,Kitchen,Walk-in Freezer,Walk-in Freezer,120,1110,
12
+ Hospital,Kitchen,Walk-in Cooler,Walk-in Cooler,360,10000,
13
+ Hospital,Kitchen,Walk-in Freezer,Walk-in Freezer,360,10000,
14
+ SuperMarket,DryStorage,Bakery Cooler,Walk-in Cooler,120,4500,
15
+ SuperMarket,DryStorage,Bakery Freezer,Walk-in Freezer,150,4500,
16
+ SuperMarket,DryStorage,Beer Cooler,Walk-in Cooler,320,4500,
17
+ SuperMarket,DryStorage,Dairy Cooler,Walk-in Cooler,240,4500,
18
+ SuperMarket,DryStorage,Floral Cooler,Walk-in Cooler,80,4500,
19
+ SuperMarket,DryStorage,Grocery Freezer,Walk-in Freezer,240,4500,
20
+ SuperMarket,DryStorage,Kitchen Cooler,Walk-in Cooler,290,4500,
21
+ SuperMarket,DryStorage,Kitchen Freezer,Walk-in Freezer,96,4500,
22
+ SuperMarket,DryStorage,Meat Cooler,Walk-in Cooler,570,4500,
23
+ SuperMarket,DryStorage,Meat Freezer,Walk-in Freezer,60,4500,
24
+ SuperMarket,DryStorage,Prep Cooler 1,Walk-in Cooler,480,4500,
25
+ SuperMarket,DryStorage,Prep Cooler 2,Walk-in Cooler,480,4500,
26
+ SuperMarket,DryStorage,Produce Cooler,Walk-in Cooler,620,4500,
27
+ SuperMarket,DryStorage,Specialty Cooler,Walk-in Cooler,72,4500,
28
+ EPr,Kitchen,Walk-in Cooler,Walk-in Cooler,120,1750,
29
+ EPr,Kitchen,Walk-in Freezer,Walk-in Freezer,120,1750,
30
+ ESe,Kitchen,Walk-in Cooler,Walk-in Cooler,240,2630,
31
+ ESe,Kitchen,Walk-in Freezer,Walk-in Freezer,240,2630,
32
+ RFF,StockRoom,Walk-in Cooler,Walk-in Cooler,100,800,
33
+ RFF,StockRoom,Walk-in Freezer,Walk-in Freezer,100,800,
34
+ RSD,StockRoom,Walk-in Cooler,Walk-in Cooler,100,1600,
35
+ RSD,StockRoom,Walk-in Freezer,Walk-in Freezer,100,5000,
36
+ Htl,Kitchen,Walk-in Cooler,Walk-in Cooler,120,1000,
37
+ Htl,Kitchen,Walk-in Freezer,Walk-in Freezer,120,1000,
38
+ Hsp,Kitchen,Walk-in Cooler,Walk-in Cooler,360,1875,
39
+ Hsp,Kitchen,Walk-in Freezer,Walk-in Freezer,360,1875,
40
+ Gro,GrocSales,Bakery Cooler,Walk-in Cooler,120,40000,
41
+ Gro,GrocSales,Bakery Freezer,Walk-in Freezer,150,40000,
42
+ Gro,GrocSales,Beer Cooler,Walk-in Cooler,320,40000,
43
+ Gro,GrocSales,Dairy Cooler,Walk-in Cooler,240,40000,
44
+ Gro,GrocSales,Floral Cooler,Walk-in Cooler,80,40000,
45
+ Gro,GrocSales,Grocery Freezer,Walk-in Freezer,240,40000,
46
+ Gro,GrocSales,Kitchen Cooler,Walk-in Cooler,290,40000,
47
+ Gro,GrocSales,Kitchen Freezer,Walk-in Freezer,96,40000,
48
+ Gro,GrocSales,Meat Cooler,Walk-in Cooler,570,40000,
49
+ Gro,GrocSales,Meat Freezer,Walk-in Freezer,60,40000,
50
+ Gro,GrocSales,Prep Cooler 1,Walk-in Cooler,480,40000,
51
+ Gro,GrocSales,Prep Cooler 2,Walk-in Cooler,480,40000,
52
+ Gro,GrocSales,Produce Cooler,Walk-in Cooler,620,40000,
53
+ Gro,GrocSales,Specialty Cooler,Walk-in Cooler,72,40000,
@@ -0,0 +1,130 @@
1
+ module OpenstudioStandards
2
+ # The Refrigeration module provides methods to create, modify, and get information about refrigeration
3
+ module Refrigeration
4
+ # @!group Information
5
+ # Methods to get information about model refrigeration
6
+
7
+ # Find the thermal zone that is best for adding refrigerated display cases into.
8
+ # First, check for space types that typically have refrigeration.
9
+ # Fall back to largest zone in the model if no typical space types are found.
10
+ #
11
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
12
+ # @return [OpenStudio::Model::ThermalZone] returns a thermal zone if found, nil if not.
13
+ def self.refrigeration_case_zone(model)
14
+ # load refrigeration cases data
15
+ cases_csv = "#{__dir__}/data/typical_refrigerated_cases.csv"
16
+ unless File.exist?(cases_csv)
17
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Refrigeration', "Unable to find file: #{cases_csv}")
18
+ return nil
19
+ end
20
+ cases_tbl = CSV.table(cases_csv, encoding: 'ISO8859-1:utf-8')
21
+ cases_hsh = cases_tbl.map(&:to_hash)
22
+
23
+ # Look for one of the space types that would typically have refrigeration
24
+ display_case_zone = nil
25
+ display_case_zone_area_m2 = 0.0
26
+ model.getThermalZones.each do |zone|
27
+ space_type = OpenstudioStandards::ThermalZone.thermal_zone_get_space_type(zone)
28
+ next if space_type.empty?
29
+
30
+ space_type = space_type.get
31
+ next if space_type.standardsSpaceType.empty?
32
+ next if space_type.standardsBuildingType.empty?
33
+
34
+ stds_spc_type = space_type.standardsSpaceType.get
35
+ stds_bldg_type = space_type.standardsBuildingType.get
36
+ cases = cases_hsh.select { |r| (r[:building_type] == stds_bldg_type) && (r[:space_type] == stds_spc_type) }
37
+ unless cases.empty?
38
+ if zone.floorArea > display_case_zone_area_m2
39
+ display_case_zone = zone
40
+ display_case_zone_area_m2 = zone.floorArea
41
+ end
42
+ end
43
+ end
44
+
45
+ unless display_case_zone.nil?
46
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Refrigeration', "Display case zone is #{display_case_zone.name}, the largest zone with a space type typical for display cases.")
47
+ return display_case_zone
48
+ end
49
+
50
+ # If no typical space type was found, choose the largest zone in the model.
51
+ display_case_zone = nil
52
+ display_case_zone_area_m2 = 0
53
+ model.getThermalZones.each do |zone|
54
+ if zone.floorArea > display_case_zone_area_m2
55
+ display_case_zone = zone
56
+ display_case_zone_area_m2 = zone.floorArea
57
+ end
58
+ end
59
+
60
+ unless display_case_zone.nil?
61
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Refrigeration', "No space types typical for display cases were found, so the display cases will be placed in #{display_case_zone.name}, the largest zone.")
62
+ return display_case_zone
63
+ end
64
+
65
+ return display_case_zone
66
+ end
67
+
68
+ # Find the thermal zone that is best for adding refrigerated walkins into.
69
+ # First, check for space types that typically have refrigeration.
70
+ # Fall back to largest zone in the model if no typical space types are found.
71
+ #
72
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
73
+ # @return [OpenStudio::Model::ThermalZone] returns a thermal zone if found, nil if not.
74
+ def self.refrigeration_walkin_zone(model)
75
+ # load refrigeration walkin data
76
+ walkins_csv = "#{__dir__}/data/typical_refrigerated_walkins.csv"
77
+ unless File.exist?(walkins_csv)
78
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Refrigeration', "Unable to find file: #{walkins_csv}")
79
+ return nil
80
+ end
81
+ walkins_tbl = CSV.table(walkins_csv, encoding: 'ISO8859-1:utf-8')
82
+ walkins_hsh = walkins_tbl.map(&:to_hash)
83
+
84
+ # Look for one of the space types that would typically have walkins
85
+ walkin_zone = nil
86
+ walkin_zone_area_m2 = 0.0
87
+ model.getThermalZones.each do |zone|
88
+ space_type = OpenstudioStandards::ThermalZone.thermal_zone_get_space_type(zone)
89
+ next if space_type.empty?
90
+
91
+ space_type = space_type.get
92
+ next if space_type.standardsSpaceType.empty?
93
+ next if space_type.standardsBuildingType.empty?
94
+
95
+ stds_spc_type = space_type.standardsSpaceType.get
96
+ stds_bldg_type = space_type.standardsBuildingType.get
97
+ walkins = walkins_hsh.select { |r| (r[:building_type] == stds_bldg_type) && (r[:space_type] == stds_spc_type) }
98
+ unless walkins.empty?
99
+ if zone.floorArea > walkin_zone_area_m2
100
+ walkin_zone = zone
101
+ walkin_zone_area_m2 = zone.floorArea
102
+ end
103
+ end
104
+ end
105
+
106
+ unless walkin_zone.nil?
107
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Refrigeration', "Walkin zone is #{walkin_zone.name}, the largest zone with a space type typical for walkins.")
108
+ return walkin_zone
109
+ end
110
+
111
+ # If no typical space type was found,
112
+ # choose the largest zone in the model.
113
+ walkin_zone = nil
114
+ walkin_zone_area_m2 = 0
115
+ model.getThermalZones.each do |zone|
116
+ if zone.floorArea > walkin_zone_area_m2
117
+ walkin_zone = zone
118
+ walkin_zone_area_m2 = zone.floorArea
119
+ end
120
+ end
121
+
122
+ unless walkin_zone.nil?
123
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Refrigeration', "No space types typical for walkins were found, so the walkins will be placed in #{walkin_zone.name}, the largest zone.")
124
+ return walkin_zone
125
+ end
126
+
127
+ return walkin_zone
128
+ end
129
+ end
130
+ end
@@ -315,7 +315,7 @@ module OpenstudioStandards
315
315
 
316
316
  opt_space = water_use_equipment.space
317
317
  if opt_space.is_initialized
318
- space = space.get
318
+ space = opt_space.get
319
319
  hours_of_operation = OpenstudioStandards::Space.space_hours_of_operation(space)
320
320
  OpenstudioStandards::Schedules.schedule_ruleset_get_parametric_inputs(schedule, water_use_equipment, parametric_inputs, hours_of_operation, gather_data_only: gather_data_only, hoo_var_method: hoo_var_method)
321
321
  else
@@ -0,0 +1,299 @@
1
+ module OpenstudioStandards
2
+ # The ServiceWaterHeating module provides methods to create, modify, and get information about service water heating
3
+ module ServiceWaterHeating
4
+ # @!group Create Typical
5
+ # Methods to add typical service water heating depending on space types
6
+
7
+ # add typical swh demand and supply to model
8
+ #
9
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
10
+ # @param water_heating_fuel [String] water heater fuel. Valid choices are NaturalGas, Electricity, and HeatPump.
11
+ # If not supplied, a smart default will be determined based on building type and loop type.
12
+ # @param circulating [Boolean] determine whether the system is circulating (true), noncirculating (false).
13
+ # A nil value will default based on the standards building type
14
+ # @return [Array<OpenStudio::Model::PlantLoop>] array of service hot water loops
15
+ # @todo add support for other loop configurations, such as by space type, space type adjacent, or building type
16
+ def self.create_typical_service_water_heating(model,
17
+ water_heating_fuel: nil,
18
+ circulating: nil)
19
+ # array of service hot water loops
20
+ swh_systems = []
21
+
22
+ # water use equipment on the building loop
23
+ shared_water_use_equipment = []
24
+ booster_water_use_equipment = []
25
+
26
+ # @todo remove once model_add_schedule is refactored
27
+ std = Standard.build('90.1-2013')
28
+
29
+ # loop through space types adding demand side of swh
30
+ model.getSpaces.sort.each do |space|
31
+ next unless space.spaceType.is_initialized
32
+
33
+ total_space_floor_area_m2 = space.floorArea * space.multiplier
34
+ total_space_floor_area_ft2 = OpenStudio.convert(total_space_floor_area_m2, 'm^2', 'ft^2').get
35
+ space_type = space.spaceType.get
36
+
37
+ next unless space_type.standardsSpaceType.is_initialized
38
+ next unless space_type.standardsBuildingType.is_initialized
39
+
40
+ standards_space_type = space_type.standardsSpaceType.get
41
+ standards_building_type = space_type.standardsBuildingType.get
42
+
43
+ # load typical water use equipment data
44
+ data = JSON.parse(File.read("#{__dir__}/data/typical_water_use_equipment.json"), symbolize_names: true)
45
+ space_type_properties = data[:space_types].select { |hash| (hash[:space_type] == standards_space_type) && (hash[:building_type] == standards_building_type) }
46
+
47
+ # skip spaces with no equipment defined
48
+ next if space_type_properties.empty?
49
+
50
+ water_use_equipment = space_type_properties[0][:water_use_equipment]
51
+
52
+ # store one per unit equipment
53
+ space_water_use_equipment = []
54
+
55
+ if space.hasAdditionalProperties && space.additionalProperties.hasFeature('num_units')
56
+ num_units = space.additionalProperties.getFeatureAsInteger('num_units').get
57
+ else # assume 1 space is 1 unit
58
+ num_units = space.multiplier
59
+ end
60
+
61
+ # loop through and add water use equipment to space
62
+ water_use_equipment.each do |w|
63
+ # get water use equipment properties
64
+ water_use_name = w[:equipment_name]
65
+ peak_flow_rate_gal_per_hr = w[:peak_flow_rate].to_f
66
+ peak_flow_rate_gal_per_hr_per_ft2 = w[:peak_flow_rate_per_area].to_f
67
+ loop_type = w[:loop_type]
68
+ temperature = w[:temperature]
69
+ flow_rate_schedule = w[:flow_rate_schedule]
70
+ sensible_fraction = w[:sensible_fraction]
71
+ latent_fraction = w[:latent_fraction]
72
+
73
+ # derived from equipment properties
74
+ is_booster = water_use_name && water_use_name.downcase.include?('booster')
75
+ water_use_name = water_use_name ? "#{space.name} #{water_use_name}" : "#{space.name} Water Use"
76
+ service_water_temperature_c = OpenStudio.convert(temperature, 'F', 'C').get
77
+
78
+ # @todo replace this line once model_add_schedule is refactored to not require a standard
79
+ flow_rate_schedule = std.model_add_schedule(model, flow_rate_schedule)
80
+
81
+ # skip undefined equipment
82
+ next unless peak_flow_rate_gal_per_hr > 0.0 || peak_flow_rate_gal_per_hr_per_ft2 > 0.0
83
+
84
+ # If there is no SWH schedule, assume no SWH use for this space type.
85
+ unless flow_rate_schedule
86
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ServiceWaterHeating', "No service water heating schedule was specified for space type #{space_type.name} with standards space type #{standards_space_type}. Assuming an always off schedule.")
87
+ flow_rate_schedule = model.alwaysOffDiscreteSchedule
88
+ end
89
+
90
+ # Determine the peak flow rate and default water heating fuel
91
+ case loop_type
92
+ when 'One Per Unit'
93
+ # calculate peak flow rate
94
+ if peak_flow_rate_gal_per_hr.zero? && peak_flow_rate_gal_per_hr_per_ft2 > 0.0
95
+ peak_flow_rate_gal_per_hr = num_units * peak_flow_rate_gal_per_hr_per_ft2 * total_space_floor_area_ft2
96
+ else
97
+ peak_flow_rate_gal_per_hr *= num_units
98
+ end
99
+
100
+ # update water use name
101
+ water_use_name = "#{water_use_name} #{num_units} unit(s)"
102
+ else
103
+ # calculate peak flow rate
104
+ if peak_flow_rate_gal_per_hr.zero? && peak_flow_rate_gal_per_hr_per_ft2 > 0.0
105
+ peak_flow_rate_gal_per_hr = peak_flow_rate_gal_per_hr_per_ft2 * total_space_floor_area_ft2
106
+ end
107
+ end
108
+
109
+ # convert to SI
110
+ peak_flow_rate_m3_per_s = OpenStudio.convert(peak_flow_rate_gal_per_hr, 'gal/hr', 'm^3/s').get
111
+
112
+ # create water use equipment
113
+ water_use_equip = OpenstudioStandards::ServiceWaterHeating.create_water_use(model,
114
+ name: water_use_name,
115
+ flow_rate: peak_flow_rate_m3_per_s,
116
+ flow_rate_fraction_schedule: flow_rate_schedule,
117
+ water_use_temperature: service_water_temperature_c,
118
+ sensible_fraction: sensible_fraction,
119
+ latent_fraction: latent_fraction,
120
+ space: space)
121
+
122
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ServiceWaterHeating', "Added water use equipment #{water_use_equip.name}")
123
+
124
+ # create service hot water loop for 'One Per Space' and 'One Per Unit' dedicated equipment
125
+ case loop_type
126
+ when 'Shared'
127
+ if is_booster
128
+ booster_water_use_equipment << water_use_equip
129
+ else
130
+ shared_water_use_equipment << water_use_equip
131
+ end
132
+ when 'One Per Space', 'One Per Unit'
133
+ space_water_use_equipment << water_use_equip
134
+ else
135
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ServiceWaterHeating', "Water use equipment service loop type #{loop_type} not recognized. Cannot attach equipment to a loop.")
136
+ end
137
+ end
138
+
139
+ # create water loop for 'One Per Space' and 'One Per Unit' equipment
140
+ unless space_water_use_equipment.empty?
141
+ water_heater_capacity_w = num_units * OpenStudio.convert(20.0, 'kBtu/hr', 'W').get
142
+ water_heater_volume_m3 = num_units * OpenStudio.convert(50.0, 'gal', 'm^3').get
143
+ num_water_heaters = num_units
144
+
145
+ # default to electricity for single units
146
+ dedicated_water_heating_fuel = water_heating_fuel || 'Electricity'
147
+
148
+ # @todo add method to get service water temperature as max of space_water_use_equipment
149
+ service_water_temperature_c = OpenStudio.convert(140.0, 'F', 'C').get
150
+
151
+ # add service water loop with water heater
152
+ swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
153
+ system_name: "#{space.name} Service Water Loop",
154
+ service_water_temperature: service_water_temperature_c,
155
+ service_water_pump_head: 0.01,
156
+ service_water_pump_motor_efficiency: 1.0,
157
+ water_heater_capacity: water_heater_capacity_w,
158
+ water_heater_volume: water_heater_volume_m3,
159
+ water_heater_fuel: dedicated_water_heating_fuel,
160
+ number_of_water_heaters: num_water_heaters,
161
+ add_piping_losses: true,
162
+ floor_area: total_space_floor_area_m2,
163
+ number_of_stories: 1)
164
+
165
+ # add loop to array
166
+ swh_systems << swh_loop
167
+
168
+ # Attach water use equipment to the loop
169
+ space_water_use_equipment.each do |water_use_equip|
170
+ swh_connection = water_use_equip.waterUseConnections
171
+ swh_loop.addDemandBranchForComponent(swh_connection.get) if swh_connection.is_initialized
172
+ end
173
+ end
174
+ end
175
+
176
+ ############################################################################
177
+
178
+ # default to gas for shared system types and booster systems
179
+ shared_water_heating_fuel = water_heating_fuel || 'NaturalGas'
180
+ booster_water_heating_fuel = water_heating_fuel || 'Electricity'
181
+
182
+ # @todo get maximum service water temperature from shared_water_use_equipment
183
+ water_heater_temp_f = 140.0
184
+ water_heater_temp_c = OpenStudio.convert(water_heater_temp_f, 'F', 'C').get
185
+
186
+ # defaults for circulating or noncirculating systems
187
+ # @todo Remove hard-coded building-type-based lookups for circulating vs. non-circulating SWH systems
188
+ if circulating.nil?
189
+ if model.getBuilding.standardsBuildingType.is_initialized
190
+ circulating = OpenstudioStandards::ServiceWaterHeating.circulating_building_type?(model.getBuilding.standardsBuildingType.get)
191
+ else
192
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ServiceWaterHeating', 'Unable to determine the standards building type. Assuming the building does not have a circulating service water heating loop.')
193
+ circulating = false
194
+ end
195
+ end
196
+
197
+ # create a shared water loop
198
+ unless shared_water_use_equipment.empty? && booster_water_use_equipment.empty?
199
+ if circulating
200
+ # Table A.2 in PrototypeModelEnhancements_2014_0.pdf shows 10ft on everything except SecondarySchool which has 11.4ft
201
+ service_water_pump_head_pa = OpenStudio.convert(10.0, 'ftH_{2}O', 'Pa').get
202
+ service_water_pump_motor_efficiency = 0.3
203
+ else
204
+ service_water_pump_head_pa = 0.01
205
+ service_water_pump_motor_efficiency = 1.0
206
+ end
207
+
208
+ water_heater_sizing = OpenstudioStandards::ServiceWaterHeating.water_heater_sizing_from_water_use_equipment(shared_water_use_equipment)
209
+ water_heater_capacity_w = water_heater_sizing[:water_heater_capacity]
210
+ water_heater_volume_m3 = water_heater_sizing[:water_heater_volume]
211
+
212
+ # Add a shared service water heating loop with water heater
213
+ shared_swh_loop = OpenstudioStandards::ServiceWaterHeating.create_service_water_heating_loop(model,
214
+ system_name: 'Shared Service Water Loop',
215
+ service_water_temperature: water_heater_temp_c,
216
+ service_water_pump_head: service_water_pump_head_pa,
217
+ service_water_pump_motor_efficiency: service_water_pump_motor_efficiency,
218
+ water_heater_capacity: water_heater_capacity_w,
219
+ water_heater_volume: water_heater_volume_m3,
220
+ water_heater_fuel: shared_water_heating_fuel,
221
+ add_piping_losses: true)
222
+
223
+ # Add loop to array
224
+ swh_systems << shared_swh_loop
225
+
226
+ # Attach all water use equipment to the shared loop
227
+ shared_water_use_equipment.sort.each do |water_use_equip|
228
+ swh_connection = water_use_equip.waterUseConnections
229
+ shared_swh_loop.addDemandBranchForComponent(swh_connection.get) if swh_connection.is_initialized
230
+ end
231
+
232
+ # Attach booster water heater loop to shared loop
233
+ unless booster_water_use_equipment.empty?
234
+ # find_water_heater_capacity_volume_and_parasitic
235
+ booster_water_heater_sizing = OpenstudioStandards::ServiceWaterHeating.water_heater_sizing_from_water_use_equipment(booster_water_use_equipment,
236
+ water_heater_efficiency: 1.0,
237
+ inlet_temperature: 140.0,
238
+ supply_temperature: 180.0)
239
+
240
+ # Note that booster water heaters are always assumed to be electric resistance
241
+ booster_water_temperature_c = OpenStudio.convert(180.0, 'F', 'C').get
242
+ swh_booster_loop = OpenstudioStandards::ServiceWaterHeating.create_booster_water_heating_loop(model,
243
+ system_name: 'Booster Water Loop',
244
+ water_heater_capacity: booster_water_heater_sizing[:water_heater_capacity],
245
+ service_water_temperature: booster_water_temperature_c,
246
+ service_water_loop: shared_swh_loop)
247
+
248
+ # Add loop to array
249
+ swh_systems << swh_booster_loop
250
+
251
+ # Attach booster water use equipment to the booster loop
252
+ booster_water_use_equipment.each do |booster_equip|
253
+ booster_swh_connection = booster_equip.waterUseConnections
254
+ swh_booster_loop.addDemandBranchForComponent(booster_swh_connection.get) if booster_swh_connection.is_initialized
255
+ end
256
+ end
257
+ end
258
+
259
+ return swh_systems
260
+ end
261
+
262
+ # Check if the standards building type tends to have a circulating system by default
263
+ #
264
+ # @param standards_building_type [String] standard building type
265
+ # @return [Boolean] return true if the building has a circulating system, false if not
266
+ def self.circulating_building_type?(standards_building_type)
267
+ circulating_bldg_types = [
268
+ # DOE building types
269
+ 'Office',
270
+ 'PrimarySchool',
271
+ 'Outpatient',
272
+ 'Hospital',
273
+ 'SmallHotel',
274
+ 'LargeHotel',
275
+ 'FullServiceRestaurant',
276
+ 'HighriseApartment',
277
+ # DEER building types
278
+ 'Asm', # 'Assembly'
279
+ 'ECC', # 'Education - Community College'
280
+ 'EPr', # 'Education - Primary School'
281
+ 'ERC', # 'Education - Relocatable Classroom'
282
+ 'ESe', # 'Education - Secondary School'
283
+ 'EUn', # 'Education - University'
284
+ 'Gro', # 'Grocery'
285
+ 'Hsp', # 'Health/Medical - Hospital'
286
+ 'Htl', # 'Lodging - Hotel'
287
+ 'MBT', # 'Manufacturing Biotech'
288
+ 'MFm', # 'Residential Multi-family'
289
+ 'Mtl', # 'Lodging - Motel'
290
+ 'Nrs', # 'Health/Medical - Nursing Home'
291
+ 'OfL', # 'Office - Large'
292
+ # 'RFF', # 'Restaurant - Fast-Food'
293
+ 'RSD' # 'Restaurant - Sit-Down'
294
+ ]
295
+
296
+ return circulating_bldg_types.include?(standards_building_type)
297
+ end
298
+ end
299
+ end
@@ -119,19 +119,19 @@ module OpenstudioStandards
119
119
  use_ems_control: false)
120
120
  else
121
121
  OpenstudioStandards::ServiceWaterHeating.create_water_heater(model,
122
- water_heater_capacity: water_heater_capacity,
123
- water_heater_volume: water_heater_volume,
124
- water_heater_fuel: water_heater_fuel,
125
- on_cycle_parasitic_fuel_consumption_rate: on_cycle_parasitic_fuel_consumption_rate,
126
- off_cycle_parasitic_fuel_consumption_rate: off_cycle_parasitic_fuel_consumption_rate,
127
- service_water_temperature: service_water_temperature,
128
- service_water_temperature_schedule: swh_temp_sch,
129
- set_peak_use_flowrate: false,
130
- peak_flowrate: 0.0,
131
- flowrate_schedule: nil,
132
- water_heater_thermal_zone: water_heater_thermal_zone,
133
- number_of_water_heaters: number_of_water_heaters,
134
- service_water_loop: service_water_loop)
122
+ water_heater_capacity: water_heater_capacity,
123
+ water_heater_volume: water_heater_volume,
124
+ water_heater_fuel: water_heater_fuel,
125
+ on_cycle_parasitic_fuel_consumption_rate: on_cycle_parasitic_fuel_consumption_rate,
126
+ off_cycle_parasitic_fuel_consumption_rate: off_cycle_parasitic_fuel_consumption_rate,
127
+ service_water_temperature: service_water_temperature,
128
+ service_water_temperature_schedule: swh_temp_sch,
129
+ set_peak_use_flowrate: false,
130
+ peak_flowrate: 0.0,
131
+ flowrate_schedule: nil,
132
+ water_heater_thermal_zone: water_heater_thermal_zone,
133
+ number_of_water_heaters: number_of_water_heaters,
134
+ service_water_loop: service_water_loop)
135
135
  end
136
136
 
137
137
  # add pipe losses if requested
@@ -166,6 +166,7 @@ module OpenstudioStandards
166
166
  # Creates a booster water heater on its own loop and attaches it to the main service water heating loop.
167
167
  #
168
168
  # @param model [OpenStudio::Model::Model] OpenStudio model object
169
+ # @param system_name [String] the name of the system. nil results in the default.
169
170
  # @param water_heater_capacity [Double] water heater capacity, in W. Defaults to 8 kW / 27.283 kBtu/hr
170
171
  # @param water_heater_volume [Double] water heater volume, in m^3. Defaults to 0.0227 m^3 / 6 gal
171
172
  # @param water_heater_fuel [String] water heating fuel. Valid choices are 'NaturalGas', 'Electricity'.
@@ -179,6 +180,7 @@ module OpenstudioStandards
179
180
  # @param service_water_loop [OpenStudio::Model::PlantLoop] if provided, add the water heater to this loop
180
181
  # @return [OpenStudio::Model::PlantLoop] The booster water loop OpenStudio PlantLoop object
181
182
  def self.create_booster_water_heating_loop(model,
183
+ system_name: 'Booster Water Loop',
182
184
  water_heater_capacity: 8000.0,
183
185
  water_heater_volume: OpenStudio.convert(6.0, 'gal', 'm^3').get,
184
186
  water_heater_fuel: 'Electricity',
@@ -189,7 +191,7 @@ module OpenstudioStandards
189
191
  water_heater_thermal_zone: nil,
190
192
  service_water_loop: nil)
191
193
  if service_water_loop.nil?
192
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ServiceWaterHeating', "#{_method_} requires the service_water_loop argument to couple the booster water heating loop with a heat exchanger.")
194
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.ServiceWaterHeating', "#{__method__} requires the service_water_loop argument to couple the booster water heating loop with a heat exchanger.")
193
195
  return nil
194
196
  else
195
197
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ServiceWaterHeating', "Adding booster water heater to #{service_water_loop.name}")