Skip to content

Conversation

@brgix
Copy link
Member

@brgix brgix commented Jan 1, 2026

An effort to harmonize pyOSut and OSut constants/methods when dealing with multilayered constructions and opaque materials, largely in line with this OSut PR.

@brgix brgix self-assigned this Jan 1, 2026
@brgix brgix added the enhancement New feature or request label Jan 1, 2026
self.assertEqual(c.layers()[0].nameString(), "OSut.material.015")
self.assertEqual(c.layers()[1].nameString(), "OSut.drywall.015")
self.assertEqual(c.layers()[2].nameString(), "OSut.mineral.106")
self.assertEqual(c.layers()[2].nameString(), "OSut:K0.047:100")
Copy link
Member Author

Choose a reason for hiding this comment

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

Switching over to resetUo method to adjust insulating layer thermal conductivity and thickness (genConstruction). Involves changes in naming convention, e.g. material "OSut:K0.047:100" means:

  • adjusted material conductivity = 0.047 W/m.K
  • (possibly) adjusted material thickness = 100mm

UMAX = KMAX / DMIN # material USi upper limit, 200.000
UMIN = KMIN / DMAX # material USi lower limit, 0.010
RMIN = 1.0 / UMAX # material RSi lower limit, 0.005 (or R-IP 0.03)
RMAX = 1.0 / UMIN # material RSi upper limit, 100.000 (or R-IP 567.80)
Copy link
Member Author

Choose a reason for hiding this comment

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

Extending pyOSut constants to cover material MIN/MAX thresholds, e.g.:

  • thickness
  • thermal conductivity
  • thermal resistance
  • thermal conductance

Ensuring OSut and pyOSut inherit the very same constants.

return value


def areStandardOpaqueLayers(lc=None) -> bool:
Copy link
Member Author

Choose a reason for hiding this comment

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

Reordering methods.

return False


def resetUo(lc=None, film=None, index=None, uo=None, uniq=False) -> float:
Copy link
Member Author

Choose a reason for hiding this comment

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

One of a few new methods.

if u < CN.UMIN or u > CN.UMAX:
u0 = u
u = clamp(u0, CN.UMIN, CN.UMAX)
oslg.log(CN.ERR, "Resetting Uo %.3f to %.3f (%s)" % (u0, u, mth))
Copy link
Member Author

Choose a reason for hiding this comment

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

Enforcing UMIN & UMAX clamping, raising input-related errors in the process.

aspace = None
typ = None

if s.adjacentSurface():
Copy link
Member Author

Choose a reason for hiding this comment

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

Not checking if a surface inherits a default construction from its adjacent:

  • surface
  • space
  • spacetype
  • story

... is a big no-no, creating a ton of headaches down the line.

KMIN = 0.010 # min. material thermal conductivity
KMAX = 2.000 # max. material thermal conductivity
DMIN = 0.010 # min. insulating material thickness
DMAX = 1.000 # max. insulating material thickness
Copy link
Member Author

Choose a reason for hiding this comment

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

OpenStudio/EnergyPlus materials can obviously support thermal conductivities way beyond 2.0 (e.g. metals, concrete). OSut methods deal more specifically with opaque materials (in a multilayered construction) that can be labelled as insulating. Sure, a 10mm thick material with a 2.0 thermal conductivity is hardly insulating, but certainly more than a sheet of aluminium.

@brgix brgix merged commit 1f255ba into develop Jan 4, 2026
2 checks passed
@brgix brgix deleted the tbd branch January 4, 2026 12:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants