Skip to content

Fix FanPerformance:NightVentilation across fan types - #11883

Draft
joseph-robertson wants to merge 29 commits into
developfrom
fanperf-nightvent2
Draft

joseph-robertson wants to merge 29 commits into
developfrom
fanperf-nightvent2

Conversation

@joseph-robertson

@joseph-robertson joseph-robertson commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Pull request overview

  • Fixes Inconsistent/inaccurate FanPerformance:NightVentilation handling across fan types #11808
  • Removes "Maximum Flow Rate" from FanPerformance:NightVentilation, eliminating its VAV-only flow cap and potential fan/inlet mismatch. The transition warns when a nonblank value is discarded.
  • Fan:ConstantVolume: Air loop behavior is unchanged; zone equipment fans use their component’s night ventilation manager status.
  • Fan:VariableVolume: Uses alternate night pressure and efficiency without the normal part load curve; power is based on actual airflow, including at low flow.
  • Fan:OnOff: Applies alternate night settings without normal speed ratio curves.
  • Fan:ZoneExhaust: Applies night settings only when coupled to a ventilating serving air loop.
  • Fan:SystemModel: Uses its night pressure when specified, otherwise falls back to design pressure. Continuous mode night power scales with actual flow rather than design flow.
  • Fouled-filter airflow reduction is calculated against rated fan pressure, while the selected night pressure is retained for operating calculations.
  • Scopes night ventilation state to the relevant equipment, including first-call air-terminal handling; updates the IDD, transition rules, documentation, examples, and regression tests.

Description of the purpose of this PR

Pull Request Author

  • Title of PR should be user-synopsis style (clearly understandable in a standalone changelog context)
  • Label the PR with at least one of: Defect, Refactoring, NewFeature, Performance, and/or DoNoPublish
  • Pull requests that impact EnergyPlus code must also include unit tests to cover enhancement or defect repair
  • Author should provide a "walkthrough" of relevant code changes using a GitHub code review comment process
  • If any diffs are expected, author must demonstrate they are justified using plots and descriptions
  • If changes fix a defect, the fix should be demonstrated in plots and descriptions
  • If any defect files are updated to a more recent version, upload new versions here or on DevSupport
  • If IDD requires transition, transition source, rules, ExpandObjects, and IDFs must be updated, and add IDDChange label
  • If structural output changes, add to output rules file and add OutputChange label
  • If adding/removing any LaTeX docs or figures, update that document's CMakeLists file dependencies
  • If adding/removing any output files (e.g., eplustbl.*)
    • Update ..\scripts\Epl-run.bat
    • Update ..\scripts\RunEPlus.bat
    • Update ..\src\EPLaunch\ MainModule.bas, epl-ui.frm, and epl.vbp (VersionComments)
    • Update ...github\workflows\energyplus.py

Reviewer

  • Perform a Code Review on GitHub
  • If branch is behind develop, merge develop and build locally to check for side effects of the merge
  • If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
  • If feature, test running new feature, try creative ways to break it
  • CI status: all green or justified
  • Check that performance is not impacted (CI Linux results include performance check)
  • Run Unit Test(s) locally
  • Check any new function arguments for performance impacts
  • Verify IDF naming conventions and styles, memos and notes and defaults
  • If new idf included, locally check the err file and other outputs

@joseph-robertson joseph-robertson self-assigned this Oct 23, 2026
@joseph-robertson joseph-robertson added Defect Includes code to repair a defect in EnergyPlus IDDChange Code changes impact the IDD file (cannot be merged after IO freeze) labels Oct 23, 2026

Copilot AI 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.

🟡 Changes recommended

Valid fouling curves can lose airflow reductions, and newly enabled zone-equipment night mode can produce zero fan power for Fan:SystemModel.

2 open issues
What changed in this PR

Addresses #11808 by making night-ventilation fan performance consistent across supported fan types and scoping night-mode state to the relevant equipment.

Changes:

  • Removes the night-ventilation maximum-flow field and adds input transition support.
  • Updates fan calculations and equipment-specific night-mode handling.
  • Adds regression coverage and updates documentation and example inputs.
File Description
tst/​EnergyPlus/​unit/​ZoneEquipmentManager.unit.cc Tests equipment-specific night-mode selection and isolation.
tst/​EnergyPlus/​unit/​SimAirServingZones.unit.cc Tests global night-mode cleanup.
tst/​EnergyPlus/​unit/​Fans.unit.cc Tests night performance, fouling, and low-flow behavior.
testfiles/​5ZoneNightVent4.idf Removes the obsolete flow field.
src/​Transition/​tests/​27_1_0/​test_fan_performance_night_ventilation.py Tests removal of the flow field during transition.
src/​Transition/​InputRulesFiles/​Rules26-2-0-to-27-1-0.md Documents the input transition.
src/​Transition/​CreateNewIDFUsingRulesV27_1_0.f90 Removes the old field while preserving motor settings.
src/​EnergyPlus/​ZoneEquipmentManager.hh Declares the equipment night-status helper.
src/​EnergyPlus/​ZoneEquipmentManager.cc Scopes night mode to components and serving loops.
src/​EnergyPlus/​SystemAvailabilityManager.hh Adds per-assignment availability status.
src/​EnergyPlus/​SystemAvailabilityManager.cc Resets and records component manager statuses.
src/​EnergyPlus/​SimAirServingZones.cc Clears transient night mode after air-loop simulation.
src/​EnergyPlus/​Fans.hh Removes obsolete night-flow members.
src/​EnergyPlus/​Fans.cc Updates night-performance and fouling calculations.
idd/​Energy+.idd.in Removes the flow field and clarifies flow-fraction scope.
doc/​input-output-reference/​src/​overview/​group-system-availability-managers.tex Clarifies air-loop versus zone-equipment flow control.
doc/​input-output-reference/​src/​overview/​group-fans.tex Documents supported night behavior and revised inputs.

Review effort: Balanced

Comment thread src/EnergyPlus/Fans.cc Outdated
Comment thread src/EnergyPlus/ZoneEquipmentManager.cc

Copilot AI 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.

🔵 Needs a closer look

Cross-equipment state handling and input migration need verified simulation and transition results, with unresolved low-flow power and regression-coverage concerns.

1 open issue
1 previously missed issue

In code that hasn't changed since last review

Medium severity Add end-to-end regression for zone fan night performance selection

src/​EnergyPlus/​SystemAvailabilityManager.cc:283

The zone-fan regressions assign availManagers(1).availStatus manually, so they would still pass if this production assignment were removed and zone equipment stopped selecting night performance. Add a regression that runs ManageSystemAvailability through actual manager evaluation, changes night ventilation from CycleOn to NoAction, and checks the stored component-specific status and resulting fan performance.

2 resolved since last review

Review effort: Balanced

Comment thread src/EnergyPlus/Fans.cc
Comment on lines +2816 to +2818
} else {
_localPressureRise[0] = deltaPress;
_localPressureRise[1] = deltaPress;

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Use the fixed-speed night power multiplier in both low-flow heat-safeguard branches instead of reapplying the normal fan power curve. Add a cubic-curve regression that verifies expected night power at very low flow.
Evaluate zone NightVentilation managers through ManageSystemAvailability instead of manually assigning CycleOn and NoAction statuses. Verify component-specific manager and aggregate statuses transition from CycleOn to NoAction and that fan power returns to its design value, while retaining stale-global-state coverage.

This branch has not been deployed

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

Labels

Defect Includes code to repair a defect in EnergyPlus IDDChange Code changes impact the IDD file (cannot be merged after IO freeze)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Inconsistent/inaccurate FanPerformance:NightVentilation handling across fan types

3 participants