openstudio-standards 0.8.3 → 0.8.5.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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.osm +30 -30
  3. data/data/geometry/ASHRAECourthouse.osm +22 -22
  4. data/data/geometry/ASHRAESmallOfficeDetailed.osm +2 -2
  5. data/data/geometry/DEER_Asm.osm +1 -1
  6. data/data/geometry/DEER_ECC.osm +1 -1
  7. data/data/geometry/DEER_EPr.osm +1 -1
  8. data/data/geometry/DEER_ERC.osm +1 -1
  9. data/data/geometry/DEER_ESe.osm +1 -1
  10. data/data/geometry/DEER_EUn.osm +1 -1
  11. data/data/geometry/DEER_Hsp.osm +1 -1
  12. data/data/geometry/DEER_Htl.osm +1 -1
  13. data/data/geometry/DEER_MBT.osm +1 -1
  14. data/data/geometry/DEER_MFm.osm +1 -1
  15. data/data/geometry/DEER_Nrs.osm +1 -1
  16. data/data/geometry/DEER_OfL.osm +1 -1
  17. data/data/geometry/DEER_OfS.osm +1 -1
  18. data/data/geometry/DEER_RFF.osm +1 -1
  19. data/data/geometry/DEER_RSD.osm +1 -1
  20. data/data/geometry/DEER_Rt3.osm +1 -1
  21. data/data/geometry/DEER_RtS.osm +1 -1
  22. data/data/standards/export_OpenStudio_libraries.rb +2 -3
  23. data/data/standards/test_performance_expected_dd_results.csv +42 -42
  24. data/lib/openstudio-standards/btap/NECB_building_types.csv +35 -0
  25. data/lib/openstudio-standards/btap/NECB_space_types.csv +109 -0
  26. data/lib/openstudio-standards/btap/activity.rb +480 -0
  27. data/lib/openstudio-standards/btap/attributes.rb +166 -0
  28. data/lib/openstudio-standards/btap/bridging.rb +561 -1402
  29. data/lib/openstudio-standards/btap/btap.rb +4 -2
  30. data/lib/openstudio-standards/btap/btap_test_helper.rb +86 -0
  31. data/lib/openstudio-standards/btap/carbon/btap_carbon.rb +177 -0
  32. data/lib/openstudio-standards/btap/common_paths.rb +81 -0
  33. data/lib/openstudio-standards/btap/common_resources/ConstructionProperties.csv +52 -0
  34. data/lib/openstudio-standards/btap/common_resources/Constructions.csv +37 -0
  35. data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
  36. data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
  37. data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
  38. data/lib/openstudio-standards/btap/common_resources/construction_sets.csv +1270 -0
  39. data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
  40. data/lib/openstudio-standards/btap/common_resources/constructions_opaque.csv +2256 -0
  41. data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
  42. data/lib/openstudio-standards/btap/common_resources/costs_local_factors.csv +2315 -0
  43. data/lib/openstudio-standards/btap/common_resources/hvac_vent_ahu.csv +925 -0
  44. data/lib/openstudio-standards/btap/common_resources/lighting.csv +364 -0
  45. data/lib/openstudio-standards/btap/common_resources/lighting_sets.csv +2667 -0
  46. data/lib/openstudio-standards/btap/common_resources/locations.csv +75 -0
  47. data/lib/openstudio-standards/btap/common_resources/materials_glazing.csv +35 -0
  48. data/lib/openstudio-standards/btap/common_resources/materials_hvac.csv +1686 -0
  49. data/lib/openstudio-standards/btap/common_resources/materials_lighting.csv +267 -0
  50. data/lib/openstudio-standards/btap/common_resources/materials_opaque.csv +164 -0
  51. data/lib/openstudio-standards/btap/costing/README.md +502 -0
  52. data/lib/openstudio-standards/btap/costing/btap_costing.rb +469 -0
  53. data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
  54. data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
  55. data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
  56. data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
  57. data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +173 -0
  58. data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +354 -0
  59. data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
  60. data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
  61. data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
  62. data/lib/openstudio-standards/btap/costing/envelope_costing.rb +215 -0
  63. data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
  64. data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +156 -0
  65. data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
  66. data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
  67. data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
  68. data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
  69. data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
  70. data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
  71. data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
  72. data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
  73. data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
  74. data/lib/openstudio-standards/btap/costing/test_list.txt +15 -0
  75. data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +27 -0
  76. data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
  77. data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
  78. data/lib/openstudio-standards/btap/geometry.rb +86 -6
  79. data/lib/openstudio-standards/btap/structure.rb +657 -0
  80. data/lib/openstudio-standards/constructions/modify.rb +2 -1
  81. data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
  82. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
  83. data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
  84. data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
  85. data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
  86. data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
  87. data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
  88. data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
  89. data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
  90. data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
  91. data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
  92. data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
  93. data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
  94. data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
  95. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
  96. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
  97. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
  98. data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
  99. data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
  100. data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
  101. data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
  102. data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
  103. data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
  104. data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
  105. data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
  106. data/lib/openstudio-standards/hvac/components/component.rb +39 -0
  107. data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
  108. data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
  109. data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
  110. data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
  111. data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
  112. data/lib/openstudio-standards/hvac/conversions.rb +222 -0
  113. data/lib/openstudio-standards/hvac/curves.rb +192 -0
  114. data/lib/openstudio-standards/hvac/helpers.rb +357 -0
  115. data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
  116. data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
  117. data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
  118. data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
  119. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
  120. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
  121. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
  122. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
  123. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  124. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  125. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  126. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
  127. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  128. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
  129. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  130. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  131. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
  132. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
  133. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
  134. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
  135. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
  136. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
  137. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
  138. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
  139. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
  140. data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
  141. data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
  142. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
  143. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
  144. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
  145. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
  146. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
  147. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
  148. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
  149. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
  150. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
  151. data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
  152. data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
  153. data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
  154. data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
  155. data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
  156. data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
  157. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
  158. data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
  159. data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
  160. data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
  161. data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
  162. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
  163. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
  164. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
  165. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
  166. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
  167. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
  168. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
  169. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
  170. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
  171. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
  172. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
  173. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
  174. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
  175. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
  176. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
  177. data/lib/openstudio-standards/standards/Standards.Model.rb +45 -20
  178. data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
  179. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
  180. data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
  181. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
  182. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
  183. data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
  184. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
  185. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
  186. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
  187. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
  188. 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 +37 -102
  189. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  192. 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 +37 -37
  193. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
  194. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
  195. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  196. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
  197. 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 +37 -102
  198. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
  199. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
  200. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  201. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
  202. 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 +45 -109
  203. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
  204. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
  205. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
  206. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  207. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
  208. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
  209. 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 +45 -109
  210. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
  211. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
  212. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
  213. 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 +37 -37
  214. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
  215. 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 +37 -37
  216. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
  217. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  218. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
  219. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  220. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
  221. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
  222. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
  223. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
  224. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
  225. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
  226. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
  227. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
  228. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -2
  229. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +3 -3
  230. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
  231. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
  232. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
  233. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
  234. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
  235. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +7 -1
  236. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
  237. data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
  238. data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
  239. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +21 -37
  240. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
  241. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
  242. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
  243. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
  244. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +4 -4
  245. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
  246. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +115 -112
  247. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +637 -249
  248. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
  249. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
  250. data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
  251. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +75 -7
  252. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +25 -1
  253. data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
  254. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
  255. data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
  256. data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
  257. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
  258. data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
  259. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
  260. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +18 -6
  261. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
  262. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
  263. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
  264. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
  265. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
  266. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +68 -150
  267. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +444 -134
  268. data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
  269. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
  270. data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
  271. data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
  272. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +17 -8
  273. data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
  274. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
  275. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +16 -6
  276. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
  277. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
  278. data/lib/openstudio-standards/standards/necb/README.md +343 -0
  279. data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
  280. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +206 -32
  281. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +75 -43
  282. data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
  283. data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
  284. data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
  285. data/lib/openstudio-standards/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
  286. data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -0
  287. data/lib/openstudio-standards/utilities/logging.rb +18 -14
  288. data/lib/openstudio-standards/version.rb +1 -1
  289. data/lib/openstudio-standards/weather/modify.rb +2 -2
  290. data/lib/openstudio-standards/weather/stat_file.rb +2 -2
  291. data/lib/openstudio-standards.rb +67 -38
  292. metadata +141 -50
  293. data/lib/openstudio-standards/hvac/components/create.rb +0 -169
  294. data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
  295. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
  296. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
  297. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
  298. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
  299. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
  300. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
  301. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
  302. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
  303. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
  304. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
  305. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
  306. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
  307. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
  308. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
  309. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
  310. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
  311. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
  312. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
  313. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
  314. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
  315. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
  316. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
  317. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
  318. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
  319. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
  320. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
  321. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
  322. data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
  323. data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
  324. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
  325. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
  326. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
  327. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
  328. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
  329. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
  330. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +0 -0
@@ -0,0 +1,113 @@
1
+ class Standard
2
+ # @!group People
3
+
4
+ # Apply people from ventilation standards data to a space type
5
+ # Create a DesignSpecificationOutdoorAir air object and assign it to the SpaceType
6
+ #
7
+ # @param space_type [OpenStudio::Model::SpaceType] OpenStudio SpaceType object to apply people to
8
+ # @param thermal_comfort_models [Array<String>] optional argument to determine which thermal comfort model to use. Can select multiple with an array. Options are Fanger, Pierce, KSU, AdaptiveASH55, AdaptiveCEN15251, CoolingEffectASH55, and AnkleDraftASH55.
9
+ # @return [Boolean] returns true if successful, false if not
10
+ def space_type_apply_people(space_type, thermal_comfort_models: ['AdaptiveASH55'])
11
+ # Skip plenums
12
+ if space_type.name.get.to_s.downcase.include?('plenum')
13
+ return false
14
+ end
15
+
16
+ if space_type.standardsSpaceType.is_initialized && space_type.standardsSpaceType.get.downcase.include?('plenum')
17
+ return false
18
+ end
19
+
20
+ # Get the standards data
21
+ # @todo replace this look from standards_data['space_types'] to ventilation data directly, use 62.1 as a Standard
22
+ space_type_properties = space_type_get_standards_data(space_type)
23
+
24
+ # Ensure space_type_properties available
25
+ if space_type_properties.nil? || space_type_properties.empty?
26
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} was not found in the standards data.")
27
+ return false
28
+ end
29
+
30
+ # People
31
+ people_have_info = false
32
+ occupancy_per_area = space_type_properties['occupancy_per_area'].to_f
33
+ people_have_info = true unless occupancy_per_area.zero?
34
+
35
+ if people_have_info
36
+ # Remove all but the first instance
37
+ instances = space_type.people.sort
38
+ if instances.empty?
39
+ # Create a new definition and instance
40
+ definition = OpenStudio::Model::PeopleDefinition.new(space_type.model)
41
+ definition.setName("#{space_type.name} People Definition")
42
+ instance = OpenStudio::Model::People.new(definition)
43
+ instance.setName("#{space_type.name} People")
44
+ instance.setSpaceType(space_type)
45
+ thermal_comfort_models.each { |m| definition.pushThermalComfortModelType(m)}
46
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} had no people, one has been created.")
47
+ instances << instance
48
+ elsif instances.size > 1
49
+ instances.each_with_index do |inst, i|
50
+ next if i.zero?
51
+
52
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "Removed #{inst.name} from #{space_type.name}.")
53
+ inst.remove
54
+ end
55
+ end
56
+
57
+ # Modify the definition of the instance
58
+ space_type.people.sort.each do |inst|
59
+ definition = inst.peopleDefinition
60
+ unless occupancy_per_area.zero?
61
+ definition.setPeopleperSpaceFloorArea(OpenStudio.convert(occupancy_per_area / 1000, 'people/ft^2', 'people/m^2').get)
62
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.SpaceType', "#{space_type.name} set occupancy to #{occupancy_per_area} people/1000 ft^2.")
63
+ end
64
+
65
+ # set fraction radiant
66
+ definition.setFractionRadiant(0.3)
67
+
68
+ # Clothing schedule for thermal comfort metrics
69
+ clothing_sch = space_type.model.getScheduleRulesetByName('Clothing Schedule')
70
+ if clothing_sch.is_initialized
71
+ clothing_sch = clothing_sch.get
72
+ else
73
+ clothing_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
74
+ clothing_sch.setName('Clothing Schedule')
75
+ clothing_sch.defaultDaySchedule.setName('Clothing Schedule Default Winter Clothes')
76
+ clothing_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 1.0)
77
+ sch_rule = OpenStudio::Model::ScheduleRule.new(clothing_sch)
78
+ sch_rule.daySchedule.setName('Clothing Schedule Summer Clothes')
79
+ sch_rule.daySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.5)
80
+ sch_rule.setStartDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(5), 1))
81
+ sch_rule.setEndDate(OpenStudio::Date.new(OpenStudio::MonthOfYear.new(9), 30))
82
+ end
83
+ inst.setClothingInsulationSchedule(clothing_sch)
84
+
85
+ # Air velocity schedule for thermal comfort metrics
86
+ air_velo_sch = space_type.model.getScheduleRulesetByName('Air Velocity Schedule')
87
+ if air_velo_sch.is_initialized
88
+ air_velo_sch = air_velo_sch.get
89
+ else
90
+ air_velo_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
91
+ air_velo_sch.setName('Air Velocity Schedule')
92
+ air_velo_sch.defaultDaySchedule.setName('Air Velocity Schedule Default')
93
+ air_velo_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0.2)
94
+ end
95
+ inst.setAirVelocitySchedule(air_velo_sch)
96
+
97
+ # Work efficiency schedule for thermal comfort metrics
98
+ work_efficiency_sch = space_type.model.getScheduleRulesetByName('Work Efficiency Schedule')
99
+ if work_efficiency_sch.is_initialized
100
+ work_efficiency_sch = work_efficiency_sch.get
101
+ else
102
+ work_efficiency_sch = OpenStudio::Model::ScheduleRuleset.new(space_type.model)
103
+ work_efficiency_sch.setName('Work Efficiency Schedule')
104
+ work_efficiency_sch.defaultDaySchedule.setName('Work Efficiency Schedule Default')
105
+ work_efficiency_sch.defaultDaySchedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), 0)
106
+ end
107
+ inst.setWorkEfficiencySchedule(work_efficiency_sch)
108
+ end
109
+ end
110
+
111
+ return true
112
+ end
113
+ end
@@ -825,10 +825,10 @@ class Standard
825
825
  plant_loop.supplyComponents.each do |sc|
826
826
  if sc.to_PumpVariableSpeed.is_initialized
827
827
  pump = sc.to_PumpVariableSpeed.get
828
- pump_variable_speed_set_control_type(pump, pri_control_type)
828
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: pri_control_type)
829
829
  elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
830
830
  pump = sc.to_HeaderedPumpsVariableSpeed.get
831
- headered_pumps_variable_speed_set_control_type(pump, pri_control_type)
831
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: pri_control_type)
832
832
  end
833
833
  end
834
834
 
@@ -836,10 +836,10 @@ class Standard
836
836
  plant_loop.demandComponents.each do |sc|
837
837
  if sc.to_PumpVariableSpeed.is_initialized
838
838
  pump = sc.to_PumpVariableSpeed.get
839
- pump_variable_speed_set_control_type(pump, sec_control_type)
839
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: sec_control_type)
840
840
  elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
841
841
  pump = sc.to_HeaderedPumpsVariableSpeed.get
842
- headered_pumps_variable_speed_set_control_type(pump, sec_control_type)
842
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: sec_control_type)
843
843
  end
844
844
  end
845
845
 
@@ -869,7 +869,7 @@ class Standard
869
869
  plant_loop.supplyComponents.each do |sc|
870
870
  if sc.to_PumpVariableSpeed.is_initialized
871
871
  pump = sc.to_PumpVariableSpeed.get
872
- pump_variable_speed_set_control_type(pump, control_type)
872
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
873
873
  end
874
874
  end
875
875
 
@@ -898,10 +898,10 @@ class Standard
898
898
  plant_loop.supplyComponents.each do |sc|
899
899
  if sc.to_PumpVariableSpeed.is_initialized
900
900
  pump = sc.to_PumpVariableSpeed.get
901
- pump_variable_speed_set_control_type(pump, control_type)
901
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
902
902
  elsif sc.to_HeaderedPumpsVariableSpeed.is_initialized
903
903
  pump = sc.to_HeaderedPumpsVariableSpeed.get
904
- headered_pumps_variable_speed_set_control_type(pump, control_type)
904
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type)
905
905
  end
906
906
  end
907
907
 
@@ -1274,12 +1274,12 @@ class Standard
1274
1274
  plant_loop.supplyComponents.each do |component|
1275
1275
  if component.to_PumpConstantSpeed.is_initialized
1276
1276
  pump = component.to_PumpConstantSpeed.get
1277
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1277
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1278
1278
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1279
1279
  supply_w_per_gpm += pump_rated_w_per_gpm
1280
1280
  elsif component.to_PumpVariableSpeed.is_initialized
1281
1281
  pump = component.to_PumpVariableSpeed.get
1282
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1282
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1283
1283
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Primary (Supply) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1284
1284
  supply_w_per_gpm += pump_rated_w_per_gpm
1285
1285
  end
@@ -1291,12 +1291,12 @@ class Standard
1291
1291
  demand_pumps.each do |component|
1292
1292
  if component.to_PumpConstantSpeed.is_initialized
1293
1293
  pump = component.to_PumpConstantSpeed.get
1294
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1294
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1295
1295
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) Constant Speed Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1296
1296
  demand_w_per_gpm += pump_rated_w_per_gpm
1297
1297
  elsif component.to_PumpVariableSpeed.is_initialized
1298
1298
  pump = component.to_PumpVariableSpeed.get
1299
- pump_rated_w_per_gpm = pump_rated_w_per_gpm(pump)
1299
+ pump_rated_w_per_gpm = OpenstudioStandards::HVAC.pump_get_rated_w_per_gpm(pump)
1300
1300
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.PlantLoop', "'#{loop_type}' Loop #{plant_loop.name} - Secondary (Demand) VSD Pump '#{pump.name}' - pump_rated_w_per_gpm #{pump_rated_w_per_gpm} W/GPM")
1301
1301
  demand_w_per_gpm += pump_rated_w_per_gpm
1302
1302
  end
@@ -81,7 +81,7 @@ module Pump
81
81
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.Pump', "For #{pump.name}: motor nameplate = #{nominal_hp}HP, motor eff = #{(motor_efficiency * 100).round(2)}%; #{target_w_per_gpm.round} W/gpm translates to a pressure rise of #{pressure_rise_ft_h2o.round(2)} ftH2O.")
82
82
 
83
83
  # Calculate the W/gpm for verification
84
- calculated_w = pump_pumppower(pump)
84
+ calculated_w = OpenstudioStandards::HVAC.pump_get_power(pump)
85
85
 
86
86
  calculated_w_per_gpm = calculated_w / flow_gpm
87
87
 
@@ -97,7 +97,7 @@ module Pump
97
97
  # @return [Boolean] returns true if successful, false if not
98
98
  def pump_apply_standard_minimum_motor_efficiency(pump)
99
99
  # Get the horsepower
100
- bhp = pump_brake_horsepower(pump)
100
+ bhp = OpenstudioStandards::HVAC.pump_get_brake_horsepower(pump)
101
101
 
102
102
  # Find the motor efficiency
103
103
  motor_eff, nominal_hp = pump_standard_minimum_motor_efficiency_and_size(pump, bhp)
@@ -180,149 +180,4 @@ module Pump
180
180
 
181
181
  return [motor_eff, nominal_hp]
182
182
  end
183
-
184
- # Determines the pump power (W) based on flow rate, pressure rise,
185
- # and total pump efficiency(impeller eff * motor eff).
186
- # Uses the E+ default assumption of 0.78 impeller efficiency.
187
- #
188
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
189
- # PumpConstantSpeed, PumpVariableSpeed
190
- # @return [Double] pump power in watts
191
- def pump_pumppower(pump)
192
- # Get flow rate (whether autosized or hard-sized)
193
- flow_m3_per_s = 0
194
- flow_m3_per_s = if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
195
- if pump.ratedFlowRate.is_initialized
196
- pump.ratedFlowRate.get
197
- elsif pump.autosizedRatedFlowRate.is_initialized
198
- pump.autosizedRatedFlowRate.get
199
- end
200
- elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
201
- if pump.totalRatedFlowRate.is_initialized
202
- pump.totalRatedFlowRate.get
203
- elsif pump.autosizedTotalRatedFlowRate.is_initialized
204
- pump.autosizedTotalRatedFlowRate.get
205
- end
206
- end
207
-
208
- # E+ default impeller efficiency
209
- # http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing
210
- impeller_eff = 0.78
211
-
212
- # Get the motor efficiency
213
- motor_eff = pump.motorEfficiency
214
-
215
- # Calculate the total efficiency
216
- # which includes both motor and
217
- # impeller efficiency.
218
- pump_total_eff = impeller_eff * motor_eff
219
-
220
- # Get the pressure rise (Pa)
221
- pressure_rise_pa = pump.ratedPumpHead
222
-
223
- # Calculate the pump power (W)
224
- pump_power_w = pressure_rise_pa * flow_m3_per_s / pump_total_eff
225
-
226
- return pump_power_w
227
- end
228
-
229
- # Determines the brake horsepower of the pump based on flow rate,
230
- # pressure rise, and impeller efficiency.
231
- #
232
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
233
- # PumpConstantSpeed, PumpVariableSpeed
234
- # @return [Double] brake horsepower
235
- def pump_brake_horsepower(pump)
236
- # Get flow rate (whether autosized or hard-sized)
237
- # Get flow rate (whether autosized or hard-sized)
238
- flow_m3_per_s = 0
239
- flow_m3_per_s = if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
240
- if pump.ratedFlowRate.is_initialized
241
- pump.ratedFlowRate.get
242
- elsif pump.autosizedRatedFlowRate.is_initialized
243
- pump.autosizedRatedFlowRate.get
244
- end
245
- elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
246
- if pump.totalRatedFlowRate.is_initialized
247
- pump.totalRatedFlowRate.get
248
- elsif pump.autosizedTotalRatedFlowRate.is_initialized
249
- pump.autosizedTotalRatedFlowRate.get
250
- end
251
- end
252
-
253
- # E+ default impeller efficiency
254
- # http://bigladdersoftware.com/epx/docs/8-4/engineering-reference/component-sizing.html#pump-sizing
255
- impeller_eff = 0.78
256
-
257
- # Get the pressure rise (Pa)
258
- pressure_rise_pa = pump.ratedPumpHead
259
-
260
- # Calculate the pump power (W)
261
- pump_power_w = pressure_rise_pa * flow_m3_per_s / impeller_eff
262
-
263
- # Convert to HP
264
- pump_power_hp = pump_power_w / 745.7 # 745.7 W/HP
265
-
266
- return pump_power_hp
267
- end
268
-
269
- # Determines the horsepower of the pump motor, including motor efficiency and pump impeller efficiency.
270
- #
271
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
272
- # PumpConstantSpeed, PumpVariableSpeed
273
- # @return [Double] motor horsepower
274
- def pump_motor_horsepower(pump)
275
- # Get the pump power
276
- pump_power_w = pump_pumppower(pump)
277
-
278
- # Convert to HP
279
- pump_hp = pump_power_w / 745.7 # 745.7 W/HP
280
-
281
- return pump_hp
282
- end
283
-
284
- # Determines the rated watts per GPM of the pump
285
- #
286
- # @param pump [OpenStudio::Model::StraightComponent] pump object, allowable types:
287
- # PumpConstantSpeed, PumpVariableSpeed
288
- # @return [Double] rated power consumption per flow in watts per gpm, W*min/gal
289
- def pump_rated_w_per_gpm(pump)
290
- # Get design power (whether autosized or hard-sized)
291
- rated_power_w = 0
292
- if pump.ratedPowerConsumption.is_initialized
293
- rated_power_w = pump.ratedPowerConsumption.get
294
- elsif pump.autosizedRatedPowerConsumption.is_initialized
295
- rated_power_w = pump.autosizedRatedPowerConsumption.get
296
- else
297
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump power consumption, cannot determine w per gpm correctly.")
298
- return 0.0
299
- end
300
-
301
- rated_m3_per_s = 0
302
- if pump.to_PumpVariableSpeed.is_initialized || pump.to_PumpConstantSpeed.is_initialized
303
- if pump.ratedFlowRate.is_initialized
304
- rated_m3_per_s = pump.ratedFlowRate.get
305
- elsif pump.autosizedRatedFlowRate.is_initialized
306
- rated_m3_per_s = pump.autosizedRatedFlowRate.get
307
- else
308
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump Flow Rate, cannot determine w per gpm correctly.")
309
- return 0.0
310
- end
311
- elsif pump.to_HeaderedPumpsVariableSpeed.is_initialized || pump.to_HeaderedPumpsConstantSpeed.is_initialized
312
- if pump.totalRatedFlowRate.is_initialized
313
- rated_m3_per_s = pump.totalRatedFlowRate.get
314
- elsif pump.autosizedTotalRatedFlowRate.is_initialized
315
- rated_m3_per_s = pump.autosizedTotalRatedFlowRate.get
316
- else
317
- OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump Flow Rate, cannot determine w per gpm correctly.")
318
- return 0.0
319
- end
320
- end
321
-
322
- rated_w_per_m3s = rated_power_w / rated_m3_per_s
323
-
324
- rated_w_per_gpm = OpenStudio.convert(rated_w_per_m3s, 'W*s/m^3', 'W*min/gal').get
325
-
326
- return rated_w_per_gpm
327
- end
328
183
  end
@@ -1,54 +1,70 @@
1
1
  class Standard
2
- # @!group PumpVariableSpeed
3
-
4
2
  include Pump
5
3
 
6
- # Set the pump curve coefficients based on the specified control type.
4
+ # Determine and set type of part load control type for heating and chilled
5
+ # water variable speed pumps
7
6
  #
8
- # @param pump_variable_speed [OpenStudio::Model::PumpVariableSpeed] variable speed pump
9
- # @param control_type [String] valid choices are Riding Curve, VSD No Reset, VSD DP Reset
10
- def pump_variable_speed_set_control_type(pump_variable_speed, control_type)
11
- # Determine the coefficients
12
- coeff_a = nil
13
- coeff_b = nil
14
- coeff_c = nil
15
- coeff_d = nil
16
- case control_type
17
- when 'Constant Flow'
18
- coeff_a = 0.0
19
- coeff_b = 1.0
20
- coeff_c = 0.0
21
- coeff_d = 0.0
22
- when 'Riding Curve'
23
- coeff_a = 0.0
24
- coeff_b = 3.2485
25
- coeff_c = -4.7443
26
- coeff_d = 2.5294
27
- when 'VSD No Reset'
28
- coeff_a = 0.0
29
- coeff_b = 0.5726
30
- coeff_c = -0.301
31
- coeff_d = 0.7347
32
- when 'VSD DP Reset'
33
- coeff_a = 0.0
34
- coeff_b = 0.0205
35
- coeff_c = 0.4101
36
- coeff_d = 0.5753
7
+ # @param pump [OpenStudio::Model::PumpVariableSpeed] OpenStudio pump object
8
+ # @return [Boolean] Returns true if applicable, false otherwise
9
+ def pump_variable_speed_control_type(pump)
10
+ # Get plant loop
11
+ plant_loop = pump.plantLoop.get
12
+
13
+ # Get plant loop type
14
+ plant_loop_type = plant_loop.sizingPlant.loopType
15
+ return false unless plant_loop_type == 'Heating' || plant_loop_type == 'Cooling'
16
+
17
+ # Get rated pump power
18
+ if pump.ratedPowerConsumption.is_initialized
19
+ pump_rated_power_w = pump.ratedPowerConsumption.get
20
+ elsif pump.autosizedRatedPowerConsumption.is_initialized
21
+ pump_rated_power_w = pump.autosizedRatedPowerConsumption.get
37
22
  else
38
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.PumpVariableSpeed', "Pump control type '#{control_type}' not recognized, pump coefficients will not be changed.")
23
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.Pump', "For #{pump.name}, could not find rated pump power consumption, cannot determine w per gpm correctly.")
39
24
  return false
40
25
  end
41
26
 
42
- # Set the coefficients
43
- pump_variable_speed.setCoefficient1ofthePartLoadPerformanceCurve(coeff_a)
44
- pump_variable_speed.setCoefficient2ofthePartLoadPerformanceCurve(coeff_b)
45
- pump_variable_speed.setCoefficient3ofthePartLoadPerformanceCurve(coeff_c)
46
- pump_variable_speed.setCoefficient4ofthePartLoadPerformanceCurve(coeff_d)
47
- pump_variable_speed.setPumpControlType('Intermittent')
27
+ # Get nominal nameplate HP
28
+ pump_nominal_hp = pump_rated_power_w * pump.motorEfficiency / 745.7
29
+
30
+ # Assign peformance curves
31
+ control_type = pump_variable_speed_get_control_type(pump, plant_loop_type, pump_nominal_hp)
48
32
 
49
- # Append the control type to the pump name
50
- # self.setName("#{self.name} #{control_type}")
33
+ # Set pump part load performance curve coefficients
34
+ OpenstudioStandards::HVAC.pump_variable_speed_set_control_type(pump, control_type: control_type) if control_type
51
35
 
52
36
  return true
53
37
  end
38
+
39
+ # Determine type of pump part load control type
40
+ #
41
+ # @param pump [OpenStudio::Model::PumpVariableSpeed] OpenStudio pump object
42
+ # @param plant_loop_type [String] Type of plant loop
43
+ # @param pump_nominal_hp [Float] Pump nominal horsepower
44
+ # @return [String] Pump part load control type
45
+ def pump_variable_speed_get_control_type(pump, plant_loop_type, pump_nominal_hp)
46
+ # Get plant loop
47
+ plant_loop = pump.plantLoop.get
48
+
49
+ # Default assumptions are based on ASHRAE 90.1-2010 Appendix G (G3.1.3.5 and G3.1.3.10)
50
+ case plant_loop_type
51
+ when 'Heating'
52
+ # Determine the area served by the plant loop
53
+ area_served_m2 = plant_loop_total_floor_area_served(plant_loop)
54
+ area_served_ft2 = OpenStudio.convert(area_served_m2, 'm^2', 'ft^2').get
55
+
56
+ return 'VSD No Reset' if area_served_ft2 > 120_000
57
+
58
+ # else
59
+ return 'Riding Curve'
60
+ when 'Cooling'
61
+ # Get plant loop capacity capacity
62
+ cooling_capacity_w = plant_loop_total_cooling_capacity(plant_loop)
63
+
64
+ return 'VSD No Reset' if cooling_capacity_w >= 300
65
+
66
+ # else
67
+ return 'Riding Curve'
68
+ end
69
+ end
54
70
  end