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

Adding flexibility to specify location of the radiant barrier #1473

Merged
merged 46 commits into from
Dec 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
03942a5
Initial commit
prsh5175 Aug 23, 2023
a1c85f1
Schematron additions.
prsh5175 Aug 23, 2023
b95b5ba
Unrelated file removed.
prsh5175 Aug 23, 2023
1a4819a
Updates to hpxml.rb
prsh5175 Aug 24, 2023
179ea11
Inputs documentation updated.
prsh5175 Aug 24, 2023
e6e2531
Updates.
prsh5175 Sep 1, 2023
28e86d0
Latest results.
Sep 1, 2023
5b4f1f7
Not working yet. Temporary commit for review
prsh5175 Oct 28, 2023
0217967
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
shorowit Oct 28, 2023
29dff2b
Temporary commit.
prsh5175 Nov 2, 2023
bc944b1
Fix var name in roofs method.
joseph-robertson Nov 2, 2023
82496f2
HPXML creation updates.
prsh5175 Nov 2, 2023
439cd98
HPXML sample file generation updates.
prsh5175 Nov 8, 2023
ea309fb
Gitignore update.
prsh5175 Nov 8, 2023
fdeab31
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
shorowit Nov 8, 2023
d9b023e
Temporary commit.
prsh5175 Nov 9, 2023
6d7baaa
Adding radiant barriers only when adjacent to vented or unvented attics.
prsh5175 Nov 11, 2023
2193ed6
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
prsh5175 Nov 15, 2023
07a0280
Updates.
prsh5175 Nov 16, 2023
132ed42
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
prsh5175 Nov 28, 2023
d5f387e
Updates.
prsh5175 Nov 28, 2023
95bc170
Update radiant barrier arg names in build test file.
joseph-robertson Dec 6, 2023
0d23186
Update build arg default value and clean up hpxml_inputs.json.
joseph-robertson Dec 6, 2023
0a6a3c9
Remove location hpxml element from docs.
joseph-robertson Dec 6, 2023
84bfc75
Revert ignore file and commit new sample files.
joseph-robertson Dec 6, 2023
318e4d2
Merge branch 'master' into radiant_barrier
joseph-robertson Dec 6, 2023
254baba
Fix CI error
shorowit Dec 6, 2023
d282413
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
shorowit Dec 6, 2023
7ba4e67
Latest results.
Dec 6, 2023
dcbefdb
Dust loading emissivity reduction of attic floor radiant barrier impl…
prsh5175 Dec 13, 2023
5ab3897
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
shorowit Dec 13, 2023
0fd4dd1
Latest results.
Dec 14, 2023
0c89398
BuildResHPXML measure: Make logic consistent between roof/wall/floor.…
shorowit Dec 14, 2023
376d104
Merge branch 'radiant_barrier' of https://github.com/NREL/OpenStudio-…
shorowit Dec 14, 2023
fc064d9
tasks.rb update_measures
shorowit Dec 14, 2023
9ee626d
Reorder args.
shorowit Dec 14, 2023
bfc33cd
Latest results.
Dec 14, 2023
ad604cc
Add comments, update docs.
shorowit Dec 14, 2023
3f29833
Merge branch 'radiant_barrier' of https://github.com/NREL/OpenStudio-…
shorowit Dec 14, 2023
e22b6bc
Updates
prsh5175 Dec 15, 2023
4a9e1b2
Updates
prsh5175 Dec 15, 2023
0b64770
Latest results.
Dec 16, 2023
70b0745
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
shorowit Dec 18, 2023
eab74e0
Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML int…
shorowit Dec 21, 2023
65f1720
Add/update tests.
shorowit Dec 21, 2023
bcf848a
Add breaking change to changelog [ci skip]
shorowit Dec 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -1009,7 +1009,7 @@
/workflow/tests/run
/workflow/tests/test*
/workflow/sample_files/results
/workflow/sample_files/run
/workflow/sample_files/run*/
/files
/BuildResidentialHPXML/tests/extra_files
/ReportUtilityBills/resources/detailed_rates/*.json
Expand Down
18 changes: 10 additions & 8 deletions BuildResidentialHPXML/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1039,22 +1039,24 @@ Assembly R-value of the roof.

<br/>

**Roof: Has Radiant Barrier**
**Attic: Radiant Barrier Location**

Presence of a radiant barrier in the attic.
The location of the radiant barrier in the attic.

- **Name:** ``roof_radiant_barrier``
- **Type:** ``Boolean``
- **Name:** ``radiant_barrier_attic_location``
- **Type:** ``Choice``

- **Required:** ``true``
- **Required:** ``false``

- **Choices:** `none`, `Attic roof only`, `Attic roof and gable walls`, `Attic floor`

<br/>

**Roof: Radiant Barrier Grade**
**Attic: Radiant Barrier Grade**

The grade of the radiant barrier. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.
The grade of the radiant barrier in the attic. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#hpxml-roofs'>HPXML Roofs</a>) is used.

- **Name:** ``roof_radiant_barrier_grade``
- **Name:** ``radiant_barrier_grade``
- **Type:** ``Choice``

- **Required:** ``false``
Expand Down
58 changes: 40 additions & 18 deletions BuildResidentialHPXML/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -656,20 +656,25 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDefaultValue(2.3)
args << arg

arg = OpenStudio::Measure::OSArgument::makeBoolArgument('roof_radiant_barrier', true)
arg.setDisplayName('Roof: Has Radiant Barrier')
arg.setDescription('Presence of a radiant barrier in the attic.')
arg.setDefaultValue(false)
radiant_barrier_attic_location_choices = OpenStudio::StringVector.new
radiant_barrier_attic_location_choices << 'none'
radiant_barrier_attic_location_choices << HPXML::RadiantBarrierLocationAtticRoofOnly
radiant_barrier_attic_location_choices << HPXML::RadiantBarrierLocationAtticRoofAndGableWalls
radiant_barrier_attic_location_choices << HPXML::RadiantBarrierLocationAtticFloor

arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('radiant_barrier_attic_location', radiant_barrier_attic_location_choices, false)
arg.setDisplayName('Attic: Radiant Barrier Location')
arg.setDescription('The location of the radiant barrier in the attic.')
args << arg

roof_radiant_barrier_grade_choices = OpenStudio::StringVector.new
roof_radiant_barrier_grade_choices << '1'
roof_radiant_barrier_grade_choices << '2'
roof_radiant_barrier_grade_choices << '3'
radiant_barrier_grade_choices = OpenStudio::StringVector.new
radiant_barrier_grade_choices << '1'
radiant_barrier_grade_choices << '2'
radiant_barrier_grade_choices << '3'

arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('roof_radiant_barrier_grade', roof_radiant_barrier_grade_choices, false)
arg.setDisplayName('Roof: Radiant Barrier Grade')
arg.setDescription("The grade of the radiant barrier. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-roofs'>HPXML Roofs</a>) is used.")
arg = OpenStudio::Measure::OSArgument::makeChoiceArgument('radiant_barrier_grade', radiant_barrier_grade_choices, false)
arg.setDisplayName('Attic: Radiant Barrier Grade')
arg.setDescription("The grade of the radiant barrier in the attic. If not provided, the OS-HPXML default (see <a href='#{docs_base_url}#hpxml-roofs'>HPXML Roofs</a>) is used.")
args << arg

wall_type_choices = OpenStudio::StringVector.new
Expand Down Expand Up @@ -4325,11 +4330,6 @@ def self.set_roofs(hpxml_bldg, args, sorted_surfaces)
roof_color = args[:roof_color].get
end

radiant_barrier = args[:roof_radiant_barrier]
if args[:roof_radiant_barrier] && args[:roof_radiant_barrier_grade].is_initialized
radiant_barrier_grade = args[:roof_radiant_barrier_grade].get
end

if args[:geometry_attic_type] == HPXML::AtticTypeFlatRoof
azimuth = nil
else
Expand All @@ -4343,10 +4343,16 @@ def self.set_roofs(hpxml_bldg, args, sorted_surfaces)
roof_type: roof_type,
roof_color: roof_color,
pitch: args[:geometry_roof_pitch],
radiant_barrier: radiant_barrier,
radiant_barrier_grade: radiant_barrier_grade,
insulation_assembly_r_value: args[:roof_assembly_r])
@surface_ids[surface.name.to_s] = hpxml_bldg.roofs[-1].id

next unless [HPXML::RadiantBarrierLocationAtticRoofOnly, HPXML::RadiantBarrierLocationAtticRoofAndGableWalls].include?(args[:radiant_barrier_attic_location].to_s)
next unless [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include?(hpxml_bldg.roofs[-1].interior_adjacent_to)

hpxml_bldg.roofs[-1].radiant_barrier = true
if args[:radiant_barrier_grade].is_initialized
hpxml_bldg.roofs[-1].radiant_barrier_grade = args[:radiant_barrier_grade].get
end
end
end

Expand Down Expand Up @@ -4481,6 +4487,14 @@ def self.set_walls(hpxml_bldg, model, args, sorted_surfaces)
else
hpxml_bldg.walls[-1].insulation_assembly_r_value = 4.0 # Uninsulated
end

next unless hpxml_bldg.walls[-1].attic_wall_type == HPXML::AtticWallTypeGable && args[:radiant_barrier_attic_location].to_s == HPXML::RadiantBarrierLocationAtticRoofAndGableWalls
next unless [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include?(hpxml_bldg.walls[-1].interior_adjacent_to)

hpxml_bldg.walls[-1].radiant_barrier = true
if args[:radiant_barrier_grade].is_initialized
hpxml_bldg.walls[-1].radiant_barrier_grade = args[:radiant_barrier_grade].get
end
end
end

Expand Down Expand Up @@ -4638,6 +4652,14 @@ def self.set_floors(hpxml_bldg, args, sorted_surfaces)
else
hpxml_bldg.floors[-1].insulation_assembly_r_value = 2.1 # Uninsulated
end

next unless args[:radiant_barrier_attic_location].to_s == HPXML::RadiantBarrierLocationAtticFloor
next unless [HPXML::LocationAtticUnvented, HPXML::LocationAtticVented].include?(hpxml_bldg.floors[-1].exterior_adjacent_to) && hpxml_bldg.floors[-1].interior_adjacent_to == HPXML::LocationConditionedSpace

hpxml_bldg.floors[-1].radiant_barrier = true
if args[:radiant_barrier_grade].is_initialized
hpxml_bldg.floors[-1].radiant_barrier_grade = args[:radiant_barrier_grade].get
end
end
end

Expand Down
43 changes: 25 additions & 18 deletions BuildResidentialHPXML/measure.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<schema_version>3.1</schema_version>
<name>build_residential_hpxml</name>
<uid>a13a8983-2b01-4930-8af2-42030b6e4233</uid>
<version_id>131fc59f-57f8-4530-804b-d1c5e9ccc166</version_id>
<version_modified>2023-12-20T20:22:01Z</version_modified>
<version_id>5c120a24-790f-45d1-8928-39587e156f33</version_id>
<version_modified>2023-12-21T21:32:12Z</version_modified>
<xml_checksum>2C38F48B</xml_checksum>
<class_name>BuildResidentialHPXML</class_name>
<display_name>HPXML Builder</display_name>
Expand Down Expand Up @@ -1481,28 +1481,35 @@
<default_value>2.3</default_value>
</argument>
<argument>
<name>roof_radiant_barrier</name>
<display_name>Roof: Has Radiant Barrier</display_name>
<description>Presence of a radiant barrier in the attic.</description>
<type>Boolean</type>
<required>true</required>
<name>radiant_barrier_attic_location</name>
<display_name>Attic: Radiant Barrier Location</display_name>
<description>The location of the radiant barrier in the attic.</description>
<type>Choice</type>
<required>false</required>
<model_dependent>false</model_dependent>
<default_value>false</default_value>
<choices>
<choice>
<value>true</value>
<display_name>true</display_name>
<value>none</value>
<display_name>none</display_name>
</choice>
<choice>
<value>false</value>
<display_name>false</display_name>
<value>Attic roof only</value>
<display_name>Attic roof only</display_name>
</choice>
<choice>
<value>Attic roof and gable walls</value>
<display_name>Attic roof and gable walls</display_name>
</choice>
<choice>
<value>Attic floor</value>
<display_name>Attic floor</display_name>
</choice>
</choices>
</argument>
<argument>
<name>roof_radiant_barrier_grade</name>
<display_name>Roof: Radiant Barrier Grade</display_name>
<description>The grade of the radiant barrier. If not provided, the OS-HPXML default (see &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#hpxml-roofs'&gt;HPXML Roofs&lt;/a&gt;) is used.</description>
<name>radiant_barrier_grade</name>
<display_name>Attic: Radiant Barrier Grade</display_name>
<description>The grade of the radiant barrier in the attic. If not provided, the OS-HPXML default (see &lt;a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#hpxml-roofs'&gt;HPXML Roofs&lt;/a&gt;) is used.</description>
<type>Choice</type>
<required>false</required>
<model_dependent>false</model_dependent>
Expand Down Expand Up @@ -6998,7 +7005,7 @@
<filename>README.md</filename>
<filetype>md</filetype>
<usage_type>readme</usage_type>
<checksum>CCBF3E74</checksum>
<checksum>58036A34</checksum>
</file>
<file>
<filename>README.md.erb</filename>
Expand All @@ -7015,7 +7022,7 @@
<filename>measure.rb</filename>
<filetype>rb</filetype>
<usage_type>script</usage_type>
<checksum>000C8235</checksum>
<checksum>17ACCED3</checksum>
</file>
<file>
<filename>geometry.rb</filename>
Expand All @@ -7027,7 +7034,7 @@
<filename>test_build_residential_hpxml.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>544C00A5</checksum>
<checksum>EDC4A88B</checksum>
</file>
</files>
</measure>
4 changes: 2 additions & 2 deletions BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
Original file line number Diff line number Diff line change
Expand Up @@ -422,8 +422,8 @@ def _set_measure_argument_values(hpxml_file, args)
args['roof_material_type'] = HPXML::RoofTypeAsphaltShingles
args['roof_color'] = HPXML::ColorMedium
args['roof_assembly_r'] = 2.3
args['roof_radiant_barrier'] = false
args['roof_radiant_barrier_grade'] = 1
args['radiant_barrier_attic_location'] = 'none'
args['radiant_barrier_grade'] = 1
args['neighbor_front_distance'] = 0
args['neighbor_back_distance'] = 0
args['neighbor_left_distance'] = 0
Expand Down
2 changes: 2 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

__New Features__
- Replaces `BuildingSummary/Site/extension/GroundConductivity` with `BuildingSummary/Site/Soil/Conductivity`.
- Allows radiant barriers for additional locations (attic gable walls and floor); reduced emissivity due to dust assumed for radiant barriers on attic floor.
- Ground source heat pump enhancements:
- Allows optional detailed inputs related to geothermal loop (`HVACPlant/GeothermalLoop`).
- Allows optional ground diffusivity input.
- Updates to using G-Functions from the [G-Function Library for Modeling Vertical Bore Ground Heat Exchanger](https://gdr.openei.org/submissions/1325).
- Updated heating/cooling performance curves to reflect newer equipment.
- BuildResidentialHPXML measure:
- **Breaking change**: Replaces `roof_radiant_barrier`/`roof_radiant_barrier_grade` arguments with `radiant_barrier_attic_location`/`radiant_barrier_grade`.
- Add soil and moisture type arguments (for determining ground conductivity and diffusivity) and optional geothermal loop arguments for ground source heat pumps.
- Adds more error-checking for inappropriate inputs (e.g., HVAC SHR=0 or clothes washer IMEF=0).

Expand Down
38 changes: 29 additions & 9 deletions HPXMLtoOpenStudio/measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -734,7 +734,10 @@ def add_walls(runner, model, spaces)
# Apply construction
# The code below constructs a reasonable wall construction based on the
# wall type while ensuring the correct assembly R-value.

has_radiant_barrier = wall.radiant_barrier
if has_radiant_barrier
radiant_barrier_grade = wall.radiant_barrier_grade
end
inside_film = Material.AirFilmVertical
if wall.is_exterior
outside_film = Material.AirFilmOutside
Expand All @@ -750,7 +753,8 @@ def add_walls(runner, model, spaces)
mat_int_finish = Material.InteriorFinishMaterial(wall.interior_finish_type, wall.interior_finish_thickness)

Constructions.apply_wall_construction(runner, model, surfaces, wall.id, wall.wall_type, wall.insulation_assembly_r_value,
mat_int_finish, inside_film, outside_film, mat_ext_finish, wall.solar_absorptance,
mat_int_finish, has_radiant_barrier, inside_film, outside_film,
radiant_barrier_grade, mat_ext_finish, wall.solar_absorptance,
wall.emittance)
end
end
Expand Down Expand Up @@ -876,6 +880,10 @@ def add_floors(runner, model, spaces)
outside_film = Material.AirFilmFloorAverage
end
mat_int_finish_or_covering = Material.InteriorFinishMaterial(floor.interior_finish_type, floor.interior_finish_thickness)
has_radiant_barrier = floor.radiant_barrier
if has_radiant_barrier
radiant_barrier_grade = floor.radiant_barrier_grade
end
else # Floor
if @apply_ashrae140_assumptions
# Raised floor
Expand All @@ -897,7 +905,7 @@ def add_floors(runner, model, spaces)
end

Constructions.apply_floor_ceiling_construction(runner, model, [surface], floor.id, floor.floor_type, floor.is_ceiling, floor.insulation_assembly_r_value,
mat_int_finish_or_covering, inside_film, outside_film)
mat_int_finish_or_covering, has_radiant_barrier, inside_film, outside_film, radiant_barrier_grade)
end
end

Expand Down Expand Up @@ -1000,8 +1008,20 @@ def add_foundation_walls_slabs(runner, model, weather, spaces)
end
mat_ext_finish = nil

Constructions.apply_wall_construction(runner, model, [surface], fnd_wall.id, wall_type, assembly_r,
mat_int_finish, inside_film, outside_film, mat_ext_finish, nil, nil)
Constructions.apply_wall_construction(runner,
model,
[surface],
fnd_wall.id,
wall_type,
assembly_r,
mat_int_finish,
false,
inside_film,
outside_film,
nil,
mat_ext_finish,
nil,
nil)
end
end
end
Expand Down Expand Up @@ -1458,12 +1478,12 @@ def apply_adiabatic_construction(model, surfaces, type)
mat_int_finish = Material.InteriorFinishMaterial(HPXML::InteriorFinishGypsumBoard, 0.5)
mat_ext_finish = Material.ExteriorFinishMaterial(HPXML::SidingTypeWood)
Constructions.apply_wood_stud_wall(model, surfaces, 'AdiabaticWallConstruction',
0, 1, 3.5, true, 0.1, mat_int_finish, 0, 99, mat_ext_finish,
Material.AirFilmVertical, Material.AirFilmVertical)
0, 1, 3.5, true, 0.1, mat_int_finish, 0, 99, mat_ext_finish, false,
Material.AirFilmVertical, Material.AirFilmVertical, nil)
elsif type == 'floor'
Constructions.apply_wood_frame_floor_ceiling(model, surfaces, 'AdiabaticFloorConstruction', false,
0, 1, 0.07, 5.5, 0.75, 99, Material.CoveringBare,
Material.AirFilmFloorReduced, Material.AirFilmFloorReduced)
0, 1, 0.07, 5.5, 0.75, 99, Material.CoveringBare, false,
Material.AirFilmFloorReduced, Material.AirFilmFloorReduced, nil)
elsif type == 'roof'
Constructions.apply_open_cavity_roof(model, surfaces, 'AdiabaticRoofConstruction',
0, 1, 7.25, 0.07, 7.25, 0.75, 99,
Expand Down
Loading