openstudio-standards 0.7.1 → 0.8.0.rc1

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