Skip to content

Fix flow rate issue for fanless unitary system #10825

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Feb 4, 2025
4 changes: 2 additions & 2 deletions src/EnergyPlus/UnitarySystem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -887,8 +887,8 @@ namespace UnitarySystems {
this->m_IterationCounter = 0;
std::fill(this->m_IterationMode.begin(), this->m_IterationMode.end(), 0);

// for DX systems, just read the inlet node flow rate and let air loop decide flow
if (this->m_ControlType == UnitarySysCtrlType::Setpoint && this->m_sysType == SysType::Unitary) {
// for systems without a fan, just read the inlet node flow rate and let air loop decide flow
if (this->m_ControlType == UnitarySysCtrlType::Setpoint && this->m_sysType == SysType::Unitary && this->m_FanExists) {
Copy link
Contributor

Choose a reason for hiding this comment

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

When using SP control, for airloop equipment the node flow rate is used, for zone equipment the equipment flow rate is used. So my question here is if zone equipment still works with this change. See this at the bottom of UnitarySys::setAverageAirFlow. I;m not sure if there is an example file or unit test for this case.

    if (ScheduleManager::GetCurrentScheduleValue(state, this->m_SysAvailSchedPtr) > 0.0 &&
        ((FanOn || state.dataHVACGlobal->TurnFansOn) && !state.dataHVACGlobal->TurnFansOff)) {
        if (this->m_ControlType == UnitarySysCtrlType::Setpoint) {
            // set point based equipment should use VAV terminal units to set the flow.
            // zone equipment needs to set flow since no other device regulates flow (ZoneHVAC /= AirLoopEquipment)
            if (!this->m_AirLoopEquipment) {

Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe just add && this->m_AirLoopEquipment here to cover this? But then zone equipment needs the fan so this looks like it is OK as is.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We have 2 example files with unitary zone equipment using load control, DOAToUnitarySystem and UnitarySystem_ZoneVSWSHP_wDOAS. Those run fine with no diffs here, as expected since it's load control.

Here's a new one with SP control.
UnitarySystem_ZoneVSWSHP_wDOAS-SPControl.idf.txt
No diffs on this branch for design day and annual.

Copy link
Contributor

Choose a reason for hiding this comment

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

Perfect.

Copy link
Contributor

Choose a reason for hiding this comment

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

Should we replace UnitarySystem_ZoneVSWSHP_wDOAS with this file? The change to SP control would still meet the zone SP.

image

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Should we replace UnitarySystem_ZoneVSWSHP_wDOAS with this file? The change to SP control would still meet the zone SP.

It should work, but it's not. This is the SP control file, annual, with develop:
image

Since this branch produces the same result, I don't think this should hold up this PR, but it would be nice to figure out how to make this work.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm OK with merging this branch and following up with an issue to correct, or at least investigate,

if (this->m_sysAvailSched->getCurrentVal() > 0.0) {
if (this->m_LastMode == CoolingMode) {
if (this->m_MultiOrVarSpeedCoolCoil) {
Expand Down
Loading
Loading