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,182 @@
1
+ module OpenstudioStandards
2
+ # The HVAC module provides methods create, modify, and get information about HVAC systems in the model
3
+ module HVAC
4
+ # @!group Component:Coil
5
+ # Methods to create, modify, and get information about HVAC coil objects
6
+
7
+ # Create CoilCoolingWaterToAirHeatPumpEquationFit object
8
+ # Enters in default curves for coil by type of coil
9
+ #
10
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
11
+ # @param plant_loop [<OpenStudio::Model::PlantLoop>] the coil will be placed on the demand side of this plant loop
12
+ # @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
13
+ # @param name [String] the name of the system, or nil in which case it will be defaulted
14
+ # @param type [String] the type of coil to reference the correct curve set
15
+ # @param cop [Double] rated cooling coefficient of performance
16
+ # @return [OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit] the cooling coil
17
+ def self.create_coil_cooling_water_to_air_heat_pump_equation_fit(model,
18
+ plant_loop,
19
+ air_loop_node: nil,
20
+ name: 'Water-to-Air HP Clg Coil',
21
+ type: nil,
22
+ cop: 3.4)
23
+ clg_coil = OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit.new(model)
24
+
25
+ # add to air loop if specified
26
+ clg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
27
+
28
+ # set coil name
29
+ clg_coil.setName(name)
30
+
31
+ # add to plant loop
32
+ if plant_loop.nil?
33
+ OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.HVAC', 'No plant loop supplied for cooling coil')
34
+ return false
35
+ end
36
+ plant_loop.addDemandBranchForComponent(clg_coil)
37
+
38
+ # set coil cop
39
+ if cop.nil?
40
+ clg_coil.setRatedCoolingCoefficientofPerformance(3.4)
41
+ else
42
+ clg_coil.setRatedCoolingCoefficientofPerformance(cop)
43
+ end
44
+
45
+ # curve sets
46
+ if type == 'OS default'
47
+ # use OS default curves
48
+ else # default curve set
49
+ if model.version < OpenStudio::VersionString.new('3.2.0')
50
+ clg_coil.setTotalCoolingCapacityCoefficient1(-4.30266987344639)
51
+ clg_coil.setTotalCoolingCapacityCoefficient2(7.18536990534372)
52
+ clg_coil.setTotalCoolingCapacityCoefficient3(-2.23946714486189)
53
+ clg_coil.setTotalCoolingCapacityCoefficient4(0.139995928440879)
54
+ clg_coil.setTotalCoolingCapacityCoefficient5(0.102660179888915)
55
+ clg_coil.setSensibleCoolingCapacityCoefficient1(6.0019444814887)
56
+ clg_coil.setSensibleCoolingCapacityCoefficient2(22.6300677244073)
57
+ clg_coil.setSensibleCoolingCapacityCoefficient3(-26.7960783730934)
58
+ clg_coil.setSensibleCoolingCapacityCoefficient4(-1.72374720346819)
59
+ clg_coil.setSensibleCoolingCapacityCoefficient5(0.490644802367817)
60
+ clg_coil.setSensibleCoolingCapacityCoefficient6(0.0693119353468141)
61
+ clg_coil.setCoolingPowerConsumptionCoefficient1(-5.67775976415698)
62
+ clg_coil.setCoolingPowerConsumptionCoefficient2(0.438988156976704)
63
+ clg_coil.setCoolingPowerConsumptionCoefficient3(5.845277342193)
64
+ clg_coil.setCoolingPowerConsumptionCoefficient4(0.141605667000125)
65
+ clg_coil.setCoolingPowerConsumptionCoefficient5(-0.168727936032429)
66
+ else
67
+ if model.getCurveByName('Water to Air Heat Pump Total Cooling Capacity Curve').is_initialized
68
+ total_cooling_capacity_curve = model.getCurveByName('Water to Air Heat Pump Total Cooling Capacity Curve').get
69
+ total_cooling_capacity_curve = total_cooling_capacity_curve.to_CurveQuadLinear.get
70
+ else
71
+ total_cooling_capacity_curve = OpenStudio::Model::CurveQuadLinear.new(model)
72
+ total_cooling_capacity_curve.setName('Water to Air Heat Pump Total Cooling Capacity Curve')
73
+ total_cooling_capacity_curve.setCoefficient1Constant(-4.30266987344639)
74
+ total_cooling_capacity_curve.setCoefficient2w(7.18536990534372)
75
+ total_cooling_capacity_curve.setCoefficient3x(-2.23946714486189)
76
+ total_cooling_capacity_curve.setCoefficient4y(0.139995928440879)
77
+ total_cooling_capacity_curve.setCoefficient5z(0.102660179888915)
78
+ total_cooling_capacity_curve.setMinimumValueofw(-100)
79
+ total_cooling_capacity_curve.setMaximumValueofw(100)
80
+ total_cooling_capacity_curve.setMinimumValueofx(-100)
81
+ total_cooling_capacity_curve.setMaximumValueofx(100)
82
+ total_cooling_capacity_curve.setMinimumValueofy(0)
83
+ total_cooling_capacity_curve.setMaximumValueofy(100)
84
+ total_cooling_capacity_curve.setMinimumValueofz(0)
85
+ total_cooling_capacity_curve.setMaximumValueofz(100)
86
+ end
87
+ clg_coil.setTotalCoolingCapacityCurve(total_cooling_capacity_curve)
88
+
89
+ if model.getCurveByName('Water to Air Heat Pump Sensible Cooling Capacity Curve').is_initialized
90
+ sensible_cooling_capacity_curve = model.getCurveByName('Water to Air Heat Pump Sensible Cooling Capacity Curve').get
91
+ sensible_cooling_capacity_curve = sensible_cooling_capacity_curve.to_CurveQuintLinear.get
92
+ else
93
+ sensible_cooling_capacity_curve = OpenStudio::Model::CurveQuintLinear.new(model)
94
+ sensible_cooling_capacity_curve.setName('Water to Air Heat Pump Sensible Cooling Capacity Curve')
95
+ sensible_cooling_capacity_curve.setCoefficient1Constant(6.0019444814887)
96
+ sensible_cooling_capacity_curve.setCoefficient2v(22.6300677244073)
97
+ sensible_cooling_capacity_curve.setCoefficient3w(-26.7960783730934)
98
+ sensible_cooling_capacity_curve.setCoefficient4x(-1.72374720346819)
99
+ sensible_cooling_capacity_curve.setCoefficient5y(0.490644802367817)
100
+ sensible_cooling_capacity_curve.setCoefficient6z(0.0693119353468141)
101
+ sensible_cooling_capacity_curve.setMinimumValueofw(-100)
102
+ sensible_cooling_capacity_curve.setMaximumValueofw(100)
103
+ sensible_cooling_capacity_curve.setMinimumValueofx(-100)
104
+ sensible_cooling_capacity_curve.setMaximumValueofx(100)
105
+ sensible_cooling_capacity_curve.setMinimumValueofy(0)
106
+ sensible_cooling_capacity_curve.setMaximumValueofy(100)
107
+ sensible_cooling_capacity_curve.setMinimumValueofz(0)
108
+ sensible_cooling_capacity_curve.setMaximumValueofz(100)
109
+ end
110
+ clg_coil.setSensibleCoolingCapacityCurve(sensible_cooling_capacity_curve)
111
+
112
+ if model.getCurveByName('Water to Air Heat Pump Cooling Power Consumption Curve').is_initialized
113
+ cooling_power_consumption_curve = model.getCurveByName('Water to Air Heat Pump Cooling Power Consumption Curve').get
114
+ cooling_power_consumption_curve = cooling_power_consumption_curve.to_CurveQuadLinear.get
115
+ else
116
+ cooling_power_consumption_curve = OpenStudio::Model::CurveQuadLinear.new(model)
117
+ cooling_power_consumption_curve.setName('Water to Air Heat Pump Cooling Power Consumption Curve')
118
+ cooling_power_consumption_curve.setCoefficient1Constant(-5.67775976415698)
119
+ cooling_power_consumption_curve.setCoefficient2w(0.438988156976704)
120
+ cooling_power_consumption_curve.setCoefficient3x(5.845277342193)
121
+ cooling_power_consumption_curve.setCoefficient4y(0.141605667000125)
122
+ cooling_power_consumption_curve.setCoefficient5z(-0.168727936032429)
123
+ cooling_power_consumption_curve.setMinimumValueofw(-100)
124
+ cooling_power_consumption_curve.setMaximumValueofw(100)
125
+ cooling_power_consumption_curve.setMinimumValueofx(-100)
126
+ cooling_power_consumption_curve.setMaximumValueofx(100)
127
+ cooling_power_consumption_curve.setMinimumValueofy(0)
128
+ cooling_power_consumption_curve.setMaximumValueofy(100)
129
+ cooling_power_consumption_curve.setMinimumValueofz(0)
130
+ cooling_power_consumption_curve.setMaximumValueofz(100)
131
+ end
132
+ clg_coil.setCoolingPowerConsumptionCurve(cooling_power_consumption_curve)
133
+ end
134
+
135
+ # part load fraction correlation curve added as a required curve in OS v3.7.0
136
+ if model.version > OpenStudio::VersionString.new('3.6.1')
137
+ if model.getCurveByName('Water to Air Heat Pump Part Load Fraction Correlation Curve').is_initialized
138
+ part_load_correlation_curve = model.getCurveByName('Water to Air Heat Pump Part Load Fraction Correlation Curve').get
139
+ part_load_correlation_curve = part_load_correlation_curve.to_CurveLinear.get
140
+ else
141
+ part_load_correlation_curve = OpenStudio::Model::CurveLinear.new(model)
142
+ part_load_correlation_curve.setName('Water to Air Heat Pump Part Load Fraction Correlation Curve')
143
+ part_load_correlation_curve.setCoefficient1Constant(0.833746458696111)
144
+ part_load_correlation_curve.setCoefficient2x(0.166253541303889)
145
+ part_load_correlation_curve.setMinimumValueofx(0)
146
+ part_load_correlation_curve.setMaximumValueofx(1)
147
+ part_load_correlation_curve.setMinimumCurveOutput(0)
148
+ part_load_correlation_curve.setMaximumCurveOutput(1)
149
+ end
150
+ clg_coil.setPartLoadFractionCorrelationCurve(part_load_correlation_curve)
151
+ end
152
+ end
153
+
154
+ return clg_coil
155
+ end
156
+
157
+ # Return the capacity in W of a CoilCoolingWaterToAirHeatPumpEquationFit
158
+ #
159
+ # @param coil_cooling_water_to_air_heat_pump [OpenStudio::Model::CoilCoolingWaterToAirHeatPumpEquationFit] coil cooling object
160
+ # @param multiplier [Double] zone multiplier, if applicable
161
+ # @return [Double] capacity in W
162
+ def self.coil_cooling_water_to_air_heat_pump_get_capacity(coil_cooling_water_to_air_heat_pump, multiplier: nil)
163
+ capacity_w = nil
164
+ if coil_cooling_water_to_air_heat_pump.ratedTotalCoolingCapacity.is_initialized
165
+ capacity_w = coil_cooling_water_to_air_heat_pump.ratedTotalCoolingCapacity.get
166
+ elsif coil_cooling_water_to_air_heat_pump.autosizedRatedTotalCoolingCapacity.is_initialized
167
+ capacity_w = coil_cooling_water_to_air_heat_pump.autosizedRatedTotalCoolingCapacity.get
168
+ else
169
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_cooling_water_to_air_heat_pump_equation_fit', "For #{coil_cooling_water_to_air_heat_pump.name} capacity is not available.")
170
+ return capacity_w
171
+ end
172
+
173
+ if !multiplier.nil? && multiplier > 1
174
+ total_cap = capacity_w
175
+ capacity_w /= multiplier
176
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_cooling_water_to_air_heat_pump', "For #{coil_cooling_dx_twcoil_cooling_water_to_air_heat_pumpo_speed.name}, total capacity of #{OpenStudio.convert(total_cap, 'W', 'kBtu/hr').get.round(2)}kBTU/hr was divided by the zone multiplier of #{multiplier} to give #{capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get.round(2)}kBTU/hr.")
177
+ end
178
+
179
+ return capacity_w
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,220 @@
1
+ module OpenstudioStandards
2
+ # The HVAC module provides methods create, modify, and get information about HVAC systems in the model
3
+ module HVAC
4
+ # @!group Component:Coil
5
+ # Methods to create, modify, and get information about HVAC coil objects
6
+
7
+ # Create CoilHeatingDXSingleSpeed object
8
+ # Enters in default curves for coil by type of coil
9
+ #
10
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
11
+ # @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
12
+ # @param name [String] the name of the system, or nil in which case it will be defaulted
13
+ # @param schedule [String] name of the availability schedule, or [<OpenStudio::Model::Schedule>] Schedule object, or nil in which case default to always on
14
+ # @param type [String] the type of single speed DX coil to reference the correct curve set
15
+ # @param cop [Double] rated heating coefficient of performance
16
+ # @param defrost_strategy [String] type of defrost strategy. options are reverse-cycle or resistive
17
+ # @return [OpenStudio::Model::CoilHeatingDXSingleSpeed] the DX heating coil
18
+ def self.create_coil_heating_dx_single_speed(model,
19
+ air_loop_node: nil,
20
+ name: '1spd DX Htg Coil',
21
+ schedule: nil,
22
+ type: nil,
23
+ cop: 3.3,
24
+ defrost_strategy: 'ReverseCycle')
25
+ htg_coil = OpenStudio::Model::CoilHeatingDXSingleSpeed.new(model)
26
+
27
+ # add to air loop if specified
28
+ htg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
29
+
30
+ # set coil name
31
+ htg_coil.setName(name)
32
+
33
+ # set coil availability schedule
34
+ if schedule.nil?
35
+ # default always on
36
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
37
+ elsif schedule.instance_of?(String)
38
+ coil_availability_schedule = model_add_schedule(model, schedule)
39
+
40
+ if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
41
+ coil_availability_schedule = model.alwaysOffDiscreteSchedule
42
+ elsif coil_availability_schedule.nil?
43
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
44
+ end
45
+ elsif !schedule.to_Schedule.empty?
46
+ coil_availability_schedule = schedule
47
+ end
48
+ htg_coil.setAvailabilitySchedule(coil_availability_schedule)
49
+
50
+ # set coil cop
51
+ if cop.nil?
52
+ htg_coil.setRatedCOP(3.3)
53
+ else
54
+ htg_coil.setRatedCOP(cop)
55
+ end
56
+
57
+ htg_cap_f_of_temp = nil
58
+ htg_cap_f_of_flow = nil
59
+ htg_energy_input_ratio_f_of_temp = nil
60
+ htg_energy_input_ratio_f_of_flow = nil
61
+ htg_part_load_fraction = nil
62
+ def_eir_f_of_temp = nil
63
+
64
+ # curve sets
65
+ case type
66
+ when 'OS default'
67
+ # use OS defaults
68
+ when 'Residential Central Air Source HP'
69
+ # Performance curves
70
+ # These coefficients are in IP UNITS
71
+ heat_cap_ft_coeffs_ip = [0.566333415, -0.000744164, -0.0000103, 0.009414634, 0.0000506, -0.00000675]
72
+ heat_eir_ft_coeffs_ip = [0.718398423, 0.003498178, 0.000142202, -0.005724331, 0.00014085, -0.000215321]
73
+ heat_cap_fflow_coeffs = [0.694045465, 0.474207981, -0.168253446]
74
+ heat_eir_fflow_coeffs = [2.185418751, -1.942827919, 0.757409168]
75
+ heat_plf_fplr_coeffs = [0.8, 0.2, 0]
76
+ defrost_eir_coeffs = [0.1528, 0, 0, 0, 0, 0]
77
+
78
+ # Convert coefficients from IP to SI
79
+ heat_cap_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(heat_cap_ft_coeffs_ip)
80
+ heat_eir_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(heat_eir_ft_coeffs_ip)
81
+
82
+ htg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_cap_ft_coeffs_si, name: 'Heat-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
83
+ htg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_cap_fflow_coeffs, name: 'Heat-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
84
+ htg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_eir_ft_coeffs_si, name: 'Heat-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
85
+ htg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_eir_fflow_coeffs, name: 'Heat-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
86
+ htg_part_load_fraction = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_plf_fplr_coeffs, name: 'Heat-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
87
+
88
+ # Heating defrost curve for reverse cycle
89
+ def_eir_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, defrost_eir_coeffs, name: 'DefrostEIR', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
90
+ when 'Residential Minisplit HP'
91
+ # Performance curves
92
+ # These coefficients are in SI UNITS
93
+ heat_cap_ft_coeffs_si = [1.14715889038462, -0.010386676170938, 0, 0.00865384615384615, 0, 0]
94
+ heat_eir_ft_coeffs_si = [0.9999941697687026, 0.004684593830254383, 5.901286675833333e-05, -0.0028624467783091973, 1.3041120194135802e-05, -0.00016172918478765433]
95
+ heat_cap_fflow_coeffs = [1, 0, 0]
96
+ heat_eir_fflow_coeffs = [1, 0, 0]
97
+ heat_plf_fplr_coeffs = [0.89, 0.11, 0]
98
+ defrost_eir_coeffs = [0.1528, 0, 0, 0, 0, 0]
99
+
100
+ htg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_cap_ft_coeffs_si, name: 'Heat-Cap-fT', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
101
+ htg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_cap_fflow_coeffs, name: 'Heat-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
102
+ htg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, heat_eir_ft_coeffs_si, name: 'Heat-EIR-fT', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
103
+ htg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_eir_fflow_coeffs, name: 'Heat-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
104
+ htg_part_load_fraction = OpenstudioStandards::HVAC.create_curve_quadratic(model, heat_plf_fplr_coeffs, name: 'Heat-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0.6, max_out: 1, is_dimensionless: true)
105
+
106
+ # Heating defrost curve for reverse cycle
107
+ def_eir_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, defrost_eir_coeffs, name: 'Defrost EIR', min_x: -100, max_x: 100, min_y: -100, max_y: 100)
108
+ else # default curve set
109
+ htg_cap_f_of_temp = OpenStudio::Model::CurveCubic.new(model)
110
+ htg_cap_f_of_temp.setName("#{htg_coil.name} Htg Cap Func of Temp Curve")
111
+ htg_cap_f_of_temp.setCoefficient1Constant(0.758746)
112
+ htg_cap_f_of_temp.setCoefficient2x(0.027626)
113
+ htg_cap_f_of_temp.setCoefficient3xPOW2(0.000148716)
114
+ htg_cap_f_of_temp.setCoefficient4xPOW3(0.0000034992)
115
+ htg_cap_f_of_temp.setMinimumValueofx(-20.0)
116
+ htg_cap_f_of_temp.setMaximumValueofx(20.0)
117
+
118
+ htg_cap_f_of_flow = OpenStudio::Model::CurveCubic.new(model)
119
+ htg_cap_f_of_flow.setName("#{htg_coil.name} Htg Cap Func of Flow Frac Curve")
120
+ htg_cap_f_of_flow.setCoefficient1Constant(0.84)
121
+ htg_cap_f_of_flow.setCoefficient2x(0.16)
122
+ htg_cap_f_of_flow.setCoefficient3xPOW2(0.0)
123
+ htg_cap_f_of_flow.setCoefficient4xPOW3(0.0)
124
+ htg_cap_f_of_flow.setMinimumValueofx(0.5)
125
+ htg_cap_f_of_flow.setMaximumValueofx(1.5)
126
+
127
+ htg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveCubic.new(model)
128
+ htg_energy_input_ratio_f_of_temp.setName("#{htg_coil.name} EIR Func of Temp Curve")
129
+ htg_energy_input_ratio_f_of_temp.setCoefficient1Constant(1.19248)
130
+ htg_energy_input_ratio_f_of_temp.setCoefficient2x(-0.0300438)
131
+ htg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(0.00103745)
132
+ htg_energy_input_ratio_f_of_temp.setCoefficient4xPOW3(-0.000023328)
133
+ htg_energy_input_ratio_f_of_temp.setMinimumValueofx(-20.0)
134
+ htg_energy_input_ratio_f_of_temp.setMaximumValueofx(20.0)
135
+
136
+ htg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
137
+ htg_energy_input_ratio_f_of_flow.setName("#{htg_coil.name} EIR Func of Flow Frac Curve")
138
+ htg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.3824)
139
+ htg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.4336)
140
+ htg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0512)
141
+ htg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.0)
142
+ htg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.0)
143
+
144
+ htg_part_load_fraction = OpenStudio::Model::CurveQuadratic.new(model)
145
+ htg_part_load_fraction.setName("#{htg_coil.name} PLR Correlation Curve")
146
+ htg_part_load_fraction.setCoefficient1Constant(0.85)
147
+ htg_part_load_fraction.setCoefficient2x(0.15)
148
+ htg_part_load_fraction.setCoefficient3xPOW2(0.0)
149
+ htg_part_load_fraction.setMinimumValueofx(0.0)
150
+ htg_part_load_fraction.setMaximumValueofx(1.0)
151
+
152
+ unless defrost_strategy == 'Resistive'
153
+ def_eir_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
154
+ def_eir_f_of_temp.setName("#{htg_coil.name} Defrost EIR Func of Temp Curve")
155
+ def_eir_f_of_temp.setCoefficient1Constant(0.297145)
156
+ def_eir_f_of_temp.setCoefficient2x(0.0430933)
157
+ def_eir_f_of_temp.setCoefficient3xPOW2(-0.000748766)
158
+ def_eir_f_of_temp.setCoefficient4y(0.00597727)
159
+ def_eir_f_of_temp.setCoefficient5yPOW2(0.000482112)
160
+ def_eir_f_of_temp.setCoefficient6xTIMESY(-0.000956448)
161
+ def_eir_f_of_temp.setMinimumValueofx(-23.33333)
162
+ def_eir_f_of_temp.setMaximumValueofx(29.44444)
163
+ def_eir_f_of_temp.setMinimumValueofy(-23.33333)
164
+ def_eir_f_of_temp.setMaximumValueofy(29.44444)
165
+ end
166
+ end
167
+
168
+ if type == 'PSZ-AC'
169
+ htg_coil.setMinimumOutdoorDryBulbTemperatureforCompressorOperation(-12.2)
170
+ htg_coil.setMaximumOutdoorDryBulbTemperatureforDefrostOperation(1.67)
171
+ htg_coil.setCrankcaseHeaterCapacity(50.0)
172
+ htg_coil.setMaximumOutdoorDryBulbTemperatureforCrankcaseHeaterOperation(4.4)
173
+ htg_coil.setDefrostControl('OnDemand')
174
+
175
+ def_eir_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
176
+ def_eir_f_of_temp.setName("#{htg_coil.name} Defrost EIR Func of Temp Curve")
177
+ def_eir_f_of_temp.setCoefficient1Constant(0.297145)
178
+ def_eir_f_of_temp.setCoefficient2x(0.0430933)
179
+ def_eir_f_of_temp.setCoefficient3xPOW2(-0.000748766)
180
+ def_eir_f_of_temp.setCoefficient4y(0.00597727)
181
+ def_eir_f_of_temp.setCoefficient5yPOW2(0.000482112)
182
+ def_eir_f_of_temp.setCoefficient6xTIMESY(-0.000956448)
183
+ def_eir_f_of_temp.setMinimumValueofx(-23.33333)
184
+ def_eir_f_of_temp.setMaximumValueofx(29.44444)
185
+ def_eir_f_of_temp.setMinimumValueofy(-23.33333)
186
+ def_eir_f_of_temp.setMaximumValueofy(29.44444)
187
+ end
188
+
189
+ htg_coil.setTotalHeatingCapacityFunctionofTemperatureCurve(htg_cap_f_of_temp) unless htg_cap_f_of_temp.nil?
190
+ htg_coil.setTotalHeatingCapacityFunctionofFlowFractionCurve(htg_cap_f_of_flow) unless htg_cap_f_of_flow.nil?
191
+ htg_coil.setEnergyInputRatioFunctionofTemperatureCurve(htg_energy_input_ratio_f_of_temp) unless htg_energy_input_ratio_f_of_temp.nil?
192
+ htg_coil.setEnergyInputRatioFunctionofFlowFractionCurve(htg_energy_input_ratio_f_of_flow) unless htg_energy_input_ratio_f_of_flow.nil?
193
+ htg_coil.setPartLoadFractionCorrelationCurve(htg_part_load_fraction) unless htg_part_load_fraction.nil?
194
+ htg_coil.setDefrostEnergyInputRatioFunctionofTemperatureCurve(def_eir_f_of_temp) unless def_eir_f_of_temp.nil?
195
+ htg_coil.setDefrostStrategy(defrost_strategy)
196
+ htg_coil.setDefrostControl('OnDemand')
197
+
198
+ return htg_coil
199
+ end
200
+
201
+ # Return the capacity in W of a CoilHeatingDXSingleSpeed
202
+ #
203
+ # @param coil_heating_dx_single_speed [OpenStudio::Model::CoilHeatingDXSingleSpeed] coil heating dx single speed object
204
+ # @param multiplier [Double] zone multiplier, if applicable
205
+ # @return [Double] capacity in W
206
+ def self.coil_heating_dx_single_speed_get_capacity(coil_heating_dx_single_speed, multiplier: 1.0)
207
+ capacity_w = nil
208
+ if coil_heating_dx_single_speed.ratedTotalHeatingCapacity.is_initialized
209
+ capacity_w = coil_heating_dx_single_speed.ratedTotalHeatingCapacity.get
210
+ elsif coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.is_initialized
211
+ capacity_w = coil_heating_dx_single_speed.autosizedRatedTotalHeatingCapacity.get
212
+ else
213
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_heating_dx_single_speed', "For #{coil_heating_dx_single_speed.name} capacity is not available.")
214
+ return capacity_w
215
+ end
216
+
217
+ return capacity_w
218
+ end
219
+ end
220
+ end
@@ -0,0 +1,56 @@
1
+ module OpenstudioStandards
2
+ # The HVAC module provides methods create, modify, and get information about HVAC systems in the model
3
+ module HVAC
4
+ # @!group Component:Coil
5
+ # Methods to create, modify, and get information about HVAC coil objects
6
+
7
+ # Create CoilHeatingElectric object
8
+ #
9
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
10
+ # @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
11
+ # @param name [String] the name of the system, or nil in which case it will be defaulted
12
+ # @param schedule [String] name of the availability schedule, or [<OpenStudio::Model::Schedule>] Schedule object, or nil in which case default to always on
13
+ # @param nominal_capacity [Double] rated nominal capacity
14
+ # @param efficiency [Double] rated heating efficiency
15
+ # @return [OpenStudio::Model::CoilHeatingElectric] the electric heating coil
16
+ def self.create_coil_heating_electric(model,
17
+ air_loop_node: nil,
18
+ name: 'Electric Htg Coil',
19
+ schedule: nil,
20
+ nominal_capacity: nil,
21
+ efficiency: 1.0)
22
+ htg_coil = OpenStudio::Model::CoilHeatingElectric.new(model)
23
+
24
+ # add to air loop if specified
25
+ htg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
26
+
27
+ # set coil name
28
+ htg_coil.setName(name)
29
+
30
+ # set coil availability schedule
31
+ if schedule.nil?
32
+ # default always on
33
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
34
+ elsif schedule.instance_of?(String)
35
+ coil_availability_schedule = model_add_schedule(model, schedule)
36
+
37
+ if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
38
+ coil_availability_schedule = model.alwaysOffDiscreteSchedule
39
+ elsif coil_availability_schedule.nil?
40
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
41
+ end
42
+ elsif !schedule.to_Schedule.empty?
43
+ coil_availability_schedule = schedule
44
+ end
45
+ htg_coil.setAvailabilitySchedule(coil_availability_schedule)
46
+
47
+ # set capacity
48
+ htg_coil.setNominalCapacity(nominal_capacity) unless nominal_capacity.nil?
49
+
50
+ # set efficiency
51
+ htg_coil.setEfficiency(efficiency) unless efficiency.nil?
52
+
53
+ return htg_coil
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,90 @@
1
+ module OpenstudioStandards
2
+ # The HVAC module provides methods create, modify, and get information about HVAC systems in the model
3
+ module HVAC
4
+ # @!group Component:Coil
5
+ # Methods to create, modify, and get information about HVAC coil objects
6
+
7
+ # Create CoilHeatingGas object
8
+ #
9
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
10
+ # @param air_loop_node [<OpenStudio::Model::Node>] the coil will be placed on this node of the air loop
11
+ # @param name [String] the name of the system, or nil in which case it will be defaulted
12
+ # @param schedule [String] name of the availability schedule, or [<OpenStudio::Model::Schedule>] Schedule object, or nil in which case default to always on
13
+ # @param nominal_capacity [Double] rated nominal capacity
14
+ # @param efficiency [Double] rated heating efficiency
15
+ # @return [OpenStudio::Model::CoilHeatingGas] the gas heating coil
16
+ def self.create_coil_heating_gas(model,
17
+ air_loop_node: nil,
18
+ name: 'Gas Htg Coil',
19
+ schedule: nil,
20
+ nominal_capacity: nil,
21
+ efficiency: 0.80)
22
+ htg_coil = OpenStudio::Model::CoilHeatingGas.new(model)
23
+
24
+ # add to air loop if specified
25
+ htg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
26
+
27
+ # set coil name
28
+ htg_coil.setName(name)
29
+
30
+ # set coil availability schedule
31
+ if schedule.nil?
32
+ # default always on
33
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
34
+ elsif schedule.instance_of?(String)
35
+ coil_availability_schedule = model_add_schedule(model, schedule)
36
+
37
+ if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
38
+ coil_availability_schedule = model.alwaysOffDiscreteSchedule
39
+ elsif coil_availability_schedule.nil?
40
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
41
+ end
42
+ elsif !schedule.to_Schedule.empty?
43
+ coil_availability_schedule = schedule
44
+ end
45
+ htg_coil.setAvailabilitySchedule(coil_availability_schedule)
46
+
47
+ # set capacity
48
+ htg_coil.setNominalCapacity(nominal_capacity) unless nominal_capacity.nil?
49
+
50
+ # set efficiency
51
+ htg_coil.setGasBurnerEfficiency(efficiency)
52
+
53
+ # defaults
54
+ if model.version < OpenStudio::VersionString.new('3.7.0')
55
+ htg_coil.setParasiticElectricLoad(0.0)
56
+ htg_coil.setParasiticGasLoad(0.0)
57
+ else
58
+ htg_coil.setOnCycleParasiticElectricLoad(0.0)
59
+ htg_coil.setOffCycleParasiticGasLoad(0.0)
60
+ end
61
+
62
+ return htg_coil
63
+ end
64
+
65
+ # Return the capacity in W of a CoilHeatingGas
66
+ #
67
+ # @param coil_heating_gas [OpenStudio::Model::CoilHeatingGas] coil heating gas object
68
+ # @param multiplier [Double] zone multiplier, if applicable
69
+ # @return [Double] capacity in W
70
+ def self.coil_heating_gas_get_capacity(coil_heating_gas, multiplier: nil)
71
+ capacity_w = nil
72
+ if coil_heating_gas.nominalCapacity.is_initialized
73
+ capacity_w = coil_heating_gas.nominalCapacity.get
74
+ elsif coil_heating_gas.autosizedNominalCapacity.is_initialized
75
+ capacity_w = coil_heating_gas.autosizedNominalCapacity.get
76
+ else
77
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_heating_gas', "For #{coil_heating_gas.name} capacity is not available.")
78
+ return capacity_w
79
+ end
80
+
81
+ if !multiplier.nil? && multiplier > 1
82
+ total_cap = capacity_w
83
+ capacity_w /= multiplier
84
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_heating_gas', "For #{coil_heating_gas.name}, total capacity of #{OpenStudio.convert(total_cap, 'W', 'kBtu/hr').get.round(2)}kBTU/hr was divided by the zone multiplier of #{multiplier} to give #{capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get.round(2)}kBTU/hr.")
85
+ end
86
+
87
+ return capacity_w
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,33 @@
1
+ module OpenstudioStandards
2
+ # The HVAC module provides methods create, modify, and get information about HVAC systems in the model
3
+ module HVAC
4
+ # @!group Component:Coil
5
+ # Methods to create, modify, and get information about HVAC coil objects
6
+
7
+
8
+ # Return the capacity in W of a CoilHeatingGasMultiStage
9
+ #
10
+ # @param coil_heating_gas_multi_stage [OpenStudio::Model::CoilHeatingGasMultiStage] coil heating gas multi stage object
11
+ # @return [Double] capacity in W
12
+ def self.coil_heating_gas_multi_stage_get_capacity(coil_heating_gas_multi_stage)
13
+ capacity_w = nil
14
+ htg_stages = coil_heating_gas_multi_stage.stages
15
+ if htg_stages.last.nominalCapacity.is_initialized
16
+ capacity_w = htg_stages.last.nominalCapacity.get
17
+ elsif (htg_stages.size == 1) && coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.is_initialized
18
+ capacity_w = coil_heating_gas_multi_stage.stages[0].autosizedNominalCapacity.get
19
+ elsif (htg_stages.size == 2) && coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.is_initialized
20
+ capacity_w = coil_heating_gas_multi_stage.stages[1].autosizedNominalCapacity.get
21
+ elsif (htg_stages.size == 3) && coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.is_initialized
22
+ capacity_w = coil_heating_gas_multi_stage.stages[2].autosizedNominalCapacity.get
23
+ elsif (htg_stages.size == 4) && coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.is_initialized
24
+ capacity_w = coil_heating_gas_multi_stage.stages[3].autosizedNominalCapacity.get
25
+ else
26
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_heating_gas_multistage', "For #{coil_heating_gas_multi_stage.name} capacity is not available.")
27
+ return capacity_w
28
+ end
29
+
30
+ return capacity_w
31
+ end
32
+ end
33
+ end