From df2d94edb0368c5b78fa216f99d1961c3de37deb Mon Sep 17 00:00:00 2001
From: Scott Horowitz <scott.horowitz@nrel.gov>
Date: Thu, 10 Aug 2023 12:37:02 -0600
Subject: [PATCH] Backport two bugfixes.

---
 Changelog.md                         | 6 ++++++
 rulesets/data/zerh_sf_2_0_lookup.tsv | 3 ++-
 rulesets/resources/301validator.xml  | 2 +-
 rulesets/resources/ES_ZERHruleset.rb | 2 ++
 4 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/Changelog.md b/Changelog.md
index a55f3b676..5b9f1708e 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,9 @@
+## OpenStudio-ERI v1.6.1
+
+__Bugfixes__
+- Fixes ZERH Single Family v2 mechanical ventilation fan efficiency to use ASRE instead of SRE.
+- Fixes error if describing a wall with `WallType/StructuralInsulatedPanel`.
+
 ## OpenStudio-ERI v1.6.0
 
 __New Features__
diff --git a/rulesets/data/zerh_sf_2_0_lookup.tsv b/rulesets/data/zerh_sf_2_0_lookup.tsv
index b7c77fd2a..c0230a4d6 100644
--- a/rulesets/data/zerh_sf_2_0_lookup.tsv
+++ b/rulesets/data/zerh_sf_2_0_lookup.tsv
@@ -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
diff --git a/rulesets/resources/301validator.xml b/rulesets/resources/301validator.xml
index b7cde1e9f..d6e16c3bf 100644
--- a/rulesets/resources/301validator.xml
+++ b/rulesets/resources/301validator.xml
@@ -326,7 +326,7 @@ Temporarily disabled until RESNET allows this.
       <sch:assert role='ERROR' test='h:ExteriorAdjacentTo[text()="outside" or text()="attic - vented" or text()="attic - unvented" or text()="basement - conditioned" or text()="basement - unconditioned" or text()="crawlspace - vented" or text()="crawlspace - unvented" or text()="garage" or text()="other housing unit" or text()="other heated space" or text()="other multifamily buffer space" or text()="other non-freezing space"] or not(h:ExteriorAdjacentTo)'>Expected ExteriorAdjacentTo to be 'outside' or 'attic - vented' or 'attic - unvented' or 'basement - conditioned' or 'basement - unconditioned' or 'crawlspace - vented' or 'crawlspace - unvented' or 'garage' or 'other housing unit' or 'other heated space' or 'other multifamily buffer space' or 'other non-freezing space'</sch:assert>
       <sch:assert role='ERROR' test='count(h:InteriorAdjacentTo) = 1'>Expected 1 element(s) for xpath: InteriorAdjacentTo</sch:assert>
       <sch:assert role='ERROR' test='h:InteriorAdjacentTo[text()="living space" or text()="attic - vented" or text()="attic - unvented" or text()="basement - conditioned" or text()="basement - unconditioned" or text()="crawlspace - vented" or text()="crawlspace - unvented" or text()="garage"] or not(h:InteriorAdjacentTo)'>Expected InteriorAdjacentTo to be 'living space' or 'attic - vented' or 'attic - unvented' or 'basement - conditioned' or 'basement - unconditioned' or 'crawlspace - vented' or 'crawlspace - unvented' or 'garage'</sch:assert>
-      <sch:assert role='ERROR' test='count(h:WallType[h:WoodStud | h:DoubleWoodStud | h:ConcreteMasonryUnit | h:StructurallyInsulatedPanel | h:InsulatedConcreteForms | h:SteelFrame | h:SolidConcrete | h:StructuralBrick | h:StrawBale | h:Stone | h:LogWall | h:Adobe]) = 1'>Expected 1 element(s) for xpath: WallType[WoodStud | DoubleWoodStud | ConcreteMasonryUnit | StructurallyInsulatedPanel | InsulatedConcreteForms | SteelFrame | SolidConcrete | StructuralBrick | StrawBale | Stone | LogWall | Adobe]</sch:assert>
+      <sch:assert role='ERROR' test='count(h:WallType[h:WoodStud | h:DoubleWoodStud | h:ConcreteMasonryUnit | h:StructuralInsulatedPanel | h:InsulatedConcreteForms | h:SteelFrame | h:SolidConcrete | h:StructuralBrick | h:StrawBale | h:Stone | h:LogWall | h:Adobe]) = 1'>Expected 1 element(s) for xpath: WallType[WoodStud | DoubleWoodStud | ConcreteMasonryUnit | StructuralInsulatedPanel | InsulatedConcreteForms | SteelFrame | SolidConcrete | StructuralBrick | StrawBale | Stone | LogWall | Adobe]</sch:assert>
       <sch:assert role='ERROR' test='count(h:Area) = 1'>Expected 1 element(s) for xpath: Area</sch:assert>
       <sch:assert role='ERROR' test='count(h:Azimuth) &lt;= 1'>Expected 0 or 1 element(s) for xpath: Azimuth</sch:assert>
       <sch:assert role='ERROR' test='count(h:SolarAbsorptance) = 1'>Expected 1 element(s) for xpath: SolarAbsorptance</sch:assert>
diff --git a/rulesets/resources/ES_ZERHruleset.rb b/rulesets/resources/ES_ZERHruleset.rb
index 514321f55..e6c6d5d13 100644
--- a/rulesets/resources/ES_ZERHruleset.rb
+++ b/rulesets/resources/ES_ZERHruleset.rb
@@ -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',
@@ -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