Skip to content

Adjust low flow warning for w2a coil in cycling fan mode#11485

Open
joseph-robertson wants to merge 14 commits intodevelopfrom
coil-w2a-cycling-fan
Open

Adjust low flow warning for w2a coil in cycling fan mode#11485
joseph-robertson wants to merge 14 commits intodevelopfrom
coil-w2a-cycling-fan

Conversation

@joseph-robertson
Copy link
Copy Markdown
Collaborator

@joseph-robertson joseph-robertson commented Mar 27, 2026

Pull request overview

  • Fixes Coil:Foo:WaterToAirHeatPump:EquationFit throws unnecessary warnings in cycling fan mode #9125
  • The PR does 2 things:
    • For cycling fan, we compare simpleWatertoAirHP.AirMassFlowRate / PartLoadRatio to 25% of rated air flow rate (vs just simpleWatertoAirHP.AirMassFlowRate for continuous fan). It shouldn't check PLR scaled air flow because cycling fans will only operate on full load airflow.
    • Continue to issue a recurring warning for continuous fan, but issue only a one-time warning for cycling fan. This is because the cycling fan is always operating at certain air flow rates, so basically if the actual air mass flow rate is lower than 25%, it will always be under 25%.

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 Mar 27, 2026
@joseph-robertson joseph-robertson added the Defect Includes code to repair a defect in EnergyPlus label Mar 27, 2026
Comment on lines +1119 to +1121
if ((simpleWatertoAirHP.AirMassFlowRate / simpleWatertoAirHP.PartLoadRatio) < 0.25 * RatedAirMassFlowRate) {
if (state.dataWaterToAirHeatPumpSimple->LowFlowFlag) {
ShowWarningError(state,
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.

Is there a way we could alternatively issue this warning once, upstream, using parent airflow rate and rated coil airflow rate? See #8980 (comment).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I think leaving this check in the coil object is better than creating code in 3 parent objects. You could just add a simpleWatertoAirHP.OneTimeFlag around these checks and that should be sufficient. The parent could do this, after sizing, and comparing with coil design flow, but the same 1-time technique would still be used.

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on ubuntu-24.04 for commit 4e374d4

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on macos-14 for commit 4e374d4

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on ubuntu-24.04 for commit 9467a4d

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on macos-14 for commit 9467a4d

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on ubuntu-24.04 for commit 4551979

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on macos-14 for commit 4551979

Regression Summary
  • ERR: 12

@joseph-robertson joseph-robertson added this to the EnergyPlus 26.1 milestone Mar 27, 2026
@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on macos-14 for commit 0a51319

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on ubuntu-24.04 for commit 0a51319

Regression Summary
  • ERR: 12

@joseph-robertson joseph-robertson marked this pull request as ready for review March 30, 2026 20:37
@joseph-robertson
Copy link
Copy Markdown
Collaborator Author

joseph-robertson commented Mar 30, 2026

To test that the warning is thrown under certain conditions, I modified the IDF corresponding to OpenStudio-HPXML's 1-speed GSHP sample file by reducing the following fields by a factor of 5:

  • AirLoopHVAC: Design Supply Air Flow Rate {m3/s}
  • AirLoopHVAC:UnitarySystem: Cooling Supply Air Flow Rate {m3/s} and Heating Supply Air Flow Rate {m3/s}
  • Fan:SystemModel: Design Maximum Air Flow Rate {m3/s}
  • AirTerminal:SingleDuct:ConstantVolume:NoReheat: Maximum Air Flow Rate {m3/s}

I do see that the "** Warning ** InitSimpleWatertoAirHP: Actual air mass flow rate is smaller than 25% of water-to-air heat pump coil (GROUND SOURCE HEAT PUMP HTG COIL) rated air flow rate." line shows up in eplusout.err.

simpleWatertoAirHP.Name));
state.dataWaterToAirHeatPumpSimple->LowFlowFlag = false;
}
}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This is the same thing that is done in the calc function so this is correct.

void CalcHPCooling(Heating)Simple:

    if (fanOp == HVAC::FanOp::Continuous) {
        LoadSideFullMassFlowRate = simpleWatertoAirHP.AirMassFlowRate;
    } else {
        // default to cycling fan, cycling compressor, full load air flow
        if (PartLoadRatio > 0.0) {
            LoadSideFullMassFlowRate = simpleWatertoAirHP.AirMassFlowRate / PartLoadRatio;
        } else {
            LoadSideFullMassFlowRate = 0.0;
        }
    }

@rraustad
Copy link
Copy Markdown
Collaborator

rraustad commented Apr 8, 2026

@joseph-robertson I'm OK with the change but there are integration test failures that need to be looked at.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 8, 2026

⚠️ Regressions detected on macos-14 for commit 047253a

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 8, 2026

⚠️ Regressions detected on ubuntu-24.04 for commit 047253a

Regression Summary
  • ERR: 12

simpleWAHP.Name));
state.dataWaterToAirHeatPumpSimple->LowFlowFlag = false;
}
}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@joseph-robertson I see the recurring removed from the err file, but where is the 1-time warning? In this diff, shouldn't there be a new warning that wasn't there before ? ASHRAE901_ApartmentHighRise_STD2019_Denver

Image

Copy link
Copy Markdown
Collaborator

@rraustad rraustad Apr 8, 2026

Choose a reason for hiding this comment

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

Also, this should be a SimpleWatertoAirHPConditions struct variable so each coil can report the warning.

if (state.dataWaterToAirHeatPumpSimple->LowFlowFlag) {

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.

@rraustad I think previously the recurring warning was being thrown on this testfile for coils in cycling fan mode. With the new / PartLoadRatio, the warning goes away. It's possible there are no testfiles (with coils in continuous fan mode) where we should expect the 1-time warning to be thrown. Perhaps I should look into writing a couple new unit tests for showing that both warning types get thrown under the right conditions; one for coil in continuous fan mode and one for coil in cycling fan mode.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Duh, your right.

Copy link
Copy Markdown
Collaborator Author

@joseph-robertson joseph-robertson Apr 9, 2026

Choose a reason for hiding this comment

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

After the divide by zero fix in dfd83ab, the testfile DOAToWaterToAirHPInlet_MultispeedFan.idf does throw the 1-time warning.

image

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

What is the node air flow rate when that warning is hit? If it's 0 then that warning should not be reported. Even if the flow rate is > 0 the coil will be off. Why report a warning for a time step when the coil is off? Eventually the coil will be on and that check will throw if necessary. For cycling fan if PLR = 0 then the coil will be off and the fan will be off. A parent can still call the coil with PLR = 0 when there is actually a load and the result will be capacity = 0. A parent will call the coil model with PLR = 0 and PLR = 1 to test whether either of these can meet the load. For continuous fan and PLR = 0 there will be a non-zero capacity because of fan heat and also if OA is provided and that result could meet the load so the parent will not turn on the coil. The check should be testing for if the coil is on, which also protects the divide by 0 but that's a different thing.

if (PartLoadRatio > 0.0 && (simpleWAHP.AirMassFlowRate / PartLoadRatio) < 0.25 * RatedAirMassFlowRate)

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.

I will make this change. (I do see that the node air flow rate > 0 when PLR = 0.)

Since we'll now have no testfiles throwing this warning, I'll see if I can add a unit test for demonstrating it.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 9, 2026

⚠️ Regressions detected on macos-14 for commit 4acb8af

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 9, 2026

⚠️ Regressions detected on ubuntu-24.04 for commit 4acb8af

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 9, 2026

⚠️ Regressions detected on macos-14 for commit 7d7b424

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 9, 2026

⚠️ Regressions detected on ubuntu-24.04 for commit 7d7b424

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 9, 2026

⚠️ Regressions detected on macos-14 for commit 793fd94

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 9, 2026

⚠️ Regressions detected on ubuntu-24.04 for commit 793fd94

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on ubuntu-24.04 for commit 566a99d

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on macos-14 for commit 566a99d

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on macos-14 for commit 738ee26

Regression Summary
  • ERR: 12

@github-actions
Copy link
Copy Markdown

⚠️ Regressions detected on ubuntu-24.04 for commit 738ee26

Regression Summary
  • ERR: 12

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Coil:Foo:WaterToAirHeatPump:EquationFit throws unnecessary warnings in cycling fan mode

4 participants