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

Plant low flow rate tolerance prevents minimum pump flow rate to be enforced #10456

Open
1 of 3 tasks
lymereJ opened this issue Mar 29, 2024 · 0 comments · May be fixed by #10457
Open
1 of 3 tasks

Plant low flow rate tolerance prevents minimum pump flow rate to be enforced #10456

lymereJ opened this issue Mar 29, 2024 · 0 comments · May be fixed by #10457
Assignees
Labels
Defect Includes code to repair a defect in EnergyPlus

Comments

@lymereJ
Copy link
Collaborator

lymereJ commented Mar 29, 2024

Issue overview

All the attached models don't simulate successfully because a similar error to this one:

   ** Severe  ** Plant temperatures are getting far too hot, check controls and relative loads and capacities
   **   ~~~   **  Environment=RUNPERIOD 1, at Simulation time=10/21 10:42 - 10:48
   **   ~~~   ** PlantLoop Name (Demand Side) = MAIN WSHP_DEMAND
   **   ~~~   ** PlantLoop Setpoint Temperature=22.5 {C}
   **   ~~~   ** PlantLoop Inlet Node (LoopSideLocation::Supply) does not have a Setpoint.
   **   ~~~   ** PlantLoop Inlet Node (LoopSideLocation::Demand) has a Setpoint.
   **   ~~~   ** PlantLoop Outlet Node (LoopSideLocation::Supply) does not have a Setpoint.
   **   ~~~   ** PlantLoop Outlet Node (LoopSideLocation::Demand) does not have a Setpoint.
   **   ~~~   ** PlantLoop Outlet Node (DemandSide) "MAIN WSHPDEMAND OUTLET NODE" has temperature=3920.4 {C}
   **   ~~~   ** PlantLoop Inlet Node (DemandSide) "MAIN WSHPDEMAND INLET NODE" has temperature=29.6 {C}
   **   ~~~   ** PlantLoop Minimum Temperature=1.0 {C}
   **   ~~~   ** PlantLoop Maximum Temperature=95.0 {C}
   **   ~~~   ** PlantLoop Flow Request (LoopSideLocation::Supply)=0.0 {kg/s}
   **   ~~~   ** PlantLoop Flow Request (LoopSideLocation::Demand)=9.6E-007 {kg/s}
   **   ~~~   ** PlantLoop Node (DemandSide) "MAIN WSHPDEMAND OUTLET NODE" has mass flow rate =9.6E-007 {kg/s}
   **   ~~~   ** PlantLoop PumpHeat (LoopSideLocation::Supply)=4.9E-006 {W}
   **   ~~~   ** PlantLoop PumpHeat (LoopSideLocation::Demand)=0.0 {W}
   **   ~~~   ** PlantLoop Cooling Demand=0.0 {W}
   **   ~~~   ** PlantLoop Heating Demand=0.0 {W}
   **   ~~~   ** PlantLoop Demand not Dispatched=0.0 {W}
   **   ~~~   ** PlantLoop Unmet Demand=0.0 {W}
   **   ~~~   ** PlantLoop Capacity=178019.0 {W}
   **   ~~~   ** PlantLoop Capacity (LoopSideLocation::Supply)=178019.0 {W}
   **   ~~~   ** PlantLoop Capacity (LoopSideLocation::Demand)=0.0 {W}
   **   ~~~   ** PlantLoop Operation Scheme=MAIN WSHPSEC LOOP OPERATION
   **   ~~~   ** PlantLoop Operation Dispatched Load = 0.0 {W}
   **   ~~~   ** PlantLoop Operation Dispatched Load (LoopSideLocation::Supply)= 0.0 {W}
   **   ~~~   ** PlantLoop Operation Dispatched Load (LoopSideLocation::Demand)= 0.0 {W}

The error shows that the plant outlet node temperature is ridiculously high. This seems to be due to the fact that the flow request on the loop is ridiculously low, and is much lower than the minimum pump flow rate (around 0.4 kg/s for this case).

Running these files in the debugger shows that because all the requested flow are below DataConvergParams::PlantLowFlowRateToler the pump's LoopSolverOverwriteFlag is set to true ...

// overrides the loop solver flow request to allow loop pump to turn off when not in use
if (this_loop_side.TotalPumps == 1) {
if (LoopFlow < DataConvergParams::PlantLowFlowRateToler) { // Update from dataconvergetols...
for (int BranchCounter = 1; BranchCounter <= this_loop_side.TotalBranches; ++BranchCounter) {
// reference
auto &branch(this_loop_side.Branch(BranchCounter));
int const NumCompsOnThisBranch = branch.TotalComponents;
for (int CompCounter = 1; CompCounter <= NumCompsOnThisBranch; ++CompCounter) {
auto const &component(branch.Comp(CompCounter));
switch (component.Type) {
case DataPlant::PlantEquipmentType::PumpVariableSpeed:
case DataPlant::PlantEquipmentType::PumpBankVariableSpeed:
case DataPlant::PlantEquipmentType::PumpCondensate:
if (component.CompNum > 0) {
auto &this_pump(state.dataPumps->PumpEquip(component.CompNum));
this_pump.LoopSolverOverwriteFlag = true;
}
default:
break;
}
}
}
}
}

... which effectively prevents the minimum pump flow rate to be enforced and hence the small flow rate through the plant during the simulation:

// override the user specified min to allow pump to turn off when no flow is required.
if (thisPump.LoopSolverOverwriteFlag) {
PumpMassFlowRateMinLimit = 0.0;
} else {
PumpMassFlowRateMinLimit = thisPump.MassFlowRateMin;
}

PlantLowFlowRateToler (1.0E-6) doesn't seem to be aligned with DataBranchAirLoopPlant::MassFlowTolerance (1.0E-9, for air, not water), aligning the two solves the crash for all these models.

Details

Some additional details for this issue (if relevant):

  • Platform: Windows and Linux
  • Version of EnergyPlus: 22.1

Checklist

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

  • Defect files: cases_epjson_22.1.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)
@lymereJ lymereJ added the Defect Includes code to repair a defect in EnergyPlus label Mar 29, 2024
@lymereJ lymereJ self-assigned this Mar 29, 2024
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 a pull request may close this issue.

1 participant