Add NFP for DefaultConstructionSet - #11613
Conversation
|
I get the desire to provide something that makes E+ and OS closer to the same thing and don't really have any problems with this. As long as users can still do what they have done previously--still define a construction for every surface as part of that object (which you propose is still going to be allowed), I don't have anything against moving this forward. While it doesn't add new functionality to E+, there could be some potential benefits to having this option. The slight downside is that for those who read their IDF directly, it's one more layer of search that one might have to go through to find the construction information, but presumably users taking advantage of this proposed new feature will trade that for a more universal definition of construction that simplifies the input and changes. |
JasonGlazer
left a comment
There was a problem hiding this comment.
Overall, I have no objection to the concept of defaulting constructions but some of the details may still need some refinement.
| Two existing objects are extended with an optional field: | ||
|
|
||
| - **`Building`** — gains `Default Construction Set Name`. | ||
| - **`Space`** — gains `Default Construction Set Name`. |
There was a problem hiding this comment.
Seems to me that at the space level, there aren't typically that many surfaces and the value is smaller. The user can just enter the constructions for each surface. If that is the case then there would only need to be one DefaultConstructionSet object which would be a \unique-object and that corresponds better with the concept of "default" to me. I guess having multiple DefaultConstructionSet input objects seems a bit contradictory to me. It is just an idea but I think it might be cleaner.
There was a problem hiding this comment.
See "This matters because conceptually you have to be thinking about what owns/drives the constructions" in #11613 (comment)
There was a problem hiding this comment.
I'm not sure I'm convinced that this is a good approach.
There was a problem hiding this comment.
One tweak could be a name change to ConstructionAssignmentSet instead of DefaultConstructionSet. The supporting type names could be SurfaceConstructionAssignments and SubSurfaceConstructionAssignments. This might communicate the concept a little better.
|
|
||
| - Space | ||
| - SpaceType (no E+ equivalent) | ||
| - BuildingStory (no E+ equivalent) |
There was a problem hiding this comment.
Given the lack of the SpaceType and BuildingStory levels of inheritance, does this overall approach really help or just make it complicated in a different way?
| For support of OS <-> E+ Alignment. | ||
| `DefaultConstructionSet` is widely used in OpenStudio; breaking API here would have too much impact. | ||
|
|
||
| EnergyPlus currently requires a `Construction Name` to be explicitly specified on every surface and sub-surface — potentially hundreds or thousands of objects in a large model. |
There was a problem hiding this comment.
EnergyPlus has a long history of trying to make things exhaustively self documenting. I'm not sure that was ever a great approach but I understand the philosophy of looking at an input object and knowing what it means from the list of field values. This approach, purposefully, changes course to make some input objects not self documenting. I'm not apposed to the change but it should not be done without understanding that this is a shift in philosophy. It will potentially impact the users perspective with an added question in their mind, "does blank field mean it is defined somewhere else?" Overall, I am not opposed to this approach but it might be good to step back and try to make a comprehensive plan for how defaulting should work in general.
| Constructions are resolved at run time based on surface type and boundary condition. This offers several advantages: | ||
|
|
||
| 1. **DRY input data** — a single construction assignment at the building or space level avoids redundant repetition across every surface. | ||
| 2. **Easy global swaps** — changing a construction type (e.g., upgrading wall insulation) requires editing one object instead of hundreds. |
There was a problem hiding this comment.
I think most users just redefine the construction when they need to (such as upgrading wall insulation) so I think that is just changing one object also.
|
|
||
| ## Outputs Description ## | ||
|
|
||
| No new output variables are added. |
There was a problem hiding this comment.
I think that maybe we do need to think of a new tabular report or column that shows if it a construction was blank what it inherited.
| - **`BuildingSurface:Detailed`**, **`FenestrationSurface:Detailed`**, **`InternalMass`** — `Construction Name` changes from required to optional. No data change needed; existing IDFs with explicit constructions are unaffected. | ||
| - **`FenestrationSurface:Detailed` `Surface Type`** — four new keys added (`FixedWindow`, `OperableWindow`, `Skylight`, `OverheadDoor`). No data change needed; existing `Window` values remain valid and are treated as `FixedWindow` for `DefaultConstructionSet` resolution. | ||
|
|
||
| ## References ## |
There was a problem hiding this comment.
Could you make these links?
|
|
||
| - Parse all `DefaultSurfaceConstructions` and `DefaultSubSurfaceConstructions` objects into structs. | ||
| - Parse all `DefaultConstructionSet` objects, resolving the nested object-list references. | ||
| - Read the new `Default Construction Set Name` field from `Building` and each `Space`. |
There was a problem hiding this comment.
Thinking about levels of defaulting, would it make sense for a Building Surface to have defaulting so that all subsurfaces can default to the same?
There was a problem hiding this comment.
I'm not sure I follow correctly.
You mean a single BuildingSurface:Detailed could have a DefaultConstructionSet assigned? It's tedious for little gain, there shouldn't be a large number of SubSurfaces for a given Surface
| \type object-list | ||
| \object-list ConstructionNames | ||
|
|
||
| DefaultSubSurfaceConstructions, |
There was a problem hiding this comment.
Maybe the orientation direction should play a part in defaulting. Is is very common for northern facing windows to be different than east, west, and south facing windows.
There was a problem hiding this comment.
That'd be multpliying the number of fields a lot and would hurt readability badly IMHO.
You could hard-assign the northern ones, or use a DefaultConstructionSet with only the window types specified (the rest will still resolve up the inheritance) and assign that to the north spaces.
|
[TRANE] We have something like this in our UI so that it is easy to change constructions for a whole space type or building. I didn't expect it to be such a challenge to translate that into the engine level's current input structure. [Myoldmopar] I'm not a big fan of this one. Currently we have construction name explicitly written on each surface. If you want to change the type of construction throughout the file, you can do a search and replace or poke around or whatever. If you have them blank, then you need to go in and even more surgically look through the file to decide which surfaces have the default and which don't. You can't search and replace on the blank field. Seems like there's a bigger chance of forgetting to update some surfaces and ending up with incorrect envelope physics. Maybe this change is more about a UI writing the file? But if so, it seems quite trivial for the UI to just determine which construction name to use and put it in there when creating the input file. Maybe I'm missing something. |
8c955ca to
d9b75e1
Compare
|
I won't try to speak for @Myoldmopar, but I share his concerns. I'm not sure I like the invisible object linkage (for lack of better terminology) that this introduces, but there's precedent for that (in AirflowNetwork, so no stones shall be thrown by me). I've said this on at least one call, so apologies for being the broken record, but there needs to be more focus on the benefits for EnergyPlus users. In my opinion, the document does not present a very compelling case that this benefits all EnergyPlus users. The first three advantages appear to me to be three different angles on reduction of repetition (where perhaps that repetition could be viewed as being explicit) and the last one is nice, but not a benefit to all EnergyPlus users. Finally, I agree with @JasonGlazer about possibly reconsidering how defaults are handled. If we're going to do this, we probably should take that extra precaution. |
|
IMHO, the use case for EnergyPlus users that opt-in to this feature is pretty compelling. You could have a "library" IDF with a Most people - I would assume - are probably using some kind of UI to create geometry, or a script that could turn a floor plan (2D) + floor height to 3D Spaces, as opposed to writing vertices by hand (if you do that, then the time to assign a construction is probably small compared to the time spent figuring out vertices and their order manually unless it's a shoebox - and again this is purely opt-in). In openstudio-sketchup-plugin, without this feature, you'd have to click on each on surface to hard-assign a construction after you've created your 3D geometry. |
|
That seems to me to be restatement(s) of the "reduction of repetition" argument that's already in the NFP. Computers are generally pretty good at repetition and the similar case that I am familiar with (AFN's reference crack conditions) still trips people up even though it's pretty well documented (I hope) and fairly well considered (in my opinion, but not everyone agrees). This situation is much wider in scope and potentially impacts a lot more users at more stages of model development. So if it comes down to just "reduction of repetition" versus "explicitness", then I think I land on "explicitness" (i.e., we should pass on this feature) unless we back up, consider what this means for default handling in general, and rethink how this is implemented. |
|
Thanks everyone for their reviews and the discussion here. If I were to make an attempt at summarizing where everyone is at, I think I see the following. Please correct me if I’ve misstated anything:
Multiple people stated that the added implicitness is a downside, suggesting that this is creating an implicit object linkage between a blank construction field and the resolved construction. More specifically, users would now need to know which variant of surface they are using, what boundary condition applies, and how that resolves through the Space/Building default construction set. Implicit object linkage is not unprecedented in E+, but it is also not common. Multiple people also stated that we should first consider/resolve how we should be handling defaults in general before tackling this. Counterpoints by @kbenne / @jmarrec:
@mitchute comments:
My vote is to approve, but I acknowledge we may need further discussion on how to handle defaults and more iteration on the specific implementation points. |
|
@mitchute Apologies, the first version of this comment got eaten by a power outage, so I had to write it again. The first version was better. No, you misunderstand. I am taking no position on the need, what I'd like to see is an NFP that makes a case for the feature on its own merits, and it currently falls well short. The NFP claims that this feature "offers several advantages", and then lists out three variations of "reduction of repetition" and an out-of-scope alignment concern.
If merged as-is, the NFP sets a bad precedent. What I'd want to see:
|
Present the feature as an optional way to reduce repeated construction assignments while acknowledging the tradeoff in local explicitness. State that explicit Construction Name values remain authoritative and that models may mix explicit and inherited assignments. Move OpenStudio and EnergyPlus alignment into the recorded review context instead of using it as the native feature justification. Explain why multiple named sets and Space scope are needed for partial specialization and Building fallback. Add a narrow requirement for the existing Envelope Summary to identify whether each resolved assignment came from an explicit value, Space, or Building.
|
Thanks everyone for all the good discussion here. As discussed on the call yesterday, this is very close. @kbenne IIRC there were a few remaining comments to address, and I took a to-do for myself to work up a more comprehensive plan on our proposed approach to default handling in general. If anyone has anything other open comments or questions, please post them ASAP. |

Pull request overview
Adds the NFP design document for native DefaultConstructionSet support in EnergyPlus, proposing building and space level default construction assignments to reduce repeated surface construction inputs and facilitate OpenStudio alignment.