Skip to content

Add NFP for SpaceLoadDefinitions#11614

Open
kbenne wants to merge 4 commits into
developfrom
NFP-SpaceLoadDefinitions-nfp-only
Open

Add NFP for SpaceLoadDefinitions#11614
kbenne wants to merge 4 commits into
developfrom
NFP-SpaceLoadDefinitions-nfp-only

Conversation

@kbenne

@kbenne kbenne commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Pull request overview

Adds the NFP design document for splitting internal gains objects into instance and definition objects, aligning EnergyPlus with OpenStudio’s reusable space load definition pattern.

@kbenne

kbenne commented Jun 1, 2026

Copy link
Copy Markdown
Contributor Author

Group discussion at the EnergyPlus technicalities meeting was favorable, but one discussion point was (and is) the split between what goes in the instance object versus what goes in the definition object. Please comment with your thoughts in case we need to make any revisions to the design.

@jmarrec

jmarrec commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

There was discussion about the Multiplier field too : in OpenStudio each SpaceLoadInstnace has a "Multiplier" field, which was omitted to limit the scope of the NFP, but it is actually quite valuable.

The only small issue is that the ElectricEquipment:ITE:AirCooled kinda has it already, but just for the case when Design Power Input Calculation Method = EquipmentLevel

Field: Design Power Input Calculation Method
This field is a key/choice field that tells which of the next two fields are filled and is descriptive of the method for calculating the nominal electric power input to the ITE. The key/choices are:

Watts/Unit:
With this choice, the design power input will be the product of Design Level per Unit and Number of Units. (Both of these fields should be filled.) This is the default.

Watts/Area:
With this choice, the design power input will be a factor per floor area of the zone. (The Watts per Floor Area field should be filled).

Field: Watts per Unit

This field (in Watts) is typically used to represent the design electrical power input to the ITE when fully loaded and the entering air temperatures is at the specified design value. This field is used if the choice from the method field is “EquipmentLevel”.

Field: Number of Units

This field is multiplied times the Design Level per Unit to determine the design electrical power input to this ITE object when fully loaded and the entering air temperature is at the specified design value. This field is used if the choice from the method field is “EquipmentLevel”. The default is 1.

@RKStrand

RKStrand commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Overall, I can see the value in pursuing this. Saving the repetition of certain fields in numerous places in the input would be a good thing.

While there was discussion or perhaps this setting a precedent, I think several precedents have already been set. Recent work done to the radiant systems split the input into two objects in a somewhat similar fashion. The key is to fully determine what is rationally most likely to stay the same from object to object and include that in the "design" or "definition" object.

It seemed like during the call discussion that there was a multiplier that was part of the base object--that would be an excellent idea since it would allow a lot more flexibility. The multiplier would potentially make it possible for everything to use a single definition object within a file (like who is going to change fraction radiant for people between different spaces?).

Overall, this seems like a reasonable concept and the solution being proposed is good though it's possible that others might have arguments for some inputs being switched from the base to the definition or vice versa?

@JasonGlazer JasonGlazer left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Of the three NFPs related to OpenStudio, I think this one probably deserves some more due diligence. It will impact almost all users and I believe for many, perhaps most, it will be adding to a burden rather than reducing one. When modeling an actual building design, the modeler often counts the lighting and plug load power for each zone. In this workflow, adding a separate definition object simply adds complexity of a second object and another object name to remember. I think it deserves some user outreach to current modelers that use EnergyPlus directly to see if it is viewed as more of a benefit or more of a hassle. While I am not opposed to this, I typically create prototypical models which would benefit from this approach. I would hate to see a lot of push back from the user community seeing this for the first time at a future release.

- Heat gain fraction fields
- Type-specific fields (fuel type, CO₂ generation, thermal comfort model choices, ITE parameters, etc.)

For example, `ElectricEquipment` goes from a single object with fields for zone name, schedule, design level method, fractions, and end-use subcategory, to:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Please revise the NPF to explicitly show how each of the eight current input objects will be revised into two objects. It is especially difficult to understand what will be happening to the People and Lights input objects since they are more complicated.

Zone1 Workstation, !- Name
Workstation Def, !- Electric Equipment Definition Name
Zone 1, !- Zone or ZoneList or Space or SpaceList Name
Office Schedule, !- Schedule Name

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It seems like the operation of an end-use is tightly coupled with the end use itself so perhaps the schedule should be part of the obj:Definition.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The Schedule is installation specific, not physical, it is more logical in the Instance rather than the Definition.

A definition could be used for a lighting level, and used in two spaces with different schedules because they are used on a different schedule.

Workstation Def, !- Electric Equipment Definition Name
Zone 1, !- Zone or ZoneList or Space or SpaceList Name
Office Schedule, !- Schedule Name
Workstations; !- End-Use Subcategory

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The end-use subcategory seems like it is closely associated with the equipment also so maybe it belongs in the obj:Definition input object.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Having it on the Instance gives you more flexibility. You can have a definition for 10W/m2 equipment, but use unique End Use Subcategory ("Space 1 Equipment" and "Space 2 Equipment" for eg) and you'll get info in the tabular reports.

ElectricEquipment:Definition,
Workstation Def, !- Name
Watts/Area, !- Design Level Calculation Method
, , !- (Equipment Level, Watts/Area, Watts/Person)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The Watts/area and Watts/person make sense to have in the obj:Defintion input objects since they can be applied to different sized zones but the Total power level expressed in Watts seems unlikely to be in needed in the obj:Definition. Maybe it should stay in the original object.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

An absolute value could be used in a single definition, and several instances would use a different schedule.

Also, it should be clearer soon after we push a revision to the NFP to include the multiplier field: you could define a definition with absolute value (a 100W workstation, a 60 W Light bulb) and use it in several instances with a different multiplier (and schedule if you wanted).


1. **Alignment of EnergyPlus and OpenStudio** — the EnergyPlus IDD and the OpenStudio Model API now share the same conceptual shape, reducing the translation surface and the associated maintenance burden. Allowing usage of OpenStudio directly on an IDF will provide ability to work on **any** IDF, including fully unsupported objects (objects not wrapped in OpenStudio model/ namespace) and objects which don't have ReverseTranslator rules (the ReverseTranslator IDF -> OSM is lacking in terms of HVAC especially).
2. **DRY input data** — a single `ElectricEquipment:Definition` describing, say, a standard office workstation can be referenced by any number of `ElectricEquipment` instances across the building, each with its own zone/space assignment and schedule, without repeating the physical characteristics.
3. **Cleaner IDD semantics** — the split makes explicit which properties are intrinsic to the load type (the definition) and which are extrinsic, installation-specific concerns (the instance).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The question of better semantics seems 25 years to late. At this point users are used to the current approach and should see a specific benefit for the change.

By introducing the same Instance/Definition pattern in EnergyPlus, we achieve three concrete benefits:

1. **Alignment of EnergyPlus and OpenStudio** — the EnergyPlus IDD and the OpenStudio Model API now share the same conceptual shape, reducing the translation surface and the associated maintenance burden. Allowing usage of OpenStudio directly on an IDF will provide ability to work on **any** IDF, including fully unsupported objects (objects not wrapped in OpenStudio model/ namespace) and objects which don't have ReverseTranslator rules (the ReverseTranslator IDF -> OSM is lacking in terms of HVAC especially).
2. **DRY input data** — a single `ElectricEquipment:Definition` describing, say, a standard office workstation can be referenced by any number of `ElectricEquipment` instances across the building, each with its own zone/space assignment and schedule, without repeating the physical characteristics.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I like the idea of reducing redundancy but for many models in which the lighting and plug loads are determined by specific take offs, this is actually increasing the effort for the modeler, they now have two objects to manage instead of one and another name. Personally, I think the excessive number of named input objects is what makes IDF files so complicated to follow and increases the learning curve for new users. This would be adding to that burden.

jmarrec and others added 3 commits June 9, 2026 21:32
- Fix typo and grammar issues in the expanded NFP text.
- Add Multiplier rows to the field-location tables.
- Make proposed Multiplier fields real values with minimum 0 and default 1.
- Keep operation and loading schedules on instance objects, including the ITE CPU loading schedule.
- Use Multiplier consistently for ITE instead of Number of Units.
- Document transition handling for mapping existing ITE Number of Units to Multiplier.
@kbenne

kbenne commented Jun 11, 2026

Copy link
Copy Markdown
Contributor Author

As discussed at the 6/10 Technicalities meeting, we would like to adjust this PR so that it is backwards compatible. The existing space loads shall remain the same and the NFP will add new instance and definition objects. For example, People will remain exactly as is. We will add People:Instance and People:Definition. There will be no transition rules.

@Myoldmopar

Copy link
Copy Markdown
Member

[TRANE] No major comments here. We are not sure about whether we'd pull this in to our version of the engine, so if it makes sense for EnergyPlus to adopt this, then seems like a good approach.

[Myoldmopar] I am glad you resolved to make this backwards compatible. No need to break everyone's files and add transition rules for this when it can be a new optional object. The use of definitions/templates/instances/whatevers can be a nice improvement when building apps, so having this would be useful for some stakeholders I suspect.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants