From fbc3b5458956bdbf32ffd733d51740037899781f Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Fri, 1 Mar 2024 11:08:02 -0800 Subject: [PATCH 1/8] Update references and expected test results for NECB. --- .../common/objects/Prototype.utilities.rb | 12 ++++++------ ...nce_unitary_efficiencies_expected_results.csv | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb index 1119311254..1674c7d634 100644 --- a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +++ b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb @@ -275,7 +275,7 @@ def cop_to_seer_cooling_no_fan(cop) end # Convert from SEER to COP (with fan) for cooling coils - # per the method specified in 90.1-2013 Appendix G + # per the method specified in Thornton et al. 2011 # # @param seer [Double] seasonal energy efficiency ratio (SEER) # @return [Double] Coefficient of Performance (COP) @@ -287,7 +287,7 @@ def seer_to_cop_cooling_with_fan(seer) end # Convert from COP to SEER (with fan) for cooling coils - # per the method specified in 90.1-2013 Appendix G + # per the method specified in Thornton et al. 2011 # # @param cop [Double] Coefficient of Performance (COP) # @return [Double] seasonal energy efficiency ratio (SEER) @@ -345,9 +345,9 @@ def hspf_to_cop_heating_with_fan(hspf) # @return [Double] Coefficient of Performance (COP) def eer_to_cop_no_fan(eer, capacity_w = nil) if capacity_w.nil? - # The PNNL Method. + # From Thornton et al. 2011 # r is the ratio of supply fan power to total equipment power at the rating condition, - # assumed to be 0.12 for the reference buildings per PNNL. + # assumed to be 0.12 for the reference buildings per Thornton et al. 2011. r = 0.12 cop = (eer / OpenStudio.convert(1.0, 'W', 'Btu/h').get + r) / (1 - r) else @@ -367,9 +367,9 @@ def eer_to_cop_no_fan(eer, capacity_w = nil) # @return [Double] Energy Efficiency Ratio (EER) def cop_to_eer_no_fan(cop, capacity_w = nil) if capacity_w.nil? - # The PNNL Method. + # From Thornton et al. 2011 # r is the ratio of supply fan power to total equipment power at the rating condition, - # assumed to be 0.12 for the reference buildngs per PNNL. + # assumed to be 0.12 for the reference buildngs per Thornton et al. 2011. r = 0.12 eer = OpenStudio.convert(1.0, 'W', 'Btu/h').get * (cop * (1 - r) - r) else diff --git a/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv b/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv index 7797ffe535..3a9133a416 100644 --- a/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv +++ b/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv @@ -1,9 +1,9 @@ Heating Type,Min Capacity (Btu per hr),Max Capacity (Btu per hr),Seasonal Energy Efficiency Ratio (SEER),Energy Efficiency Ratio (EER) -Electric Resistance,0,65000,14.0, -Electric Resistance,65001,249999,,9.7 -Electric Resistance,250000,759999,,8.39 -Electric Resistance,760000,9999999999,,8.12 -All Other,0,65000,14.0, -All Other,65001,249999,,9.7 -All Other,250000,759999,,8.21 -All Other,760000,9999999999,,7.94 \ No newline at end of file +Electric Resistance,0,65000,17.98, +Electric Resistance,65001,249999,,11.49 +Electric Resistance,250000,759999,,10.0 +Electric Resistance,760000,9999999999,,9.69 +All Other,0,65000,17.98, +All Other,65001,249999,,11.49 +All Other,250000,759999,,9.8 +All Other,760000,9999999999,,9.49 \ No newline at end of file From 83b75401700e4cdbf50a137677535587628c358d Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Fri, 1 Mar 2024 11:40:28 -0800 Subject: [PATCH 2/8] Fix error in `seer_to_cop_cooling` and remove all `with_fan` to be consistent throughout. --- .../common/objects/Prototype.utilities.rb | 12 ++++++------ .../Standards.CoilCoolingDXMultiSpeed.rb | 8 ++++---- .../Standards.CoilCoolingDXSingleSpeed.rb | 4 ++-- .../Standards.CoilCoolingDXTwoSpeed.rb | 4 ++-- .../Standards.CoilHeatingDXMultiSpeed.rb | 2 +- .../Standards.CoilHeatingDXSingleSpeed.rb | 2 +- .../standards/necb/ECMS/hvac_systems.rb | 18 +++++++++--------- .../tests/test_ecm_modify_unitary_rules.rb | 2 +- .../tests/test_necb_unitary_rules.rb | 2 +- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb index 1674c7d634..b8f3f64e03 100644 --- a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +++ b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb @@ -267,7 +267,7 @@ def seer_to_cop_cooling_no_fan(seer) # # @param cop [Double] COP # @return [Double] Seasonal Energy Efficiency Ratio - def cop_to_seer_cooling_no_fan(cop) + def cop_no_fan_to_seer_cooling(cop) delta = 0.3796**2 - 4.0 * 0.0076 * cop seer = (-delta**0.5 + 0.3796) / (2.0 * 0.0076) @@ -279,9 +279,9 @@ def cop_to_seer_cooling_no_fan(cop) # # @param seer [Double] seasonal energy efficiency ratio (SEER) # @return [Double] Coefficient of Performance (COP) - def seer_to_cop_cooling_with_fan(seer) + def seer_to_cop_cooling(seer) eer = -0.0182 * seer * seer + 1.1088 * seer - cop = (eer / OpenStudio.convert(1.0, 'W', 'Btu/h').get + 0.12) / (1 - 0.12) + cop = eer_to_cop(eer) return cop end @@ -291,7 +291,7 @@ def seer_to_cop_cooling_with_fan(seer) # # @param cop [Double] Coefficient of Performance (COP) # @return [Double] seasonal energy efficiency ratio (SEER) - def cop_to_seer_cooling_with_fan(cop) + def cop_to_seer_cooling(cop) eer = cop_to_eer(cop) delta = 1.1088**2 - 4.0 * 0.0182 * eer seer = (1.1088 - delta**0.5) / (2.0 * 0.0182) @@ -326,11 +326,11 @@ def hspf_to_cop_heating_no_fan(hspf) end # Convert from HSPF to COP (with fan) for heat pump heating coils - # @ref [References::ASHRAE9012013] Appendix G + # @ref ASHRAE RP-1197 # # @param hspf [Double] heating seasonal performance factor (HSPF) # @return [Double] Coefficient of Performance (COP) - def hspf_to_cop_heating_with_fan(hspf) + def hspf_to_cop_heating(hspf) cop = -0.0255 * hspf * hspf + 0.6239 * hspf return cop diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb index 6310858a46..8fc96c6464 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb @@ -172,7 +172,7 @@ def coil_cooling_dx_multi_speed_apply_efficiency_and_curves(coil_cooling_dx_mult # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -189,7 +189,7 @@ def coil_cooling_dx_multi_speed_apply_efficiency_and_curves(coil_cooling_dx_mult # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -272,7 +272,7 @@ def coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -289,7 +289,7 @@ def coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb index 07d1467f90..de4eea45b9 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb @@ -132,7 +132,7 @@ def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_spe # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -148,7 +148,7 @@ def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_spe # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb index 82cea17db4..3122da1694 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb @@ -62,7 +62,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -78,7 +78,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb index ba86cb1e44..71eb51094e 100644 --- a/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb @@ -165,7 +165,7 @@ def coil_heating_dx_multi_speed_apply_efficiency_and_curves(coil_heating_dx_mult # If specified as SEER unless hp_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = hp_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) coil_heating_dx_multi_speed.setName("#{coil_heating_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXMultiSpeed', "For #{template}: #{coil_heating_dx_multi_speed.name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb index 4d7c2d8bb6..600992ad61 100644 --- a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb @@ -148,7 +148,7 @@ def coil_heating_dx_single_speed_standard_minimum_cop(coil_heating_dx_single_spe # If specified as HSPF unless ac_props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = ac_props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating_with_fan(min_hspf) + cop = hspf_to_cop_heating(min_hspf) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}") end diff --git a/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb b/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb index 229c0425df..6d88a60ebc 100755 --- a/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +++ b/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb @@ -2662,7 +2662,7 @@ def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed, # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2678,7 +2678,7 @@ def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed, # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2742,7 +2742,7 @@ def coil_heating_dx_single_speed_apply_cop(coil_heating_dx_single_speed, # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating_with_fan(min_hspf) + cop = hspf_to_cop_heating(min_hspf) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2798,7 +2798,7 @@ def coil_cooling_dx_variable_speed_apply_cop(coil_cooling_dx_variable_speed, # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2814,7 +2814,7 @@ def coil_cooling_dx_variable_speed_apply_cop(coil_cooling_dx_variable_speed, # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_with_fan(min_seer) + cop = seer_to_cop_cooling(min_seer) new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2878,7 +2878,7 @@ def coil_heating_dx_variable_speed_apply_cop(coil_heating_dx_variable_speed, # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating_with_fan(min_hspf) + cop = hspf_to_cop_heating(min_hspf) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2942,7 +2942,7 @@ def airconditioner_variablerefrigerantflow_cooling_apply_cop(airconditioner_vari # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating_with_fan(min_hspf) + cop = hspf_to_cop_heating(min_hspf) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -3006,7 +3006,7 @@ def airconditioner_variablerefrigerantflow_heating_apply_cop(airconditioner_vari # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating_with_fan(min_hspf) + cop = hspf_to_cop_heating(min_hspf) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -3456,7 +3456,7 @@ def modify_unitary_cop(model:, unitary_cop:, sizing_done:, sql_db_vars_map:) if unitary_cop['minimum_energy_efficiency_ratio'] cop = eer_to_cop(unitary_cop['minimum_energy_efficiency_ratio'].to_f) elsif unitary_cop['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_with_fan(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f) + cop = seer_to_cop_cooling(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f) elsif unitary_cop['minimum_coefficient_of_performance_cooling'] cop = unitary_cop['minimum_coefficient_of_performance_cooling'].to_f end diff --git a/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb b/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb index 4fc8c04bea..a7644b050b 100644 --- a/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb +++ b/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb @@ -134,7 +134,7 @@ def test_modify_unitary_efficiency for int in 0..heating_type_cap[heating_type].size - 1 output_line_text += "#{heating_type},#{heating_type_min_cap[heating_type][int]},#{heating_type_max_cap[heating_type][int]}," if efficiency_type[heating_type][int] == 'Seasonal Energy Efficiency Ratio (SEER)' - actual_unitary_eff[heating_type][int] = (standard.cop_to_seer_cooling_with_fan(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) + actual_unitary_eff[heating_type][int] = (standard.cop_to_seer_cooling(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) output_line_text += "#{actual_unitary_eff[heating_type][int]},,\n" elsif efficiency_type[heating_type][int] == 'Energy Efficiency Ratio (EER)' actual_unitary_eff[heating_type][int] = (standard.cop_to_eer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) diff --git a/test/necb/unit_tests/tests/test_necb_unitary_rules.rb b/test/necb/unit_tests/tests/test_necb_unitary_rules.rb index 42d961ef71..b9f19a9f63 100644 --- a/test/necb/unit_tests/tests/test_necb_unitary_rules.rb +++ b/test/necb/unit_tests/tests/test_necb_unitary_rules.rb @@ -136,7 +136,7 @@ def test_unitary_efficiency for int in 0..heating_type_cap[heating_type].size - 1 output_line_text += "#{heating_type},#{heating_type_min_cap[heating_type][int]},#{heating_type_max_cap[heating_type][int]}," if efficiency_type[heating_type][int] == 'Seasonal Energy Efficiency Ratio (SEER)' - actual_unitary_eff[heating_type][int] = (standard.cop_to_seer_cooling_with_fan(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) + actual_unitary_eff[heating_type][int] = (standard.cop_to_seer_cooling(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) output_line_text += "#{actual_unitary_eff[heating_type][int]},\n" elsif efficiency_type[heating_type][int] == 'Energy Efficiency Ratio (EER)' actual_unitary_eff[heating_type][int] = (standard.cop_to_eer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) From 117979ec6bab4bf648bc318d86fd5ee0bb3dfab6 Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Fri, 1 Mar 2024 14:03:58 -0800 Subject: [PATCH 3/8] Revert expected results changes. --- ...b2011_compliance_unitary_efficiencies_expected_results.csv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv b/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv index 3a9133a416..b19011a17f 100644 --- a/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv +++ b/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv @@ -1,9 +1,9 @@ Heating Type,Min Capacity (Btu per hr),Max Capacity (Btu per hr),Seasonal Energy Efficiency Ratio (SEER),Energy Efficiency Ratio (EER) -Electric Resistance,0,65000,17.98, +Electric Resistance,0,65000,14.0, Electric Resistance,65001,249999,,11.49 Electric Resistance,250000,759999,,10.0 Electric Resistance,760000,9999999999,,9.69 -All Other,0,65000,17.98, +All Other,0,65000,14.0, All Other,65001,249999,,11.49 All Other,250000,759999,,9.8 All Other,760000,9999999999,,9.49 \ No newline at end of file From 8c21140faaafb7856de6dff42590a8df75a7fd53 Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Mon, 4 Mar 2024 08:57:39 -0800 Subject: [PATCH 4/8] COP input to coils should be a "no fan" COP. --- .../standards/Standards.CoilCoolingDXMultiSpeed.rb | 8 ++++---- .../standards/Standards.CoilCoolingDXSingleSpeed.rb | 4 ++-- .../standards/Standards.CoilCoolingDXTwoSpeed.rb | 4 ++-- .../standards/Standards.CoilHeatingDXMultiSpeed.rb | 2 +- .../standards/Standards.CoilHeatingDXSingleSpeed.rb | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb index 8fc96c6464..8250e2d32a 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb @@ -172,7 +172,7 @@ def coil_cooling_dx_multi_speed_apply_efficiency_and_curves(coil_cooling_dx_mult # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -189,7 +189,7 @@ def coil_cooling_dx_multi_speed_apply_efficiency_and_curves(coil_cooling_dx_mult # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -272,7 +272,7 @@ def coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -289,7 +289,7 @@ def coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb index de4eea45b9..c8d853a0c3 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb @@ -132,7 +132,7 @@ def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_spe # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -148,7 +148,7 @@ def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_spe # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb index 3122da1694..e5bfd11521 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb @@ -62,7 +62,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -78,7 +78,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb index 71eb51094e..792e8c81be 100644 --- a/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb @@ -165,7 +165,7 @@ def coil_heating_dx_multi_speed_apply_efficiency_and_curves(coil_heating_dx_mult # If specified as SEER unless hp_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = hp_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) coil_heating_dx_multi_speed.setName("#{coil_heating_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXMultiSpeed', "For #{template}: #{coil_heating_dx_multi_speed.name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb index 600992ad61..9b0f376693 100644 --- a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb @@ -148,7 +148,7 @@ def coil_heating_dx_single_speed_standard_minimum_cop(coil_heating_dx_single_spe # If specified as HSPF unless ac_props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = ac_props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating(min_hspf) + cop = hspf_to_cop_heating_no_fan_heating(min_hspf) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}") end From 68bcbb29d7755dcba15dba7e9f363f80d3291d9b Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Tue, 5 Mar 2024 09:56:03 -0800 Subject: [PATCH 5/8] Fix typo. --- .../standards/Standards.CoilHeatingDXSingleSpeed.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb index 9b0f376693..83049d5b78 100644 --- a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb @@ -148,7 +148,7 @@ def coil_heating_dx_single_speed_standard_minimum_cop(coil_heating_dx_single_spe # If specified as HSPF unless ac_props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = ac_props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating_no_fan_heating(min_hspf) + cop = hspf_to_cop_heating_no_fan(min_hspf) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}") end From d7fe16b207ee018cb477beb38b17b51226e50811 Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Wed, 6 Mar 2024 09:15:45 -0800 Subject: [PATCH 6/8] Fix typo. --- .../standards/Standards.CoilCoolingDXTwoSpeed.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb index e5bfd11521..9b86641249 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb @@ -62,7 +62,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_no_fan_no_fan(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -78,7 +78,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_no_fan_no_fan(min_seer) + cop = seer_to_cop_cooling_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end From 92f52f1e2a0e7ae1ad5a102fa55a01bf7df782ce Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Wed, 6 Mar 2024 09:52:59 -0800 Subject: [PATCH 7/8] Add tests. --- .../common/objects/Prototype.utilities.rb | 2 +- .../test_apply_hvac_efficiency_standard.rb | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb index b8f3f64e03..8f7cbfe0f9 100644 --- a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +++ b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb @@ -365,7 +365,7 @@ def eer_to_cop_no_fan(eer, capacity_w = nil) # # @param cop [Double] COP # @return [Double] Energy Efficiency Ratio (EER) - def cop_to_eer_no_fan(cop, capacity_w = nil) + def cop_no_fan_to_eer(cop, capacity_w = nil) if capacity_w.nil? # From Thornton et al. 2011 # r is the ratio of supply fan power to total equipment power at the rating condition, diff --git a/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb b/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb index 23f9ddca50..1f50ffd4f4 100644 --- a/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb +++ b/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb @@ -49,4 +49,50 @@ def test_pthp_90_1_2019 # Apply the HVAC efficiency standard std.model_apply_hvac_efficiency_standard(model, climate_zone) end + + def test_efficiency_conversions + std = Standard.build('90.1-2019') + # SEER conversions + seer = 15 + cop_nf = std.seer_to_cop_cooling_no_fan(seer) + new_seer = std.cop_no_fan_to_seer_cooling(cop_nf) + assert(seer == new_seer) + + # COP conversions + cop = std.seer_to_cop_cooling(seer) + new_seer = std.cop_to_seer_cooling(cop) + assert(seer == new_seer) + + # EER conversions + eer = 11 + cop_nf = std.eer_to_cop_no_fan(eer) + cop = std.eer_to_cop(eer) + new_err = std.cop_no_fan_to_eer(cop_nf) + assert(cop_nf > cop) + assert(new_err == eer) + + # HSPF conversions + hspf = 9 + cop_nf = std.hspf_to_cop_heating_no_fan(hspf) + cop = std.hspf_to_cop_heating(hspf) + assert(cop_nf > cop) + + # kW/ton conversions + cop = 5 + kwpton = std.cop_to_kw_per_ton(5) + new_cop = std.kw_per_ton_to_cop(kwpton) + assert(cop == new_cop) + + # AFUE conversions + afue = 0.93 + te = std.afue_to_thermal_eff(afue) + new_afue = std.thermal_eff_to_afue(te) + assert (afue == new_afue) + + # Combustion efficiency conversions + tc = 0.8 + te = std.combustion_eff_to_thermal_eff(tc) + new_tc = std.thermal_eff_to_comb_eff(te) + assert(tc == new_tc) + end end \ No newline at end of file From 42603ab2e02bd4680689f8874648c4f4bda7e5b2 Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" <jeremy.lerond@pnnl.gov> Date: Wed, 6 Mar 2024 14:24:42 -0800 Subject: [PATCH 8/8] Change method names. Revert expected results. --- .../common/objects/Prototype.hvac_systems.rb | 2 +- .../common/objects/Prototype.utilities.rb | 12 ++--- .../Standards.CoilCoolingDXMultiSpeed.rb | 8 ++-- .../Standards.CoilCoolingDXSingleSpeed.rb | 4 +- .../Standards.CoilCoolingDXTwoSpeed.rb | 4 +- .../Standards.CoilHeatingDXMultiSpeed.rb | 2 +- .../Standards.CoilHeatingDXSingleSpeed.rb | 2 +- .../standards/necb/ECMS/hvac_systems.rb | 47 ++++++++++--------- ..._unitary_efficiencies_expected_results.csv | 12 ++--- .../tests/test_ecm_modify_unitary_rules.rb | 4 +- .../tests/test_necb_unitary_rules.rb | 4 +- .../test_apply_hvac_efficiency_standard.rb | 12 ++--- 12 files changed, 58 insertions(+), 55 deletions(-) diff --git a/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb b/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb index df172cf6e4..3796685f08 100644 --- a/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +++ b/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb @@ -5503,7 +5503,7 @@ def model_add_central_air_source_heat_pump(model, htg_coil = create_coil_heating_dx_single_speed(model, name: "#{air_loop.name} heating coil", type: 'Residential Central Air Source HP', - cop: hspf_to_cop_heating_no_fan(hspf)) + cop: hspf_to_cop_no_fan(hspf)) if model.version < OpenStudio::VersionString.new('3.5.0') htg_coil.setRatedSupplyFanPowerPerVolumeFlowRate(ac_w_per_cfm / OpenStudio.convert(1.0, 'cfm', 'm^3/s').get) else diff --git a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb index 8f7cbfe0f9..ed5fb78222 100644 --- a/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb +++ b/lib/openstudio-standards/prototypes/common/objects/Prototype.utilities.rb @@ -256,7 +256,7 @@ def load_hvac_map(hvac_map_file) # # @param seer [Double] seasonal energy efficiency ratio (SEER) # @return [Double] Coefficient of Performance (COP) - def seer_to_cop_cooling_no_fan(seer) + def seer_to_cop_no_fan(seer) cop = -0.0076 * seer * seer + 0.3796 * seer return cop @@ -267,7 +267,7 @@ def seer_to_cop_cooling_no_fan(seer) # # @param cop [Double] COP # @return [Double] Seasonal Energy Efficiency Ratio - def cop_no_fan_to_seer_cooling(cop) + def cop_no_fan_to_seer(cop) delta = 0.3796**2 - 4.0 * 0.0076 * cop seer = (-delta**0.5 + 0.3796) / (2.0 * 0.0076) @@ -279,7 +279,7 @@ def cop_no_fan_to_seer_cooling(cop) # # @param seer [Double] seasonal energy efficiency ratio (SEER) # @return [Double] Coefficient of Performance (COP) - def seer_to_cop_cooling(seer) + def seer_to_cop(seer) eer = -0.0182 * seer * seer + 1.1088 * seer cop = eer_to_cop(eer) @@ -291,7 +291,7 @@ def seer_to_cop_cooling(seer) # # @param cop [Double] Coefficient of Performance (COP) # @return [Double] seasonal energy efficiency ratio (SEER) - def cop_to_seer_cooling(cop) + def cop_to_seer(cop) eer = cop_to_eer(cop) delta = 1.1088**2 - 4.0 * 0.0182 * eer seer = (1.1088 - delta**0.5) / (2.0 * 0.0182) @@ -319,7 +319,7 @@ def cop_heating_to_cop_heating_no_fan(coph47, capacity_w) # # @param hspf [Double] heating seasonal performance factor (HSPF) # @return [Double] Coefficient of Performance (COP) - def hspf_to_cop_heating_no_fan(hspf) + def hspf_to_cop_no_fan(hspf) cop = -0.0296 * hspf * hspf + 0.7134 * hspf return cop @@ -330,7 +330,7 @@ def hspf_to_cop_heating_no_fan(hspf) # # @param hspf [Double] heating seasonal performance factor (HSPF) # @return [Double] Coefficient of Performance (COP) - def hspf_to_cop_heating(hspf) + def hspf_to_cop(hspf) cop = -0.0255 * hspf * hspf + 0.6239 * hspf return cop diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb index 8250e2d32a..f384b80b38 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb @@ -172,7 +172,7 @@ def coil_cooling_dx_multi_speed_apply_efficiency_and_curves(coil_cooling_dx_mult # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -189,7 +189,7 @@ def coil_cooling_dx_multi_speed_apply_efficiency_and_curves(coil_cooling_dx_mult # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -272,7 +272,7 @@ def coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") @@ -289,7 +289,7 @@ def coil_cooling_dx_multi_speed_standard_minimum_cop(coil_cooling_dx_multi_speed # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" # self.setName("#{self.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXMultiSpeed', "For #{template}: #{coil_cooling_dx_multi_speed.name}: #{cooling_type} #{heating_type} #{coil_dx_subcategory(coil_cooling_dx_multi_speed)} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb index c8d853a0c3..860d579051 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb @@ -132,7 +132,7 @@ def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_spe # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -148,7 +148,7 @@ def coil_cooling_dx_single_speed_standard_minimum_cop(coil_cooling_dx_single_spe # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb index 9b86641249..9c951fe1c1 100644 --- a/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb @@ -62,7 +62,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -78,7 +78,7 @@ def coil_cooling_dx_two_speed_standard_minimum_cop(coil_cooling_dx_two_speed, re # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_two_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXTwoSpeed', "For #{template}: #{coil_cooling_dx_two_speed.name}: #{cooling_type} #{heating_type} #{sub_category} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb index 792e8c81be..f18c9cdf74 100644 --- a/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb @@ -165,7 +165,7 @@ def coil_heating_dx_multi_speed_apply_efficiency_and_curves(coil_heating_dx_mult # If specified as SEER unless hp_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = hp_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling_no_fan(min_seer) + cop = seer_to_cop_no_fan(min_seer) coil_heating_dx_multi_speed.setName("#{coil_heating_dx_multi_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER") OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXMultiSpeed', "For #{template}: #{coil_heating_dx_multi_speed.name}: #{suppl_heating_type} #{subcategory} Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end diff --git a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb index 83049d5b78..ea727a1135 100644 --- a/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +++ b/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb @@ -148,7 +148,7 @@ def coil_heating_dx_single_speed_standard_minimum_cop(coil_heating_dx_single_spe # If specified as HSPF unless ac_props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = ac_props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating_no_fan(min_hspf) + cop = hspf_to_cop_no_fan(min_hspf) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round} Clg kBtu/hr #{min_hspf.round(1)}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: #{suppl_heating_type} #{sub_category} Cooling Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; HSPF = #{min_hspf}") end diff --git a/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb b/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb index 6d88a60ebc..4387d46340 100755 --- a/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +++ b/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb @@ -2662,7 +2662,7 @@ def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed, # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2670,7 +2670,7 @@ def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed, # If specified as EER unless ac_props['minimum_energy_efficiency_ratio'].nil? min_eer = ac_props['minimum_energy_efficiency_ratio'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2678,7 +2678,7 @@ def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed, # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2686,7 +2686,7 @@ def coil_cooling_dx_single_speed_apply_cop(coil_cooling_dx_single_speed, # If specified as EER (heat pump) unless ac_props['minimum_full_load_efficiency'].nil? min_eer = ac_props['minimum_full_load_efficiency'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXSingleSpeed', "For #{template}: #{coil_cooling_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2734,7 +2734,7 @@ def coil_heating_dx_single_speed_apply_cop(coil_heating_dx_single_speed, # If specified as EER unless props['minimum_energy_efficiency_ratio'].nil? min_eer = props['minimum_energy_efficiency_ratio'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2742,7 +2742,7 @@ def coil_heating_dx_single_speed_apply_cop(coil_heating_dx_single_speed, # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating(min_hspf) + cop = hspf_to_cop_no_fan(min_hspf) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2750,7 +2750,7 @@ def coil_heating_dx_single_speed_apply_cop(coil_heating_dx_single_speed, # If specified as EER (heat pump) unless props['minimum_full_load_efficiency'].nil? min_eer = props['minimum_full_load_efficiency'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2758,6 +2758,7 @@ def coil_heating_dx_single_speed_apply_cop(coil_heating_dx_single_speed, # If specified as COP unless props['minimum_coefficient_of_performance_heating'].nil? cop = props['minimum_coefficient_of_performance_heating'] + cop = cop_heating_to_cop_heating_no_fan(min_eer) new_comp_name = "#{coil_heating_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXSingleSpeed', "For #{template}: #{coil_heating_dx_single_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2798,7 +2799,7 @@ def coil_cooling_dx_variable_speed_apply_cop(coil_cooling_dx_variable_speed, # If specified as SEER unless ac_props['minimum_seasonal_energy_efficiency_ratio'].nil? min_seer = ac_props['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2806,7 +2807,7 @@ def coil_cooling_dx_variable_speed_apply_cop(coil_cooling_dx_variable_speed, # If specified as EER unless ac_props['minimum_energy_efficiency_ratio'].nil? min_eer = ac_props['minimum_energy_efficiency_ratio'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_cooling_dx_single_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2814,7 +2815,7 @@ def coil_cooling_dx_variable_speed_apply_cop(coil_cooling_dx_variable_speed, # if specified as SEER (heat pump) unless ac_props['minimum_seasonal_efficiency'].nil? min_seer = ac_props['minimum_seasonal_efficiency'] - cop = seer_to_cop_cooling(min_seer) + cop = seer_to_cop_no_fan(min_seer) new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}SEER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2822,7 +2823,7 @@ def coil_cooling_dx_variable_speed_apply_cop(coil_cooling_dx_variable_speed, # If specified as EER (heat pump) unless ac_props['minimum_full_load_efficiency'].nil? min_eer = ac_props['minimum_full_load_efficiency'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_cooling_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilCoolingDXVariableSpeed', "For #{template}: #{coil_cooling_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2870,7 +2871,7 @@ def coil_heating_dx_variable_speed_apply_cop(coil_heating_dx_variable_speed, # If specified as EER unless props['minimum_energy_efficiency_ratio'].nil? min_eer = props['minimum_energy_efficiency_ratio'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2878,7 +2879,7 @@ def coil_heating_dx_variable_speed_apply_cop(coil_heating_dx_variable_speed, # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating(min_hspf) + cop = hspf_to_cop_no_fan(min_hspf) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2886,7 +2887,7 @@ def coil_heating_dx_variable_speed_apply_cop(coil_heating_dx_variable_speed, # If specified as EER (heat pump) unless props['minimum_full_load_efficiency'].nil? min_eer = props['minimum_full_load_efficiency'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2894,6 +2895,7 @@ def coil_heating_dx_variable_speed_apply_cop(coil_heating_dx_variable_speed, # If specified as COP unless props['minimum_coefficient_of_performance_heating'].nil? cop = props['minimum_coefficient_of_performance_heating'] + cop = cop_heating_to_cop_heating_no_fan(min_eer) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.CoilHeatingDXVariableSpeed', "For #{template}: #{coil_heating_dx_variable_speed.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2934,7 +2936,7 @@ def airconditioner_variablerefrigerantflow_cooling_apply_cop(airconditioner_vari # If specified as EER unless props['minimum_energy_efficiency_ratio'].nil? min_eer = props['minimum_energy_efficiency_ratio'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2942,7 +2944,7 @@ def airconditioner_variablerefrigerantflow_cooling_apply_cop(airconditioner_vari # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating(min_hspf) + cop = hspf_to_cop_no_fan(min_hspf) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -2950,7 +2952,7 @@ def airconditioner_variablerefrigerantflow_cooling_apply_cop(airconditioner_vari # If specified as EER (heat pump) unless props['minimum_full_load_efficiency'].nil? min_eer = props['minimum_full_load_efficiency'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -2998,7 +3000,7 @@ def airconditioner_variablerefrigerantflow_heating_apply_cop(airconditioner_vari # If specified as EER unless props['minimum_energy_efficiency_ratio'].nil? min_eer = props['minimum_energy_efficiency_ratio'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -3006,7 +3008,7 @@ def airconditioner_variablerefrigerantflow_heating_apply_cop(airconditioner_vari # if specified as HSPF (heat pump) unless props['minimum_heating_seasonal_performance_factor'].nil? min_hspf = props['minimum_heating_seasonal_performance_factor'] - cop = hspf_to_cop_heating(min_hspf) + cop = hspf_to_cop_no_fan(min_hspf) new_comp_name = "#{coil_heating_dx_variable_speed.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_seer}HSPF" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; SEER = #{min_seer}") end @@ -3014,7 +3016,7 @@ def airconditioner_variablerefrigerantflow_heating_apply_cop(airconditioner_vari # If specified as EER (heat pump) unless props['minimum_full_load_efficiency'].nil? min_eer = props['minimum_full_load_efficiency'] - cop = eer_to_cop(min_eer) + cop = eer_to_cop_no_fan(min_eer) new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{min_eer}EER" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -3022,6 +3024,7 @@ def airconditioner_variablerefrigerantflow_heating_apply_cop(airconditioner_vari # If specified as COP unless props['minimum_coefficient_of_performance_heating'].nil? cop = props['minimum_coefficient_of_performance_heating'] + cop = cop_heating_to_cop_heating_no_fan(min_eer) new_comp_name = "#{airconditioner_variablerefrigerantflow.name} #{capacity_kbtu_per_hr.round}kBtu/hr #{cop}COP" OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.AirConditionerVariableRefrigerantFlow', "For #{template}: #{airconditioner_variablerefrigerantflow.name}: Capacity = #{capacity_kbtu_per_hr.round}kBtu/hr; EER = #{min_eer}") end @@ -3454,9 +3457,9 @@ def modify_unitary_cop(model:, unitary_cop:, sizing_done:, sql_db_vars_map:) if sizing_done cop = nil if unitary_cop['minimum_energy_efficiency_ratio'] - cop = eer_to_cop(unitary_cop['minimum_energy_efficiency_ratio'].to_f) + cop = eer_to_cop_no_fan(unitary_cop['minimum_energy_efficiency_ratio'].to_f) elsif unitary_cop['minimum_seasonal_energy_efficiency_ratio'] - cop = seer_to_cop_cooling(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f) + cop = seer_to_cop_no_fan(unitary_cop['minimum_seasonal_energy_efficiency_ratio'].to_f) elsif unitary_cop['minimum_coefficient_of_performance_cooling'] cop = unitary_cop['minimum_coefficient_of_performance_cooling'].to_f end diff --git a/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv b/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv index b19011a17f..7797ffe535 100644 --- a/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv +++ b/test/necb/unit_tests/expected_results/necb2011_compliance_unitary_efficiencies_expected_results.csv @@ -1,9 +1,9 @@ Heating Type,Min Capacity (Btu per hr),Max Capacity (Btu per hr),Seasonal Energy Efficiency Ratio (SEER),Energy Efficiency Ratio (EER) Electric Resistance,0,65000,14.0, -Electric Resistance,65001,249999,,11.49 -Electric Resistance,250000,759999,,10.0 -Electric Resistance,760000,9999999999,,9.69 +Electric Resistance,65001,249999,,9.7 +Electric Resistance,250000,759999,,8.39 +Electric Resistance,760000,9999999999,,8.12 All Other,0,65000,14.0, -All Other,65001,249999,,11.49 -All Other,250000,759999,,9.8 -All Other,760000,9999999999,,9.49 \ No newline at end of file +All Other,65001,249999,,9.7 +All Other,250000,759999,,8.21 +All Other,760000,9999999999,,7.94 \ No newline at end of file diff --git a/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb b/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb index a7644b050b..c118532675 100644 --- a/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb +++ b/test/necb/unit_tests/tests/test_ecm_modify_unitary_rules.rb @@ -134,10 +134,10 @@ def test_modify_unitary_efficiency for int in 0..heating_type_cap[heating_type].size - 1 output_line_text += "#{heating_type},#{heating_type_min_cap[heating_type][int]},#{heating_type_max_cap[heating_type][int]}," if efficiency_type[heating_type][int] == 'Seasonal Energy Efficiency Ratio (SEER)' - actual_unitary_eff[heating_type][int] = (standard.cop_to_seer_cooling(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) + actual_unitary_eff[heating_type][int] = (standard.cop_no_fan_to_seer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) output_line_text += "#{actual_unitary_eff[heating_type][int]},,\n" elsif efficiency_type[heating_type][int] == 'Energy Efficiency Ratio (EER)' - actual_unitary_eff[heating_type][int] = (standard.cop_to_eer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) + actual_unitary_eff[heating_type][int] = (standard.cop_no_fan_to_eer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) output_line_text += ",#{actual_unitary_eff[heating_type][int]},\n" elsif efficiency_type[heating_type][int] == 'Coefficient of Performance (COP)' actual_unitary_eff[heating_type][int] = sprintf('%.2f', actual_unitary_cop[heating_type][int].to_f) diff --git a/test/necb/unit_tests/tests/test_necb_unitary_rules.rb b/test/necb/unit_tests/tests/test_necb_unitary_rules.rb index b9f19a9f63..eb54aa0dad 100644 --- a/test/necb/unit_tests/tests/test_necb_unitary_rules.rb +++ b/test/necb/unit_tests/tests/test_necb_unitary_rules.rb @@ -136,10 +136,10 @@ def test_unitary_efficiency for int in 0..heating_type_cap[heating_type].size - 1 output_line_text += "#{heating_type},#{heating_type_min_cap[heating_type][int]},#{heating_type_max_cap[heating_type][int]}," if efficiency_type[heating_type][int] == 'Seasonal Energy Efficiency Ratio (SEER)' - actual_unitary_eff[heating_type][int] = (standard.cop_to_seer_cooling(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) + actual_unitary_eff[heating_type][int] = (standard.cop_no_fan_to_seer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) output_line_text += "#{actual_unitary_eff[heating_type][int]},\n" elsif efficiency_type[heating_type][int] == 'Energy Efficiency Ratio (EER)' - actual_unitary_eff[heating_type][int] = (standard.cop_to_eer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) + actual_unitary_eff[heating_type][int] = (standard.cop_no_fan_to_eer(actual_unitary_cop[heating_type][int].to_f) + 0.001).round(2) output_line_text += ",#{actual_unitary_eff[heating_type][int]}\n" end end diff --git a/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb b/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb index 1f50ffd4f4..ff02999ad4 100644 --- a/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb +++ b/test/os_stds_methods/test_apply_hvac_efficiency_standard.rb @@ -54,13 +54,13 @@ def test_efficiency_conversions std = Standard.build('90.1-2019') # SEER conversions seer = 15 - cop_nf = std.seer_to_cop_cooling_no_fan(seer) - new_seer = std.cop_no_fan_to_seer_cooling(cop_nf) + cop_nf = std.seer_to_cop_no_fan(seer) + new_seer = std.cop_no_fan_to_seer(cop_nf) assert(seer == new_seer) # COP conversions - cop = std.seer_to_cop_cooling(seer) - new_seer = std.cop_to_seer_cooling(cop) + cop = std.seer_to_cop(seer) + new_seer = std.cop_to_seer(cop) assert(seer == new_seer) # EER conversions @@ -73,8 +73,8 @@ def test_efficiency_conversions # HSPF conversions hspf = 9 - cop_nf = std.hspf_to_cop_heating_no_fan(hspf) - cop = std.hspf_to_cop_heating(hspf) + cop_nf = std.hspf_to_cop_no_fan(hspf) + cop = std.hspf_to_cop(hspf) assert(cop_nf > cop) # kW/ton conversions