From 77cba4e6dceedc7268fe47c9acaff89f94988af0 Mon Sep 17 00:00:00 2001 From: Eric Ringold Date: Fri, 17 May 2024 13:35:32 -0600 Subject: [PATCH 1/2] protect against setting hx effectiveness at 75% to zero - throws error in 3.8 --- ...type.HeatExchangerAirToAirSensibleAndLatent.rb | 15 +++++++++++---- .../standards/Standards.HeatExchangerSensLat.rb | 15 +++++++++++---- .../nrel_zne_ready_2017.AirLoopHVAC.rb | 14 +++++++++----- .../standards/necb/NECB2011/hvac_systems.rb | 15 +++++++++++---- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb b/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb index 1732559a58..82c2d6a367 100644 --- a/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +++ b/lib/openstudio-standards/prototypes/common/objects/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb @@ -119,12 +119,19 @@ def heat_exchanger_air_to_air_sensible_and_latent_apply_prototype_efficiency_ent heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100HeatingAirFlow(full_htg_sens_eff) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(full_htg_lat_eff) - heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) - heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(full_cool_sens_eff) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(full_cool_lat_eff) - heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) - heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) + if model.version < OpenStudio::VersionString.new('3.8.0') + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) + else + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) unless part_htg_sens_eff.zero? + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) unless part_htg_lat_eff.zero? + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) unless part_cool_sens_eff.zero? + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) unless part_cool_lat_eff.zero? + end OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HeatExchangerSensLat', "For #{heat_exchanger_air_to_air_sensible_and_latent.name}: Set sensible and latent effectiveness calculated by using ERR.") return true diff --git a/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb b/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb index 42ae3618d8..41daab0350 100644 --- a/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +++ b/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb @@ -11,12 +11,19 @@ def heat_exchanger_air_to_air_sensible_and_latent_apply_effectiveness(heat_excha heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100HeatingAirFlow(full_htg_sens_eff) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(full_htg_lat_eff) - heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) - heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(full_cool_sens_eff) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(full_cool_lat_eff) - heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) - heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) + if model.version < OpenStudio::VersionString.new('3.8.0') + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) + else + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) unless part_htg_sens_eff.zero? + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) unless part_htg_lat_eff.zero? + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) unless part_cool_sens_eff.zero? + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(part_cool_lat_eff) unless part_cool_lat_eff.zero? + end OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.HeatExchangerSensLat', "For #{heat_exchanger_air_to_air_sensible_and_latent.name}: Set sensible and latent effectiveness.") diff --git a/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb b/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb index 5c48ab0cbb..322ecbce0d 100644 --- a/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +++ b/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb @@ -808,12 +808,14 @@ def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ER if erv_type == 'HRV' erv.setSensibleEffectivenessat100HeatingAirFlow(0.865) erv.setLatentEffectivenessat100HeatingAirFlow(0.0) - erv.setSensibleEffectivenessat75HeatingAirFlow(0.887) - erv.setLatentEffectivenessat75HeatingAirFlow(0.0) erv.setSensibleEffectivenessat100CoolingAirFlow(0.865) erv.setLatentEffectivenessat100CoolingAirFlow(0.0) + erv.setSensibleEffectivenessat75HeatingAirFlow(0.887) erv.setSensibleEffectivenessat75CoolingAirFlow(0.887) - erv.setLatentEffectivenessat75CoolingAirFlow(0.0) + if model.version < OpenStudio::VersionString.new('3.8.0') + erv.setLatentEffectivenessat75HeatingAirFlow(0.0) + erv.setLatentEffectivenessat75CoolingAirFlow(0.0) + end else erv.setSensibleEffectivenessat100HeatingAirFlow(0.755) erv.setLatentEffectivenessat100HeatingAirFlow(0.564) @@ -829,11 +831,13 @@ def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ER erv.setSensibleEffectivenessat100HeatingAirFlow(0.75) erv.setLatentEffectivenessat100HeatingAirFlow(0.0) erv.setSensibleEffectivenessat75HeatingAirFlow(0.79) - erv.setLatentEffectivenessat75HeatingAirFlow(0.0) erv.setSensibleEffectivenessat100CoolingAirFlow(0.75) erv.setLatentEffectivenessat100CoolingAirFlow(0.0) erv.setSensibleEffectivenessat75CoolingAirFlow(0.78) - erv.setLatentEffectivenessat75CoolingAirFlow(0.0) + if model.version < OpenStudio::VersionString.new('3.8.0') + erv.setLatentEffectivenessat75HeatingAirFlow(0.0) + erv.setLatentEffectivenessat75CoolingAirFlow(0.0) + end else erv.setSensibleEffectivenessat100HeatingAirFlow(0.75) erv.setLatentEffectivenessat100HeatingAirFlow(0.74) diff --git a/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb b/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb index ae364a156c..666ceac09c 100644 --- a/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +++ b/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb @@ -383,12 +383,19 @@ def heat_exchanger_air_to_air_sensible_and_latent_apply_effectiveness(heat_excha heat_exchanger_air_to_air_sensible_and_latent.setHeatExchangerType(erv_info['HeatExchangerType']) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100HeatingAirFlow(erv_info['SensibleEffectivenessat100HeatingAirFlow']) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(erv_info['LatentEffectivenessat100HeatingAirFlow']) - heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow']) - heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow']) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(erv_info['SensibleEffectivenessat100CoolingAirFlow']) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(erv_info['LatentEffectivenessat100CoolingAirFlow']) - heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow']) - heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(erv_info['LatentEffectivenessat75CoolingAirFlow']) + if model.version < OpenStudio::VersionString.new('3.8.0') + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow']) + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow']) + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow']) + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(erv_info['LatentEffectivenessat75CoolingAirFlow']) + else + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow']) unless erv_info['SensibleEffectivenessat75HeatingAirFlow'].zero? + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow']) unless erv_info['LatentEffectivenessat75HeatingAirFlow'].zero? + heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow']) unless erv_info['SensibleEffectivenessat75CoolingAirFlow'].zero? + heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75CoolingAirFlow(erv_info['LatentEffectivenessat75CoolingAirFlow']) unless erv_info['LatentEffectivenessat75CoolingAirFlow'].zero? + end heat_exchanger_air_to_air_sensible_and_latent.setSupplyAirOutletTemperatureControl(erv_info['SupplyAirOutletTemperatureControl']) heat_exchanger_air_to_air_sensible_and_latent.setFrostControlType(erv_info['FrostControlType']) heat_exchanger_air_to_air_sensible_and_latent.setEconomizerLockout(erv_info['EconomizerLockout']) From bcf3722a06a29df883a35f1347ede5a15ccd5847 Mon Sep 17 00:00:00 2001 From: Eric Ringold Date: Fri, 17 May 2024 15:52:54 -0600 Subject: [PATCH 2/2] get the model from objects --- .../standards/Standards.HeatExchangerSensLat.rb | 2 +- .../nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb | 4 ++-- .../standards/necb/NECB2011/hvac_systems.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb b/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb index 41daab0350..ff15cec88d 100644 --- a/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +++ b/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb @@ -13,7 +13,7 @@ def heat_exchanger_air_to_air_sensible_and_latent_apply_effectiveness(heat_excha heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(full_htg_lat_eff) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(full_cool_sens_eff) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(full_cool_lat_eff) - if model.version < OpenStudio::VersionString.new('3.8.0') + if heat_exchanger_air_to_air_sensible_and_latent.model.version < OpenStudio::VersionString.new('3.8.0') heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(part_htg_sens_eff) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(part_htg_lat_eff) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(part_cool_sens_eff) diff --git a/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb b/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb index 322ecbce0d..9ac631e68b 100644 --- a/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb +++ b/lib/openstudio-standards/standards/ashrae_90_1/nrel_zne_ready_2017/nrel_zne_ready_2017.AirLoopHVAC.rb @@ -812,7 +812,7 @@ def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ER erv.setLatentEffectivenessat100CoolingAirFlow(0.0) erv.setSensibleEffectivenessat75HeatingAirFlow(0.887) erv.setSensibleEffectivenessat75CoolingAirFlow(0.887) - if model.version < OpenStudio::VersionString.new('3.8.0') + if erv.model.version < OpenStudio::VersionString.new('3.8.0') erv.setLatentEffectivenessat75HeatingAirFlow(0.0) erv.setLatentEffectivenessat75CoolingAirFlow(0.0) end @@ -834,7 +834,7 @@ def air_loop_hvac_apply_energy_recovery_ventilator_efficiency(erv, erv_type: 'ER erv.setSensibleEffectivenessat100CoolingAirFlow(0.75) erv.setLatentEffectivenessat100CoolingAirFlow(0.0) erv.setSensibleEffectivenessat75CoolingAirFlow(0.78) - if model.version < OpenStudio::VersionString.new('3.8.0') + if erv.model.version < OpenStudio::VersionString.new('3.8.0') erv.setLatentEffectivenessat75HeatingAirFlow(0.0) erv.setLatentEffectivenessat75CoolingAirFlow(0.0) end diff --git a/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb b/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb index 666ceac09c..95632b6053 100644 --- a/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +++ b/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb @@ -385,7 +385,7 @@ def heat_exchanger_air_to_air_sensible_and_latent_apply_effectiveness(heat_excha heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100HeatingAirFlow(erv_info['LatentEffectivenessat100HeatingAirFlow']) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat100CoolingAirFlow(erv_info['SensibleEffectivenessat100CoolingAirFlow']) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat100CoolingAirFlow(erv_info['LatentEffectivenessat100CoolingAirFlow']) - if model.version < OpenStudio::VersionString.new('3.8.0') + if heat_exchanger_air_to_air_sensible_and_latent.model.version < OpenStudio::VersionString.new('3.8.0') heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75HeatingAirFlow(erv_info['SensibleEffectivenessat75HeatingAirFlow']) heat_exchanger_air_to_air_sensible_and_latent.setLatentEffectivenessat75HeatingAirFlow(erv_info['LatentEffectivenessat75HeatingAirFlow']) heat_exchanger_air_to_air_sensible_and_latent.setSensibleEffectivenessat75CoolingAirFlow(erv_info['SensibleEffectivenessat75CoolingAirFlow'])