openstudio-standards 0.2.16.rc2 → 0.2.17.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/data/geometry/ASHRAECollege.osm +117 -117
  3. data/data/standards/manage_OpenStudio_Standards.rb +31 -4
  4. data/data/standards/test_performance_expected_dd_results.csv +287 -287
  5. data/lib/openstudio-standards/btap/geometry.rb +1 -1
  6. data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +354 -2
  7. data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +79 -0
  8. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.College.rb +1 -1
  9. data/lib/openstudio-standards/prototypes/common/buildings/Prototype.Laboratory.rb +1 -1
  10. data/lib/openstudio-standards/prototypes/common/do_not_edit_metaclasses.rb +3376 -63
  11. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Fan.rb +12 -0
  12. data/lib/openstudio-standards/prototypes/common/objects/Prototype.Model.rb +3 -4
  13. data/lib/openstudio-standards/prototypes/common/objects/Prototype.SizingSystem.rb +1 -1
  14. data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +168 -93
  15. data/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +2 -4
  16. data/lib/openstudio-standards/prototypes/common/prototype_metaprogramming.rb +2 -1
  17. data/lib/openstudio-standards/refs/references.rb +3 -0
  18. data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +279 -6
  19. data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +50 -2
  20. data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +4 -0
  21. data/lib/openstudio-standards/standards/Standards.CoilCoolingWaterToAirHeatPumpEquationFit.rb +0 -1
  22. data/lib/openstudio-standards/standards/Standards.Construction.rb +185 -3
  23. data/lib/openstudio-standards/standards/Standards.Fan.rb +14 -6
  24. data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +1 -0
  25. data/lib/openstudio-standards/standards/Standards.Model.rb +1752 -384
  26. data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +130 -9
  27. data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +50 -3
  28. data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +44 -0
  29. data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +27 -0
  30. data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +543 -0
  31. data/lib/openstudio-standards/standards/Standards.Space.rb +665 -15
  32. data/lib/openstudio-standards/standards/Standards.SpaceType.rb +141 -4
  33. data/lib/openstudio-standards/standards/Standards.SubSurface.rb +2 -1
  34. data/lib/openstudio-standards/standards/Standards.Surface.rb +117 -0
  35. data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +197 -49
  36. data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +41 -0
  37. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/ashrae_90_1_2004.Model.rb +6 -8
  38. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/ashrae_90_1.schedules.json +45 -45
  39. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/comstock_ashrae_90_1_2004/data/comstock_ashrae_90_1_2004.spc_typ.json +7 -7
  40. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.spc_typ.json +19 -19
  41. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/comstock_ashrae_90_1_2007/data/ashrae_90_1.schedules.json +45 -45
  42. 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 +7 -7
  43. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.spc_typ.json +5 -5
  44. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/comstock_ashrae_90_1_2010/data/ashrae_90_1.schedules.json +45 -45
  45. 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 +9 -9
  46. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.spc_typ.json +3 -3
  47. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/comstock_ashrae_90_1_2013/data/ashrae_90_1.schedules.json +45 -45
  48. 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 +4 -4
  49. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.spc_typ.json +6 -6
  50. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/comstock_ashrae_90_1_2016/data/ashrae_90_1.schedules.json +45 -45
  51. 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 +5 -5
  52. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.spc_typ.json +6 -6
  53. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +5 -5
  54. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/comstock_ashrae_90_1_2019/data/ashrae_90_1.schedules.json +45 -45
  55. 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 +5 -5
  56. data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.spc_typ.json +6 -6
  57. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.constructions.json +2 -2
  58. data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.fans.json +12 -0
  59. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_1980_2004/comstock_doe_ref_1980_2004/data/ashrae_90_1.schedules.json +45 -45
  60. 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 +10 -10
  61. data/lib/openstudio-standards/standards/ashrae_90_1/doe_ref_pre_1980/comstock_doe_ref_pre_1980/data/ashrae_90_1.schedules.json +45 -45
  62. 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 +10 -10
  63. data/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +1 -0
  64. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirLoopHVAC.rb +792 -0
  65. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctParallelPIUReheat.rb +10 -0
  66. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.AirTerminalSingleDuctVAVReheat.rb +31 -0
  67. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.BoilerHotWater.rb +91 -0
  68. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ChillerElectricEIR.rb +84 -0
  69. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXSingleSpeed.rb +145 -0
  70. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilCoolingDXTwoSpeed.rb +106 -0
  71. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilDX.rb +71 -0
  72. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingDXSingleSpeed.rb +194 -0
  73. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoilHeatingGas.rb +120 -0
  74. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTower.rb +110 -0
  75. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.CoolingTowerVariableSpeed.rb +5 -0
  76. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Fan.rb +73 -0
  77. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanConstantVolume.rb +5 -0
  78. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanOnOff.rb +5 -0
  79. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanVariableVolume.rb +24 -0
  80. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.FanZoneExhaust.rb +5 -0
  81. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.HeatExchangerSensLat.rb +55 -0
  82. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +3045 -0
  83. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlanarSurface.rb +187 -0
  84. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.PlantLoop.rb +450 -0
  85. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Space.rb +106 -0
  86. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.SpaceType.rb +666 -0
  87. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Surface.rb +54 -0
  88. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ThermalZone.rb +168 -0
  89. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.ZoneHVACComponent.rb +132 -0
  90. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.rb +239 -0
  91. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.Model.rb +176 -0
  92. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/ashrae_90_1_prm_2019.rb +25 -0
  93. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.boilers.json +52 -0
  94. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.chillers.json +112 -0
  95. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.climate_zone_sets.json +210 -0
  96. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +10384 -0
  97. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_sets.json +133 -0
  98. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.furnaces.json +43 -0
  99. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps.json +119 -0
  100. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_pumps_heating.json +130 -0
  101. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.heat_rejection.json +13 -0
  102. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.lpd_space_type.json +568 -0
  103. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.motors.json +264 -0
  104. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_baseline_hvac.json +439 -0
  105. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_constructions.json +685 -0
  106. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_economizers.json +213 -0
  107. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_ext_ltg.json +32 -0
  108. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_heat_type.json +136 -0
  109. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_hvac_bldg_type.json +32 -0
  110. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_interior_lighting.json +1837 -0
  111. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_swh_bldg_type.json +184 -0
  112. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.prm_wwr_bldg_type.json +84 -0
  113. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.unitary_acs.json +148 -0
  114. data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.water_heaters.json +157 -0
  115. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.climate_zone_sets.json +210 -0
  116. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.curves.json +18329 -0
  117. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.fans.json +340 -0
  118. data/lib/openstudio-standards/standards/ashrae_90_1_prm/data/ashrae_90_1_prm.materials.json +49924 -0
  119. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/baseline_building_rotation_exception.md +44 -0
  120. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/check_pump_power_and_control.md +71 -0
  121. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv.md +68 -0
  122. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/dcv_implementation.png +0 -0
  123. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/elevators.md +14 -0
  124. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/exhaust_air_energy_recovery.md +36 -0
  125. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/f_c_factors.md +19 -0
  126. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/fan_power_credits.md +15 -0
  127. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/preheat_coil.md +59 -0
  128. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/pump_power_control.md +46 -0
  129. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/return_air_type.md +31 -0
  130. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_baseline_wwr.md +191 -0
  131. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_hw_and_chw_supply_water_temp_reset_control.md +24 -0
  132. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_num_boilers_chillers_towers.md +49 -0
  133. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_plug_load_measures.md +80 -0
  134. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/set_space_lpd.md +73 -0
  135. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unenclosed_and_unconditioned_spaces.md +11 -0
  136. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/unmet_load_hours.md +20 -0
  137. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_parallel_piu_terminals_fan_control.md +23 -0
  138. data/lib/openstudio-standards/standards/ashrae_90_1_prm/docs/vav_terminals_min_flow_setpoint.md +21 -0
  139. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac.csv +1 -0
  140. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_airloop_hvac_doas.csv +1 -0
  141. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_building.csv +1 -0
  142. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_design_specification_outdoor_air.csv +1 -0
  143. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_electric_equipment.csv +1 -0
  144. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_exterior_lights.csv +1 -0
  145. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_gas_equipment.csv +1 -0
  146. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_lights.csv +1 -0
  147. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_space.csv +1 -0
  148. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_spacetype.csv +1 -0
  149. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_thermal_zone.csv +1 -0
  150. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_connections.csv +1 -0
  151. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment.csv +1 -0
  152. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_wateruse_equipment_definition.csv +1 -0
  153. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_hvac.csv +1 -0
  154. data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/userdata_zone_infiltration.csv +1 -0
  155. data/lib/openstudio-standards/standards/cbes/data/cbes.fans.json +12 -0
  156. data/lib/openstudio-standards/standards/deer/data/deer.fans.json +12 -0
  157. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps.json +1 -1
  158. data/lib/openstudio-standards/standards/necb/ECMS/data/heat_pumps_heating.json +1 -1
  159. data/lib/openstudio-standards/standards/necb/ECMS/data/unitary_acs.json +24 -11
  160. data/lib/openstudio-standards/standards/necb/ECMS/erv.rb +13 -15
  161. data/lib/openstudio-standards/standards/necb/NECB2011/data/province_map.json +17 -0
  162. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +1 -1
  163. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +1 -1
  164. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +2 -2
  165. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +6 -5
  166. data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +3 -2
  167. data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +2 -3
  168. data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +2 -2
  169. data/lib/openstudio-standards/standards/necb/NECB2020/data/space_types.json +33 -924
  170. data/lib/openstudio-standards/standards/necb/NECB2020/data/unitary_acs.json +15 -15
  171. data/lib/openstudio-standards/standards/necb/common/btap_data.rb +135 -29
  172. data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +16 -4
  173. data/lib/openstudio-standards/standards/necb/common/neb_end_use_prices.csv +40 -42
  174. data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +1 -1
  175. data/lib/openstudio-standards/standards/necb/common/space_type_upgrade_map.json +89 -89
  176. data/lib/openstudio-standards/utilities/array.rb +11 -0
  177. data/lib/openstudio-standards/utilities/logging.rb +48 -0
  178. data/lib/openstudio-standards/utilities/object_info.rb +20 -0
  179. data/lib/openstudio-standards/utilities/schedule_translator.rb +348 -0
  180. data/lib/openstudio-standards/utilities/sqlfile.rb +68 -0
  181. data/lib/openstudio-standards/version.rb +2 -2
  182. data/lib/openstudio-standards/weather/Weather.Model.rb +42 -55
  183. data/lib/openstudio-standards/weather/Weather.stat_file.rb +1 -1
  184. data/lib/openstudio-standards.rb +35 -1
  185. metadata +111 -6
  186. data/data/standards/OpenStudio_Standards-ashrae_90_1.xlsx +0 -0
  187. data/data/standards/OpenStudio_Standards-ashrae_90_1_28Jan2022.xlsx +0 -0
  188. data/data/standards/OpenStudio_Standards-ashrae_90_1_28_Jan2022_2.xlsx +0 -0
  189. data/data/standards/openstudio_standards_duplicates_log.csv +0 -143
@@ -0,0 +1,10 @@
1
+ class ASHRAE901PRM < Standard
2
+ # @!group AirTerminalSingleDuctParallelPIUReheat
3
+
4
+ # Return the fan on flow fraction for a parallel PIU terminal
5
+ #
6
+ # @return [Float] returns nil or a float representing the fraction
7
+ def air_terminal_single_duct_parallel_piu_reheat_fan_on_flow_fraction
8
+ return 0.0 # will make the secondary fans run for heating loads
9
+ end
10
+ end
@@ -0,0 +1,31 @@
1
+ class ASHRAE901PRM < Standard
2
+ # @!group AirTerminalSingleDuctVAVReheat
3
+
4
+ # Set the minimum damper position based on OA rate of the space and the template.
5
+ # Zones with low OA per area get lower initial guesses.
6
+ # Final position will be adjusted upward as necessary by Standards.AirLoopHVAC.adjust_minimum_vav_damper_positions
7
+ #
8
+ # @param air_terminal_single_duct_vav_reheat [OpenStudio::Model::AirTerminalSingleDuctVAVReheat] the air terminal object
9
+ # @param zone_min_oa [Double] the zone outdoor air flow rate, in m^3/s.
10
+ # If supplied, this will be set as a minimum limit in addition to the minimum
11
+ # damper position. EnergyPlus will use the larger of the two values during sizing.
12
+ # @param has_ddc [Bool] whether or not there is DDC control of the VAV terminal,
13
+ # which impacts the minimum damper position requirement.
14
+ # @return [Bool] returns true if successful, false if not
15
+ # @todo remove exception where older vintages don't have minimum positions adjusted.
16
+ def air_terminal_single_duct_vav_reheat_apply_minimum_damper_position(air_terminal_single_duct_vav_reheat, zone_min_oa = nil, has_ddc = true)
17
+ # Minimum damper position
18
+ min_damper_position = air_terminal_single_duct_vav_reheat_minimum_damper_position(air_terminal_single_duct_vav_reheat, has_ddc)
19
+ air_terminal_single_duct_vav_reheat.setConstantMinimumAirFlowFraction(min_damper_position)
20
+ OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.AirTerminalSingleDuctVAVReheat', "For #{air_terminal_single_duct_vav_reheat.name}: set minimum damper position to #{min_damper_position}.")
21
+
22
+ # Minimum OA flow rate
23
+ # If specified, set the MDP as the larger of the two
24
+ unless zone_min_oa.nil?
25
+ min_oa_damp_position = [zone_min_oa / air_terminal_single_duct_vav_reheat.autosizedMaximumAirFlowRate.get, min_damper_position].max
26
+ air_terminal_single_duct_vav_reheat.setConstantMinimumAirFlowFraction(min_oa_damp_position)
27
+ end
28
+
29
+ return true
30
+ end
31
+ end
@@ -0,0 +1,91 @@
1
+ class ASHRAE901PRM < Standard
2
+ # @!group BoilerHotWater
3
+
4
+ # find search criteria
5
+ #
6
+ # @param boiler_hot_water [OpenStudio::Model::BoilerHotWater] hot water boiler object
7
+ # @return [Hash] used for standards_lookup_table(model)
8
+ def boiler_hot_water_find_search_criteria(boiler_hot_water)
9
+ # Define the criteria to find the boiler properties
10
+ # in the hvac standards data set.
11
+ search_criteria = {}
12
+ search_criteria['template'] = template
13
+
14
+ # Get fuel type
15
+ search_criteria['fuel_type'] = 'Gas'
16
+
17
+ # Get the fluid type
18
+ search_criteria['fluid_type'] = 'Hot Water'
19
+
20
+ return search_criteria
21
+ end
22
+
23
+ # Finds lookup object in standards and return minimum thermal efficiency
24
+ #
25
+ # @param boiler_hot_water [OpenStudio::Model::BoilerHotWater] hot water boiler object
26
+ # @param rename [Bool] returns true if successful, false if not
27
+ # @return [Double] minimum thermal efficiency
28
+ def boiler_hot_water_standard_minimum_thermal_efficiency(boiler_hot_water, rename = false)
29
+ # Get the boiler properties
30
+ search_criteria = boiler_hot_water_find_search_criteria(boiler_hot_water)
31
+ capacity_w = boiler_hot_water_find_capacity(boiler_hot_water)
32
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
33
+ capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get
34
+
35
+ # Get the minimum efficiency standards
36
+ thermal_eff = nil
37
+
38
+ # Get the boiler properties
39
+ blr_props = model_find_object(standards_data['boilers'], search_criteria, capacity_btu_per_hr)
40
+ unless blr_props
41
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.BoilerHotWater', "For #{boiler_hot_water.name}, cannot find boiler properties, cannot apply efficiency standard.")
42
+ successfully_set_all_properties = false
43
+ return successfully_set_all_properties
44
+ end
45
+
46
+ # If specified as AFUE
47
+ unless blr_props['minimum_annual_fuel_utilization_efficiency'].nil?
48
+ min_afue = blr_props['minimum_annual_fuel_utilization_efficiency']
49
+ thermal_eff = afue_to_thermal_eff(min_afue)
50
+ new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_afue} AFUE"
51
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: Gas Hot Water Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; AFUE = #{min_afue}")
52
+ end
53
+
54
+ # If specified as thermal efficiency
55
+ unless blr_props['minimum_thermal_efficiency'].nil?
56
+ thermal_eff = blr_props['minimum_thermal_efficiency']
57
+ new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{thermal_eff} Thermal Eff"
58
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: Gas Hot Water Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Thermal Efficiency = #{thermal_eff}")
59
+ end
60
+
61
+ # If specified as combustion efficiency
62
+ unless blr_props['minimum_combustion_efficiency'].nil?
63
+ min_comb_eff = blr_props['minimum_combustion_efficiency']
64
+ thermal_eff = combustion_eff_to_thermal_eff(min_comb_eff)
65
+ new_comp_name = "#{boiler_hot_water.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_comb_eff} Combustion Eff"
66
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.BoilerHotWater', "For #{template}: #{boiler_hot_water.name}: Gas Hot Water Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; Combustion Efficiency = #{min_comb_eff}")
67
+ end
68
+
69
+ # Rename
70
+ if rename
71
+ boiler_hot_water.setName(new_comp_name)
72
+ end
73
+
74
+ return thermal_eff
75
+ end
76
+
77
+ # Applies the standard efficiency ratings to this object.
78
+ #
79
+ # @param boiler_hot_water [OpenStudio::Model::BoilerHotWater] hot water boiler object
80
+ # @return [Bool] true if successful, false if not
81
+ def boiler_hot_water_apply_efficiency_and_curves(boiler_hot_water)
82
+ # Get the minimum efficiency standards
83
+ thermal_eff = boiler_hot_water_standard_minimum_thermal_efficiency(boiler_hot_water)
84
+
85
+ # Set the efficiency values
86
+ unless thermal_eff.nil?
87
+ boiler_hot_water.setNominalThermalEfficiency(thermal_eff)
88
+ end
89
+ return true
90
+ end
91
+ end
@@ -0,0 +1,84 @@
1
+ class ASHRAE901PRM < Standard
2
+ # @!group ChillerElectricEIR
3
+
4
+ # Finds the search criteria
5
+ #
6
+ # @param chiller_electric_eir [OpenStudio::Model::ChillerElectricEIR] chiller object
7
+ # @return [hash] has for search criteria to be used for find object
8
+ def chiller_electric_eir_find_search_criteria(chiller_electric_eir)
9
+ search_criteria = {}
10
+ search_criteria['template'] = template
11
+
12
+ # In AppG prm models, all scenarios are WaterCooled for cooling type.
13
+ cooling_type = 'WaterCooled'
14
+
15
+ search_criteria['cooling_type'] = cooling_type
16
+
17
+ # TODO: Standards replace this with a mechanism to store this
18
+ # data in the chiller object itself.
19
+ # For now, retrieve the condenser type from the name
20
+ name = chiller_electric_eir.name.get
21
+ condenser_type = nil
22
+ compressor_type = nil
23
+ if chiller_electric_eir.additionalProperties.hasFeature('compressor_type')
24
+ compressor_type = chiller_electric_eir.additionalProperties.getFeatureAsString('compressor_type').get
25
+ end
26
+ unless condenser_type.nil?
27
+ search_criteria['condenser_type'] = condenser_type
28
+ end
29
+ unless compressor_type.nil?
30
+ search_criteria['compressor_type'] = compressor_type
31
+ end
32
+
33
+ return search_criteria
34
+ end
35
+
36
+ # Finds lookup object in standards and return full load efficiency
37
+ #
38
+ # @param chiller_electric_eir [OpenStudio::Model::ChillerElectricEIR] chiller object
39
+ # @return [Double] full load efficiency (COP), [Double] capacity in tons, [Double] kw/ton
40
+ def chiller_electric_eir_standard_minimum_full_load_efficiency(chiller_electric_eir)
41
+ # Get the chiller properties
42
+ search_criteria = chiller_electric_eir_find_search_criteria(chiller_electric_eir)
43
+ capacity_w = chiller_electric_eir_find_capacity(chiller_electric_eir)
44
+ unless capacity_w
45
+ return nil
46
+ end
47
+
48
+ capacity_tons = OpenStudio.convert(capacity_w, 'W', 'ton').get
49
+ chlr_props = model_find_object(standards_data['chillers'], search_criteria, capacity_tons, Date.today)
50
+
51
+ if chlr_props.nil? || !chlr_props['minimum_full_load_efficiency']
52
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find minimum full load efficiency.")
53
+ return nil
54
+ else
55
+ # lookup the efficiency value
56
+ kw_per_ton = chlr_props['minimum_full_load_efficiency']
57
+ cop = kw_per_ton_to_cop(kw_per_ton)
58
+ end
59
+
60
+ return cop, capacity_tons, kw_per_ton
61
+ end
62
+
63
+ # Applies the standard efficiency ratings to this object.
64
+ #
65
+ # @param chiller_electric_eir [OpenStudio::Model::ChillerElectricEIR] chiller object
66
+ # @return [Bool] true if successful, false if not
67
+ def chiller_electric_eir_apply_efficiency_and_curves(chiller_electric_eir)
68
+ # Set the efficiency value
69
+ cop, capacity_tons, kw_per_ton = chiller_electric_eir_standard_minimum_full_load_efficiency(chiller_electric_eir)
70
+ if cop.nil?
71
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.ChillerElectricEIR', "For #{chiller_electric_eir.name}, cannot find minimum full load efficiency, will not be set.")
72
+ successfully_set_all_properties = false
73
+ else
74
+ chiller_electric_eir.setReferenceCOP(cop)
75
+ successfully_set_all_properties = true
76
+ end
77
+
78
+ # Append the name with size and kw/ton
79
+ chiller_electric_eir.setName("#{chiller_electric_eir.name} #{capacity_tons.round}tons #{kw_per_ton.round(1)}kW/ton")
80
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.ChillerElectricEIR', "For #{template}: #{chiller_electric_eir.name}: Capacity = #{capacity_tons.round}tons; COP = #{cop.round(1)} (#{kw_per_ton.round(1)}kW/ton)")
81
+
82
+ return successfully_set_all_properties
83
+ end
84
+ end
@@ -0,0 +1,145 @@
1
+ class ASHRAE901PRM < Standard
2
+ # @!group CoilCoolingDXSingleSpeed
3
+
4
+ include ASHRAEPRMCoilDX
5
+
6
+ # Finds capacity in W
7
+ #
8
+ # @param coil_cooling_dx_single_speed [OpenStudio::Model::CoilCoolingDXSingleSpeed] coil cooling dx single speed object
9
+ # @param sys_type [String] HVAC system type
10
+ # @return [Double] capacity in W to be used for find object
11
+ def coil_cooling_dx_single_speed_find_capacity(coil_cooling_dx_single_speed, sys_type)
12
+ capacity_w = nil
13
+ if coil_cooling_dx_single_speed.ratedTotalCoolingCapacity.is_initialized
14
+ capacity_w = coil_cooling_dx_single_speed.ratedTotalCoolingCapacity.get
15
+ elsif coil_cooling_dx_single_speed.autosizedRatedTotalCoolingCapacity.is_initialized
16
+ capacity_w = coil_cooling_dx_single_speed.autosizedRatedTotalCoolingCapacity.get
17
+ else
18
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_single_speed.name} capacity is not available, cannot apply efficiency standard.")
19
+ return 0.0
20
+ end
21
+
22
+ # Check for user data that indicates multiple systems per thermal zone
23
+ # This could be true for a data center where this is common practice
24
+ # Or it could be for a thermal zone that represents multiple real building zones
25
+ mult = 1
26
+ thermal_zone = nil
27
+ comp = coil_cooling_dx_single_speed.containingHVACComponent
28
+ if comp.is_initialized
29
+ if comp.get.to_AirLoopHVACUnitarySystem.is_initialized
30
+ unitary = comp.get.to_AirLoopHVACUnitarySystem.get
31
+ thermal_zone = unitary.controllingZoneorThermostatLocation.get
32
+ end
33
+ end
34
+ # meth = comp.methods
35
+ comp = coil_cooling_dx_single_speed.containingZoneHVACComponent
36
+ if comp.is_initialized
37
+ if comp.get.thermalZone.is_initialized
38
+ thermal_zone = comp.get.thermalZone.get
39
+ end
40
+ end
41
+
42
+ if !thermal_zone.nil?
43
+ if standards_data.key?('userdata_thermal_zone')
44
+ standards_data['userdata_thermal_zone'].each do |row|
45
+ next unless row['name'].to_s.downcase.strip == thermal_zone.name.to_s.downcase.strip
46
+
47
+ if row['number_of_systems'].to_s.upcase.strip != ''
48
+ mult = row['number_of_systems'].to_s
49
+ if mult.to_i.to_s == mult
50
+ mult = mult.to_i
51
+ capacity_w /= mult
52
+ else
53
+ OpenStudio.logFree(OpenStudio::Error, 'prm.log', 'In userdata_thermalzone, number_of_systems requires integer input.')
54
+ end
55
+ break
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ # If it's a PTAC or PTHP System, we need to divide the capacity by the potential zone multiplier
62
+ # because the COP is dependent on capacity, and the capacity should be the capacity of a single zone, not all the zones
63
+ if sys_type == 'PTAC' || sys_type == 'PTHP'
64
+ mult = 1
65
+ comp = coil_cooling_dx_single_speed.containingZoneHVACComponent
66
+ if comp.is_initialized
67
+ if comp.get.thermalZone.is_initialized
68
+ mult = comp.get.thermalZone.get.multiplier
69
+ if mult > 1
70
+ total_cap = capacity_w
71
+ capacity_w /= mult
72
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "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 #{mult} to give #{capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get.round(2)}kBTU/hr.")
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ return capacity_w
79
+ end
80
+
81
+ # Finds lookup object in standards and return efficiency
82
+ #
83
+ # @param coil_cooling_dx_single_speed [OpenStudio::Model::CoilCoolingDXSingleSpeed] coil cooling dx single speed object
84
+ # @param sys_type [String] HVAC system type
85
+ # @param rename [Bool] if true, object will be renamed to include capacity and efficiency level
86
+ # @return [Double] full load efficiency (COP)
87
+ def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_speed, sys_type, rename = false)
88
+ # find properties
89
+ capacity_w = coil_cooling_dx_single_speed_find_capacity(coil_cooling_dx_single_speed, sys_type)
90
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
91
+ search_criteria = coil_dx_find_search_criteria(coil_cooling_dx_single_speed, capacity_btu_per_hr, sys_type)
92
+
93
+ # Lookup efficiencies depending on whether it is a unitary AC or a heat pump
94
+ ac_props = nil
95
+ ac_props = if sys_type == 'PSZ_HP' || sys_type == 'PTHP'
96
+ model_find_object(standards_data['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
97
+ else
98
+ model_find_object(standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
99
+ end
100
+
101
+ # Get the minimum efficiency standards
102
+ cop = nil
103
+
104
+ # Check to make sure properties were found
105
+ if ac_props.nil?
106
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{coil_cooling_dx_single_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
107
+ return cop # value of nil
108
+ end
109
+
110
+ cop = ac_props['copnfcooling']
111
+ new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_btu_per_hr.round}Btu/hr #{cop}COP"
112
+
113
+ # Rename
114
+ if rename
115
+ coil_cooling_dx_single_speed.setName(new_comp_name)
116
+ end
117
+
118
+ return cop
119
+ end
120
+
121
+ # Applies the standard efficiency ratings to this object.
122
+ #
123
+ # @param coil_cooling_dx_single_speed [OpenStudio::Model::CoilCoolingDXSingleSpeed] coil cooling dx single speed object
124
+ # @param sql_db_vars_map [Hash] hash map
125
+ # @param sys_type [String] HVAC system type
126
+ # @return [Hash] hash of coil objects
127
+ def coil_cooling_dx_single_speed_apply_efficiency_and_curves(coil_cooling_dx_single_speed, sql_db_vars_map, sys_type)
128
+ # Preserve the original name
129
+ orig_name = coil_cooling_dx_single_speed.name.to_s
130
+
131
+ # Find the minimum COP and rename with efficiency rating
132
+ # Set last argument to false to avoid renaming coil, since that complicates lookup of HP heating coil efficiency later
133
+ cop = coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_speed, sys_type, false)
134
+
135
+ # Map the original name to the new name
136
+ sql_db_vars_map[coil_cooling_dx_single_speed.name.to_s] = orig_name
137
+
138
+ # Set the efficiency values
139
+ unless cop.nil?
140
+ coil_cooling_dx_single_speed.setRatedCOP(OpenStudio::OptionalDouble.new(cop))
141
+ end
142
+
143
+ return sql_db_vars_map
144
+ end
145
+ end
@@ -0,0 +1,106 @@
1
+ class ASHRAE901PRM < Standard
2
+ # @!group CoilCoolingDXTwoSpeed
3
+
4
+ include ASHRAEPRMCoilDX
5
+
6
+ # Finds capacity in W
7
+ #
8
+ # @param coil_cooling_dx_two_speed [OpenStudio::Model::CoilCoolingDXTwoSpeed] coil cooling dx two speed object
9
+ # @param sys_type [String] HVAC system type
10
+ # @return [Double] capacity in W to be used for find object
11
+ def coil_cooling_dx_two_speed_find_capacity(coil_cooling_dx_two_speed, sys_type)
12
+ capacity_w = nil
13
+ if coil_cooling_dx_two_speed.ratedHighSpeedTotalCoolingCapacity.is_initialized
14
+ capacity_w = coil_cooling_dx_two_speed.ratedHighSpeedTotalCoolingCapacity.get
15
+ elsif coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.is_initialized
16
+ capacity_w = coil_cooling_dx_two_speed.autosizedRatedHighSpeedTotalCoolingCapacity.get
17
+ else
18
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{coil_cooling_dx_two_speed.name} capacity is not available, cannot apply efficiency standard.")
19
+ return 0.0
20
+ end
21
+
22
+ # If it's a PTAC or PTHP System, we need to divide the capacity by the potential zone multiplier
23
+ # because the COP is dependent on capacity, and the capacity should be the capacity of a single zone, not all the zones
24
+ if sys_type == 'PTAC' || sys_type == 'PTHP'
25
+ mult = 1
26
+ comp = coil_cooling_dx_two_speed.containingZoneHVACComponent
27
+ if comp.is_initialized
28
+ if comp.get.thermalZone.is_initialized
29
+ mult = comp.get.thermalZone.get.multiplier
30
+ if mult > 1
31
+ total_cap = capacity_w
32
+ capacity_w /= mult
33
+ OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "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 #{mult} to give #{capacity_kbtu_per_hr = OpenStudio.convert(capacity_w, 'W', 'kBtu/hr').get.round(2)}kBTU/hr.")
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ return capacity_w
40
+ end
41
+
42
+ # Finds lookup object in standards and return efficiency
43
+ #
44
+ # @param coil_cooling_dx_two_speed [OpenStudio::Model::CoilCoolingDXTwoSpeed] coil cooling dx two speed object
45
+ # @param sys_type [String] HVAC system type
46
+ # @param rename [Bool] if true, object will be renamed to include capacity and efficiency level
47
+ # @return [Double] full load efficiency (COP)
48
+ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, sys_type, rename = false)
49
+ # find properties
50
+ capacity_w = coil_cooling_dx_two_speed_find_capacity(coil_cooling_dx_two_speed, sys_type)
51
+ capacity_btu_per_hr = OpenStudio.convert(capacity_w, 'W', 'Btu/hr').get
52
+ search_criteria = coil_dx_find_search_criteria(coil_cooling_dx_two_speed, capacity_btu_per_hr, sys_type)
53
+
54
+ # Lookup efficiencies depending on whether it is a unitary AC or a heat pump
55
+ ac_props = nil
56
+ ac_props = if sys_type == 'PSZ_HP' || sys_type == 'PTHP'
57
+ model_find_object(standards_data['heat_pumps'], search_criteria, capacity_btu_per_hr, Date.today)
58
+ else
59
+ model_find_object(standards_data['unitary_acs'], search_criteria, capacity_btu_per_hr, Date.today)
60
+ end
61
+
62
+ # Get the minimum efficiency standards
63
+ cop = nil
64
+
65
+ # Check to make sure properties were found
66
+ if ac_props.nil?
67
+ OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{coil_cooling_dx_two_speed.name}, cannot find efficiency info using #{search_criteria}, cannot apply efficiency standard.")
68
+ return cop # value of nil
69
+ end
70
+
71
+ cop = ac_props['copnfcooling']
72
+ new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_btu_per_hr.round}Btu/hr #{cop}COP"
73
+
74
+ # Rename
75
+ if rename
76
+ coil_cooling_dx_two_speed.setName(new_comp_name)
77
+ end
78
+
79
+ return cop
80
+ end
81
+
82
+ # Applies the standard efficiency ratings to this object.
83
+ #
84
+ # @param coil_cooling_dx_two_speed [OpenStudio::Model::CoilCoolingDXTwoSpeed] coil cooling dx two speed object
85
+ # @param sql_db_vars_map [Hash] hash map
86
+ # @param sys_type [String] HVAC system type
87
+ # @return [Hash] hash of coil objects
88
+ def coil_cooling_dx_two_speed_apply_efficiency_and_curves(coil_cooling_dx_two_speed, sql_db_vars_map, sys_type)
89
+ # Preserve the original name
90
+ orig_name = coil_cooling_dx_two_speed.name.to_s
91
+
92
+ # Find the minimum COP and rename with efficiency rating
93
+ cop = coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, sys_type, true)
94
+
95
+ # Map the original name to the new name
96
+ sql_db_vars_map[coil_cooling_dx_two_speed.name.to_s] = orig_name
97
+
98
+ # Set the efficiency values
99
+ unless cop.nil?
100
+ coil_cooling_dx_two_speed.setRatedHighSpeedCOP(cop)
101
+ coil_cooling_dx_two_speed.setRatedLowSpeedCOP(cop)
102
+ end
103
+
104
+ return sql_db_vars_map
105
+ end
106
+ end
@@ -0,0 +1,71 @@
1
+ # A variety of DX coil methods that are the same regardless of coil type.
2
+ # These methods are available to:
3
+ # CoilCoolingDXSingleSpeed, CoilCoolingDXTwoSpeed, CoilHeatingDXSingleSpeed
4
+ module ASHRAEPRMCoilDX
5
+ # @!group CoilDX
6
+
7
+ # Finds the subcategory.
8
+ #
9
+ # @param coil_dx [OpenStudio::Model::StraightComponent] coil cooling object
10
+ # @param capacity [Double] capacity in btu/hr
11
+ # @param sys_type [String] HVAC system type
12
+ # @return [String] the coil_dx_subcategory(coil_dx)
13
+ def coil_dx_subcategory(coil_dx, capacity, sys_type)
14
+ sub_category = ''
15
+
16
+ # heating coil
17
+ if coil_dx.iddObjectType.valueName.to_s.include? 'OS_Coil_Heating_DX'
18
+ if sys_type == 'PTHP'
19
+ sub_category = 'PTHP'
20
+ elsif capacity < 65000
21
+ sub_category = 'Single Package'
22
+ else
23
+ sub_category = '47F db/43F wb outdoor air'
24
+ end
25
+ end
26
+
27
+ # cooling coil
28
+ if coil_dx.iddObjectType.valueName.to_s.include? 'OS_Coil_Cooling_DX'
29
+ if sys_type == 'PTHP'
30
+ sub_category = 'PTHP'
31
+ elsif sys_type == 'PTAC'
32
+ sub_category = 'PTAC'
33
+ elsif sys_type == 'PSZ_HP'
34
+ if capacity < 65000
35
+ sub_category = 'Single Package'
36
+ else
37
+ sub_category = 'Split-system and single package'
38
+ end
39
+ else
40
+ sub_category = 'Split-system and single package'
41
+ end
42
+ end
43
+
44
+ return sub_category
45
+ end
46
+
47
+ # Finds the search criteria
48
+ #
49
+ # @param coil_dx [OpenStudio::Model::StraightComponent] coil cooling object
50
+ # @param capacity [Double] capacity in btu/hr
51
+ # @param sys_type [String] HVAC system type
52
+ # @return [hash] has for search criteria to be used for find object
53
+ def coil_dx_find_search_criteria(coil_dx, capacity, sys_type)
54
+ search_criteria = {}
55
+ search_criteria['template'] = template
56
+
57
+ search_criteria['cooling_type'] = 'AirCooled'
58
+
59
+ # Get the coil_dx_subcategory(coil_dx)
60
+ subcategory = coil_dx_subcategory(coil_dx, capacity, sys_type)
61
+ if subcategory != ''
62
+ search_criteria['subcategory'] = subcategory
63
+ end
64
+
65
+ if coil_dx.iddObjectType.valueName.to_s != 'OS_Coil_Heating_DX_SingleSpeed'
66
+ search_criteria['heating_type'] = 'All Other'
67
+ end
68
+
69
+ return search_criteria
70
+ end
71
+ end