Skip to content

Commit 4831784

Browse files
committed
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into ghp_standard_improvements
2 parents 5edd9a4 + fe54412 commit 4831784

49 files changed

Lines changed: 7049 additions & 865 deletions

Some content is hidden

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

‎.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:

‎BuildResidentialHPXML/README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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`
@@ -947,7 +947,7 @@ The geothermal loop configuration if there's a ground-to-air heat pump.
947947

948948
- **Required:** ``false``
949949

950-
- **Choices:** <br/> - `Default`<br/> - `Vertical Loop, Enhanced Grout`<br/> - `Vertical Loop, Enhanced Pipe`<br/> - `Vertical Loop, Enhanced Grout & Pipe`<br/> - `Detailed Example: Lopsided U Configuration, 10 Boreholes`
950+
- **Choices:** <br/> - `Default`<br/> - `Vertical Loop, Enhanced Grout`<br/> - `Vertical Loop, Enhanced Pipe`<br/> - `Vertical Loop, Enhanced Grout & Pipe`<br/> - `Detailed Example: Vertical Loop, L Configuration, 4 Boreholes`
951951

952952

953953
- **Default:** `Default`

‎BuildResidentialHPXML/measure.rb‎

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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|
@@ -2698,7 +2687,7 @@ def set_geothermal_loop(hpxml_bldg, args)
26982687
'1-1/4" pipe' => 1.25 }[args[:hvac_geothermal_loop_pipe_diameter]]
26992688

27002689
hpxml_bldg.geothermal_loops.add(id: "GeothermalLoop#{hpxml_bldg.geothermal_loops.size + 1}",
2701-
loop_configuration: args[:hvac_geothermal_loop_configuration],
2690+
loop_config: args[:hvac_geothermal_loop_configuration],
27022691
loop_flow: args[:hvac_geothermal_loop_loop_flow],
27032692
bore_config: args[:hvac_geothermal_loop_borefield_configuration],
27042693
num_bore_holes: args[:hvac_geothermal_loop_boreholes_count],
@@ -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]

‎BuildResidentialHPXML/measure.xml‎

Lines changed: 10 additions & 14 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>a5100732-58ee-47a2-8655-cbd3b2e4a4bd</version_id>
7-
<version_modified>2026-04-13T14:50:45Z</version_modified>
6+
<version_id>f4f37f65-5e30-41a0-b3dc-7a4a1fa57f44</version_id>
7+
<version_modified>2026-05-22T21:28:29Z</version_modified>
88
<xml_checksum>2C38F48B</xml_checksum>
99
<class_name>BuildResidentialHPXML</class_name>
1010
<display_name>HPXML Builder</display_name>
@@ -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>
@@ -5494,8 +5490,8 @@
54945490
<display_name>Vertical Loop, Enhanced Grout &amp; Pipe</display_name>
54955491
</choice>
54965492
<choice>
5497-
<value>Detailed Example: Lopsided U Configuration, 10 Boreholes</value>
5498-
<display_name>Detailed Example: Lopsided U Configuration, 10 Boreholes</display_name>
5493+
<value>Detailed Example: Vertical Loop, L Configuration, 4 Boreholes</value>
5494+
<display_name>Detailed Example: Vertical Loop, L Configuration, 4 Boreholes</display_name>
54995495
</choice>
55005496
</choices>
55015497
</argument>
@@ -11437,7 +11433,7 @@
1143711433
<filename>README.md</filename>
1143811434
<filetype>md</filetype>
1143911435
<usage_type>readme</usage_type>
11440-
<checksum>B9841315</checksum>
11436+
<checksum>40789597</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>4F3E18D4</checksum>
11453+
<checksum>E3E200DA</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>
@@ -11850,7 +11846,7 @@
1185011846
<filename>options/hvac_geothermal_loop.tsv</filename>
1185111847
<filetype>tsv</filetype>
1185211848
<usage_type>resource</usage_type>
11853-
<checksum>01874F99</checksum>
11849+
<checksum>0B427696</checksum>
1185411850
</file>
1185511851
<file>
1185611852
<filename>options/hvac_heat_pump.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)