-
Notifications
You must be signed in to change notification settings - Fork 1
Semi-flat wall constructions #60
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
base: main
Are you sure you want to change the base?
Changes from all commits
f26e4c3
de84c07
b5e5223
99dfb27
a79c54d
5231156
177da35
bb5aa18
a95fbae
9704909
5138bf4
59a4803
3c96ef8
a136df7
1edae5e
7fa1dd5
42f4297
07ca72b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # Semi-flat construction reference notes | ||
|
|
||
| This folder intentionally uses simplified/consolidated thermal methods for ML-friendly | ||
| inputs. The assumptions below document where steel/wood framing adjustments come from. | ||
|
|
||
| ## Framed cavity modeling | ||
|
|
||
| For framed wall/roof systems we use an equivalent parallel-path layer: | ||
|
|
||
| - `U_eq = f_frame / R_frame + (1 - f_frame) / R_fill` | ||
| - `R_eq = 1 / U_eq` | ||
|
|
||
| For wood framing, `R_frame` is computed directly from framing material conductivity and | ||
| cavity depth. | ||
|
|
||
| For steel framing, `R_frame` is treated as an **effective framing-path R-value** to | ||
| account for 2D/3D heat-flow effects and thermal-bridge behavior not captured by pure | ||
| 1D steel conductivity. The calibrated values are chosen to reproduce expected effective | ||
| batt performance ranges from code-table methods. | ||
|
|
||
| ## Primary references | ||
|
|
||
| 1. ASHRAE Standard 90.1 (Appendix A, envelope assembly/U-factor methodology for metal framing) | ||
|
|
||
| - https://www.ashrae.org/technical-resources/bookstore/standard-90-1 | ||
|
|
||
| 2. COMcheck envelope U-factor workflow and datasets (steel-framed assemblies) | ||
|
|
||
| - https://www.energycodes.gov/comcheck | ||
|
|
||
| 3. PNNL Building America Solution Center (thermal bridging in metal-stud walls) | ||
| - https://basc.pnnl.gov/resource-guides/continuous-insulation-metal-stud-wall | ||
|
|
||
| ## Scope note | ||
|
|
||
| These assumptions are intended for rapid parametric modeling and fixed-length feature | ||
| vectors, not project-specific code compliance documentation. For high-fidelity design, | ||
| replace defaults with project-calibrated values (e.g., THERM/ISO 10211 workflows). |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| """Semi-flat construction translators for SBEM flat models.""" | ||
|
|
||
| from epinterface.sbem.flat_constructions.assemblies import build_envelope_assemblies | ||
| from epinterface.sbem.flat_constructions.audit import ( | ||
| AuditIssue, | ||
| run_physical_sanity_audit, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.layers import ( | ||
| CavityInsulationMaterial, | ||
| ContinuousInsulationMaterial, | ||
| ExteriorCavityType, | ||
| MaterialRef, | ||
| equivalent_framed_cavity_material, | ||
| layer_from_nominal_r, | ||
| resolve_material, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.materials import ( | ||
| MATERIAL_NAME_VALUES, | ||
| MaterialName, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.roofs import ( | ||
| RoofExteriorFinish, | ||
| RoofInteriorFinish, | ||
| RoofStructuralSystem, | ||
| SemiFlatRoofConstruction, | ||
| build_roof_assembly, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.slabs import ( | ||
| SemiFlatSlabConstruction, | ||
| SlabExteriorFinish, | ||
| SlabInsulationPlacement, | ||
| SlabInteriorFinish, | ||
| SlabStructuralSystem, | ||
| build_slab_assembly, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.walls import ( | ||
| SemiFlatWallConstruction, | ||
| WallExteriorFinish, | ||
| WallInteriorFinish, | ||
| WallStructuralSystem, | ||
| build_facade_assembly, | ||
| ) | ||
|
|
||
| __all__ = [ | ||
| "MATERIAL_NAME_VALUES", | ||
| "AuditIssue", | ||
| "CavityInsulationMaterial", | ||
| "ContinuousInsulationMaterial", | ||
| "ExteriorCavityType", | ||
| "MaterialName", | ||
| "MaterialRef", | ||
| "RoofExteriorFinish", | ||
| "RoofInteriorFinish", | ||
| "RoofStructuralSystem", | ||
| "SemiFlatRoofConstruction", | ||
| "SemiFlatSlabConstruction", | ||
| "SemiFlatWallConstruction", | ||
| "SlabExteriorFinish", | ||
| "SlabInsulationPlacement", | ||
| "SlabInteriorFinish", | ||
| "SlabStructuralSystem", | ||
| "WallExteriorFinish", | ||
| "WallInteriorFinish", | ||
| "WallStructuralSystem", | ||
| "build_envelope_assemblies", | ||
| "build_facade_assembly", | ||
| "build_roof_assembly", | ||
| "build_slab_assembly", | ||
| "equivalent_framed_cavity_material", | ||
| "layer_from_nominal_r", | ||
| "resolve_material", | ||
| "run_physical_sanity_audit", | ||
| ] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,118 @@ | ||
| """Envelope assembly builders for semi-flat construction definitions.""" | ||
|
|
||
| from epinterface.sbem.components.envelope import ( | ||
| ConstructionAssemblyComponent, | ||
| ConstructionLayerComponent, | ||
| EnvelopeAssemblyComponent, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.materials import ( | ||
| CEMENT_MORTAR, | ||
| CONCRETE_RC_DENSE, | ||
| GYPSUM_BOARD, | ||
| GYPSUM_PLASTER, | ||
| SOFTWOOD_GENERAL, | ||
| URETHANE_CARPET, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.roofs import ( | ||
| SemiFlatRoofConstruction, | ||
| build_roof_assembly, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.slabs import ( | ||
| SemiFlatSlabConstruction, | ||
| build_slab_assembly, | ||
| ) | ||
| from epinterface.sbem.flat_constructions.walls import ( | ||
| SemiFlatWallConstruction, | ||
| build_facade_assembly, | ||
| ) | ||
|
|
||
|
|
||
| def build_partition_assembly( | ||
| *, name: str = "Partition" | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this needs to be more flexible/handle the boundaries of E+ constructions / what is possible to model in E+. I can test the boundaries a bit!
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure I follow here. currently the assumption is that (a) partition construction does not really matter for the most part and (b) it's fine to use a uniform partition for all buildings. |
||
| ) -> ConstructionAssemblyComponent: | ||
| """Build the default interior partition assembly.""" | ||
| return ConstructionAssemblyComponent( | ||
| Name=name, | ||
| Type="Partition", | ||
| Layers=[ | ||
| ConstructionLayerComponent( | ||
| ConstructionMaterial=GYPSUM_PLASTER, | ||
| Thickness=0.02, | ||
| LayerOrder=0, | ||
| ), | ||
| ConstructionLayerComponent( | ||
| ConstructionMaterial=SOFTWOOD_GENERAL, | ||
| Thickness=0.02, | ||
| LayerOrder=1, | ||
| ), | ||
| ConstructionLayerComponent( | ||
| ConstructionMaterial=GYPSUM_PLASTER, | ||
| Thickness=0.02, | ||
| LayerOrder=2, | ||
| ), | ||
| ], | ||
| ) | ||
|
|
||
|
|
||
| def build_floor_ceiling_assembly( | ||
| *, | ||
| name: str = "FloorCeiling", | ||
| ) -> ConstructionAssemblyComponent: | ||
| """Build the default interstitial floor/ceiling assembly.""" | ||
| return ConstructionAssemblyComponent( | ||
| Name=name, | ||
| Type="FloorCeiling", | ||
| Layers=[ | ||
| ConstructionLayerComponent( | ||
| ConstructionMaterial=URETHANE_CARPET, | ||
| Thickness=0.02, | ||
| LayerOrder=0, | ||
| ), | ||
| ConstructionLayerComponent( | ||
| ConstructionMaterial=CEMENT_MORTAR, | ||
| Thickness=0.02, | ||
| LayerOrder=1, | ||
| ), | ||
| ConstructionLayerComponent( | ||
| ConstructionMaterial=CONCRETE_RC_DENSE, | ||
| Thickness=0.15, | ||
| LayerOrder=2, | ||
| ), | ||
| ConstructionLayerComponent( | ||
| ConstructionMaterial=GYPSUM_BOARD, | ||
| Thickness=0.02, | ||
| LayerOrder=3, | ||
| ), | ||
| ], | ||
| ) | ||
|
|
||
|
|
||
| def build_envelope_assemblies( | ||
| *, | ||
| facade_wall: SemiFlatWallConstruction, | ||
| roof: SemiFlatRoofConstruction, | ||
| slab: SemiFlatSlabConstruction, | ||
| ) -> EnvelopeAssemblyComponent: | ||
| """Build envelope assemblies from the flat model construction semantics.""" | ||
| facade = build_facade_assembly(facade_wall, name="Facade") | ||
| roof_assembly = build_roof_assembly(roof, name="Roof") | ||
| partition = build_partition_assembly(name="Partition") | ||
| floor_ceiling = build_floor_ceiling_assembly(name="FloorCeiling") | ||
| ground_slab = build_slab_assembly( | ||
| slab, | ||
| name="GroundSlabAssembly", | ||
| ) | ||
|
|
||
| return EnvelopeAssemblyComponent( | ||
| Name="EnvelopeAssemblies", | ||
| FacadeAssembly=facade, | ||
| FlatRoofAssembly=roof_assembly, | ||
| AtticRoofAssembly=roof_assembly, | ||
| PartitionAssembly=partition, | ||
| FloorCeilingAssembly=floor_ceiling, | ||
| AtticFloorAssembly=floor_ceiling, | ||
| BasementCeilingAssembly=floor_ceiling, | ||
| GroundSlabAssembly=ground_slab, | ||
| GroundWallAssembly=ground_slab, | ||
| ExternalFloorAssembly=ground_slab, | ||
| ) | ||
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.
I wonder if the materials and their quantities can still be part of the configurations an inputs as well, unless we are collectively exhaustive here
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.
Part of the goal is for the abstraction to be sufficient that users are not defining materials, only assemblies of materials. And yes, there should be sufficient options in the library to express what is needed. I think that there are probably sufficient options in there now, but we can add more on an as needed basis.