Skip to content

Commit dbd45a1

Browse files
authored
Merge pull request #815 from NatLabRockies/latest-os-hpxml
Latest OS-HPXML
2 parents e474d4b + c120027 commit dbd45a1

59 files changed

Lines changed: 2783 additions & 2868 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Changelog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
## OpenStudio-ERI v1.13.0
22

33
__Features__
4+
- Updates garage ventilation rate to be SLA=1/150 (same as a vented crawlspace).
45

56
__Bugfixes__
7+
- **Breaking change**: Prevent possible error if HPWH in confined space with very small containment volume; minimum allowed volume now 32 ft3.
8+
- **Breaking change**: HPWH `EnergyFactor`/`UniformEnergyFactor` must now be >= 1.45 (previously > 1).
9+
- Fixes ERV supply outlet enthalpy calculation used to calculate latent effectiveness.
10+
- Removes duplicated ceiling/floor internal mass surfaces between conditioned stories.
611

712
## OpenStudio-ERI v1.12.0
813

docs/source/workflow_inputs.rst

Lines changed: 36 additions & 33 deletions
Large diffs are not rendered by default.

hpxml-measures/.github/workflows/config.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ jobs:
140140
path: workflow/tests/test_results
141141
name: results-workflow2-tests
142142

143+
- name: Store release package
144+
uses: actions/upload-artifact@v7
145+
with:
146+
path: OpenStudio-HPXML-*.zip
147+
archive: false
148+
143149
run-windows-tests:
144150
runs-on: windows-latest
145151
steps:

hpxml-measures/BuildResidentialHPXML/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Path to the EPW file. Either this or the Zip Code input above must be provided.
7676

7777
**Location: Site Type**
7878

79-
The terrain/shielding of the home, for the infiltration model. Defaults to 'Suburban, Normal' for single-family detached and manufactured home and 'Suburban, Well-Shielded' for single-family attached and apartment units.
79+
The terrain/shielding of the home, for the infiltration model.
8080

8181
- **Name:** ``location_site_type``
8282
- **Type:** ``Choice``
@@ -209,7 +209,7 @@ The number of bedrooms in the unit.
209209

210210
**Geometry: Unit Number of Bathrooms**
211211

212-
The number of bathrooms in the unit. Defaults to NumberofBedrooms/2 + 0.5.
212+
The number of bathrooms in the unit.
213213

214214
- **Name:** ``geometry_unit_num_bathrooms``
215215
- **Type:** ``Choice``
@@ -276,7 +276,7 @@ The foundation type of the building. Garages are assumed to be over slab-on-grad
276276

277277
- **Required:** ``true``
278278

279-
- **Choices:** <br/> - `Slab-on-Grade`<br/> - `Crawlspace, Vented`<br/> - `Crawlspace, Unvented`<br/> - `Crawlspace, Conditioned`<br/> - `Basement, Unconditioned`<br/> - `Basement, Unconditioned, Half Above-Grade`<br/> - `Basement, Conditioned`<br/> - `Basement, Conditioned, Half Above-Grade`<br/> - `Ambient`<br/> - `Above Apartment`<br/> - `Belly and Wing, With Skirt`<br/> - `Belly and Wing, No Skirt`<br/> - `Detailed Example: Crawlspace, Vented, Above-Grade`<br/> - `ASHRAE 140 Tests: Basement, Conditioned`<br/> - `ASHRAE 140 Tests: Basement, Unconditioned`
279+
- **Choices:** <br/> - `Slab-on-Grade`<br/> - `Crawlspace, Vented`<br/> - `Crawlspace, Unvented`<br/> - `Basement, Unconditioned`<br/> - `Basement, Unconditioned, Half Above-Grade`<br/> - `Basement, Conditioned`<br/> - `Basement, Conditioned, Half Above-Grade`<br/> - `Ambient`<br/> - `Above Apartment`<br/> - `Belly and Wing, With Skirt`<br/> - `Belly and Wing, No Skirt`<br/> - `Detailed Example: Crawlspace, Vented, Above-Grade`<br/> - `ASHRAE 140 Tests: Basement, Conditioned`<br/> - `ASHRAE 140 Tests: Basement, Unconditioned`
280280

281281

282282
- **Default:** `Crawlspace, Vented`

hpxml-measures/BuildResidentialHPXML/measure.rb

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
8080

8181
arg = OpenStudio::Measure::OSArgument.makeChoiceArgument('location_site_type', choices[:location_site_type], false)
8282
arg.setDisplayName('Location: Site Type')
83-
arg.setDescription("The terrain/shielding of the home, for the infiltration model. Defaults to 'Suburban, Normal' for single-family detached and manufactured home and 'Suburban, Well-Shielded' for single-family attached and apartment units.")
83+
arg.setDescription('The terrain/shielding of the home, for the infiltration model.')
8484
arg.setDefaultValue('Default')
8585
args << arg
8686

@@ -136,7 +136,7 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
136136

137137
arg = OpenStudio::Measure::OSArgument.makeChoiceArgument('geometry_unit_num_bathrooms', choices[:geometry_unit_num_bathrooms], false)
138138
arg.setDisplayName('Geometry: Unit Number of Bathrooms')
139-
arg.setDescription('The number of bathrooms in the unit. Defaults to NumberofBedrooms/2 + 0.5.')
139+
arg.setDescription('The number of bathrooms in the unit.')
140140
arg.setDefaultValue('Default')
141141
args << arg
142142

@@ -943,8 +943,8 @@ def argument_errors(args)
943943
error = ![HPXML::FoundationTypeSlab, HPXML::FoundationTypeAboveApartment].include?(args[:geometry_foundation_type_type]) && (args[:geometry_foundation_type_height] == 0)
944944
errors << "Foundation type of '#{args[:geometry_foundation_type_type]}' cannot have a height of zero." if error
945945

946-
error = (args[:geometry_unit_type_facility_type] == HPXML::ResidentialTypeApartment) && ([HPXML::FoundationTypeBasementConditioned, HPXML::FoundationTypeCrawlspaceConditioned].include? args[:geometry_foundation_type_type])
947-
errors << 'Conditioned basement/crawlspace foundation type for apartment units is not currently supported.' if error
946+
error = (args[:geometry_unit_type_facility_type] == HPXML::ResidentialTypeApartment) && (args[:geometry_foundation_type_type] == HPXML::FoundationTypeBasementConditioned)
947+
errors << 'Conditioned basement foundation type for apartment units is not currently supported.' if error
948948

949949
error = (args[:hvac_heating_system] == 'None') && (args[:hvac_heat_pump] == 'None') && (args[:hvac_heating_system_2] != 'None')
950950
errors << 'A second heating system was specified without a primary heating system.' if error
@@ -1716,8 +1716,7 @@ def set_rim_joists(hpxml_bldg, model, args, sorted_surfaces)
17161716
next unless [HPXML::LocationBasementConditioned,
17171717
HPXML::LocationBasementUnconditioned,
17181718
HPXML::LocationCrawlspaceUnvented,
1719-
HPXML::LocationCrawlspaceVented,
1720-
HPXML::LocationCrawlspaceConditioned].include? interior_adjacent_to
1719+
HPXML::LocationCrawlspaceVented].include? interior_adjacent_to
17211720

17221721
exterior_adjacent_to = HPXML::LocationOutside
17231722
if surface.outsideBoundaryCondition == EPlus::BoundaryConditionAdiabatic # can be adjacent to foundation space
@@ -1893,8 +1892,7 @@ def set_foundation_walls(hpxml_bldg, model, args, sorted_surfaces)
18931892
next unless [HPXML::LocationBasementConditioned,
18941893
HPXML::LocationBasementUnconditioned,
18951894
HPXML::LocationCrawlspaceUnvented,
1896-
HPXML::LocationCrawlspaceVented,
1897-
HPXML::LocationCrawlspaceConditioned].include? interior_adjacent_to
1895+
HPXML::LocationCrawlspaceVented].include? interior_adjacent_to
18981896

18991897
exterior_adjacent_to = HPXML::LocationGround
19001898
if surface.outsideBoundaryCondition == EPlus::BoundaryConditionAdiabatic # can be adjacent to foundation space
@@ -1990,8 +1988,7 @@ def set_floors(hpxml_bldg, args, sorted_surfaces)
19901988
next if interior_adjacent_to == exterior_adjacent_to
19911989
next if (surface.surfaceType == EPlus::SurfaceTypeRoofCeiling) && (exterior_adjacent_to == HPXML::LocationOutside)
19921990
next if [HPXML::LocationConditionedSpace,
1993-
HPXML::LocationBasementConditioned,
1994-
HPXML::LocationCrawlspaceConditioned].include? exterior_adjacent_to
1991+
HPXML::LocationBasementConditioned].include? exterior_adjacent_to
19951992

19961993
hpxml_bldg.floors.add(id: "Floor#{hpxml_bldg.floors.size + 1}",
19971994
exterior_adjacent_to: exterior_adjacent_to,
@@ -2064,7 +2061,6 @@ def set_slabs(hpxml_bldg, model, args, sorted_surfaces)
20642061
has_foundation_walls = false
20652062
if [HPXML::LocationCrawlspaceVented,
20662063
HPXML::LocationCrawlspaceUnvented,
2067-
HPXML::LocationCrawlspaceConditioned,
20682064
HPXML::LocationBasementUnconditioned,
20692065
HPXML::LocationBasementConditioned].include? interior_adjacent_to
20702066
has_foundation_walls = true
@@ -2115,12 +2111,6 @@ def set_slabs(hpxml_bldg, model, args, sorted_surfaces)
21152111
hpxml_slab.carpet_fraction = args[:enclosure_carpet_fraction]
21162112
hpxml_slab.carpet_r_value = args[:enclosure_carpet_r_value]
21172113
end
2118-
2119-
next unless interior_adjacent_to == HPXML::LocationCrawlspaceConditioned
2120-
2121-
# Increase Conditioned Building Volume
2122-
conditioned_crawlspace_volume = hpxml_slab.area * args[:geometry_foundation_type_height]
2123-
hpxml_bldg.building_construction.conditioned_building_volume += conditioned_crawlspace_volume
21242114
end
21252115
end
21262116

@@ -2325,8 +2315,7 @@ def set_foundations(hpxml_bldg, args)
23252315
foundation_locations = [HPXML::LocationBasementConditioned,
23262316
HPXML::LocationBasementUnconditioned,
23272317
HPXML::LocationCrawlspaceUnvented,
2328-
HPXML::LocationCrawlspaceVented,
2329-
HPXML::LocationCrawlspaceConditioned]
2318+
HPXML::LocationCrawlspaceVented]
23302319

23312320
surf_ids.each do |surf_type, surf_hash|
23322321
surf_hash['surfaces'].each do |surface|
@@ -2864,24 +2853,23 @@ def set_duct_leakages(args, hvac_distribution)
28642853
#
28652854
# @param building_component [String] the building component of interest
28662855
# @param location [String] the location of interest (HPXML::LocationCrawlspace or HPXML::LocationAttic)
2867-
# @param foundation_type [String] the specific HPXML foundation type (unvented crawlspace, vented crawlspace, conditioned crawlspace)
2868-
# @param attic_type [String] the specific HPXML attic type (unvented attic, vented attic, conditioned attic)
2856+
# @param hpxml_bldg [HPXML::Building] HPXML Building object representing an individual dwelling unit
28692857
# @return [nil]
2870-
def get_location(building_component, location, foundation_type, attic_type)
2858+
def get_location(building_component, location, hpxml_bldg)
28712859
return if location.nil?
28722860

28732861
if location == HPXML::LocationCrawlspace
2862+
foundation_type = hpxml_bldg.foundations[-1].foundation_type
28742863
case foundation_type
28752864
when HPXML::FoundationTypeCrawlspaceUnvented
28762865
return HPXML::LocationCrawlspaceUnvented
28772866
when HPXML::FoundationTypeCrawlspaceVented
28782867
return HPXML::LocationCrawlspaceVented
2879-
when HPXML::FoundationTypeCrawlspaceConditioned
2880-
return HPXML::LocationCrawlspaceConditioned
28812868
else
28822869
fail "Specified '#{location}' for #{building_component} location but foundation type is '#{foundation_type}'."
28832870
end
28842871
elsif location == HPXML::LocationAttic
2872+
attic_type = hpxml_bldg.attics[-1].attic_type
28852873
case attic_type
28862874
when HPXML::AtticTypeUnvented
28872875
return HPXML::LocationAtticUnvented
@@ -2893,6 +2881,7 @@ def get_location(building_component, location, foundation_type, attic_type)
28932881
fail "Specified '#{location}' for #{building_component} location but attic type is '#{attic_type}'."
28942882
end
28952883
elsif location == HPXML::LocationBasement
2884+
foundation_type = hpxml_bldg.foundations[-1].foundation_type
28962885
case foundation_type
28972886
when HPXML::FoundationTypeBasementConditioned
28982887
return HPXML::LocationBasementConditioned
@@ -2912,8 +2901,8 @@ def get_location(building_component, location, foundation_type, attic_type)
29122901
# @param hvac_distribution [HPXML::HVACDistribution] HPXML HVAC Distribution object
29132902
# @return [nil]
29142903
def set_ducts(hpxml_bldg, args, hvac_distribution)
2915-
ducts_supply_location = get_location('supply ducts', args[:hvac_ducts_supply_location_location], hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
2916-
ducts_return_location = get_location('return ducts', args[:hvac_ducts_return_location_location], hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
2904+
ducts_supply_location = get_location('supply ducts', args[:hvac_ducts_supply_location_location], hpxml_bldg)
2905+
ducts_return_location = get_location('return ducts', args[:hvac_ducts_return_location_location], hpxml_bldg)
29172906

29182907
ncfl = hpxml_bldg.building_construction.number_of_conditioned_floors
29192908
ncfl_ag = hpxml_bldg.building_construction.number_of_conditioned_floors_above_grade
@@ -3146,7 +3135,7 @@ def set_ventilation_fans(hpxml_bldg, args)
31463135
def set_water_heating_systems(hpxml_bldg, args)
31473136
return if args[:dhw_water_heater] == 'None'
31483137

3149-
location = get_location('water heater', args[:dhw_water_heater_location_location], hpxml_bldg.foundations[-1].foundation_type, hpxml_bldg.attics[-1].attic_type)
3138+
location = get_location('water heater', args[:dhw_water_heater_location_location], hpxml_bldg)
31503139

31513140
if not [HPXML::WaterHeaterTypeCombiStorage, HPXML::WaterHeaterTypeCombiTankless].include? args[:dhw_water_heater_type]
31523141
case args[:dhw_water_heater_efficiency_type]

hpxml-measures/BuildResidentialHPXML/measure.xml

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<schema_version>3.1</schema_version>
44
<name>build_residential_hpxml</name>
55
<uid>a13a8983-2b01-4930-8af2-42030b6e4233</uid>
6-
<version_id>05cfb040-cc69-41f0-86c1-58563d5f3800</version_id>
7-
<version_modified>2026-05-13T03:01:47Z</version_modified>
6+
<version_id>8c6a6855-95e8-491e-8fb6-6820b622531e</version_id>
7+
<version_modified>2026-07-17T21:33:32Z</version_modified>
88
<xml_checksum>2C38F48B</xml_checksum>
99
<class_name>BuildResidentialHPXML</class_name>
1010
<display_name>HPXML Builder</display_name>
@@ -108,7 +108,7 @@
108108
<argument>
109109
<name>location_site_type</name>
110110
<display_name>Location: Site Type</display_name>
111-
<description>The terrain/shielding of the home, for the infiltration model. Defaults to 'Suburban, Normal' for single-family detached and manufactured home and 'Suburban, Well-Shielded' for single-family attached and apartment units.</description>
111+
<description>The terrain/shielding of the home, for the infiltration model.</description>
112112
<type>Choice</type>
113113
<required>false</required>
114114
<model_dependent>false</model_dependent>
@@ -595,7 +595,7 @@
595595
<argument>
596596
<name>geometry_unit_num_bathrooms</name>
597597
<display_name>Geometry: Unit Number of Bathrooms</display_name>
598-
<description>The number of bathrooms in the unit. Defaults to NumberofBedrooms/2 + 0.5.</description>
598+
<description>The number of bathrooms in the unit.</description>
599599
<type>Choice</type>
600600
<required>false</required>
601601
<model_dependent>false</model_dependent>
@@ -921,10 +921,6 @@
921921
<value>Crawlspace, Unvented</value>
922922
<display_name>Crawlspace, Unvented</display_name>
923923
</choice>
924-
<choice>
925-
<value>Crawlspace, Conditioned</value>
926-
<display_name>Crawlspace, Conditioned</display_name>
927-
</choice>
928924
<choice>
929925
<value>Basement, Unconditioned</value>
930926
<display_name>Basement, Unconditioned</display_name>
@@ -11437,7 +11433,7 @@
1143711433
<filename>README.md</filename>
1143811434
<filetype>md</filetype>
1143911435
<usage_type>readme</usage_type>
11440-
<checksum>01D52363</checksum>
11436+
<checksum>E343E87E</checksum>
1144111437
</file>
1144211438
<file>
1144311439
<filename>README.md.erb</filename>
@@ -11454,7 +11450,7 @@
1145411450
<filename>measure.rb</filename>
1145511451
<filetype>rb</filetype>
1145611452
<usage_type>script</usage_type>
11457-
<checksum>FE0CEC87</checksum>
11453+
<checksum>93E3B4F6</checksum>
1145811454
</file>
1145911455
<file>
1146011456
<filename>constants.rb</filename>
@@ -11466,7 +11462,7 @@
1146611462
<filename>geometry.rb</filename>
1146711463
<filetype>rb</filetype>
1146811464
<usage_type>resource</usage_type>
11469-
<checksum>7B56FACC</checksum>
11465+
<checksum>84C42F03</checksum>
1147011466
</file>
1147111467
<file>
1147211468
<filename>options/advanced_feature.tsv</filename>
@@ -11766,7 +11762,7 @@
1176611762
<filename>options/geometry_foundation_type.tsv</filename>
1176711763
<filetype>tsv</filetype>
1176811764
<usage_type>resource</usage_type>
11769-
<checksum>A0ED3FC0</checksum>
11765+
<checksum>647701C8</checksum>
1177011766
</file>
1177111767
<file>
1177211768
<filename>options/geometry_garage_type.tsv</filename>
@@ -12096,7 +12092,7 @@
1209612092
<filename>test_build_residential_hpxml.rb</filename>
1209712093
<filetype>rb</filetype>
1209812094
<usage_type>test</usage_type>
12099-
<checksum>819DB64D</checksum>
12095+
<checksum>E0DC52BC</checksum>
1210012096
</file>
1210112097
</files>
1210212098
</measure>

0 commit comments

Comments
 (0)