Skip to content
Draft
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
@@ -1,6 +1,9 @@
## OpenStudio-HPXML v1.12.0

__New Features__
- Updates to HPXML v5.0-rc2.
- **Breaking change**: `Roof/RoofType="cool roof"` replaced by `Roof/CoolRoof="true"`.
- `Roof/RoofColor` now has an additional option of "white".
- HVAC updates:
- Dual-fuel heat pumps with switchover temperatures > 25F are now autosized based on 25F to allow some additional heating capacity buffer.
- Improves handling of duct leakage specified using cfm25/cfm50.
Expand Down
24 changes: 12 additions & 12 deletions HPXMLtoOpenStudio/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>hpxm_lto_openstudio</name>
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
<version_id>15c39750-5947-45ef-887d-47606442ed57</version_id>
<version_modified>2026-04-02T19:46:00Z</version_modified>
<version_id>0eb36f3b-095d-44c1-b223-a2abdfb1e7a2</version_id>
<version_modified>2026-04-03T21:12:44Z</version_modified>
<xml_checksum>D8922A73</xml_checksum>
<class_name>HPXMLtoOpenStudio</class_name>
<display_name>HPXML to OpenStudio Translator</display_name>
Expand Down Expand Up @@ -241,7 +241,7 @@
<filename>constructions.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>207A61E6</checksum>
<checksum>0B4F1601</checksum>
</file>
<file>
<filename>data/Xing_okstate_0664D_13659_Table_A-3.csv</filename>
Expand Down Expand Up @@ -367,7 +367,7 @@
<filename>defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>F91B9101</checksum>
<checksum>7EBD07FE</checksum>
</file>
<file>
<filename>electric_panel.rb</filename>
Expand Down Expand Up @@ -403,13 +403,13 @@
<filename>hpxml.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>BF5902DA</checksum>
<checksum>D01D8E1A</checksum>
</file>
<file>
<filename>hpxml_schema/HPXML.xsd</filename>
<filetype>xsd</filetype>
<usage_type>resource</usage_type>
<checksum>4EDBC273</checksum>
<checksum>B5E0E168</checksum>
</file>
<file>
<filename>hpxml_schema/README.md</filename>
Expand All @@ -421,7 +421,7 @@
<filename>hpxml_schematron/EPvalidator.sch</filename>
<filetype>sch</filetype>
<usage_type>resource</usage_type>
<checksum>9B5934A8</checksum>
<checksum>032D5D78</checksum>
</file>
<file>
<filename>hpxml_schematron/iso-schematron.xsd</filename>
Expand All @@ -439,7 +439,7 @@
<filename>hvac_sizing.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>A5C3D289</checksum>
<checksum>8CC5697F</checksum>
</file>
<file>
<filename>internal_gains.rb</filename>
Expand All @@ -463,7 +463,7 @@
<filename>materials.rb</filename>
<filetype>rb</filetype>
<usage_type>resource</usage_type>
<checksum>115DAF4E</checksum>
<checksum>B45CDB03</checksum>
</file>
<file>
<filename>math.rb</filename>
Expand Down Expand Up @@ -751,7 +751,7 @@
<filename>test_defaults.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>989C355A</checksum>
<checksum>37E48E05</checksum>
</file>
<file>
<filename>test_electric_panel.rb</filename>
Expand All @@ -763,7 +763,7 @@
<filename>test_enclosure.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>B2041953</checksum>
<checksum>15BD27C4</checksum>
</file>
<file>
<filename>test_generator.rb</filename>
Expand All @@ -787,7 +787,7 @@
<filename>test_hvac_sizing.rb</filename>
<filetype>rb</filetype>
<usage_type>test</usage_type>
<checksum>7481E2FB</checksum>
<checksum>7AFE53B0</checksum>
</file>
<file>
<filename>test_lighting.rb</filename>
Expand Down
97 changes: 32 additions & 65 deletions HPXMLtoOpenStudio/resources/constructions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1916,83 +1916,50 @@ def self.create_os_int_mass_and_def(model, object_name, space, area)
#
# @return [TODO] TODO
def self.get_roof_color_and_solar_absorptance_map
return { # asphalt or fiberglass shingles
[HPXML::ColorDark, HPXML::RoofTypeAsphaltShingles] => 0.92,
[HPXML::ColorMediumDark, HPXML::RoofTypeAsphaltShingles] => 0.89,
[HPXML::ColorMedium, HPXML::RoofTypeAsphaltShingles] => 0.85,
[HPXML::ColorMediumLight, HPXML::RoofTypeAsphaltShingles] => 0.80,
[HPXML::ColorLight, HPXML::RoofTypeAsphaltShingles] => 0.75,
[HPXML::ColorReflective, HPXML::RoofTypeAsphaltShingles] => 0.50,
# wood shingles or shakes
[HPXML::ColorDark, HPXML::RoofTypeWoodShingles] => 0.92,
[HPXML::ColorMediumDark, HPXML::RoofTypeWoodShingles] => 0.89,
[HPXML::ColorMedium, HPXML::RoofTypeWoodShingles] => 0.85,
[HPXML::ColorMediumLight, HPXML::RoofTypeWoodShingles] => 0.80,
[HPXML::ColorLight, HPXML::RoofTypeWoodShingles] => 0.75,
[HPXML::ColorReflective, HPXML::RoofTypeWoodShingles] => 0.50,
# shingles
[HPXML::ColorDark, HPXML::RoofTypeShingles] => 0.92,
[HPXML::ColorMediumDark, HPXML::RoofTypeShingles] => 0.89,
[HPXML::ColorMedium, HPXML::RoofTypeShingles] => 0.85,
[HPXML::ColorMediumLight, HPXML::RoofTypeShingles] => 0.80,
[HPXML::ColorLight, HPXML::RoofTypeShingles] => 0.75,
[HPXML::ColorReflective, HPXML::RoofTypeShingles] => 0.50,
# slate or tile shingles
[HPXML::ColorDark, HPXML::RoofTypeClayTile] => 0.90,
[HPXML::ColorMediumDark, HPXML::RoofTypeClayTile] => 0.83,
[HPXML::ColorMedium, HPXML::RoofTypeClayTile] => 0.75,
[HPXML::ColorMediumLight, HPXML::RoofTypeClayTile] => 0.67,
[HPXML::ColorLight, HPXML::RoofTypeClayTile] => 0.60,
[HPXML::ColorReflective, HPXML::RoofTypeClayTile] => 0.30,
# metal surfacing
[HPXML::ColorDark, HPXML::RoofTypeMetal] => 0.90,
[HPXML::ColorMediumDark, HPXML::RoofTypeMetal] => 0.83,
[HPXML::ColorMedium, HPXML::RoofTypeMetal] => 0.75,
[HPXML::ColorMediumLight, HPXML::RoofTypeMetal] => 0.67,
[HPXML::ColorLight, HPXML::RoofTypeMetal] => 0.60,
[HPXML::ColorReflective, HPXML::RoofTypeMetal] => 0.30,
# plastic/rubber/synthetic sheeting
[HPXML::ColorDark, HPXML::RoofTypePlasticRubber] => 0.90,
[HPXML::ColorMediumDark, HPXML::RoofTypePlasticRubber] => 0.83,
[HPXML::ColorMedium, HPXML::RoofTypePlasticRubber] => 0.75,
[HPXML::ColorMediumLight, HPXML::RoofTypePlasticRubber] => 0.67,
[HPXML::ColorLight, HPXML::RoofTypePlasticRubber] => 0.60,
[HPXML::ColorReflective, HPXML::RoofTypePlasticRubber] => 0.30,
# expanded polystyrene sheathing
[HPXML::ColorDark, HPXML::RoofTypeEPS] => 0.92,
[HPXML::ColorMediumDark, HPXML::RoofTypeEPS] => 0.89,
[HPXML::ColorMedium, HPXML::RoofTypeEPS] => 0.85,
[HPXML::ColorMediumLight, HPXML::RoofTypeEPS] => 0.80,
[HPXML::ColorLight, HPXML::RoofTypeEPS] => 0.75,
[HPXML::ColorReflective, HPXML::RoofTypeEPS] => 0.50,
# concrete
[HPXML::ColorDark, HPXML::RoofTypeConcrete] => 0.90,
[HPXML::ColorMediumDark, HPXML::RoofTypeConcrete] => 0.83,
[HPXML::ColorMedium, HPXML::RoofTypeConcrete] => 0.75,
[HPXML::ColorMediumLight, HPXML::RoofTypeConcrete] => 0.67,
[HPXML::ColorLight, HPXML::RoofTypeConcrete] => 0.65,
[HPXML::ColorReflective, HPXML::RoofTypeConcrete] => 0.50,
# cool roof
[HPXML::ColorDark, HPXML::RoofTypeCool] => 0.30,
[HPXML::ColorMediumDark, HPXML::RoofTypeCool] => 0.30,
[HPXML::ColorMedium, HPXML::RoofTypeCool] => 0.30,
[HPXML::ColorMediumLight, HPXML::RoofTypeCool] => 0.30,
[HPXML::ColorLight, HPXML::RoofTypeCool] => 0.30,
[HPXML::ColorReflective, HPXML::RoofTypeCool] => 0.30,
}
map = {}
# Values partially informed by CRRC Rated Roof Products
# https://coolroofs.org/directory/roof
[HPXML::RoofTypeAsphaltShingles,
HPXML::RoofTypeWoodShingles,
HPXML::RoofTypeShingles,
HPXML::RoofTypeEPS].each do |roof_type|
map[[HPXML::ColorDark, roof_type]] = 0.92
map[[HPXML::ColorMediumDark, roof_type]] = 0.89
map[[HPXML::ColorMedium, roof_type]] = 0.85
map[[HPXML::ColorMediumLight, roof_type]] = 0.80
map[[HPXML::ColorLight, roof_type]] = 0.75
map[[HPXML::ColorWhite, roof_type]] = 0.70
map[[HPXML::ColorReflective, roof_type]] = 0.50
end
[HPXML::RoofTypeClayTile,
HPXML::RoofTypeMetal,
HPXML::RoofTypePlasticRubber,
HPXML::RoofTypeConcrete].each do |roof_type|
map[[HPXML::ColorDark, roof_type]] = 0.90
map[[HPXML::ColorMediumDark, roof_type]] = 0.80
map[[HPXML::ColorMedium, roof_type]] = 0.70
map[[HPXML::ColorMediumLight, roof_type]] = 0.60
map[[HPXML::ColorLight, roof_type]] = 0.45
map[[HPXML::ColorWhite, roof_type]] = 0.35
map[[HPXML::ColorReflective, roof_type]] = 0.25
end
return map
end

# TODO
#
# @return [TODO] TODO
def self.get_wall_color_and_solar_absorptance_map
# Values partially informed by CRRC Rated Wall Products
# https://coolroofs.org/directory/wall
return {
HPXML::ColorDark => 0.95,
HPXML::ColorMediumDark => 0.85,
HPXML::ColorMedium => 0.70,
HPXML::ColorMediumLight => 0.60,
HPXML::ColorLight => 0.50,
HPXML::ColorReflective => 0.30
HPXML::ColorWhite => 0.35,
HPXML::ColorReflective => 0.25
}
end

Expand Down
6 changes: 5 additions & 1 deletion HPXMLtoOpenStudio/resources/defaults.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1274,7 +1274,11 @@ def self.apply_roofs(hpxml_bldg)
roof.radiant_barrier_grade_isdefaulted = true
end
if roof.roof_color.nil? && roof.solar_absorptance.nil?
roof.roof_color = HPXML::ColorMedium
if roof.cool_roof
roof.roof_color = HPXML::ColorWhite
else
roof.roof_color = HPXML::ColorMedium
end
roof.roof_color_isdefaulted = true
end
if roof.roof_color.nil?
Expand Down
5 changes: 4 additions & 1 deletion HPXMLtoOpenStudio/resources/hpxml.rb
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ class HPXML < Object
ColorMediumDark = 'medium dark'
ColorMediumLight = 'medium light'
ColorReflective = 'reflective'
ColorWhite = 'white'
DehumidifierTypePortable = 'portable'
DehumidifierTypeWholeHome = 'whole-home'
DryingMethodConventional = 'conventional'
Expand Down Expand Up @@ -379,7 +380,6 @@ class HPXML < Object
ResidentialTypeSFD = 'single-family detached'
RoofTypeAsphaltShingles = 'asphalt or fiberglass shingles'
RoofTypeConcrete = 'concrete'
RoofTypeCool = 'cool roof'
RoofTypeClayTile = 'slate or tile shingles'
RoofTypeEPS = 'expanded polystyrene sheathing'
RoofTypeMetal = 'metal surfacing'
Expand Down Expand Up @@ -3912,6 +3912,7 @@ class Roof < BaseElement
:orientation, # [String] Orientation (HPXML::OrientationXXX)
:azimuth, # [Integer] Azimuth (deg)
:roof_type, # [String] RoofType (HPXML::RoofTypeXXX)
:cool_roof, # [Boolean] CoolRoof
:roof_color, # [String] RoofColor (HPXML::ColorXXX)
:solar_absorptance, # [Double] SolarAbsorptance
:emittance, # [Double] Emittance
Expand Down Expand Up @@ -4053,6 +4054,7 @@ def to_doc(building)
XMLHelper.add_element(roof, 'Orientation', @orientation, :string, @orientation_isdefaulted) unless @orientation.nil?
XMLHelper.add_element(roof, 'Azimuth', @azimuth, :integer, @azimuth_isdefaulted) unless @azimuth.nil?
XMLHelper.add_element(roof, 'RoofType', @roof_type, :string, @roof_type_isdefaulted) unless @roof_type.nil?
XMLHelper.add_element(roof, 'CoolRoof', @cool_roof, :boolean, @cool_roof_isdefaulted) unless @cool_roof.nil?
XMLHelper.add_element(roof, 'RoofColor', @roof_color, :string, @roof_color_isdefaulted) unless @roof_color.nil?
XMLHelper.add_element(roof, 'SolarAbsorptance', @solar_absorptance, :float, @solar_absorptance_isdefaulted) unless @solar_absorptance.nil?
XMLHelper.add_element(roof, 'Emittance', @emittance, :float, @emittance_isdefaulted) unless @emittance.nil?
Expand Down Expand Up @@ -4104,6 +4106,7 @@ def from_doc(roof)
@orientation = XMLHelper.get_value(roof, 'Orientation', :string)
@azimuth = XMLHelper.get_value(roof, 'Azimuth', :integer)
@roof_type = XMLHelper.get_value(roof, 'RoofType', :string)
@cool_roof = XMLHelper.get_value(roof, 'CoolRoof', :boolean)
@roof_color = XMLHelper.get_value(roof, 'RoofColor', :string)
@solar_absorptance = XMLHelper.get_value(roof, 'SolarAbsorptance', :float)
@emittance = XMLHelper.get_value(roof, 'Emittance', :float)
Expand Down
Loading