Skip to content

Commit

Permalink
Updates to Pub 002-2024. Uses duct effective R-values instead of nomi…
Browse files Browse the repository at this point in the history
…nal R-values for DSE tests.
  • Loading branch information
shorowit committed Apr 12, 2024
1 parent ae5b973 commit 6afa3f3
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 46 deletions.
40 changes: 28 additions & 12 deletions tasks.rb
Original file line number Diff line number Diff line change
Expand Up @@ -565,8 +565,8 @@ def set_hpxml_roofs(hpxml_file, hpxml_bldg)

def set_hpxml_rim_joists(hpxml_file, hpxml_bldg)
if ['RESNET_Tests/4.5_DSE/HVAC3a.xml'].include? hpxml_file
for i in 0..hpxml_bldg.rim_joists.size - 1
hpxml_bldg.rim_joists[i].interior_adjacent_to = HPXML::LocationBasementUnconditioned
hpxml_bldg.rim_joists.each do |rim_joist|
rim_joist.interior_adjacent_to = HPXML::LocationBasementUnconditioned
end
elsif hpxml_file.include?('EPA_Tests/SF')
if ['EPA_Tests/SF_National_3.1/SFNHv31_CZ2_FL_elec_slab.xml',
Expand Down Expand Up @@ -822,8 +822,8 @@ def set_hpxml_foundation_walls(hpxml_file, hpxml_bldg)
end
end
elsif ['RESNET_Tests/4.5_DSE/HVAC3a.xml'].include? hpxml_file
for i in 0..hpxml_bldg.foundation_walls.size - 1
hpxml_bldg.foundation_walls[i].interior_adjacent_to = HPXML::LocationBasementUnconditioned
hpxml_bldg.foundation_walls.each do |foundation_wall|
foundation_wall.interior_adjacent_to = HPXML::LocationBasementUnconditioned
end
elsif hpxml_file.include?('EPA_Tests')
if hpxml_file.include?('EPA_Tests/SF')
Expand Down Expand Up @@ -1677,8 +1677,8 @@ def set_hpxml_hvac_distributions(hpxml_file, hpxml_bldg)
elsif ['RESNET_Tests/4.5_DSE/HVAC3d.xml',
'RESNET_Tests/4.5_DSE/HVAC3h.xml'].include? hpxml_file
# Supply and return duct leakage = 125 cfm each
for i in 0..hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.size - 1
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements[i].duct_leakage_value = 125
hpxml_bldg.hvac_distributions[0].duct_leakage_measurements.each do |duct_leakage_measurement|
duct_leakage_measurement.duct_leakage_value = 125
end
elsif hpxml_file.include?('EPA_Tests')
tot_cfm25 = 4.0 * hpxml_bldg.building_construction.conditioned_floor_area / 100.0
Expand Down Expand Up @@ -1718,19 +1718,19 @@ def set_hpxml_hvac_distributions(hpxml_file, hpxml_bldg)
duct_surface_area: 77)
elsif ['RESNET_Tests/4.5_DSE/HVAC3b.xml'].include? hpxml_file
# Change to Duct Location = 100% in basement
for i in 0..hpxml_bldg.hvac_distributions[0].ducts.size - 1
hpxml_bldg.hvac_distributions[0].ducts[i].duct_location = HPXML::LocationBasementUnconditioned
hpxml_bldg.hvac_distributions[0].ducts.each do |duct|
duct.duct_location = HPXML::LocationBasementUnconditioned
end
elsif ['RESNET_Tests/4.5_DSE/HVAC3f.xml'].include? hpxml_file
# Change to Duct Location = 100% in attic
for i in 0..hpxml_bldg.hvac_distributions[0].ducts.size - 1
hpxml_bldg.hvac_distributions[0].ducts[i].duct_location = HPXML::LocationAtticVented
hpxml_bldg.hvac_distributions[0].ducts.each do |duct|
duct.duct_location = HPXML::LocationAtticVented
end
elsif ['RESNET_Tests/4.5_DSE/HVAC3c.xml',
'RESNET_Tests/4.5_DSE/HVAC3g.xml'].include? hpxml_file
# Change to Duct R-val = 6
for i in 0..hpxml_bldg.hvac_distributions[0].ducts.size - 1
hpxml_bldg.hvac_distributions[0].ducts[i].duct_insulation_r_value = 6
hpxml_bldg.hvac_distributions[0].ducts.each do |duct|
duct.duct_insulation_r_value = 6
end
elsif hpxml_file.include?('EPA_Tests')
supply_area = 0.27 * hpxml_bldg.building_construction.conditioned_floor_area
Expand Down Expand Up @@ -1796,6 +1796,22 @@ def set_hpxml_hvac_distributions(hpxml_file, hpxml_bldg)
duct_surface_area: (return_area * non_attic_frac).round(2))
end
end
# For DSE tests, use effective R-values instead of nominal R-values to match the test specs.
if hpxml_file.include? '4.5_DSE'
hpxml_bldg.hvac_distributions[0].ducts.each do |duct|
next if duct.duct_insulation_r_value.nil?

if duct.duct_insulation_r_value == 0
duct.duct_insulation_r_value = nil
duct.duct_effective_r_value = 1.5
elsif duct.duct_insulation_r_value == 6
duct.duct_insulation_r_value = nil
duct.duct_effective_r_value = 7
else
fail 'Unexpected error.'
end
end
end

# CFA served
if hpxml_bldg.hvac_distributions.size == 1
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3a.xml
Original file line number Diff line number Diff line change
Expand Up @@ -592,14 +592,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>conditioned space</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>conditioned space</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3b.xml
Original file line number Diff line number Diff line change
Expand Up @@ -592,14 +592,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>basement - unconditioned</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>basement - unconditioned</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3c.xml
Original file line number Diff line number Diff line change
Expand Up @@ -592,14 +592,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>basement - unconditioned</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>basement - unconditioned</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3d.xml
Original file line number Diff line number Diff line change
Expand Up @@ -592,14 +592,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>basement - unconditioned</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>basement - unconditioned</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3e.xml
Original file line number Diff line number Diff line change
Expand Up @@ -410,14 +410,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>conditioned space</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>conditioned space</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3f.xml
Original file line number Diff line number Diff line change
Expand Up @@ -410,14 +410,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>attic - vented</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>0.0</DuctInsulationRValue>
<DuctEffectiveRValue>1.5</DuctEffectiveRValue>
<DuctLocation>attic - vented</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3g.xml
Original file line number Diff line number Diff line change
Expand Up @@ -410,14 +410,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>attic - vented</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>attic - vented</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
4 changes: 2 additions & 2 deletions workflow/tests/RESNET_Tests/4.5_DSE/HVAC3h.xml
Original file line number Diff line number Diff line change
Expand Up @@ -410,14 +410,14 @@
<Ducts>
<SystemIdentifier id='Duct1'/>
<DuctType>supply</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>attic - vented</DuctLocation>
<DuctSurfaceArea>308.0</DuctSurfaceArea>
</Ducts>
<Ducts>
<SystemIdentifier id='Duct2'/>
<DuctType>return</DuctType>
<DuctInsulationRValue>6.0</DuctInsulationRValue>
<DuctEffectiveRValue>7.0</DuctEffectiveRValue>
<DuctLocation>attic - vented</DuctLocation>
<DuctSurfaceArea>77.0</DuctSurfaceArea>
</Ducts>
Expand Down
30 changes: 12 additions & 18 deletions workflow/tests/util.rb
Original file line number Diff line number Diff line change
Expand Up @@ -417,15 +417,15 @@ def _get_simulation_hvac_energy_results(csv_path, is_heat, is_electric_heat)
end

def _check_ashrae_140_results(htg_loads, clg_loads)
# Proposed acceptance criteria as of 3/18/2024
# Pub 002-2024
htg_min = [48.07, 74.30, 35.98, 39.74, 45.72, 39.13, 42.17, 48.30, 58.15, 121.76, 126.71, 24.59, 27.72, 57.57, 48.33]
htg_max = [61.35, 82.96, 48.09, 49.95, 51.97, 55.54, 58.15, 63.40, 74.24, 137.68, 146.84, 81.73, 70.27, 91.66, 56.47]
htg_dt_min = [17.53, -16.08, -12.92, -12.14, -10.90, -0.56, -1.96, 8.15, 71.16, 3.20, -25.78, -3.14, 7.79, 5.49]
htg_dt_max = [29.62, -9.44, -5.89, 0.24, -3.37, 6.42, 4.54, 15.14, 79.06, 11.26, 22.68, 11.47, 32.01, 38.95]
clg_min = [42.50, 47.72, 41.15, 31.54, 21.03, 50.55, 36.63, 52.26, 34.16, 57.07, 50.19]
clg_max = [58.66, 61.33, 51.69, 41.85, 29.35, 73.48, 59.72, 68.60, 47.58, 73.51, 60.72]
clg_dt_min = [0.69, -8.24, -18.53, -30.58, 7.51, -16.52, 6.75, -12.95, 11.62, 5.12]
clg_dt_max = [6.91, -0.22, -9.74, -20.47, 15.77, -11.15, 12.76, -6.58, 17.59, 14.14]
clg_dt_max = [6.91, -0.22, -9.74, -20.48, 15.77, -11.15, 12.76, -6.58, 17.59, 14.14]

# Annual Heating Loads
assert_operator(htg_loads['L100AC'], :<=, htg_max[0])
Expand Down Expand Up @@ -615,8 +615,7 @@ def _get_reference_home_components(hpxml, test_num)
results['East window area (ft2)'] = win_areas[90].round(2)
results['West window area (ft2)'] = win_areas[270].round(2)
results['Window U-Factor'] = win_u.round(2)
results['Window SHGCo (heating)'] = win_shgc_htg.round(2)
results['Window SHGCo (cooling)'] = win_shgc_clg.round(2)
results['Window SHGCo'] = ((win_shgc_htg + win_shgc_clg) / 2.0).round(2)

# Infiltration
sla, _ach50 = _get_infiltration(hpxml_bldg)
Expand Down Expand Up @@ -826,10 +825,8 @@ def _check_reference_home_components(results, test_num, version)
assert_equal(0.35, results['Window U-Factor'])
end
if version == '2022C'
# FIXME: Expected values changed due to different internal shading coefficients
# in 301-2022 Addendum C.
assert_equal(0.33, results['Window SHGCo (heating)'])
assert_equal(0.33, results['Window SHGCo (cooling)'])
# Pub 002-2024
assert_equal(0.33, results['Window SHGCo'])
else
assert_equal(0.34, results['Window SHGCo (heating)'])
assert_equal(0.28, results['Window SHGCo (cooling)'])
Expand All @@ -840,6 +837,7 @@ def _check_reference_home_components(results, test_num, version)

# Internal gains
if version == '2022C'
# Pub 002-2024
# FIXME: Expected values changed due to rounded F_sensible values in 301-2022
# Addendum C relative to previously prescribed internal gains. Values below
# do not match Pub 002, as it has not yet been updated.
Expand Down Expand Up @@ -892,7 +890,7 @@ def _check_reference_home_components(results, test_num, version)
# Mechanical ventilation
mv_kwh_yr = nil
if version == '2022C'
# FIXME: Updated values per 301-2022 Addendum C
# Pub 002-2024
mv_kwh_yr = { 1 => 0.0, 2 => 223.9, 3 => 288.1, 4 => 763.4 }[test_num]
elsif version == '2019'
mv_kwh_yr = { 1 => 0.0, 2 => 222.1, 3 => 288.1, 4 => 763.4 }[test_num]
Expand Down Expand Up @@ -1377,8 +1375,8 @@ def _check_method_results(results, test_num, has_tankless_water_heater, version)
end

def _check_hvac_test_results(energy)
# Proposed acceptance criteria as of 3/18/2024
min = [-24.59, -13.13, -42.73, 57.35]
# Pub 002-2024
min = [-24.59, -13.13, -42.73, 59.35]
max = [-18.18, -12.60, -15.88, 110.25]

# Cooling cases
Expand All @@ -1397,7 +1395,7 @@ def _check_hvac_test_results(energy)
end

def _check_dse_test_results(energy)
# Proposed acceptance criteria as of 3/18/2024
# Pub 002-2024
htg_min = [9.45, 3.11, 7.40]
htg_max = [25.72, 6.53, 19.77]
clg_min = [18.69, 5.23, 16.32]
Expand All @@ -1406,12 +1404,8 @@ def _check_dse_test_results(energy)
# Heating cases
assert_operator((energy['HVAC3b'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :>, htg_min[0])
assert_operator((energy['HVAC3b'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :<, htg_max[0])
# Note: OS-ERI does not pass this test because of differences in duct insulation
# R-values; see get_duct_insulation_rvalue() in airflow.rb.
# See https://github.com/resnet-us/software-consistency-inquiries/issues/21
# Set Pub 002 effective R-value in test cases?
# assert_operator((energy['HVAC3c'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :>, htg_min[1])
# assert_operator((energy['HVAC3c'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :<, htg_max[1])
assert_operator((energy['HVAC3c'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :>, htg_min[1])
assert_operator((energy['HVAC3c'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :<, htg_max[1])
assert_operator((energy['HVAC3d'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :>, htg_min[2])
assert_operator((energy['HVAC3d'] - energy['HVAC3a']) / energy['HVAC3a'] * 100, :<, htg_max[2])

Expand Down

0 comments on commit 6afa3f3

Please sign in to comment.