V26.2.0-IOFreeze: new ZoneMRTCalculation object - #5649
Conversation
🧪 Test Results DashboardSummary
❌ Significant Test Failures📊 Test Run Information
|
There was a problem hiding this comment.
🟡 Changes recommended
Weight-sum validation, stale references, non-finite values, and partial-add failure reporting can currently produce invalid behavior.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds Model API and EnergyPlus translation support for ZoneMRTCalculation.
Changes:
- Adds the model object, MRT weighting-factor API, and ThermalZone integration.
- Adds forward/reverse translators and binding support.
- Updates IDDs, build registration, and tests.
File summaries
| File | Description |
|---|---|
src/model/ZoneMRTCalculation.hpp |
Declares the new API. |
src/model/ZoneMRTCalculation.cpp |
Implements weighting-factor behavior. |
src/model/ZoneMRTCalculation_Impl.hpp |
Declares implementation details. |
src/model/ThermalZone.hpp |
Exposes MRT calculation access. |
src/model/ThermalZone.cpp |
Implements creation and lookup. |
src/model/ThermalZone_Impl.hpp |
Adds implementation declaration. |
src/model/test/ZoneMRTCalculation_GTest.cpp |
Tests the model API. |
src/model/ModelHVAC.i |
Adds C# ThermalZone access. |
src/model/ModelGeometry.i |
Registers binding templates. |
src/model/Model.cpp |
Registers constructors. |
src/model/ConcreteModelObjects.hpp |
Includes the new object. |
src/model/CMakeLists.txt |
Adds model sources and tests. |
src/energyplus/Test/ZoneMRTCalculation_GTest.cpp |
Tests both translators. |
src/energyplus/ReverseTranslator/ReverseTranslateZoneMRTCalculation.cpp |
Implements reverse translation. |
src/energyplus/ReverseTranslator.hpp |
Declares reverse translation. |
src/energyplus/ReverseTranslator.cpp |
Dispatches reverse translation. |
src/energyplus/ForwardTranslator/ForwardTranslateZoneMRTCalculation.cpp |
Implements forward translation. |
src/energyplus/ForwardTranslator.hpp |
Declares forward translation. |
src/energyplus/ForwardTranslator.cpp |
Registers forward translation. |
src/energyplus/CMakeLists.txt |
Adds translator sources and tests. |
resources/model/OpenStudio.idd |
Defines the OpenStudio object. |
resources/energyplus/ProposedEnergy+.idd |
Converts EnergyPlus fields to extensible groups. |
Review details
Suppressed comments (1)
src/model/ZoneMRTCalculation.cpp:107
- Removing a referenced
Peopleobject clears this pointer but leaves the extensible group. A subsequent call toaddMRTWeightingFactorreaches this predicate and calls.get()on an empty optional, throwing instead of adding the new factor. Treat a missing field as a non-match (and add a removal regression test).
auto it = std::find_if(egs.begin(), egs.end(), [&](const WorkspaceExtensibleGroup& eg) {
return eg.getField(OS_ZoneMRTCalculationExtensibleFields::PeopleName).get() == peopleHandle;
});
- Files reviewed: 22/22 changed files
- Comments generated: 4
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| for (const MRTWeightingFactor& mrtWeightingFactor : mrtWeightingFactors) { | ||
| People people = mrtWeightingFactor.people(); | ||
| boost::optional<IdfObject> _people = translateAndMapModelObject(people); | ||
|
|
||
| if (_people) { |
| return result; | ||
| } | ||
|
|
||
| boost::optional<unsigned> existingIndex = mrtWeightingFactorIndex(mrtWeightingFactor); |
…tWeightingFactorIndex to use just People, update model tests.
| // The hooks below would remove ZoneMRTCalculation extensible groups as soon as a referenced People object | ||
| // becomes invalid by being moved to another Space, reset from its Space, assigned to a SpaceType, or losing | ||
| // its thermal comfort model types. That is more proactive than most existing extensible-reference patterns in | ||
| // the model, which generally clean references only from the referenced object's remove() path and otherwise | ||
| // rely on explicit remove APIs or read/translation-time filtering. |
There was a problem hiding this comment.
Not sure if we'd want this -- it may be overkill.
There was a problem hiding this comment.
🟡 Changes recommended
Thermal-zone deletion can leave an invalid ZoneMRTCalculation object that later causes assertions during access or translation.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (2)
Previously missed (2) — in code that hasn't changed since the last review.
resources/model/OpenStudio.idd:6830
- This field declares two conflicting
\typevalues; all other OpenStudio object-list fields use only\type object-list(for example, lines 6808-6809 and 6837-6838). Remove the redundant alpha declaration so the IDD metadata has one unambiguous field type.
src/model/ZoneMRTCalculation.cpp:85 - These adjacent string literals concatenate as
andthat, making the thrown clone error malformed. Preserve a space at the literal boundary.
- Files reviewed: 25/25 changed files
- Comments generated: 1
- Review effort level: Balanced
| ZoneMRTCalculation ThermalZone_Impl::getZoneMRTCalculation() const { | ||
| auto thisThermalZone = getObject<ThermalZone>(); | ||
| std::vector<ZoneMRTCalculation> zoneMRTCalculations = | ||
| thisThermalZone.getModelObjectSources<ZoneMRTCalculation>(ZoneMRTCalculation::iddObjectType()); |
There was a problem hiding this comment.
I think we'd have the same issue when deleting a Space.
Removing a Space bulk-removes its child People through ParentObject_Impl::remove(), but it does not call People_Impl::remove(). So cleanup would require Space_Impl::remove() to inspect all child People, then find and prune any ZoneMRTCalculation groups for each one. That reaches across more ownership boundaries and is less consistent with the existing bulk child-removal mechanism.
So: zone removal is direct source-object cleanup; space removal is indirect child/reference cleanup.
Pull request overview
Pull Request Author
src/model/test)src/energyplus/Test)src/osversion/VersionTranslator.cpp)Labels:
IDDChangeAPIChangePull Request - Ready for CIso that CI builds your PRReview Checklist
This will not be exhaustively relevant to every PR.