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,300 @@
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 CoilCoolingDXSingleSpeed 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 cooling coefficient of performance
16
+ # @return [OpenStudio::Model::CoilCoolingDXTwoSpeed] the DX cooling coil
17
+ def self.create_coil_cooling_dx_single_speed(model,
18
+ air_loop_node: nil,
19
+ name: '1spd DX Clg Coil',
20
+ schedule: nil,
21
+ type: nil,
22
+ cop: nil)
23
+ clg_coil = OpenStudio::Model::CoilCoolingDXSingleSpeed.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
+ # set coil availability schedule
32
+ if schedule.nil?
33
+ # default always on
34
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
35
+ elsif schedule.instance_of?(String)
36
+ coil_availability_schedule = model_add_schedule(model, schedule)
37
+
38
+ if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
39
+ coil_availability_schedule = model.alwaysOffDiscreteSchedule
40
+ elsif coil_availability_schedule.nil?
41
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
42
+ end
43
+ elsif !schedule.to_Schedule.empty?
44
+ coil_availability_schedule = schedule
45
+ end
46
+ clg_coil.setAvailabilitySchedule(coil_availability_schedule)
47
+
48
+ # set coil cop
49
+ clg_coil.setRatedCOP(cop) unless cop.nil?
50
+
51
+ clg_cap_f_of_temp = nil
52
+ clg_cap_f_of_flow = nil
53
+ clg_energy_input_ratio_f_of_temp = nil
54
+ clg_energy_input_ratio_f_of_flow = nil
55
+ clg_part_load_ratio = nil
56
+
57
+ # curve sets
58
+ case type
59
+ when 'OS default'
60
+ # use OS defaults
61
+
62
+ when 'Heat Pump'
63
+ # "PSZ-AC_Unitary_PackagecoolCapFT"
64
+ clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
65
+ clg_cap_f_of_temp.setCoefficient1Constant(0.766956)
66
+ clg_cap_f_of_temp.setCoefficient2x(0.0107756)
67
+ clg_cap_f_of_temp.setCoefficient3xPOW2(-0.0000414703)
68
+ clg_cap_f_of_temp.setCoefficient4y(0.00134961)
69
+ clg_cap_f_of_temp.setCoefficient5yPOW2(-0.000261144)
70
+ clg_cap_f_of_temp.setCoefficient6xTIMESY(0.000457488)
71
+ clg_cap_f_of_temp.setMinimumValueofx(12.78)
72
+ clg_cap_f_of_temp.setMaximumValueofx(23.89)
73
+ clg_cap_f_of_temp.setMinimumValueofy(21.1)
74
+ clg_cap_f_of_temp.setMaximumValueofy(46.1)
75
+
76
+ clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
77
+ clg_cap_f_of_flow.setCoefficient1Constant(0.8)
78
+ clg_cap_f_of_flow.setCoefficient2x(0.2)
79
+ clg_cap_f_of_flow.setCoefficient3xPOW2(0.0)
80
+ clg_cap_f_of_flow.setMinimumValueofx(0.5)
81
+ clg_cap_f_of_flow.setMaximumValueofx(1.5)
82
+
83
+ clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
84
+ clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(0.297145)
85
+ clg_energy_input_ratio_f_of_temp.setCoefficient2x(0.0430933)
86
+ clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(-0.000748766)
87
+ clg_energy_input_ratio_f_of_temp.setCoefficient4y(0.00597727)
88
+ clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.000482112)
89
+ clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.000956448)
90
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofx(12.78)
91
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofx(23.89)
92
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofy(21.1)
93
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofy(46.1)
94
+
95
+ clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
96
+ clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.156)
97
+ clg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.1816)
98
+ clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0256)
99
+ clg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.5)
100
+ clg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.5)
101
+
102
+ clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
103
+ clg_part_load_ratio.setCoefficient1Constant(0.85)
104
+ clg_part_load_ratio.setCoefficient2x(0.15)
105
+ clg_part_load_ratio.setCoefficient3xPOW2(0.0)
106
+ clg_part_load_ratio.setMinimumValueofx(0.0)
107
+ clg_part_load_ratio.setMaximumValueofx(1.0)
108
+
109
+ when 'PSZ-AC'
110
+ # Defaults to "DOE Ref DX Clg Coil Cool-Cap-fT"
111
+ clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
112
+ clg_cap_f_of_temp.setCoefficient1Constant(0.9712123)
113
+ clg_cap_f_of_temp.setCoefficient2x(-0.015275502)
114
+ clg_cap_f_of_temp.setCoefficient3xPOW2(0.0014434524)
115
+ clg_cap_f_of_temp.setCoefficient4y(-0.00039321)
116
+ clg_cap_f_of_temp.setCoefficient5yPOW2(-0.0000068364)
117
+ clg_cap_f_of_temp.setCoefficient6xTIMESY(-0.0002905956)
118
+ clg_cap_f_of_temp.setMinimumValueofx(-100.0)
119
+ clg_cap_f_of_temp.setMaximumValueofx(100.0)
120
+ clg_cap_f_of_temp.setMinimumValueofy(-100.0)
121
+ clg_cap_f_of_temp.setMaximumValueofy(100.0)
122
+
123
+ clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
124
+ clg_cap_f_of_flow.setCoefficient1Constant(1.0)
125
+ clg_cap_f_of_flow.setCoefficient2x(0.0)
126
+ clg_cap_f_of_flow.setCoefficient3xPOW2(0.0)
127
+ clg_cap_f_of_flow.setMinimumValueofx(-100.0)
128
+ clg_cap_f_of_flow.setMaximumValueofx(100.0)
129
+
130
+ # "DOE Ref DX Clg Coil Cool-EIR-fT",
131
+ clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
132
+ clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(0.28687133)
133
+ clg_energy_input_ratio_f_of_temp.setCoefficient2x(0.023902164)
134
+ clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(-0.000810648)
135
+ clg_energy_input_ratio_f_of_temp.setCoefficient4y(0.013458546)
136
+ clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.0003389364)
137
+ clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.0004870044)
138
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofx(-100.0)
139
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofx(100.0)
140
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofy(-100.0)
141
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofy(100.0)
142
+
143
+ clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
144
+ clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.0)
145
+ clg_energy_input_ratio_f_of_flow.setCoefficient2x(0.0)
146
+ clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0)
147
+ clg_energy_input_ratio_f_of_flow.setMinimumValueofx(-100.0)
148
+ clg_energy_input_ratio_f_of_flow.setMaximumValueofx(100.0)
149
+
150
+ # "DOE Ref DX Clg Coil Cool-PLF-fPLR"
151
+ clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
152
+ clg_part_load_ratio.setCoefficient1Constant(0.90949556)
153
+ clg_part_load_ratio.setCoefficient2x(0.09864773)
154
+ clg_part_load_ratio.setCoefficient3xPOW2(-0.00819488)
155
+ clg_part_load_ratio.setMinimumValueofx(0.0)
156
+ clg_part_load_ratio.setMaximumValueofx(1.0)
157
+ clg_part_load_ratio.setMinimumCurveOutput(0.7)
158
+ clg_part_load_ratio.setMaximumCurveOutput(1.0)
159
+
160
+ when 'Window AC'
161
+ # Performance curves
162
+ # From Frigidaire 10.7 EER unit in Winkler et. al. Lab Testing of Window ACs (2013)
163
+ # @note These coefficients are in SI UNITS
164
+ cool_cap_ft_coeffs_si = [0.6405, 0.01568, 0.0004531, 0.001615, -0.0001825, 0.00006614]
165
+ cool_eir_ft_coeffs_si = [2.287, -0.1732, 0.004745, 0.01662, 0.000484, -0.001306]
166
+ cool_cap_fflow_coeffs = [0.887, 0.1128, 0]
167
+ cool_eir_fflow_coeffs = [1.763, -0.6081, 0]
168
+ cool_plf_fplr_coeffs = [0.78, 0.22, 0]
169
+
170
+ # Make the curves
171
+ clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'RoomAC-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
172
+ clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'RoomAC-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
173
+ clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'RoomAC-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
174
+ clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'RoomAC-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
175
+ clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'RoomAC-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
176
+
177
+ when 'Residential Central AC'
178
+ # Performance curves
179
+ # These coefficients are in IP UNITS
180
+ cool_cap_ft_coeffs_ip = [3.670270705, -0.098652414, 0.000955906, 0.006552414, -0.0000156, -0.000131877]
181
+ cool_eir_ft_coeffs_ip = [-3.302695861, 0.137871531, -0.001056996, -0.012573945, 0.000214638, -0.000145054]
182
+ cool_cap_fflow_coeffs = [0.718605468, 0.410099989, -0.128705457]
183
+ cool_eir_fflow_coeffs = [1.32299905, -0.477711207, 0.154712157]
184
+ cool_plf_fplr_coeffs = [0.8, 0.2, 0]
185
+
186
+ # Convert coefficients from IP to SI
187
+ cool_cap_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_cap_ft_coeffs_ip)
188
+ cool_eir_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_eir_ft_coeffs_ip)
189
+
190
+ # Make the curves
191
+ clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'AC-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
192
+ clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'AC-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
193
+ clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'AC-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
194
+ clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'AC-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
195
+ clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'AC-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
196
+
197
+ when 'Residential Central ASHP'
198
+ # Performance curves
199
+ # These coefficients are in IP UNITS
200
+ cool_cap_ft_coeffs_ip = [3.68637657, -0.098352478, 0.000956357, 0.005838141, -0.0000127, -0.000131702]
201
+ cool_eir_ft_coeffs_ip = [-3.437356399, 0.136656369, -0.001049231, -0.0079378, 0.000185435, -0.0001441]
202
+ cool_cap_fflow_coeffs = [0.718664047, 0.41797409, -0.136638137]
203
+ cool_eir_fflow_coeffs = [1.143487507, -0.13943972, -0.004047787]
204
+ cool_plf_fplr_coeffs = [0.8, 0.2, 0]
205
+
206
+ # Convert coefficients from IP to SI
207
+ cool_cap_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_cap_ft_coeffs_ip)
208
+ cool_eir_ft_coeffs_si = OpenstudioStandards::HVAC.convert_curve_biquadratic(cool_eir_ft_coeffs_ip)
209
+
210
+ # Make the curves
211
+ clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'Cool-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
212
+ clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'Cool-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
213
+ clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'Cool-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
214
+ clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'Cool-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
215
+ clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'Cool-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
216
+
217
+ else # default curve set, type == 'Split AC' || 'PTAC'
218
+ clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
219
+ clg_cap_f_of_temp.setCoefficient1Constant(0.942587793)
220
+ clg_cap_f_of_temp.setCoefficient2x(0.009543347)
221
+ clg_cap_f_of_temp.setCoefficient3xPOW2(0.00068377)
222
+ clg_cap_f_of_temp.setCoefficient4y(-0.011042676)
223
+ clg_cap_f_of_temp.setCoefficient5yPOW2(0.000005249)
224
+ clg_cap_f_of_temp.setCoefficient6xTIMESY(-0.00000972)
225
+ clg_cap_f_of_temp.setMinimumValueofx(12.77778)
226
+ clg_cap_f_of_temp.setMaximumValueofx(23.88889)
227
+ clg_cap_f_of_temp.setMinimumValueofy(23.88889)
228
+ clg_cap_f_of_temp.setMaximumValueofy(46.11111)
229
+
230
+ clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
231
+ clg_cap_f_of_flow.setCoefficient1Constant(0.8)
232
+ clg_cap_f_of_flow.setCoefficient2x(0.2)
233
+ clg_cap_f_of_flow.setCoefficient3xPOW2(0)
234
+ clg_cap_f_of_flow.setMinimumValueofx(0.5)
235
+ clg_cap_f_of_flow.setMaximumValueofx(1.5)
236
+
237
+ clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
238
+ clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(0.342414409)
239
+ clg_energy_input_ratio_f_of_temp.setCoefficient2x(0.034885008)
240
+ clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(-0.0006237)
241
+ clg_energy_input_ratio_f_of_temp.setCoefficient4y(0.004977216)
242
+ clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.000437951)
243
+ clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.000728028)
244
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofx(12.77778)
245
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofx(23.88889)
246
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofy(23.88889)
247
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofy(46.11111)
248
+
249
+ clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
250
+ clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.1552)
251
+ clg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.1808)
252
+ clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.0256)
253
+ clg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.5)
254
+ clg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.5)
255
+
256
+ clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
257
+ clg_part_load_ratio.setCoefficient1Constant(0.85)
258
+ clg_part_load_ratio.setCoefficient2x(0.15)
259
+ clg_part_load_ratio.setCoefficient3xPOW2(0.0)
260
+ clg_part_load_ratio.setMinimumValueofx(0.0)
261
+ clg_part_load_ratio.setMaximumValueofx(1.0)
262
+ clg_part_load_ratio.setMinimumCurveOutput(0.7)
263
+ clg_part_load_ratio.setMaximumCurveOutput(1.0)
264
+ end
265
+
266
+ clg_coil.setTotalCoolingCapacityFunctionOfTemperatureCurve(clg_cap_f_of_temp) unless clg_cap_f_of_temp.nil?
267
+ clg_coil.setTotalCoolingCapacityFunctionOfFlowFractionCurve(clg_cap_f_of_flow) unless clg_cap_f_of_flow.nil?
268
+ clg_coil.setEnergyInputRatioFunctionOfTemperatureCurve(clg_energy_input_ratio_f_of_temp) unless clg_energy_input_ratio_f_of_temp.nil?
269
+ clg_coil.setEnergyInputRatioFunctionOfFlowFractionCurve(clg_energy_input_ratio_f_of_flow) unless clg_energy_input_ratio_f_of_flow.nil?
270
+ clg_coil.setPartLoadFractionCorrelationCurve(clg_part_load_ratio) unless clg_part_load_ratio.nil?
271
+
272
+ return clg_coil
273
+ end
274
+
275
+ # Return the capacity in W of a CoilCoolingDXSingleSpeed
276
+ #
277
+ # @param coil_cooling_dx_single_speed [OpenStudio::Model::CoilCoolingDXSingleSpeed] coil cooling dx single speed object
278
+ # @param multiplier [Double] zone multiplier, if applicable
279
+ # @return [Double] capacity in W
280
+ def self.coil_cooling_dx_single_speed_get_capacity(coil_cooling_dx_single_speed, multiplier: nil)
281
+ capacity_w = nil
282
+ if coil_cooling_dx_single_speed.ratedTotalCoolingCapacity.is_initialized
283
+ capacity_w = coil_cooling_dx_single_speed.ratedTotalCoolingCapacity.get
284
+ elsif coil_cooling_dx_single_speed.autosizedRatedTotalCoolingCapacity.is_initialized
285
+ capacity_w = coil_cooling_dx_single_speed.autosizedRatedTotalCoolingCapacity.get
286
+ else
287
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_cooling_dx_single_speed', "For #{coil_cooling_dx_single_speed.name} capacity is not available.")
288
+ return capacity_w
289
+ end
290
+
291
+ if !multiplier.nil? && multiplier > 1
292
+ total_cap = capacity_w
293
+ capacity_w /= multiplier
294
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_cooling_dx_single_speed', "For #{coil_cooling_dx_single_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.")
295
+ end
296
+
297
+ return capacity_w
298
+ end
299
+ end
300
+ end
@@ -0,0 +1,187 @@
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 CoilCoolingDXTwoSpeed 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 two speed DX coil to reference the correct curve set
15
+ # @return [OpenStudio::Model::CoilCoolingDXTwoSpeed] the DX cooling coil
16
+ def self.create_coil_cooling_dx_two_speed(model,
17
+ air_loop_node: nil,
18
+ name: '2spd DX Clg Coil',
19
+ schedule: nil,
20
+ type: nil)
21
+ clg_coil = OpenStudio::Model::CoilCoolingDXTwoSpeed.new(model)
22
+
23
+ # add to air loop if specified
24
+ clg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
25
+
26
+ # set coil name
27
+ clg_coil.setName(name)
28
+
29
+ # set coil availability schedule
30
+ if schedule.nil?
31
+ # default always on
32
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
33
+ elsif schedule.instance_of?(String)
34
+ coil_availability_schedule = model_add_schedule(model, schedule)
35
+
36
+ if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
37
+ coil_availability_schedule = model.alwaysOffDiscreteSchedule
38
+ elsif coil_availability_schedule.nil?
39
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
40
+ end
41
+ elsif !schedule.to_Schedule.empty?
42
+ coil_availability_schedule = schedule
43
+ end
44
+ clg_coil.setAvailabilitySchedule(coil_availability_schedule)
45
+
46
+ clg_cap_f_of_temp = nil
47
+ clg_cap_f_of_flow = nil
48
+ clg_energy_input_ratio_f_of_temp = nil
49
+ clg_energy_input_ratio_f_of_flow = nil
50
+ clg_part_load_ratio = nil
51
+ clg_cap_f_of_temp_low_spd = nil
52
+ clg_energy_input_ratio_f_of_temp_low_spd = nil
53
+
54
+ # curve sets
55
+ if type == 'OS default'
56
+ # use OS defaults
57
+ elsif type == 'Residential Minisplit HP'
58
+ # Performance curves
59
+ # These coefficients are in SI units
60
+ cool_cap_ft_coeffs_si = [0.7531983499655835, 0.003618193903031667, 0.0, 0.006574385031351544, -6.87181191015432e-05, 0.0]
61
+ cool_eir_ft_coeffs_si = [-0.06376924779982301, -0.0013360593470367282, 1.413060577993827e-05, 0.019433076486584752, -4.91395947154321e-05, -4.909341249475308e-05]
62
+ cool_cap_fflow_coeffs = [1, 0, 0]
63
+ cool_eir_fflow_coeffs = [1, 0, 0]
64
+ cool_plf_fplr_coeffs = [0.89, 0.11, 0]
65
+
66
+ # Make the curves
67
+ clg_cap_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'Cool-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
68
+ clg_cap_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_cap_fflow_coeffs, name: 'Cool-Cap-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
69
+ clg_energy_input_ratio_f_of_temp = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'Cool-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
70
+ clg_energy_input_ratio_f_of_flow = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_eir_fflow_coeffs, name: 'Cool-EIR-fFF', min_x: 0, max_x: 2, min_out: 0, max_out: 2, is_dimensionless: true)
71
+ clg_part_load_ratio = OpenstudioStandards::HVAC.create_curve_quadratic(model, cool_plf_fplr_coeffs, name: 'Cool-PLF-fPLR', min_x: 0, max_x: 1, min_out: 0, max_out: 1, is_dimensionless: true)
72
+ clg_cap_f_of_temp_low_spd = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_cap_ft_coeffs_si, name: 'Cool-Cap-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
73
+ clg_energy_input_ratio_f_of_temp_low_spd = OpenstudioStandards::HVAC.create_curve_biquadratic(model, cool_eir_ft_coeffs_si, name: 'Cool-EIR-fT', min_x: 0, max_x: 100, min_y: 0, max_y: 100)
74
+ clg_coil.setRatedLowSpeedSensibleHeatRatio(0.73)
75
+ clg_coil.setCondenserType('AirCooled')
76
+ else # default curve set, type == 'PSZ-AC' || 'Split AC' || 'PTAC'
77
+ clg_cap_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
78
+ clg_cap_f_of_temp.setCoefficient1Constant(0.42415)
79
+ clg_cap_f_of_temp.setCoefficient2x(0.04426)
80
+ clg_cap_f_of_temp.setCoefficient3xPOW2(-0.00042)
81
+ clg_cap_f_of_temp.setCoefficient4y(0.00333)
82
+ clg_cap_f_of_temp.setCoefficient5yPOW2(-0.00008)
83
+ clg_cap_f_of_temp.setCoefficient6xTIMESY(-0.00021)
84
+ clg_cap_f_of_temp.setMinimumValueofx(17.0)
85
+ clg_cap_f_of_temp.setMaximumValueofx(22.0)
86
+ clg_cap_f_of_temp.setMinimumValueofy(13.0)
87
+ clg_cap_f_of_temp.setMaximumValueofy(46.0)
88
+
89
+ clg_cap_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
90
+ clg_cap_f_of_flow.setCoefficient1Constant(0.77136)
91
+ clg_cap_f_of_flow.setCoefficient2x(0.34053)
92
+ clg_cap_f_of_flow.setCoefficient3xPOW2(-0.11088)
93
+ clg_cap_f_of_flow.setMinimumValueofx(0.75918)
94
+ clg_cap_f_of_flow.setMaximumValueofx(1.13877)
95
+
96
+ clg_energy_input_ratio_f_of_temp = OpenStudio::Model::CurveBiquadratic.new(model)
97
+ clg_energy_input_ratio_f_of_temp.setCoefficient1Constant(1.23649)
98
+ clg_energy_input_ratio_f_of_temp.setCoefficient2x(-0.02431)
99
+ clg_energy_input_ratio_f_of_temp.setCoefficient3xPOW2(0.00057)
100
+ clg_energy_input_ratio_f_of_temp.setCoefficient4y(-0.01434)
101
+ clg_energy_input_ratio_f_of_temp.setCoefficient5yPOW2(0.00063)
102
+ clg_energy_input_ratio_f_of_temp.setCoefficient6xTIMESY(-0.00038)
103
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofx(17.0)
104
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofx(22.0)
105
+ clg_energy_input_ratio_f_of_temp.setMinimumValueofy(13.0)
106
+ clg_energy_input_ratio_f_of_temp.setMaximumValueofy(46.0)
107
+
108
+ clg_energy_input_ratio_f_of_flow = OpenStudio::Model::CurveQuadratic.new(model)
109
+ clg_energy_input_ratio_f_of_flow.setCoefficient1Constant(1.20550)
110
+ clg_energy_input_ratio_f_of_flow.setCoefficient2x(-0.32953)
111
+ clg_energy_input_ratio_f_of_flow.setCoefficient3xPOW2(0.12308)
112
+ clg_energy_input_ratio_f_of_flow.setMinimumValueofx(0.75918)
113
+ clg_energy_input_ratio_f_of_flow.setMaximumValueofx(1.13877)
114
+
115
+ clg_part_load_ratio = OpenStudio::Model::CurveQuadratic.new(model)
116
+ clg_part_load_ratio.setCoefficient1Constant(0.77100)
117
+ clg_part_load_ratio.setCoefficient2x(0.22900)
118
+ clg_part_load_ratio.setCoefficient3xPOW2(0.0)
119
+ clg_part_load_ratio.setMinimumValueofx(0.0)
120
+ clg_part_load_ratio.setMaximumValueofx(1.0)
121
+
122
+ clg_cap_f_of_temp_low_spd = OpenStudio::Model::CurveBiquadratic.new(model)
123
+ clg_cap_f_of_temp_low_spd.setCoefficient1Constant(0.42415)
124
+ clg_cap_f_of_temp_low_spd.setCoefficient2x(0.04426)
125
+ clg_cap_f_of_temp_low_spd.setCoefficient3xPOW2(-0.00042)
126
+ clg_cap_f_of_temp_low_spd.setCoefficient4y(0.00333)
127
+ clg_cap_f_of_temp_low_spd.setCoefficient5yPOW2(-0.00008)
128
+ clg_cap_f_of_temp_low_spd.setCoefficient6xTIMESY(-0.00021)
129
+ clg_cap_f_of_temp_low_spd.setMinimumValueofx(17.0)
130
+ clg_cap_f_of_temp_low_spd.setMaximumValueofx(22.0)
131
+ clg_cap_f_of_temp_low_spd.setMinimumValueofy(13.0)
132
+ clg_cap_f_of_temp_low_spd.setMaximumValueofy(46.0)
133
+
134
+ clg_energy_input_ratio_f_of_temp_low_spd = OpenStudio::Model::CurveBiquadratic.new(model)
135
+ clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient1Constant(1.23649)
136
+ clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient2x(-0.02431)
137
+ clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient3xPOW2(0.00057)
138
+ clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient4y(-0.01434)
139
+ clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient5yPOW2(0.00063)
140
+ clg_energy_input_ratio_f_of_temp_low_spd.setCoefficient6xTIMESY(-0.00038)
141
+ clg_energy_input_ratio_f_of_temp_low_spd.setMinimumValueofx(17.0)
142
+ clg_energy_input_ratio_f_of_temp_low_spd.setMaximumValueofx(22.0)
143
+ clg_energy_input_ratio_f_of_temp_low_spd.setMinimumValueofy(13.0)
144
+ clg_energy_input_ratio_f_of_temp_low_spd.setMaximumValueofy(46.0)
145
+
146
+ clg_coil.setRatedLowSpeedSensibleHeatRatio(OpenStudio::OptionalDouble.new(0.69))
147
+ clg_coil.setBasinHeaterCapacity(10)
148
+ clg_coil.setBasinHeaterSetpointTemperature(2.0)
149
+ end
150
+
151
+ clg_coil.setTotalCoolingCapacityFunctionOfTemperatureCurve(clg_cap_f_of_temp) unless clg_cap_f_of_temp.nil?
152
+ clg_coil.setTotalCoolingCapacityFunctionOfFlowFractionCurve(clg_cap_f_of_flow) unless clg_cap_f_of_flow.nil?
153
+ clg_coil.setEnergyInputRatioFunctionOfTemperatureCurve(clg_energy_input_ratio_f_of_temp) unless clg_energy_input_ratio_f_of_temp.nil?
154
+ clg_coil.setEnergyInputRatioFunctionOfFlowFractionCurve(clg_energy_input_ratio_f_of_flow) unless clg_energy_input_ratio_f_of_flow.nil?
155
+ clg_coil.setPartLoadFractionCorrelationCurve(clg_part_load_ratio) unless clg_part_load_ratio.nil?
156
+ clg_coil.setLowSpeedTotalCoolingCapacityFunctionOfTemperatureCurve(clg_cap_f_of_temp_low_spd) unless clg_cap_f_of_temp_low_spd.nil?
157
+ clg_coil.setLowSpeedEnergyInputRatioFunctionOfTemperatureCurve(clg_energy_input_ratio_f_of_temp_low_spd) unless clg_energy_input_ratio_f_of_temp_low_spd.nil?
158
+
159
+ return clg_coil
160
+ end
161
+
162
+ # Return the capacity in W of a CoilCoolingDXTwoSpeed
163
+ #
164
+ # @param coil_cooling_dx_two_speed [OpenStudio::Model::CoilCoolingDXTwoSpeed] coil cooling dx two speed object
165
+ # @param multiplier [Double] zone multiplier, if applicable
166
+ # @return [Double] capacity in W
167
+ def self.coil_cooling_dx_two_speed_get_capacity(coil_cooling_dx_two_speed, multiplier: nil)
168
+ capacity_w = nil
169
+ if coil_cooling_dx_two_speed.ratedHighSpeedTotalCoolingCapacity.is_initialized
170
+ capacity_w = coil_cooling_dx_two_speed.ratedHighSpeedTotalCoolingCapacity.get
171
+ elsif coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.is_initialized
172
+ capacity_w = coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.get
173
+ else
174
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.HVAC.coil_cooling_dx_two_speed', "For #{coil_cooling_dx_two_speed.name} capacity is not available.")
175
+ return capacity_w
176
+ end
177
+
178
+ if !multiplier.nil? && multiplier > 1
179
+ total_cap = capacity_w
180
+ capacity_w /= multiplier
181
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HVAC.coil_cooling_dx_two_speed', "For #{coil_cooling_dx_two_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.")
182
+ end
183
+
184
+ return capacity_w
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,80 @@
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 CoilCoolingWater object
8
+ #
9
+ # @param model [OpenStudio::Model::Model] OpenStudio model object
10
+ # @param chilled_water_loop [<OpenStudio::Model::PlantLoop>] the coil will be placed on the demand side of this plant loop
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 coil, 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 design_inlet_water_temperature [Double] design inlet water temperature in degrees Celsius, default is nil
15
+ # @param design_inlet_air_temperature [Double] design inlet air temperature in degrees Celsius, default is nil
16
+ # @param design_outlet_air_temperature [Double] design outlet air temperature in degrees Celsius, default is nil
17
+ # @return [OpenStudio::Model::CoilCoolingWater] the cooling coil
18
+ def self.create_coil_cooling_water(model,
19
+ chilled_water_loop,
20
+ air_loop_node: nil,
21
+ name: 'Clg Coil',
22
+ schedule: nil,
23
+ design_inlet_water_temperature: nil,
24
+ design_inlet_air_temperature: nil,
25
+ design_outlet_air_temperature: nil)
26
+ clg_coil = OpenStudio::Model::CoilCoolingWater.new(model)
27
+
28
+ # add to chilled water loop
29
+ chilled_water_loop.addDemandBranchForComponent(clg_coil)
30
+
31
+ # add to air loop if specified
32
+ clg_coil.addToNode(air_loop_node) unless air_loop_node.nil?
33
+
34
+ # set coil name
35
+ if name.nil?
36
+ clg_coil.setName('Clg Coil')
37
+ else
38
+ clg_coil.setName(name)
39
+ end
40
+
41
+ # set coil availability schedule
42
+ if schedule.nil?
43
+ # default always on
44
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
45
+ elsif schedule.instance_of?(String)
46
+ coil_availability_schedule = model_add_schedule(model, schedule)
47
+
48
+ if coil_availability_schedule.nil? && schedule == 'alwaysOffDiscreteSchedule'
49
+ coil_availability_schedule = model.alwaysOffDiscreteSchedule
50
+ elsif coil_availability_schedule.nil?
51
+ coil_availability_schedule = model.alwaysOnDiscreteSchedule
52
+ end
53
+ elsif !schedule.to_Schedule.empty?
54
+ coil_availability_schedule = schedule
55
+ end
56
+ clg_coil.setAvailabilitySchedule(coil_availability_schedule)
57
+
58
+ # rated temperatures
59
+ if design_inlet_water_temperature.nil?
60
+ clg_coil.autosizeDesignInletWaterTemperature
61
+ else
62
+ clg_coil.setDesignInletWaterTemperature(design_inlet_water_temperature)
63
+ end
64
+ clg_coil.setDesignInletAirTemperature(design_inlet_air_temperature) unless design_inlet_air_temperature.nil?
65
+ clg_coil.setDesignOutletAirTemperature(design_outlet_air_temperature) unless design_outlet_air_temperature.nil?
66
+
67
+ # defaults
68
+ clg_coil.setHeatExchangerConfiguration('CrossFlow')
69
+
70
+ # coil controller properties
71
+ # @note These inputs will get overwritten if addToNode or addDemandBranchForComponent is called on the htg_coil object after this
72
+ clg_coil_controller = clg_coil.controllerWaterCoil.get
73
+ clg_coil_controller.setName("#{clg_coil.name} Controller")
74
+ clg_coil_controller.setAction('Reverse')
75
+ clg_coil_controller.setMinimumActuatedFlow(0.0)
76
+
77
+ return clg_coil
78
+ end
79
+ end
80
+ end