Skip to content

Revisits (interzone) surface air film resistances#29

Merged
brgix merged 7 commits intodevelopfrom
airfilm
Apr 14, 2026
Merged

Revisits (interzone) surface air film resistances#29
brgix merged 7 commits intodevelopfrom
airfilm

Conversation

@brgix
Copy link
Copy Markdown
Member

@brgix brgix commented Mar 30, 2026

OSut vs OpenStudio vs EnergyPlus standard condition surface air film resistances for interzone surfaces, linked to this issue.

@brgix brgix self-assigned this Mar 30, 2026
@brgix brgix added the bug Something isn't working label Mar 30, 2026
Comment thread spec/osut_tests_spec.rb
expect(tilt.round(4)).to eq(Math::PI.round(4))

r1 = OpenStudio::Model::PlanarSurface.stillAirFilmResistance(tilt) * 2
r2 = surface.filmResistance
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OpenStudio's Surface filmResistance simply doubles the tilt-dependent interior surface air film resistance when it comes to interzone surfaces. Just like EnergyPlus (see here), OpenStudio doesn't recognize interzone surfaces as part of the building envelope (see here).

Comment thread spec/osut_tests_spec.rb
expect(r1.round(3)).to eq(0.212) # not 0.321!
expect(r2.round(3)).to eq(0.212) # not 0.321!

# OS-reported film resistances: 0.212 vs 0.321 - which one should apply?
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This OpenStudio Surface filmResistance "doubling" solution yields 2 different results for interzone floor/ceiling combo:

  • 0.212 if probing the ceiling surface
  • 0.321 if probing the adjacent floor

Comment thread spec/osut_tests_spec.rb
# - attic floors:
# - U with film: 0.151 (R with film: 6.623)
# - U without film: 0.158 (R without film: 6.329)
# TOTAL film resistance = 0.267 ?
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Contrary to OpenStudio, EnergyPlus does not yield different surface air film resistances if probing either interzone ceiling or floor. EnergyPlus instead adds 2 separate outputs:

@brgix brgix linked an issue Mar 31, 2026 that may be closed by this pull request
Comment thread lib/osut/utils.rb Outdated
basement: 0.120, # un/insulated basement wall
slab: 0.160, # un/insulated basement slab or slab-on-grade
ceiling: 0.267, # interzone floor/ceiling
partition: 0.240, # interzone wall partition
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • adds new (interzone) :ceiling key (e.g. plenum tiles, attic floors)
  • revises surface air film resistances, reflecting EnergyPlus standard condition outputs

Comment thread lib/osut/utils.rb
a[:compo][:d ] = d
a[:compo][:id ] = "OSut:#{mt}:#{format('%03d', d*1000)[-3..-1]}"
when :ceiling
unless specs[:clad] == :none
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • new :ceiling type is simply the inverse of :floor.
  • yields different results than :roof, given the difference in assigned air film resistances

Comment thread spec/osut_tests_spec.rb
expect(surface.layers.first).to eq(surface.layers.last)

# An alternative to (uninsulated) :partition (+inputs, same outcome).
specs = {type: :wall, clad: :none, uo: nil}
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The proposed changes now require mutually exclusive uses of:

  • interzone :partition vs exterior :wall
  • interzone :ceiling vs exterior :roof vs exterior :floor

Comment thread lib/osut/utils.rb Outdated
# @param [:to_sym] surface type, e.g. :wall
#
# @return [Hash] OSut collection of surface
def film(type = :wall)
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Provides access to OSut module standard condition construction surface air film resistances.

Comment thread spec/osut_tests_spec.rb Outdated
r3 = mod1.film(:ceiling)
expect(r1.round(3)).to eq(0.212) # not 0.321!
expect(r2.round(3)).to eq(0.212) # not 0.321!
expect(r3.round(3)).to eq(0.267)
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OSut film(:ceiling) provides a better approximation of surface air film resistances calculated by EnergyPlus, namely for horizontal interzone surfaces.

To use with caution when dealing with tilted roof surfaces.

Comment thread lib/osut/utils.rb
@@film = {
shading: 0.000, # NA
ceiling: 0.267, # interzone floor/ceiling
ceiling: 0.266, # interzone floor/ceiling
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EnergyPlus reports a combined surface air film resistance of 0.267 m2.K/W for horizontal interzone surfaces. The sum of OpenStudio PlanarSurface still air film resistances (UPWARD + DOWNWARD) reports 0.266, which is good enough.

Comment thread lib/osut/utils.rb
return 0.0 unless type.respond_to?(:to_sym)
# @return [Float] surface air film resistance(s)
# @return [0.0] if invalid input (see logs)
def filmResistances(type = :wall, tilt = 2 * Math::PI)
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New OSut filmResistances replaces initial OSut film method - an implementation of the proposed solution here. It is intended as a substitute for OpenStudio Surface filmResistance method (less suitable for interzone surfaces).

@brgix brgix merged commit a9b8d8f into develop Apr 14, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Revisit assignment of interzone surface air film resistances

1 participant