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
@@ -296,6 +296,7 @@ class ECMS
296
296
  outdoor_vrf_unit.setMinimumHeatPumpPartLoadRatio(0.5)
297
297
  outdoor_vrf_unit.setCondenserType(condenser_type)
298
298
  outdoor_vrf_unit.setCrankcaseHeaterPowerperCompressor(1.0e-6)
299
+ outdoor_vrf_unit.setMinimumOutdoorTemperatureinCoolingMode(-10)
299
300
  heat_defrost_eir_ft = nil
300
301
  if ecm_name
301
302
  search_criteria = {}
@@ -516,7 +517,7 @@ class ECMS
516
517
 
517
518
  # Create one hot-water loop for hot-water baseboards if required
518
519
  hw_loop = nil
519
- hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water'
520
+ hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water' || standard.fuel_type_set.force_airloop_hot_water
520
521
 
521
522
  # Update system zones map if needed
522
523
  system_zones_map = update_system_zones_map_keys(system_zones_map,'sys_1')
@@ -537,6 +538,7 @@ class ECMS
537
538
  system_doas_flags: system_doas_flags)
538
539
  sys_supp_htg_eqpt_type = 'coil_electric'
539
540
  sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
541
+ sys_supp_htg_eqpt_type = 'coil_hw' if standard.fuel_type_set.force_airloop_hot_water
540
542
  airloop,clg_dx_coil,htg_dx_coil,return_fan = add_air_system(model: model,
541
543
  zones: zones,
542
544
  sys_abbr: sys_info['sys_abbr'],
@@ -547,7 +549,8 @@ class ECMS
547
549
  sys_clg_eqpt_type: air_sys_eqpt_type,
548
550
  sys_supp_fan_type: sys_info['sys_supp_fan_type'],
549
551
  sys_ret_fan_type: sys_info['sys_ret_fan_type'],
550
- sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type'])
552
+ sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type'],
553
+ hw_loop: hw_loop)
551
554
  # Appy performance curves
552
555
  if air_sys_eqpt_type == 'ccashp'
553
556
  eqpt_name = 'Mitsubishi_Hyper_Heating_VRF_Outdoor_Unit RTU'
@@ -740,7 +743,7 @@ class ECMS
740
743
 
741
744
  # =============================================================================================================================
742
745
  # create air system heating equipment
743
- def create_air_sys_htg_eqpt(model, htg_eqpt_type)
746
+ def create_air_sys_htg_eqpt(model, htg_eqpt_type, hw_loop = nil)
744
747
  always_on = model.alwaysOnDiscreteSchedule
745
748
  htg_eqpt = nil
746
749
  case htg_eqpt_type.downcase
@@ -769,6 +772,7 @@ class ECMS
769
772
  when 'coil_hw'
770
773
  htg_eqpt = OpenStudio::Model::CoilHeatingWater.new(model)
771
774
  htg_eqpt.setName('CoilHeatingWater')
775
+ hw_loop.addDemandBranchForComponent(htg_eqpt) unless hw_loop.nil?
772
776
  end
773
777
 
774
778
  return htg_eqpt
@@ -786,7 +790,8 @@ class ECMS
786
790
  sys_clg_eqpt_type:,
787
791
  sys_supp_fan_type:,
788
792
  sys_ret_fan_type:,
789
- sys_setpoint_mgr_type:)
793
+ sys_setpoint_mgr_type:,
794
+ hw_loop: nil)
790
795
 
791
796
  # create all the needed components and the air loop
792
797
  airloop = create_airloop(model, sys_vent_type)
@@ -796,7 +801,7 @@ class ECMS
796
801
  return_fan = create_air_sys_fan(model, sys_ret_fan_type)
797
802
  return_fan.setName('Return Fan') if return_fan
798
803
  htg_eqpt = create_air_sys_htg_eqpt(model, sys_htg_eqpt_type)
799
- supp_htg_eqpt = create_air_sys_htg_eqpt(model, sys_supp_htg_eqpt_type)
804
+ supp_htg_eqpt = create_air_sys_htg_eqpt(model, sys_supp_htg_eqpt_type, hw_loop)
800
805
  clg_eqpt = create_air_sys_clg_eqpt(model, sys_clg_eqpt_type)
801
806
  # add components to the air loop
802
807
  clg_eqpt.addToNode(airloop.supplyOutletNode) if clg_eqpt
@@ -823,7 +828,10 @@ class ECMS
823
828
  sys_name_pars['sys_rf'] = 'none'
824
829
  sys_name_pars['sys_rf'] = 'cv' if sys_ret_fan_type == 'constant_volume'
825
830
  sys_name_pars['sys_rf'] = 'vv' if sys_ret_fan_type == 'variable_volume'
826
- assign_base_sys_name(airloop, sys_abbr: sys_abbr, sys_oa: sys_vent_type, sys_name_pars: sys_name_pars)
831
+ assign_base_sys_name( air_loop: airloop,
832
+ sys_abbr: sys_abbr,
833
+ sys_oa: sys_vent_type,
834
+ sys_name_pars: sys_name_pars)
827
835
  return airloop, clg_eqpt, htg_eqpt, return_fan
828
836
  end
829
837
 
@@ -1236,11 +1244,12 @@ class ECMS
1236
1244
 
1237
1245
  # Create one hot-water loop for hot-water baseboards if required
1238
1246
  hw_loop = nil
1239
- hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water'
1247
+ hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water' || standard.fuel_type_set.force_airloop_hot_water
1240
1248
 
1241
1249
  # Set supplemental heating for air loop
1242
1250
  sys_supp_htg_eqpt_type = 'coil_electric'
1243
1251
  sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
1252
+ sys_supp_htg_eqpt_type = 'coil_hw' if standard.fuel_type_set.force_airloop_hot_water
1244
1253
  systems = []
1245
1254
  system_zones_map.sort.each do |sys_name, zones|
1246
1255
  sys_info = air_sys_comps_assumptions(sys_name: sys_name,
@@ -1258,7 +1267,8 @@ class ECMS
1258
1267
  sys_clg_eqpt_type: 'ccashp',
1259
1268
  sys_supp_fan_type: sys_info['sys_supp_fan_type'],
1260
1269
  sys_ret_fan_type: sys_info['sys_ret_fan_type'],
1261
- sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type']
1270
+ sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type'],
1271
+ hw_loop: hw_loop
1262
1272
  )
1263
1273
  # Apply performance curves
1264
1274
  eqpt_name = 'Mitsubishi_Hyper_Heating_VRF_Outdoor_Unit RTU'
@@ -1417,12 +1427,16 @@ class ECMS
1417
1427
  ecm_system_zones_map_option:,
1418
1428
  standard:)
1419
1429
  hw_loop = nil
1430
+ if standard.fuel_type_set.force_airloop_hot_water || standard.fuel_type_set.necb_reference_hp_supp_fuel.to_s.downcase == "hot water"
1431
+ hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set)
1432
+ end
1420
1433
 
1421
1434
  # Get the heating fuel type from the system fuels object defined by the standards object
1422
1435
  heating_fuel = standard.fuel_type_set.ecm_fueltype
1423
1436
  # Set supplemental heaing for airloop
1424
1437
  sys_supp_htg_eqpt_type = 'coil_electric'
1425
1438
  sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
1439
+ sys_supp_htg_eqpt_type = 'coil_hw' if standard.fuel_type_set.force_airloop_hot_water || standard.fuel_type_set.necb_reference_hp_supp_fuel.to_s.downcase == "hot water"
1426
1440
  # Update system zones map if needed
1427
1441
  system_zones_map = update_system_zones_map_keys(system_zones_map,'sys_1')
1428
1442
  system_zones_map = update_system_zones_map(model,system_zones_map,ecm_system_zones_map_option,'sys_1') if ecm_system_zones_map_option != 'NECB_Default'
@@ -1445,7 +1459,8 @@ class ECMS
1445
1459
  sys_clg_eqpt_type: 'ashp',
1446
1460
  sys_supp_fan_type: sys_info['sys_supp_fan_type'],
1447
1461
  sys_ret_fan_type: sys_info['sys_ret_fan_type'],
1448
- sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type'])
1462
+ sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type'],
1463
+ hw_loop: hw_loop)
1449
1464
  eqpt_name = 'HS11_PTHP'
1450
1465
  coil_cooling_dx_single_speed_apply_curves(clg_dx_coil,eqpt_name)
1451
1466
  coil_heating_dx_single_speed_apply_curves(htg_dx_coil,eqpt_name)
@@ -1488,7 +1503,7 @@ class ECMS
1488
1503
  # =============================================================================================================================
1489
1504
  # Apply efficiencies and performance curves for ECM "hs11_ashp_pthp"
1490
1505
  def apply_efficiency_ecm_hs11_ashp_pthp(model,standard)
1491
- fr_backup_coil_cap_as_dx_coil_cap = 0.5 # fraction of electric backup heating coil capacity assigned to dx heating coil
1506
+ fr_backup_coil_cap_as_dx_coil_cap = 0.5 # fraction of electric or hot-water backup heating coil capacity assigned to dx heating coil
1492
1507
  apply_efficiency_ecm_hs12_ashp_baseboard(model,standard)
1493
1508
  pthp_eqpt_name = 'HS11_PTHP'
1494
1509
  model.getAirLoopHVACs.sort.each do |isys|
@@ -1568,11 +1583,12 @@ class ECMS
1568
1583
 
1569
1584
  # Create one hot-water loop for hot-water baseboards if required
1570
1585
  hw_loop = nil
1571
- hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water'
1586
+ hw_loop = add_hotwater_loop(model: model, fuel_type_set: standard.fuel_type_set) if standard.fuel_type_set.baseboard_type == 'Hot Water' || standard.fuel_type_set.force_airloop_hot_water
1572
1587
 
1573
1588
  # Set supplemental heating fuel for airloop
1574
1589
  sys_supp_htg_eqpt_type = 'coil_electric'
1575
1590
  sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
1591
+ sys_supp_htg_eqpt_type = 'coil_hw' if standard.fuel_type_set.force_airloop_hot_water
1576
1592
  systems = []
1577
1593
  system_zones_map.sort.each do |sys_name, zones|
1578
1594
  sys_info = air_sys_comps_assumptions(sys_name: sys_name,
@@ -1589,7 +1605,8 @@ class ECMS
1589
1605
  sys_clg_eqpt_type: 'ashp',
1590
1606
  sys_supp_fan_type: sys_info['sys_supp_fan_type'],
1591
1607
  sys_ret_fan_type: sys_info['sys_ret_fan_type'],
1592
- sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type'])
1608
+ sys_setpoint_mgr_type: sys_info['sys_setpoint_mgr_type'],
1609
+ hw_loop: hw_loop)
1593
1610
  eqpt_name = 'NECB2015_ASHP'
1594
1611
  coil_cooling_dx_single_speed_apply_curves(clg_dx_coil,eqpt_name)
1595
1612
  coil_heating_dx_single_speed_apply_curves(htg_dx_coil,eqpt_name)
@@ -1814,7 +1831,7 @@ class ECMS
1814
1831
  loop_heat_rej_eqpt_type: 'none',
1815
1832
  loop_pump_type: 'variable_speed',
1816
1833
  loop_spm_type: 'Scheduled',
1817
- loop_setpoint: 50.0,
1834
+ loop_setpoint: 60.0,
1818
1835
  loop_temp_diff: 5.0)
1819
1836
  model.getCoilHeatingWaters.sort.each {|coil| hw_loop.addDemandBranchForComponent(coil)}
1820
1837
  hcapf_curve_name = "HEATPUMP_WATERTOWATER_HCAPF"
@@ -2124,7 +2141,7 @@ class ECMS
2124
2141
  loop_heat_rej_eqpt_type: 'none',
2125
2142
  loop_pump_type: 'variable_speed',
2126
2143
  loop_spm_type: 'Scheduled',
2127
- loop_setpoint: 50.0,
2144
+ loop_setpoint: 60.0,
2128
2145
  loop_temp_diff: 5.0)
2129
2146
  # set additional parameters for heating heat pump
2130
2147
  hw_loop_htg_eqpt.setCondenserType('AirSoure')
@@ -2152,7 +2169,7 @@ class ECMS
2152
2169
  hw_boilers.reverse().each {|boiler| boiler.addToNode(hw_loop_htg_eqpt_outlet_node)}
2153
2170
  # add setpoint manager at the exit of the heat pump heating comp
2154
2171
  sch = OpenStudio::Model::ScheduleConstant.new(model)
2155
- sch.setValue(50.0)
2172
+ sch.setValue(60.0)
2156
2173
  spm = OpenStudio::Model::SetpointManagerScheduled.new(model,sch)
2157
2174
  spm.setName("HeatPumpHtgSetpointManager")
2158
2175
  spm.addToNode(hw_loop_htg_eqpt_outlet_node)
@@ -2333,6 +2350,7 @@ class ECMS
2333
2350
  # Set supplemental heaing for airloop
2334
2351
  sys_supp_htg_eqpt_type = 'coil_electric'
2335
2352
  sys_supp_htg_eqpt_type = 'coil_gas' if heating_fuel == 'NaturalGas'
2353
+ sys_supp_htg_eqpt_type = 'coil_hw' if standard.fuel_type_set.force_airloop_hot_water
2336
2354
  # call ecm HS15 to add the air loop
2337
2355
  add_ecm_hs15_cawhp_fancoils(model: model,
2338
2356
  system_zones_map: system_zones_map,
@@ -2364,8 +2382,13 @@ class ECMS
2364
2382
  search_criteria['name'] = eqpt_name
2365
2383
 
2366
2384
  # Get the capacity
2367
- capacity_w = coil_cooling_dx_single_speed_find_capacity(coil_cooling_dx_single_speed)
2368
- capacity_w = [1.0,capacity_w].max
2385
+ multiplier = nil
2386
+ if ['PTAC', 'PTHP'].include?(OpenstudioStandards::HVAC.coil_dx_subcategory(coil_cooling_dx_single_speed))
2387
+ thermal_zone = OpenstudioStandards::HVAC.hvac_component_get_thermal_zone(coil_cooling_dx_single_speed)
2388
+ multiplier = thermal_zone.multiplier if !thermal_zone.nil?
2389
+ end
2390
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(coil_cooling_dx_single_speed, multiplier: multiplier)
2391
+ capacity_w = capacity_w.nil? ? 1.0 : [1.0, capacity_w].max
2369
2392
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2370
2393
 
2371
2394
  # Lookup efficiencies
@@ -2434,8 +2457,8 @@ class ECMS
2434
2457
  search_criteria['name'] = eqpt_name
2435
2458
 
2436
2459
  # Get the capacity
2437
- capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed)
2438
- capacity_w = [1.0,capacity_w].max
2460
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
2461
+ capacity_w = capacity_w.nil? ? 1.0 : [1.0, capacity_w].max
2439
2462
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2440
2463
 
2441
2464
  # Lookup efficiencies
@@ -2509,7 +2532,7 @@ class ECMS
2509
2532
  successfully_set_all_properties = true
2510
2533
 
2511
2534
  # Get the capacity
2512
- capacity_w = chiller_electric_eir_find_capacity(chiller_electric_eir)
2535
+ capacity_w = OpenstudioStandards::HVAC.chiller_electric_get_capacity(chiller_electric_eir)
2513
2536
  capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
2514
2537
 
2515
2538
  # Lookup performance curves
@@ -2714,8 +2737,11 @@ class ECMS
2714
2737
  search_criteria = {}
2715
2738
  search_criteria['name'] = eqpt_name
2716
2739
  # Get the capacity
2717
- capacity_w = airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
2718
- capacity_w = [1.0,capacity_w].max
2740
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_cooling_capacity(airconditioner_variablerefrigerantflow)
2741
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedTotalCoolingCapacity.is_initialized
2742
+ airconditioner_variablerefrigerantflow.setGrossRatedTotalCoolingCapacity(capacity_w)
2743
+ end
2744
+ capacity_w = [1.0, capacity_w].max
2719
2745
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2720
2746
 
2721
2747
  # Lookup performance curves
@@ -2845,8 +2871,11 @@ class ECMS
2845
2871
  search_criteria = {}
2846
2872
  search_criteria['name'] = eqpt_name
2847
2873
  # Get the capacity
2848
- capacity_w = airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
2849
- capacity_w = [1.0,capacity_w].max
2874
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_heating_capacity(airconditioner_variablerefrigerantflow)
2875
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedHeatingCapacity.is_initialized
2876
+ airconditioner_variablerefrigerantflow.setGrossRatedHeatingCapacity(capacity_w)
2877
+ end
2878
+ capacity_w = [1.0, capacity_w].max
2850
2879
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2851
2880
 
2852
2881
  # Lookup performance curves
@@ -2964,8 +2993,12 @@ class ECMS
2964
2993
  def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed,
2965
2994
  search_criteria,
2966
2995
  rename = false)
2967
-
2968
- capacity_w = coil_cooling_dx_single_speed_find_capacity(coil_cooling_dx_single_speed)
2996
+ multiplier = nil
2997
+ if ['PTAC', 'PTHP'].include?(OpenstudioStandards::HVAC.coil_dx_subcategory(coil_cooling_dx_single_speed))
2998
+ thermal_zone = OpenstudioStandards::HVAC.hvac_component_get_thermal_zone(coil_cooling_dx_single_speed)
2999
+ multiplier = thermal_zone.multiplier if !thermal_zone.nil?
3000
+ end
3001
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(coil_cooling_dx_single_speed, multiplier: multiplier)
2969
3002
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
2970
3003
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
2971
3004
 
@@ -2985,7 +3018,7 @@ class ECMS
2985
3018
  # If specified as SEER
2986
3019
  unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
2987
3020
  min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
2988
- cop = seer_to_cop_no_fan(min_seer)
3021
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
2989
3022
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
2990
3023
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
2991
3024
  end
@@ -2993,7 +3026,7 @@ class ECMS
2993
3026
  # If specified as EER
2994
3027
  unless ac_props['minimum_energy_efficiency_ratio'].nil?
2995
3028
  min_eer = ac_props['minimum_energy_efficiency_ratio']
2996
- cop = eer_to_cop_no_fan(min_eer)
3029
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
2997
3030
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
2998
3031
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
2999
3032
  end
@@ -3001,7 +3034,7 @@ class ECMS
3001
3034
  # if specified as SEER (heat pump)
3002
3035
  unless ac_props['minimum_seasonal_efficiency'].nil?
3003
3036
  min_seer = ac_props['minimum_seasonal_efficiency']
3004
- cop = seer_to_cop_no_fan(min_seer)
3037
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
3005
3038
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
3006
3039
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3007
3040
  end
@@ -3009,7 +3042,7 @@ class ECMS
3009
3042
  # If specified as EER (heat pump)
3010
3043
  unless ac_props['minimum_full_load_efficiency'].nil?
3011
3044
  min_eer = ac_props['minimum_full_load_efficiency']
3012
- cop = eer_to_cop_no_fan(min_eer)
3045
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3013
3046
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3014
3047
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3015
3048
  end
@@ -3037,7 +3070,7 @@ class ECMS
3037
3070
  search_criteria,
3038
3071
  rename = false)
3039
3072
 
3040
- capacity_w = coil_heating_dx_single_speed_find_capacity(coil_heating_dx_single_speed)
3073
+ capacity_w = OpenstudioStandards::HVAC.coil_heating_get_paired_coil_cooling_capacity(coil_heating_dx_single_speed)
3041
3074
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
3042
3075
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
3043
3076
 
@@ -3057,7 +3090,7 @@ class ECMS
3057
3090
  # If specified as EER
3058
3091
  unless props['minimum_energy_efficiency_ratio'].nil?
3059
3092
  min_eer = props['minimum_energy_efficiency_ratio']
3060
- cop = eer_to_cop_no_fan(min_eer)
3093
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3061
3094
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3062
3095
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3063
3096
  end
@@ -3065,7 +3098,7 @@ class ECMS
3065
3098
  # if specified as HSPF (heat pump)
3066
3099
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3067
3100
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3068
- cop = hspf_to_cop_no_fan(min_hspf)
3101
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3069
3102
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3070
3103
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3071
3104
  end
@@ -3073,7 +3106,7 @@ class ECMS
3073
3106
  # If specified as EER (heat pump)
3074
3107
  unless props['minimum_full_load_efficiency'].nil?
3075
3108
  min_eer = props['minimum_full_load_efficiency']
3076
- cop = eer_to_cop_no_fan(min_eer)
3109
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3077
3110
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3078
3111
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3079
3112
  end
@@ -3081,7 +3114,7 @@ class ECMS
3081
3114
  # If specified as COP
3082
3115
  unless props['minimum_coefficient_of_performance_heating'].nil?
3083
3116
  cop_min = props['minimum_coefficient_of_performance_heating']
3084
- cop = cop_heating_to_cop_heating_no_fan(cop_min, capacity_w)
3117
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(cop_min, capacity_w)
3085
3118
  new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
3086
3119
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3087
3120
  end
@@ -3122,7 +3155,7 @@ class ECMS
3122
3155
  # If specified as SEER
3123
3156
  unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil?
3124
3157
  min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio']
3125
- cop = seer_to_cop_no_fan(min_seer)
3158
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
3126
3159
  new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
3127
3160
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3128
3161
  end
@@ -3130,7 +3163,7 @@ class ECMS
3130
3163
  # If specified as EER
3131
3164
  unless ac_props['minimum_energy_efficiency_ratio'].nil?
3132
3165
  min_eer = ac_props['minimum_energy_efficiency_ratio']
3133
- cop = eer_to_cop_no_fan(min_eer)
3166
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3134
3167
  new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3135
3168
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3136
3169
  end
@@ -3138,7 +3171,7 @@ class ECMS
3138
3171
  # if specified as SEER (heat pump)
3139
3172
  unless ac_props['minimum_seasonal_efficiency'].nil?
3140
3173
  min_seer = ac_props['minimum_seasonal_efficiency']
3141
- cop = seer_to_cop_no_fan(min_seer)
3174
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(min_seer)
3142
3175
  new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER"
3143
3176
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3144
3177
  end
@@ -3146,7 +3179,7 @@ class ECMS
3146
3179
  # If specified as EER (heat pump)
3147
3180
  unless ac_props['minimum_full_load_efficiency'].nil?
3148
3181
  min_eer = ac_props['minimum_full_load_efficiency']
3149
- cop = eer_to_cop_no_fan(min_eer)
3182
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3150
3183
  new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3151
3184
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3152
3185
  end
@@ -3194,7 +3227,7 @@ class ECMS
3194
3227
  # If specified as EER
3195
3228
  unless props['minimum_energy_efficiency_ratio'].nil?
3196
3229
  min_eer = props['minimum_energy_efficiency_ratio']
3197
- cop = eer_to_cop_no_fan(min_eer)
3230
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3198
3231
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3199
3232
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3200
3233
  end
@@ -3202,7 +3235,7 @@ class ECMS
3202
3235
  # if specified as HSPF (heat pump)
3203
3236
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3204
3237
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3205
- cop = hspf_to_cop_no_fan(min_hspf)
3238
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3206
3239
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3207
3240
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3208
3241
  end
@@ -3210,7 +3243,7 @@ class ECMS
3210
3243
  # If specified as EER (heat pump)
3211
3244
  unless props['minimum_full_load_efficiency'].nil?
3212
3245
  min_eer = props['minimum_full_load_efficiency']
3213
- cop = eer_to_cop_no_fan(min_eer)
3246
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3214
3247
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3215
3248
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3216
3249
  end
@@ -3218,7 +3251,7 @@ class ECMS
3218
3251
  # If specified as COP
3219
3252
  unless props['minimum_coefficient_of_performance_heating'].nil?
3220
3253
  min_cop = props['minimum_coefficient_of_performance_heating']
3221
- cop = cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3254
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3222
3255
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
3223
3256
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3224
3257
  end
@@ -3239,7 +3272,10 @@ class ECMS
3239
3272
  search_criteria,
3240
3273
  rename = false)
3241
3274
 
3242
- capacity_w = airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
3275
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_cooling_capacity(airconditioner_variablerefrigerantflow)
3276
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedTotalCoolingCapacity.is_initialized
3277
+ airconditioner_variablerefrigerantflow.setGrossRatedTotalCoolingCapacity(capacity_w)
3278
+ end
3243
3279
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
3244
3280
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
3245
3281
 
@@ -3259,7 +3295,7 @@ class ECMS
3259
3295
  # If specified as EER
3260
3296
  unless props['minimum_energy_efficiency_ratio'].nil?
3261
3297
  min_eer = props['minimum_energy_efficiency_ratio']
3262
- cop = eer_to_cop_no_fan(min_eer)
3298
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3263
3299
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3264
3300
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3265
3301
  end
@@ -3267,7 +3303,7 @@ class ECMS
3267
3303
  # if specified as HSPF (heat pump)
3268
3304
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3269
3305
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3270
- cop = hspf_to_cop_no_fan(min_hspf)
3306
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3271
3307
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3272
3308
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3273
3309
  end
@@ -3275,7 +3311,7 @@ class ECMS
3275
3311
  # If specified as EER (heat pump)
3276
3312
  unless props['minimum_full_load_efficiency'].nil?
3277
3313
  min_eer = props['minimum_full_load_efficiency']
3278
- cop = eer_to_cop_no_fan(min_eer)
3314
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3279
3315
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3280
3316
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3281
3317
  end
@@ -3308,7 +3344,10 @@ class ECMS
3308
3344
  search_criteria,
3309
3345
  rename = false)
3310
3346
 
3311
- capacity_w = airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
3347
+ capacity_w = OpenstudioStandards::HVAC.air_conditioner_variable_refrigerant_flow_get_heating_capacity(airconditioner_variablerefrigerantflow)
3348
+ if airconditioner_variablerefrigerantflow.autosizedGrossRatedHeatingCapacity.is_initialized
3349
+ airconditioner_variablerefrigerantflow.setGrossRatedHeatingCapacity(capacity_w)
3350
+ end
3312
3351
  capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
3313
3352
  capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
3314
3353
 
@@ -3328,7 +3367,7 @@ class ECMS
3328
3367
  # If specified as EER
3329
3368
  unless props['minimum_energy_efficiency_ratio'].nil?
3330
3369
  min_eer = props['minimum_energy_efficiency_ratio']
3331
- cop = eer_to_cop_no_fan(min_eer)
3370
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3332
3371
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3333
3372
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3334
3373
  end
@@ -3336,7 +3375,7 @@ class ECMS
3336
3375
  # if specified as HSPF (heat pump)
3337
3376
  unless props['minimum_heating_seasonal_performance_factor'].nil?
3338
3377
  min_hspf = props['minimum_heating_seasonal_performance_factor']
3339
- cop = hspf_to_cop_no_fan(min_hspf)
3378
+ cop = OpenstudioStandards::HVAC.hspf_to_cop_no_fan(min_hspf)
3340
3379
  new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF"
3341
3380
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}")
3342
3381
  end
@@ -3344,7 +3383,7 @@ class ECMS
3344
3383
  # If specified as EER (heat pump)
3345
3384
  unless props['minimum_full_load_efficiency'].nil?
3346
3385
  min_eer = props['minimum_full_load_efficiency']
3347
- cop = eer_to_cop_no_fan(min_eer)
3386
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(min_eer)
3348
3387
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER"
3349
3388
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3350
3389
  end
@@ -3352,7 +3391,7 @@ class ECMS
3352
3391
  # If specified as COP
3353
3392
  unless props['minimum_coefficient_of_performance_heating'].nil?
3354
3393
  min_cop = props['minimum_coefficient_of_performance_heating']
3355
- cop = cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3394
+ cop = OpenstudioStandards::HVAC.cop_heating_to_cop_heating_no_fan(min_cop, capacity_w)
3356
3395
  new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP"
3357
3396
  OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}")
3358
3397
  end
@@ -3399,57 +3438,6 @@ class ECMS
3399
3438
  return capacity_w
3400
3439
  end
3401
3440
 
3402
- # =============================================================================================================================
3403
- # Find cooling capacity for "AirConditionerVariableRefrigerantFlow" object
3404
- def airconditioner_variablerefrigerantflow_cooling_find_capacity(airconditioner_variablerefrigerantflow)
3405
- capacity_w = nil
3406
- if airconditioner_variablerefrigerantflow.ratedTotalCoolingCapacity.is_initialized
3407
- capacity_w = airconditioner_variablerefrigerantflow.ratedTotalCoolingCapacity.get
3408
- elsif airconditioner_variablerefrigerantflow.autosizedRatedTotalCoolingCapacity.is_initialized
3409
- capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalCoolingCapacity.get
3410
- airconditioner_variablerefrigerantflow.setRatedTotalCoolingCapacity(capacity_w)
3411
- else
3412
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} cooling capacity is not available.")
3413
- return 0.0
3414
- end
3415
-
3416
- return capacity_w
3417
- end
3418
-
3419
- # =============================================================================================================================
3420
- # Find heating capacity for "AirConditionerVariableRefrigerantFlow" object
3421
- def airconditioner_variablerefrigerantflow_heating_find_capacity(airconditioner_variablerefrigerantflow)
3422
- capacity_w = nil
3423
- if airconditioner_variablerefrigerantflow.ratedTotalHeatingCapacity.is_initialized
3424
- capacity_w = airconditioner_variablerefrigerantflow.ratedTotalHeatingCapacity.get
3425
- elsif airconditioner_variablerefrigerantflow.autosizedRatedTotalHeatingCapacity.is_initialized
3426
- capacity_w = airconditioner_variablerefrigerantflow.autosizedRatedTotalHeatingCapacity.get
3427
- airconditioner_variablerefrigerantflow.setRatedTotalHeatingCapacity(capacity_w)
3428
- else
3429
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{airconditioner_variablerefrigerantflow.name} heating capacity is not available.")
3430
- return 0.0
3431
- end
3432
-
3433
- return capacity_w
3434
- end
3435
-
3436
- # =============================================================================================================================
3437
- # Find cooling capacity for "ChillerElectricEIR" object
3438
- def chiller_electric_eir_find_capacity(chiller_electric_eir)
3439
- capacity_w = nil
3440
- if chiller_electric_eir.referenceCapacity.is_initialized
3441
- capacity_w = chiller_electric_eir.referenceCapacity.get
3442
- elsif chiller_electric_eir.autosizedRererenceCapacity.is_initialized
3443
- capacity_w = chiller_electric_eir.autosizedRerenceCapacity.get
3444
- chiller_electric_eir.setReferenceCapacity(capacity_w)
3445
- else
3446
- OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name} capacity not available")
3447
- return 0.0
3448
- end
3449
-
3450
- return capacity_w
3451
- end
3452
-
3453
3441
  # ============================================================================================================================
3454
3442
  # Apply boiler efficiency
3455
3443
  # This model takes an OS model and a boiler efficiency string or hash sent to it with the following form:
@@ -3754,10 +3742,17 @@ class ECMS
3754
3742
  search_criteria['name'] = unitary_cop_copy
3755
3743
  coil_name = coil.name.to_s
3756
3744
  if (sql_db_vars_map.has_key? coil_name) && !sizing_done then coil.setName(sql_db_vars_map[coil_name]) end
3745
+
3746
+ multiplier = nil
3747
+ if ['PTAC', 'PTHP'].include?(OpenstudioStandards::HVAC.coil_dx_subcategory(coil))
3748
+ thermal_zone = OpenstudioStandards::HVAC.hvac_component_get_thermal_zone(coil)
3749
+ multiplier = thermal_zone.multiplier if !thermal_zone.nil?
3750
+ end
3751
+
3757
3752
  if coil_type == 'SingleSpeed'
3758
- capacity_w = coil_cooling_dx_single_speed_find_capacity(coil)
3753
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_single_speed_get_capacity(coil, multiplier: multiplier)
3759
3754
  elsif coil_type == 'MultiSpeed'
3760
- capacity_w = coil_cooling_dx_multi_speed_find_capacity(coil)
3755
+ capacity_w = OpenstudioStandards::HVAC.coil_cooling_dx_multi_speed_get_capacity(coil, multiplier: multiplier)
3761
3756
  end
3762
3757
  coil.setName(coil_name)
3763
3758
  cop_package = model_find_object(@standards_data['tables']['unitary_cop_ecm'], search_criteria, capacity_w)
@@ -3789,9 +3784,9 @@ class ECMS
3789
3784
  if sizing_done
3790
3785
  cop = nil
3791
3786
  if unitary_cop['minimum_energy_efficiency_ratio']
3792
- cop = eer_to_cop_no_fan(unitary_cop['minimum_energy_efficiency_ratio'].to_f)
3787
+ cop = OpenstudioStandards::HVAC.eer_to_cop_no_fan(unitary_cop['minimum_energy_efficiency_ratio'].to_f)
3793
3788
  elsif unitary_cop['minimum_seasonal_energy_efficiency_ratio']
3794
- cop = seer_to_cop_no_fan(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f)
3789
+ cop = OpenstudioStandards::HVAC.seer_to_cop_no_fan(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f)
3795
3790
  elsif unitary_cop['minimum_coefficient_of_performance_cooling']
3796
3791
  cop = unitary_cop['minimum_coefficient_of_performance_cooling'].to_f
3797
3792
  end
@@ -3864,15 +3859,23 @@ class ECMS
3864
3859
  boiler_fueltype = standard.fuel_type_set.boiler_fueltype
3865
3860
  backup_boiler_fueltype = standard.fuel_type_set.backup_boiler_fueltype
3866
3861
  baseboard_type = standard.fuel_type_set.baseboard_type
3862
+ heating_coil_type_sys2 = standard.fuel_type_set.heating_coil_type_sys2
3863
+ heating_coil_type_sys3 = standard.fuel_type_set.heating_coil_type_sys3
3864
+ heating_coil_type_sys4 = standard.fuel_type_set.heating_coil_type_sys4
3865
+ heating_coil_type_sys6 = standard.fuel_type_set.heating_coil_type_sys6
3867
3866
  mau_heating_coil_type = 'none'
3868
3867
 
3869
3868
  # Create the hot water loop if necessary.
3870
3869
  hw_loop = standard.create_hw_loop_if_required(
3871
- baseboard_type,
3872
- boiler_fueltype,
3873
- backup_boiler_fueltype,
3874
- mau_heating_coil_type,
3875
- model
3870
+ baseboard_type: baseboard_type,
3871
+ boiler_fueltype: boiler_fueltype,
3872
+ backup_boiler_fueltype: backup_boiler_fueltype,
3873
+ mau_heating_coil_type: mau_heating_coil_type,
3874
+ model: model,
3875
+ heating_coil_type_sys2: heating_coil_type_sys2,
3876
+ heating_coil_type_sys3: heating_coil_type_sys3,
3877
+ heating_coil_type_sys4: heating_coil_type_sys4,
3878
+ heating_coil_type_sys6: heating_coil_type_sys6
3876
3879
  )
3877
3880
 
3878
3881
  # Add baseboard heaters to each heated zone.