Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ZERH v2: Use ASRE instead of SRE for mech vent #683

Merged
merged 6 commits into from
Jul 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ __New Features__
- **Breaking change**: Disaggregates "EC_x Vent" and "EC_x Dehumid" from "EC_x L&A" in `ERI_Results.csv`.
- Allow JSON output files instead of CSV via a new `--output-format JSON` commandline argument.

__Bugfixes__
- ZERH Single Family v2 should use ASRE instead of SRE for mechanical ventilation fans.

## OpenStudio-ERI v1.6.0

__New Features__
Expand Down
3 changes: 2 additions & 1 deletion rulesets/data/zerh_sf_2_0_lookup.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -97,5 +97,6 @@ infil_air_leakage_ach50 single-family attached 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
infil_air_leakage_ach50 apartment unit 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
infil_air_leakage_cfm50_per_sqft
mechanical_ventilation_fan_type supply only supply only supply only supply only supply only supply only supply only supply only supply only supply only supply only heat recovery ventilator heat recovery ventilator heat recovery ventilator heat recovery ventilator heat recovery ventilator heat recovery ventilator heat recovery ventilator heat recovery ventilator heat recovery ventilator
mechanical_ventilation_fan_sre 0.65 0.65 0.65 0.65 0.65 0.65 0.65 0.65 0.65
mechanical_ventilation_fan_sre
mechanical_ventilation_fan_asre 0.65 0.65 0.65 0.65 0.65 0.65 0.65 0.65 0.65
mechanical_ventilation_fan_cfm_per_w 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 2.9 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2 1.2
2 changes: 2 additions & 0 deletions rulesets/resources/ES_ZERHruleset.rb
Original file line number Diff line number Diff line change
Expand Up @@ -796,6 +796,7 @@ def self.set_systems_mechanical_ventilation_reference(new_hpxml)
fan_type = lookup_reference_value('mechanical_ventilation_fan_type')
fan_cfm_per_w = lookup_reference_value('mechanical_ventilation_fan_cfm_per_w')
fan_sre = lookup_reference_value('mechanical_ventilation_fan_sre')
fan_asre = lookup_reference_value('mechanical_ventilation_fan_asre')
fan_power_w = fan_cfm / fan_cfm_per_w

new_hpxml.ventilation_fans.add(id: 'TargetVentilationFan',
Expand All @@ -805,6 +806,7 @@ def self.set_systems_mechanical_ventilation_reference(new_hpxml)
hours_in_operation: 24,
fan_power: fan_power_w.round(3),
sensible_recovery_efficiency: fan_sre,
sensible_recovery_efficiency_adjusted: fan_asre,
used_for_whole_building_ventilation: true)
end

Expand Down
51 changes: 44 additions & 7 deletions rulesets/tests/test_es_zerh_ventilation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,59 +76,92 @@ def sre(program_version, hpxml)
return 0.6
end
elsif [ZERHConstants.SFVer2].include? program_version
return
end
end

def asre(program_version, hpxml)
iecc_zone = hpxml.climate_and_risk_zones.climate_zone_ieccs[0].zone
if [ZERHConstants.SFVer2].include? program_version
if ['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C', '4A', '4B'].include? iecc_zone
return
elsif ['4C', '5A', '5B', '5C', '6A', '6B', '6C', '7', '8'].include? iecc_zone
return 0.65
end
else
return
end
end

def test_mech_vent
[*ESConstants.AllVersions, *ZERHConstants.AllVersions].each do |program_version|
_convert_to_es_zerh('base.xml', program_version)
hpxml = _test_ruleset(program_version)
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
if program_version == ZERHConstants.SFVer2
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), asre: asre(program_version, hpxml) }])
else
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
end
end
end

def test_mech_vent_attached_or_multifamily
ESConstants.AllVersions.each do |program_version|
_convert_to_es_zerh('base-bldgtype-multifamily.xml', program_version)
hpxml = _test_ruleset(program_version)
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 39.0, hours: 24, power: (39.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
if program_version == ZERHConstants.SFVer2
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 39.0, hours: 24, power: (39.0 / cfm_per_watt(program_version, hpxml)), asre: asre(program_version, hpxml) }])
else
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 39.0, hours: 24, power: (39.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
end
end
end

def test_mech_vent_erv
[*ESConstants.AllVersions, *ZERHConstants.AllVersions].each do |program_version|
_convert_to_es_zerh('base-mechvent-erv.xml', program_version)
hpxml = _test_ruleset(program_version)
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
if program_version == ZERHConstants.SFVer2
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), asre: asre(program_version, hpxml) }])
else
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
end
end
end

def test_mech_vent_hrv
[*ESConstants.AllVersions, *ZERHConstants.AllVersions].each do |program_version|
_convert_to_es_zerh('base-mechvent-hrv.xml', program_version)
hpxml = _test_ruleset(program_version)
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
if program_version == ZERHConstants.SFVer2
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), asre: asre(program_version, hpxml) }])
else
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 57.0, hours: 24, power: (57.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
end
end
end

def test_mech_vent_nbeds_5
[*ESConstants.AllVersions, *ZERHConstants.AllVersions].each do |program_version|
_convert_to_es_zerh('base-enclosure-beds-5.xml', program_version)
hpxml = _test_ruleset(program_version)
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 72.0, hours: 24, power: (72.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
if program_version == ZERHConstants.SFVer2
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 72.0, hours: 24, power: (72.0 / cfm_per_watt(program_version, hpxml)), asre: asre(program_version, hpxml) }])
else
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 72.0, hours: 24, power: (72.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
end
end
end

def test_mech_vent_location_miami_fl
[*ESConstants.AllVersions, *ZERHConstants.AllVersions].each do |program_version|
_convert_to_es_zerh('base-location-miami-fl.xml', program_version)
hpxml = _test_ruleset(program_version)
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 43.5, hours: 24, power: (43.5 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
if program_version == ZERHConstants.SFVer2
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 43.5, hours: 24, power: (43.5 / cfm_per_watt(program_version, hpxml)), asre: asre(program_version, hpxml) }])
else
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 43.5, hours: 24, power: (43.5 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
end
end
end

Expand All @@ -145,7 +178,11 @@ def test_mech_vent_attached_or_multifamily_location_miami_fl
hpxml.climate_and_risk_zones.weather_station_wmo = 722020
XMLHelper.write_file(hpxml.to_oga, @tmp_hpxml_path)
hpxml = _test_ruleset(program_version)
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 39.0, hours: 24, power: (39.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
if program_version == ZERHConstants.SFVer2
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 39.0, hours: 24, power: (39.0 / cfm_per_watt(program_version, hpxml)), asre: asre(program_version, hpxml) }])
else
_check_mech_vent(hpxml, [{ fantype: fan_type(program_version, hpxml), flowrate: 39.0, hours: 24, power: (39.0 / cfm_per_watt(program_version, hpxml)), sre: sre(program_version, hpxml) }])
end
end
end

Expand Down
Loading