openstudio-standards 0.8.4 → 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 (289) 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/{costing/common_paths.rb → common_paths.rb} +14 -11
  33. data/lib/openstudio-standards/btap/common_resources/carbon_frame.csv +35 -0
  34. data/lib/openstudio-standards/btap/common_resources/carbon_glazing.csv +35 -0
  35. data/lib/openstudio-standards/btap/common_resources/carbon_opaque.csv +164 -0
  36. data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +121 -0
  37. data/lib/openstudio-standards/btap/common_resources/costs.csv +1897 -0
  38. data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting.csv +59 -59
  39. data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_hvac.csv +1019 -1032
  40. data/lib/openstudio-standards/btap/costing/btap_costing.rb +3 -7
  41. data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +1 -5
  42. data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +5 -4
  43. data/lib/openstudio-standards/btap/costing/dcv_costing.rb +1 -1
  44. data/lib/openstudio-standards/btap/costing/envelope_costing.rb +112 -181
  45. data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +4 -4
  46. data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +2 -1
  47. data/lib/openstudio-standards/btap/costing/lighting_costing.rb +3 -3
  48. data/lib/openstudio-standards/btap/costing/test_list.txt +15 -17
  49. data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +10 -9
  50. data/lib/openstudio-standards/btap/geometry.rb +86 -6
  51. data/lib/openstudio-standards/btap/structure.rb +657 -0
  52. data/lib/openstudio-standards/create_typical/create_typical.rb +17 -33
  53. data/lib/openstudio-standards/create_typical/space_type_ratios.rb +36 -36
  54. data/lib/openstudio-standards/equipment/create_transformer.rb +104 -0
  55. data/lib/openstudio-standards/equipment/create_typical_equipment.rb +117 -0
  56. data/lib/openstudio-standards/equipment/data/electric_equipment_space_types.json +1514 -0
  57. data/lib/openstudio-standards/equipment/data/gas_equipment_space_types.json +227 -0
  58. data/lib/openstudio-standards/exterior_lighting/create.rb +22 -22
  59. data/lib/openstudio-standards/exterior_lighting/information.rb +3 -2
  60. data/lib/openstudio-standards/hvac/components/air_conditioner_vrf.rb +482 -0
  61. data/lib/openstudio-standards/hvac/components/air_terminal.rb +31 -0
  62. data/lib/openstudio-standards/hvac/components/boiler_hot_water.rb +163 -0
  63. data/lib/openstudio-standards/hvac/components/central_air_source_heat_pump.rb +220 -0
  64. data/lib/openstudio-standards/hvac/components/chiller.rb +25 -0
  65. data/lib/openstudio-standards/hvac/components/coil.rb +276 -0
  66. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_multi_speed.rb +40 -0
  67. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_single_speed.rb +300 -0
  68. data/lib/openstudio-standards/hvac/components/coil_cooling_dx_two_speed.rb +187 -0
  69. data/lib/openstudio-standards/hvac/components/coil_cooling_water.rb +80 -0
  70. data/lib/openstudio-standards/hvac/components/coil_cooling_water_to_air_heat_pump_equation_fit.rb +182 -0
  71. data/lib/openstudio-standards/hvac/components/coil_heating_dx_single_speed.rb +220 -0
  72. data/lib/openstudio-standards/hvac/components/coil_heating_electric.rb +56 -0
  73. data/lib/openstudio-standards/hvac/components/coil_heating_gas.rb +90 -0
  74. data/lib/openstudio-standards/hvac/components/coil_heating_gas_multi_stage.rb +33 -0
  75. data/lib/openstudio-standards/hvac/components/coil_heating_water.rb +98 -0
  76. data/lib/openstudio-standards/hvac/components/coil_heating_water_to_air_heat_pump_equation_fit.rb +147 -0
  77. data/lib/openstudio-standards/hvac/components/component.rb +39 -0
  78. data/lib/openstudio-standards/{standards/ashrae_90_1/data/ashrae_90_1.fans.json → hvac/components/data/fans.json} +6 -6
  79. data/lib/openstudio-standards/hvac/components/fan.rb +363 -0
  80. data/lib/openstudio-standards/hvac/components/heat_exchanger_air_to_air.rb +203 -0
  81. data/lib/openstudio-standards/hvac/components/pump.rb +181 -0
  82. data/lib/openstudio-standards/hvac/controls/radiant_system_controls.rb +594 -0
  83. data/lib/openstudio-standards/hvac/conversions.rb +222 -0
  84. data/lib/openstudio-standards/hvac/curves.rb +192 -0
  85. data/lib/openstudio-standards/hvac/helpers.rb +357 -0
  86. data/lib/openstudio-standards/hvac/setpoint_managers/information.rb +4 -4
  87. data/lib/openstudio-standards/interior_lighting/create_lights.rb +52 -0
  88. data/lib/openstudio-standards/interior_lighting/create_typical_interior_lighting.rb +254 -0
  89. data/lib/openstudio-standards/interior_lighting/data/convert_lighting_data.rb +249 -0
  90. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.csv +96 -0
  91. data/lib/openstudio-standards/interior_lighting/data/lighting_space_types.json +1429 -0
  92. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.csv +46 -0
  93. data/lib/openstudio-standards/interior_lighting/data/lighting_technology.json +859 -0
  94. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  95. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  96. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  97. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +4 -4
  98. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  99. data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +4 -4
  100. data/lib/openstudio-standards/prototypes/ashrae_90_1/nrel_nze_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  101. data/lib/openstudio-standards/prototypes/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  102. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.HighRiseApartment.rb +6 -7
  103. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Hospital.rb +15 -15
  104. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeHotel.rb +4 -4
  105. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.LargeOffice.rb +5 -5
  106. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.MediumOffice.rb +6 -6
  107. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Outpatient.rb +7 -7
  108. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.PrimarySchool.rb +4 -4
  109. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SecondarySchool.rb +6 -6
  110. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.SmallOfficeDetailed.rb +5 -1
  111. data/lib/openstudio-standards/prototypes/common/data/prototype_space_type_map.json +2594 -0
  112. data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +2108 -0
  113. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirTerminalSingleDuctVAVReheat.rb +33 -0
  114. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +0 -140
  115. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanConstantVolume.rb +1 -73
  116. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanOnOff.rb +1 -69
  117. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanVariableVolume.rb +0 -116
  118. data/lib/openstudio-standards/prototypes/common/objects/Prototype.FanZoneExhaust.rb +0 -61
  119. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.hvac.rb +2 -2
  120. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +128 -13
  121. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +606 -607
  122. data/lib/openstudio-standards/prototypes/common/prototype_space_type_map.rb +41 -0
  123. data/lib/openstudio-standards/prototypes/common/space_type_equipment_map.rb +184 -0
  124. data/lib/openstudio-standards/prototypes/common/space_type_thermostat_schedule_map.rb +116 -0
  125. data/lib/openstudio-standards/qaqc/hvac.rb +12 -12
  126. data/lib/openstudio-standards/refrigeration/create_compressor.rb +2 -5
  127. data/lib/openstudio-standards/refrigeration/data/refrigeration_compressors.csv +4 -4
  128. data/lib/openstudio-standards/service_water_heating/create_water_heater.rb +1 -2
  129. data/lib/openstudio-standards/service_water_heating/create_water_use.rb +5 -5
  130. data/lib/openstudio-standards/space_type/data/level_1_space_types.json +612 -0
  131. data/lib/openstudio-standards/space_type/standards_space_type.rb +53 -0
  132. data/lib/openstudio-standards/standards/Standards.AirConditionerVariableRefrigerantFlow.rb +8 -26
  133. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +13 -13
  134. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +0 -24
  135. data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +6 -43
  136. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +7 -24
  137. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +19 -44
  138. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +25 -50
  139. data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +25 -33
  140. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +9 -22
  141. data/lib/openstudio-standards/standards/Standards.CoilDX.rb +15 -157
  142. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +2 -2
  143. data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +18 -105
  144. data/lib/openstudio-standards/standards/Standards.CoilHeatingGas.rb +3 -23
  145. data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +0 -24
  146. data/lib/openstudio-standards/standards/Standards.CoilHeatingWaterToAirHeatPumpEquationFit.rb +2 -86
  147. data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +0 -107
  148. data/lib/openstudio-standards/standards/Standards.Model.rb +6 -11
  149. data/lib/openstudio-standards/standards/Standards.People.rb +113 -0
  150. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +11 -11
  151. data/lib/openstudio-standards/standards/Standards.Pump.rb +2 -147
  152. data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +57 -41
  153. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +30 -153
  154. data/lib/openstudio-standards/standards/Standards.Ventilation.rb +74 -0
  155. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +1 -1
  156. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PlantLoop.rb +4 -4
  157. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.heat_pumps_heating.json +3 -3
  158. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +37 -112
  159. 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
  160. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.heat_pumps_heating.json +3 -3
  161. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +37 -112
  162. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.AirTerminalSingleDuctVAVReheat.rb +1 -1
  163. 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
  164. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.heat_pumps_heating.json +6 -6
  165. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +37 -37
  166. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.AirTerminalSingleDuctVAVReheat.rb +1 -1
  167. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.BoilerHotWater.rb +1 -1
  168. 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
  169. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.heat_pumps_heating.json +6 -6
  170. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +37 -37
  171. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.AirTerminalSingleDuctVAVReheat.rb +1 -1
  172. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.BoilerHotWater.rb +1 -1
  173. 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
  174. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.heat_pumps_heating.json +6 -6
  175. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +37 -37
  176. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +1 -1
  177. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirTerminalSingleDuctVAVReheat.rb +1 -1
  178. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.BoilerHotWater.rb +1 -1
  179. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.CoilHeatingGas.rb +1 -1
  180. 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
  181. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.heat_pumps_heating.json +6 -6
  182. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +37 -37
  183. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.curves.json +0 -200
  184. 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
  185. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/data/doe_ref_1980_2004.spc_typ.json +37 -37
  186. 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
  187. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/data/doe_ref_pre_1980.spc_typ.json +37 -37
  188. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirTerminalSingleDuctVAVReheat.rb +1 -1
  189. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.PlantLoop.rb +5 -5
  190. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.AirTerminalSingleDuctVAVReheat.rb +1 -1
  191. data/lib/openstudio-standards/standards/ashrae_90_1/ze_aedg_multifamily/ze_aedg_multifamily.PlantLoop.rb +5 -5
  192. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +1 -1
  193. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +2 -2
  194. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +2 -68
  195. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +2 -35
  196. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +42 -0
  197. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +5 -2
  198. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +2 -2
  199. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +3 -3
  200. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +1 -1
  201. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +1 -0
  202. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019_WaterHeaterMixed.rb +2 -4
  203. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +0 -200
  204. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +5 -5
  205. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +1 -0
  206. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_enums.rb +0 -1
  207. data/lib/openstudio-standards/standards/cbes/data/cbes.curves.json +0 -200
  208. data/lib/openstudio-standards/standards/deer/data/deer.curves.json +0 -200
  209. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +19 -10
  210. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/building_envelope.rb +12 -11
  211. data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_systems.rb +4 -4
  212. data/lib/openstudio-standards/standards/necb/ECMS/ecms.rb +1 -1
  213. data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +69 -92
  214. data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +2 -1
  215. data/lib/openstudio-standards/standards/necb/NECB2011/beps_compliance_path.rb +16 -12
  216. data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +799 -46
  217. data/lib/openstudio-standards/standards/necb/NECB2011/data/chillers.json +33 -51
  218. data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +32 -0
  219. data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +18 -0
  220. data/lib/openstudio-standards/standards/necb/NECB2011/data/heat_pumps_heating.json +21 -15
  221. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +5 -5
  222. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +2 -0
  223. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +30 -141
  224. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +233 -112
  225. data/lib/openstudio-standards/standards/necb/NECB2015/data/heat_pumps_heating.json +10 -2
  226. data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +2 -2
  227. data/lib/openstudio-standards/standards/necb/NECB2020/data/heat_pumps_heating.json +16 -6
  228. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +60 -61
  229. data/lib/openstudio-standards/standards/necb/NECB2020/service_water_heating.rb +30 -30
  230. data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +79 -0
  231. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +16 -4
  232. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +65 -42
  233. data/lib/openstudio-standards/thermal_zone/{thermal_zone.rb → information.rb} +12 -45
  234. data/lib/openstudio-standards/thermal_zone/thermostat_schedules.rb +152 -0
  235. data/lib/openstudio-standards/version.rb +1 -1
  236. data/lib/openstudio-standards/weather/stat_file.rb +2 -2
  237. data/lib/openstudio-standards.rb +55 -38
  238. metadata +106 -66
  239. data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +0 -61
  240. data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +0 -1904
  241. data/lib/openstudio-standards/hvac/components/create.rb +0 -169
  242. data/lib/openstudio-standards/hvac/components/modify.rb +0 -42
  243. data/lib/openstudio-standards/prototypes/common/objects/Prototype.AirConditionerVariableRefrigerantFlow.rb +0 -438
  244. data/lib/openstudio-standards/prototypes/common/objects/Prototype.BoilerHotWater.rb +0 -123
  245. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CentralAirSourceHeatPump.rb +0 -216
  246. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXSingleSpeed.rb +0 -273
  247. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingDXTwoSpeed.rb +0 -159
  248. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWater.rb +0 -77
  249. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -154
  250. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingDXSingleSpeed.rb +0 -214
  251. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingElectric.rb +0 -53
  252. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingGas.rb +0 -72
  253. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWater.rb +0 -95
  254. data/lib/openstudio-standards/prototypes/common/objects/Prototype.CoilHeatingWaterToAirHeatPumpEquationFit.rb +0 -125
  255. data/lib/openstudio-standards/prototypes/common/objects/Prototype.ControllerWaterCoil.rb +0 -17
  256. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.transformers.rb +0 -90
  257. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Pump.rb +0 -4
  258. data/lib/openstudio-standards/prototypes/common/objects/Prototype.PumpVariableSpeed.rb +0 -70
  259. data/lib/openstudio-standards/prototypes/common/objects/Prototype.radiant_system_controls.rb +0 -590
  260. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +0 -901
  261. data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -5
  262. data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -5
  263. data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -5
  264. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +0 -5
  265. data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +0 -55
  266. data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -5
  267. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +0 -5
  268. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +0 -5
  269. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +0 -5
  270. data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +0 -328
  271. data/lib/openstudio-standards/standards/deer/data/deer.fans.json +0 -328
  272. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/ConstructionProperties.csv +0 -0
  273. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/Constructions.csv +0 -0
  274. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/construction_sets.csv +0 -0
  275. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/constructions_opaque.csv +0 -0
  276. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/costs_local_factors.csv +0 -0
  277. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/hvac_vent_ahu.csv +0 -0
  278. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/lighting_sets.csv +0 -0
  279. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/locations.csv +0 -0
  280. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_glazing.csv +0 -0
  281. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_lighting.csv +0 -0
  282. /data/lib/openstudio-standards/btap/{costing/common_resources → common_resources}/materials_opaque.csv +0 -0
  283. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.PumpVariableSpeed.rb +0 -0
  284. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2007/ashrae_90_1_2007.PumpVariableSpeed.rb +0 -0
  285. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2010/ashrae_90_1_2010.PumpVariableSpeed.rb +0 -0
  286. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2013/ashrae_90_1_2013.PumpVariableSpeed.rb +0 -0
  287. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +0 -0
  288. /data/lib/openstudio-standards/{prototypes → standards}/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Pump.rb +0 -0
  289. /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