Skip to content

Commit

Permalink
Merge pull request #1897 from NREL/eer_inputs
Browse files Browse the repository at this point in the history
Allow optional EER/EER2 inputs
  • Loading branch information
shorowit authored Dec 17, 2024
2 parents 0ad8ce4 + e759a59 commit 1a574b7
Show file tree
Hide file tree
Showing 20 changed files with 1,522 additions and 1,413 deletions.
3 changes: 1 addition & 2 deletions BuildResidentialHPXML/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6435,8 +6435,7 @@ def self.set_ventilation_fans(hpxml_bldg, args)
if distribution_system_idref.nil?
# Allow for PTAC/PTHP by automatically adding a DSE=1 distribution system to attach the CFIS to
hpxml_bldg.hvac_systems.each do |hvac_system|
next unless (hvac_system.is_a?(HPXML::CoolingSystem) && [HPXML::HVACTypePTAC, HPXML::HVACTypeRoomAirConditioner].include?(hvac_system.cooling_system_type)) ||
(hvac_system.is_a?(HPXML::HeatPump) && [HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include?(hvac_system.heat_pump_type))
next unless HVAC.is_room_dx_hvac_system(hvac_system)

hpxml_bldg.hvac_distributions.add(id: "HVACDistribution#{hpxml_bldg.hvac_distributions.size + 1}",
distribution_system_type: HPXML::HVACDistributionTypeDSE,
Expand Down
6 changes: 3 additions & 3 deletions BuildResidentialHPXML/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>build_residential_hpxml</name>
<uid>a13a8983-2b01-4930-8af2-42030b6e4233</uid>
<version_id>32bd49ca-09dc-40ec-b676-f01d76e98566</version_id>
<version_modified>2024-12-09T21:40:28Z</version_modified>
<version_id>82f422d1-1b07-486e-910f-8cbf2a3bb373</version_id>
<version_modified>2024-12-17T17:51:52Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildResidentialHPXML</class_name>
<display_name>HPXML Builder</display_name>
Expand Down Expand Up @@ -7544,7 +7544,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>612549F4</checksum>
<checksum>D01338EA</checksum>
</file>
<file>
<filename>constants.rb</filename>
Expand Down
3 changes: 3 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
## OpenStudio-HPXML v1.10.0

__New Features__
- HVAC modeling updates:
- Updated DX heat pump and air conditioner models per RESNET MINHERS Addendum 82.
- Allows optional EER or EER2 inputs for central air conditioners/heat pumps and mini-splits.

__Bugfixes__

Expand Down
22 changes: 8 additions & 14 deletions HPXMLtoOpenStudio/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>hpxm_lto_openstudio</name>
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
<version_id>7ffe134e-3f39-41dc-ace4-fb58dca7f683</version_id>
<version_modified>2024-12-13T19:03:02Z</version_modified>
<version_id>63541135-e007-4a69-b880-68a3c9dc6ae0</version_id>
<version_modified>2024-12-17T18:11:44Z</version_modified>
<xml_checksum>D8922A73</xml_checksum>
<class_name>HPXMLtoOpenStudio</class_name>
<display_name>HPXML to OpenStudio Translator</display_name>
Expand Down Expand Up @@ -327,7 +327,7 @@
<filename>defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>2519725A</checksum>
<checksum>7B04D536</checksum>
</file>
<file>
<filename>energyplus.rb</filename>
Expand Down Expand Up @@ -375,7 +375,7 @@
<filename>hpxml_schematron/EPvalidator.xml</filename>
<filetype>xml</filetype>
<usage_type>resource</usage_type>
<checksum>0F44988F</checksum>
<checksum>DEF9E132</checksum>
</file>
<file>
<filename>hpxml_schematron/iso-schematron.xsd</filename>
Expand All @@ -387,19 +387,13 @@
<filename>hvac.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>16046276</checksum>
</file>
<file>
<filename>hvac.rb.bak</filename>
<filetype>bak</filetype>
<usage_type>resource</usage_type>
<checksum>9FEEA133</checksum>
<checksum>DCCE1070</checksum>
</file>
<file>
<filename>hvac_sizing.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>A3B81222</checksum>
<checksum>5CA7BCAC</checksum>
</file>
<file>
<filename>internal_gains.rb</filename>
Expand Down Expand Up @@ -669,7 +663,7 @@
<filename>test_defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>5561FB61</checksum>
<checksum>E30EF199</checksum>
</file>
<file>
<filename>test_enclosure.rb</filename>
Expand Down Expand Up @@ -741,7 +735,7 @@
<filename>test_validation.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>9CEB3358</checksum>
<checksum>BD59C7B1</checksum>
</file>
<file>
<filename>test_water_heater.rb</filename>
Expand Down
101 changes: 64 additions & 37 deletions HPXMLtoOpenStudio/resources/defaults.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1853,26 +1853,27 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
end
end

# Convert SEER2/HSPF2 to SEER/HSPF
hpxml_bldg.cooling_systems.each do |cooling_system|
next unless [HPXML::HVACTypeCentralAirConditioner,
HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type
next unless cooling_system.cooling_efficiency_seer.nil?

is_ducted = !cooling_system.distribution_system_idref.nil?
cooling_system.cooling_efficiency_seer = HVAC.calc_seer_from_seer2(cooling_system.cooling_efficiency_seer2, is_ducted).round(2)
cooling_system.cooling_efficiency_seer_isdefaulted = true
cooling_system.cooling_efficiency_seer2 = nil
end
hpxml_bldg.heat_pumps.each do |heat_pump|
next unless [HPXML::HVACTypeHeatPumpAirToAir,
HPXML::HVACTypeHeatPumpMiniSplit].include? heat_pump.heat_pump_type
next unless heat_pump.cooling_efficiency_seer.nil?

is_ducted = !heat_pump.distribution_system_idref.nil?
heat_pump.cooling_efficiency_seer = HVAC.calc_seer_from_seer2(heat_pump.cooling_efficiency_seer2, is_ducted).round(2)
heat_pump.cooling_efficiency_seer_isdefaulted = true
heat_pump.cooling_efficiency_seer2 = nil
# Convert SEER2/EER2/HSPF2 to SEER/EER/HSPF
(hpxml_bldg.cooling_systems + hpxml_bldg.heat_pumps).each do |hvac_system|
if hvac_system.is_a?(HPXML::CoolingSystem)
next unless [HPXML::HVACTypeCentralAirConditioner,
HPXML::HVACTypeMiniSplitAirConditioner].include? hvac_system.cooling_system_type
elsif hvac_system.is_a?(HPXML::HeatPump)
next unless [HPXML::HVACTypeHeatPumpAirToAir,
HPXML::HVACTypeHeatPumpMiniSplit].include? hvac_system.heat_pump_type
end
if hvac_system.cooling_efficiency_seer.nil?
is_ducted = !hvac_system.distribution_system_idref.nil?
hvac_system.cooling_efficiency_seer = HVAC.calc_seer_from_seer2(hvac_system.cooling_efficiency_seer2, is_ducted).round(2)
hvac_system.cooling_efficiency_seer_isdefaulted = true
hvac_system.cooling_efficiency_seer2 = nil
end
next unless hvac_system.cooling_efficiency_eer.nil? && (not hvac_system.cooling_efficiency_eer2.nil?)

is_ducted = !hvac_system.distribution_system_idref.nil?
hvac_system.cooling_efficiency_eer = HVAC.calc_eer_from_eer2(hvac_system.cooling_efficiency_eer2, is_ducted).round(2)
hvac_system.cooling_efficiency_eer_isdefaulted = true
hvac_system.cooling_efficiency_eer2 = nil
end
hpxml_bldg.heat_pumps.each do |heat_pump|
next unless [HPXML::HVACTypeHeatPumpAirToAir,
Expand All @@ -1885,6 +1886,16 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
heat_pump.heating_efficiency_hspf2 = nil
end

# Convert EER to CEER
(hpxml_bldg.cooling_systems + hpxml_bldg.heat_pumps).each do |hvac_system|
next unless HVAC.is_room_dx_hvac_system(hvac_system)
next unless hvac_system.cooling_efficiency_ceer.nil?

hvac_system.cooling_efficiency_ceer = HVAC.calc_ceer_from_eer(hvac_system.cooling_efficiency_eer).round(2)
hvac_system.cooling_efficiency_ceer_isdefaulted = true
hvac_system.cooling_efficiency_eer = nil
end

# Default HVAC autosizing factors
hpxml_bldg.cooling_systems.each do |cooling_system|
next unless cooling_system.cooling_autosizing_factor.nil?
Expand Down Expand Up @@ -2267,21 +2278,42 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
end
end

# EER
(hpxml_bldg.cooling_systems + hpxml_bldg.heat_pumps).each do |hvac_system|
if hvac_system.is_a?(HPXML::CoolingSystem)
next unless [HPXML::HVACTypeCentralAirConditioner,
HPXML::HVACTypeMiniSplitAirConditioner].include? hvac_system.cooling_system_type
elsif hvac_system.is_a?(HPXML::HeatPump)
next unless [HPXML::HVACTypeHeatPumpAirToAir,
HPXML::HVACTypeHeatPumpMiniSplit].include? hvac_system.heat_pump_type
end
next unless hvac_system.cooling_efficiency_eer.nil? && hvac_system.cooling_efficiency_eer2.nil?

seer = hvac_system.cooling_efficiency_seer
case hvac_system.compressor_type
when HPXML::HVACCompressorTypeSingleStage
# FIXME: Review compared to AHRI data
cop = 0.2692 * seer + 0.2706 # Regression based on inverse model
when HPXML::HVACCompressorTypeTwoStage
# FIXME: Review compared to AHRI data
cop = 0.2773 * seer - 0.0018 # Regression based on inverse model
when HPXML::HVACCompressorTypeVariableSpeed
# FIXME: Need to develop something here based on AHRI/NEEP data
cop = 4.5
end
hvac_system.cooling_efficiency_eer = UnitConversions.convert(cop, 'W', 'Btu/hr').round(2)
hvac_system.cooling_efficiency_eer_isdefaulted = true
end

# Detailed HVAC performance
hpxml_bldg.cooling_systems.each do |cooling_system|
clg_ap = cooling_system.additional_properties
case cooling_system.cooling_system_type
when HPXML::HVACTypeCentralAirConditioner, HPXML::HVACTypeMiniSplitAirConditioner,
HPXML::HVACTypeRoomAirConditioner, HPXML::HVACTypePTAC
if [HPXML::HVACTypeRoomAirConditioner,
HPXML::HVACTypePTAC].include? cooling_system.cooling_system_type
use_eer = true
else
use_eer = false
end
# Note: We use HP cooling curve so that a central AC behaves the same.
HVAC.set_fan_power_rated(cooling_system, use_eer)
HVAC.set_cool_curves_central_air_source(cooling_system, use_eer)
HVAC.set_fan_power_rated(cooling_system)
HVAC.set_cool_curves_dx_air_source(cooling_system)

when HPXML::HVACTypeEvaporativeCooler
clg_ap.effectiveness = 0.72 # Assumption from HEScore
Expand All @@ -2295,21 +2327,16 @@ def self.apply_hvac(runner, hpxml_bldg, weather, convert_shared_systems, unit_nu
HPXML::HVACTypeFloorFurnace,
HPXML::HVACTypeFireplace].include? heating_system.heating_system_type

heating_system.additional_properties.heat_rated_cfm_per_ton = HVAC.get_heat_cfm_per_ton(HPXML::HVACCompressorTypeSingleStage, true)
heating_system.additional_properties.heat_rated_cfm_per_ton = HVAC.get_heat_cfm_per_ton_simple()
end
hpxml_bldg.heat_pumps.each do |heat_pump|
case heat_pump.heat_pump_type
when HPXML::HVACTypeHeatPumpAirToAir, HPXML::HVACTypeHeatPumpMiniSplit,
HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom
if [HPXML::HVACTypeHeatPumpPTHP, HPXML::HVACTypeHeatPumpRoom].include? heat_pump.heat_pump_type
use_eer_cop = true
else
use_eer_cop = false
end
HVAC.set_fan_power_rated(heat_pump, use_eer_cop)
HVAC.set_fan_power_rated(heat_pump)
HVAC.set_heat_pump_temperatures(heat_pump, runner)
HVAC.set_cool_curves_central_air_source(heat_pump, use_eer_cop)
HVAC.set_heat_curves_central_air_source(heat_pump, use_eer_cop)
HVAC.set_cool_curves_dx_air_source(heat_pump)
HVAC.set_heat_curves_dx_air_source(heat_pump)

when HPXML::HVACTypeHeatPumpGroundToAir
HVAC.set_heat_pump_temperatures(heat_pump, runner)
Expand Down
Loading

0 comments on commit 1a574b7

Please sign in to comment.