Set flow to 0 when load is 0 for air-source HeatPump:PlantLoop:EIR:*#11602
Set flow to 0 when load is 0 for air-source HeatPump:PlantLoop:EIR:*#11602lymereJ wants to merge 7 commits into
HeatPump:PlantLoop:EIR:*#11602Conversation
| void EIRPlantLoopHeatPump::setOperatingFlowRatesASHP(EnergyPlusData &state, bool FirstHVACIteration, [[maybe_unused]] Real64 const currentLoad) | ||
| { | ||
| if (!this->running) { | ||
| if ((std::abs(currentLoad) < HVAC::SmallLoad && this->companionHeatPumpCoil == nullptr) || !this->running) { |
There was a problem hiding this comment.
You can't do this. For a series branch, where multiple components are on a branch (e.g., 2 HPs in series), if 1 component is ON and this component is OFF, then water must still flow through the HP. As I say this I see the code is only looking at !running and may not give the expected result (unless there is some other code that handles this but I don't see any in this component's simulate). So I am guessing that there should also be a check for SeriesActive as in other chillers. Need a good test file to flesh this out.
void IndirectAbsorberSpecs::calculate()
// If no loop demand or Absorber OFF, return
if (MyLoad >= 0.0 || !RunFlag) { <-- so no cooling or plant manager said component is off
if (this->EquipFlowCtrl == DataBranchAirLoopPlant::ControlType::SeriesActive)
this->EvapMassFlowRate = state.dataLoopNodes->Node(this->EvapInletNodeNum).MassFlowRate;
return;
}
There was a problem hiding this comment.
That makes sense. I see a check for SeriesActive for the EIRFuelFiredHeatPump. I'll push some changes.
lymereJ
left a comment
There was a problem hiding this comment.
Code walk-through:
| auto &comp = DataPlant::CompData::getPlantComponent(state, this->loadSidePlantLoc); | ||
| bool loadIndicator = false; | ||
| if (this->sysControlType == ControlType::Setpoint) { | ||
| Real64 leavingSetpoint = this->getLoadSideOutletSetPointTemp(state); | ||
| loadIndicator = std::abs(leavingSetpoint - this->loadSideInletTemp) < HVAC::SmallTempDiff; | ||
| } else { | ||
| loadIndicator = std::abs(currentLoad) < HVAC::SmallLoad; | ||
| } | ||
| bool lowLoadCondition = loadIndicator && comp.FlowCtrl != DataBranchAirLoopPlant::ControlType::SeriesActive; | ||
| if ((tempOutOfRange || lowLoadCondition) && !this->heatRecoveryAvailable) { |
There was a problem hiding this comment.
Revised approach to: 1) ensure equipment in series maintains flow even with no load, and 2) allow flow to pass through the unit when heat recovery is available.
| add_simulation_test(IDF_FILE PlantLoopChainDualDeadband.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) | ||
| add_simulation_test(IDF_FILE PlantLoopChainHeating.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) | ||
| add_simulation_test(IDF_FILE PlantLoopHeatPump_EIR_AirSource.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) | ||
| add_simulation_test(IDF_FILE PlantLoopHeatPump_EIR_AirSource_Parallel.idf EPW_FILE USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw) |
There was a problem hiding this comment.
As requested, this is a new test file, based on PlantLoopHeatPump_EIR_AirSource.idf, that includes AWHPs in parallel (only one AWHP is used in PlantLoopHeatPump_EIR_AirSource.idf).
When running this file with develop we see that AWHP HEATING COIL 2 has flow even when it does not provide any heating:
With this branch, we only see flow when the AWHP is providing heating:

Pull request overview
HeatPump:PlantLoop:EIR:Heatingobject has no load #11601Description of the purpose of this PR
Set flows (source and load side) to 0 when load is 0 for air-source
HeatPump:PlantLoop:EIR:*objects.Pull Request Author
Reviewer