-
Notifications
You must be signed in to change notification settings - Fork 2
Upgrades layered construction constants/methods #23
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
Conversation
| 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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Extending OSut constants to cover material MIN/MAX thresholds, e.g.:
- thickness
- thermal conductivity
- thermal resistance
- thermal conductance
The goal is to ensure that TBD and BTAP inherit the very same constants, preventing conflicts with extreme cases (e.g. when TBD uprates a construction).
| # | ||
| # @return [Bool] whether all layers are valid | ||
| # @return [false] if invalid input (see logs) | ||
| def standardOpaqueLayers?(lc = nil) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reordering methods.
| a[:clad][:mat] = @@mats[mt] | ||
| a[:clad][:d ] = d | ||
| a[:clad][:id ] = "OSut|#{mt}|#{format('%03d', d*1000)[-3..-1]}" | ||
| a[:clad][:id ] = "OSut:#{mt}:#{format('%03d', d*1000)[-3..-1]}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Switching string separating chars, from pipe "|" to colon ":". Inserting pipe chars is not a great idea.
| nom += "|" | ||
| nom += format("%03d", d*1000)[-3..-1] | ||
| k = (layer.thickness / (ro - rsi(c) + lyr[:r])).clamp(KMIN, KMAX) | ||
| d = (k * (ro - rsi(c) + lyr[:r])).clamp(DMIN, DMAX) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When adjusting material thermal resistance, the revised approach is to first adjust thermal conductivity (rather than thickness), then thickness if required. Clamping along the way.
| exterior = false | ||
| adjacent = s.adjacentSurface.empty? ? nil : s.adjacentSurface.get | ||
| aspace = adjacent.nil? || adjacent.space.empty? ? nil : adjacent.space.get | ||
| typ = adjacent.nil? ? nil : adjacent.surfaceType |
There was a problem hiding this comment.
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 for both TBD and BTAP. Initial tests are green.
| expect(u).to be_within(TOL).of(uo2) | ||
| expect(surface.layers[1].nameString).to eq("OSut|polyiso|108") | ||
| expect(surface.layers[2].nameString).to eq("OSut|concrete|100") | ||
| expect(surface.layers[1].nameString).to eq("OSut:polyiso:K0.023:100") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whenever a standard OSut material requires a post-generation thermal adjustment, the material is renamed using both its revised thermal conductivity (e.g. "K0.023") and possibly a revised thickness (e.g. "100" mm).
| expect(oID).to eq("90.1-2010 - SmOffice - ASHRAE 169-2013-3B") | ||
| expect(mod1.holdsConstruction?(bset, base, false, false, type)).to be false | ||
|
|
||
| # Check for adjacent surface. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Previous iterations of OSut's holdsConstruction? and defaultConstructionSet unfortunately omitted to check for adjacent surfaces. My bad.
| DMIN = 0.010 # min. insulating material thickness | ||
| DMAX = 1.000 # max. insulating material thickness | ||
| KMIN = 0.010 # min. insulating material thermal conductivity | ||
| KMAX = 2.000 # max. insulating material thermal conductivity |
There was a problem hiding this comment.
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.
An effort to harmonize OSut, TBD & BTAP constants/methods when dealing with multilayered constructions and opaque materials.