Skip to content
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

AirloopHVAC:UnitarySystem shows iteration control failure for water coils at very low load #9991

Open
1 of 3 tasks
rraustad opened this issue May 2, 2023 · 0 comments
Open
1 of 3 tasks
Assignees
Labels
Defect Includes code to repair a defect in EnergyPlus

Comments

@rraustad
Copy link
Contributor

rraustad commented May 2, 2023

Issue overview

A new example file for #9979 shows iteration failures for water coils (Coil:Cooling:Water in this example file) used in UnitarySystem. Since these zone UnitarySystems are used as backup cooling equipment in zones served by air loop PIU units, the air loop meets mostly the entire zone load leaving only small loads to be met by the UnitarySystem. The UnitarySystem has an internal cutoff of a minimum of 5 watts for load control.

** Warning ** Coil control failed for AirLoopHVAC:UnitarySystem:PERIMETER_BOT_ZN_1_ZONECOOLING
** ~~~ ** sensible part-load ratio determined to be outside the range of 0-1.
** ~~~ ** Sensible load to be met = -5.51 (watts), and the simulation continues.
** ~~~ ** Environment=ANNUAL, at Simulation time=01/03 11:53 - 12:00

A defect file was created and shows the same warning:

** Warning ** Coil control failed for AirLoopHVAC:UnitarySystem:SPACE1-1_ZONECOOLING
** ~~~ ** sensible part-load ratio determined to be outside the range of 0-1.
** ~~~ ** Sensible load to be met = -12.07 (watts), and the simulation continues.
** ~~~ ** During Warmup, Environment=RUN PERIOD 1, at Simulation time=01/01 20:09 - 20:12

This is a result of an initialization executing too early. In these files, the fan air flow rate was hard-sized while the water cooling coil was autosized.

Coil:Cooling:Water,
  SPACE1-1 Cooling Coil,     !- Name
  ALWAYS_ON,               !- Availability Schedule Name
  autosize,                !- Design Water Flow Rate {m3/s}
  autosize,                !- Design Air Flow Rate {m3/s}     <- autosized

Fan:SystemModel,
  SPACE1-1_ZoneFan 1,       !- Name
  ALWAYS_ON,                !- Availability Schedule Name
  SPACE1-1_ZoneOutlet Node, !- Air Inlet Node Name
  SPACE1-1_FanOutlet Node,  !- Air Outlet Node Name
  0.22282,                 !- Design Maximum Air Flow Rate {m3/s}  <- hard sized

Since the fan had a valid air flow rate, this section of code executed before the water coil sized and the FanSpeedRatio variables were calculated as negative values (because autosize is represented as -99999 in code) where in this cooling only UnitarySystem m_CoolingFanSpeedRatio = - 99999 / 0.22. This then led to incorrect code execution affecting the fan flow variables. This is the only place where these FanSpeedRatio variables get set so must be executed at the correct time.

    if (this->m_MyFanFlag) {
        if (this->m_ActualFanVolFlowRate != DataSizing::AutoSize) {
            if (this->m_ActualFanVolFlowRate > 0.0) {
                this->m_HeatingFanSpeedRatio = this->m_MaxHeatAirVolFlow / this->m_ActualFanVolFlowRate;
                this->m_CoolingFanSpeedRatio = this->m_MaxCoolAirVolFlow / this->m_ActualFanVolFlowRate;
                this->m_NoHeatCoolSpeedRatio = this->m_MaxNoCoolHeatAirVolFlow / this->m_ActualFanVolFlowRate;

This creates a discontinuity in the iteration algorithm where a solution cannot be found. The correct solution would use a part-load ratio small enough to cause the air mass flow rate to be below 0.001 (i.e., coil air mass flow rate = coil max air mass flow rate * PartLoadRatio) where the water coil would be turned off. Since this is a constant fan operating mode issue, the problem was corrected by ensuring the FanSpeedRatio variables were set correctly.

This issue can be corrected by waiting until sizing has completed by changing this in initUnitarySystems:

    if (this->m_MyFanFlag) {

to this:

    if (this->m_MyFanFlag && !this->m_MySizingCheckFlag) {

And then the fan will use the correct air mass flow rate. It is unclear at this time if this change will affect any existing example files or unit tests. This change also corrects the issue for the new example file in #9979.

Details

Some additional details for this issue (if relevant):

  • Platform (Operating system, version)
  • Version of EnergyPlus (if using an intermediate build, include SHA)
  • Unmethours link or helpdesk ticket number

Checklist

Add to this list or remove from it as applicable. This is a simple templated set of guidelines.

  • Defect file added (5ZoneAirCooled_wZoneUnitarySystem.idf.zip)
  • Ticket added to Pivotal for defect (development team task)
  • Pull request created (the pull request will have additional tasks related to reviewing changes that fix this defect)
@Nigusse Nigusse self-assigned this May 2, 2023
@rraustad rraustad added the Defect Includes code to repair a defect in EnergyPlus label May 2, 2023
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

No branches or pull requests

2 participants