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

Tank Source Side Flow Control Mode IndirectHeatAlternateSetpoint Code Not Hit #7286

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
8bda1c5
Plant source side flow control mode codes added to throttling condition
yzhou601 May 1, 2019
26ded5e
New function created to combine codes of plant source flow determination
yzhou601 May 2, 2019
e74b691
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 May 2, 2019
af8f8a4
Unit test added
yzhou601 May 9, 2019
6587ca8
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 May 16, 2019
2a851f7
unused variables deleted
yzhou601 May 16, 2019
4cfde86
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 May 29, 2019
c401092
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 May 30, 2019
daae49d
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 May 31, 2019
776bb45
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Jun 17, 2019
d5c36e7
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Jun 21, 2019
314b6e9
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Jun 26, 2019
086fe34
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Jul 2, 2019
0dd011f
Cleanup
yzhou601 Jul 18, 2019
be1e611
unit test directly hit SourceHeatNeed function, small cleanups
yzhou601 Jul 18, 2019
d8de8f8
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Jul 18, 2019
de2a755
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Aug 20, 2019
b82974d
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Aug 21, 2019
1556e2a
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Aug 28, 2019
3d31297
Merge branch 'develop' of https://github.com/NREL/EnergyPlus into Pla…
yzhou601 Aug 29, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 84 additions & 101 deletions src/EnergyPlus/WaterThermalTanks.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10767,6 +10767,85 @@ namespace WaterThermalTanks {
return PLRResidualHPWH;
}

bool SourceHeatNeed(WaterThermalTankData const Tank,
Real64 const OutletTemp,
Real64 const DeadBandTemp,
Real64 const SetPointTemp
){
// FUNCTION INFORMATION:
// AUTHOR Yueyue Zhou
// DATE WRITTEN May 2019
// MODIFIED na
// RE-ENGINEERED na

// PURPOSE OF THIS FUNCTION:
// Determine by tank type, tank temperature and control mode if source side flow is needed


//return value initialization
bool NeedsHeatOrCool = false;

if (!Tank.IsChilledWaterTank) {
if (Tank.SourceSideControlMode == SourceSideIndirectHeatPrimarySetpoint) {
if (OutletTemp < DeadBandTemp) {
NeedsHeatOrCool = true;
} else if ((OutletTemp >= DeadBandTemp) && (OutletTemp < SetPointTemp)) {
// inside the deadband, use saved mode from water heater calcs
if (Tank.SavedMode == HeatMode) {
NeedsHeatOrCool = true;
} else if (Tank.SavedMode == FloatMode) {
NeedsHeatOrCool = false;
}

} else if (OutletTemp >= SetPointTemp) {
NeedsHeatOrCool = false;
}
} else if (Tank.SourceSideControlMode == SourceSideIndirectHeatAltSetpoint) {
// get alternate setpoint
Real64 const AltSetpointTemp = ScheduleManager::GetCurrentScheduleValue(Tank.SourceSideAltSetpointSchedNum);
Real64 const AltDeadBandTemp = AltSetpointTemp - Tank.DeadBandDeltaTemp;
if (OutletTemp < AltDeadBandTemp) {
NeedsHeatOrCool = true;
} else if ((OutletTemp >= AltDeadBandTemp) && (OutletTemp < AltSetpointTemp)) {
// inside the deadband, use saved mode from water heater calcs
if (Tank.SavedMode == HeatMode) {
NeedsHeatOrCool = true;
} else if (Tank.SavedMode == FloatMode) {
NeedsHeatOrCool = false;
}

} else if (OutletTemp >= AltSetpointTemp) {
NeedsHeatOrCool = false;
}
} else if (Tank.SourceSideControlMode == SourceSideStorageTank) {
if (OutletTemp < Tank.TankTempLimit) {
NeedsHeatOrCool = true;
} else {
NeedsHeatOrCool = false;
}
}
} else { // is a chilled water tank so flip logic
if (OutletTemp > DeadBandTemp) {
NeedsHeatOrCool = true;
} else if ((OutletTemp <= DeadBandTemp) && (OutletTemp > SetPointTemp)) {
// inside the deadband, use saved mode from water thermal tank calcs (modes only for mixed)
if (Tank.TypeNum == MixedChilledWaterStorage) {
if (Tank.SavedMode == CoolMode) {
NeedsHeatOrCool = true;
} else if (Tank.SavedMode == FloatMode) {
NeedsHeatOrCool = false;
}
} else if (Tank.TypeNum == StratifiedChilledWaterStorage) {
NeedsHeatOrCool = true;
}

} else if (OutletTemp <= SetPointTemp) {
NeedsHeatOrCool = false;
}
}
return NeedsHeatOrCool;
}

Real64 PlantMassFlowRatesFunc(int const WaterThermalTankNum,
int const InNodeNum,
bool const FirstHVACIteration,
Expand Down Expand Up @@ -10820,15 +10899,9 @@ namespace WaterThermalTanks {
// FUNCTION LOCAL VARIABLE DECLARATIONS:
int CurrentMode;
Real64 MassFlowRequest(0.0);
bool NeedsHeat;
bool NeedsCool;
bool NeedsHeatOrCool;
Real64 FlowResult(0.0);
bool ScheduledAvail;
Real64 AltSetpointTemp;
Real64 AltDeadBandTemp;

NeedsHeat = false; // init
NeedsCool = false; // init

// determine current mode. there are three possible
// 1. passing thru what was given to inlet node
Expand Down Expand Up @@ -10925,44 +10998,13 @@ namespace WaterThermalTanks {
}

// next determine if tank temperature is such that source side flow might be requested
if (!WaterThermalTank(WaterThermalTankNum).IsChilledWaterTank) {
if (OutletTemp < DeadBandTemp) {
NeedsHeat = true;
} else if ((OutletTemp >= DeadBandTemp) && (OutletTemp < SetPointTemp)) {
// inside the deadband, use saved mode from water heater calcs
if (WaterThermalTank(WaterThermalTankNum).SavedMode == HeatMode) {
NeedsHeat = true;
} else if (WaterThermalTank(WaterThermalTankNum).SavedMode == FloatMode) {
NeedsHeat = false;
}
} else if (OutletTemp >= SetPointTemp) {
NeedsHeat = false;
}
} else { // is a chilled water tank so flip logic
if (OutletTemp > DeadBandTemp) {
NeedsCool = true;
} else if ((OutletTemp <= DeadBandTemp) && (OutletTemp > SetPointTemp)) {
// inside the deadband, use saved mode from water thermal tank calcs (modes only for mixed)
if (WaterThermalTank(WaterThermalTankNum).TypeNum == MixedChilledWaterStorage) {
if (WaterThermalTank(WaterThermalTankNum).SavedMode == CoolMode) {
NeedsCool = true;
} else if (WaterThermalTank(WaterThermalTankNum).SavedMode == FloatMode) {
NeedsCool = false;
}
} else if (WaterThermalTank(WaterThermalTankNum).TypeNum == StratifiedChilledWaterStorage) {
NeedsCool = true;
}

} else if (OutletTemp <= SetPointTemp) {
NeedsCool = false;
}
}
NeedsHeatOrCool = SourceHeatNeed(WaterThermalTank(WaterThermalTankNum), OutletTemp, DeadBandTemp, SetPointTemp);

if (MassFlowRequest > 0.0) {
if (WaterThermalTankSide == UseSide) {
FlowResult = MassFlowRequest;
} else if (WaterThermalTankSide == SourceSide) {
if (NeedsHeat || NeedsCool) {
if (NeedsHeatOrCool) {
FlowResult = MassFlowRequest;
} else {
FlowResult = 0.0;
Expand Down Expand Up @@ -11007,68 +11049,9 @@ namespace WaterThermalTanks {
}

if (WaterThermalTankSide == SourceSide) { // temperature dependent controls for indirect heating/cooling
if (!WaterThermalTank(WaterThermalTankNum).IsChilledWaterTank) {
// next determine if tank temperature is such that flow is requested depending on mode
if (WaterThermalTank(WaterThermalTankNum).SourceSideControlMode == SourceSideIndirectHeatPrimarySetpoint) {
if (OutletTemp < DeadBandTemp) {
NeedsHeat = true;
} else if ((OutletTemp >= DeadBandTemp) && (OutletTemp < SetPointTemp)) {
// inside the deadband, use saved mode from water heater calcs
if (WaterThermalTank(WaterThermalTankNum).SavedMode == HeatMode) {
NeedsHeat = true;
} else if (WaterThermalTank(WaterThermalTankNum).SavedMode == FloatMode) {
NeedsHeat = false;
}

} else if (OutletTemp >= SetPointTemp) {
NeedsHeat = false;
}
} else if (WaterThermalTank(WaterThermalTankNum).SourceSideControlMode == SourceSideIndirectHeatAltSetpoint) {
// get alternate setpoint
AltSetpointTemp = GetCurrentScheduleValue(WaterThermalTank(WaterThermalTankNum).SourceSideAltSetpointSchedNum);
AltDeadBandTemp = AltSetpointTemp - WaterThermalTank(WaterThermalTankNum).DeadBandDeltaTemp;
if (OutletTemp < AltDeadBandTemp) {
NeedsHeat = true;
} else if ((OutletTemp >= AltDeadBandTemp) && (OutletTemp < AltSetpointTemp)) {
// inside the deadband, use saved mode from water heater calcs
if (WaterThermalTank(WaterThermalTankNum).SavedMode == HeatMode) {
NeedsHeat = true;
} else if (WaterThermalTank(WaterThermalTankNum).SavedMode == FloatMode) {
NeedsHeat = false;
}

} else if (OutletTemp >= AltSetpointTemp) {
NeedsHeat = false;
}
} else if (WaterThermalTank(WaterThermalTankNum).SourceSideControlMode == SourceSideStorageTank) {
if (OutletTemp < WaterThermalTank(WaterThermalTankNum).TankTempLimit) {
NeedsHeat = true;
} else {
NeedsHeat = false;
}
}
} else { // is a chilled water tank so flip logic
if (OutletTemp > DeadBandTemp) {
NeedsCool = true;
} else if ((OutletTemp <= DeadBandTemp) && (OutletTemp > SetPointTemp)) {
// inside the deadband, use saved mode from water thermal tank calcs (modes only for mixed)
if (WaterThermalTank(WaterThermalTankNum).TypeNum == MixedChilledWaterStorage) {
if (WaterThermalTank(WaterThermalTankNum).SavedMode == CoolMode) {
NeedsCool = true;
} else if (WaterThermalTank(WaterThermalTankNum).SavedMode == FloatMode) {
NeedsCool = false;
}
} else if (WaterThermalTank(WaterThermalTankNum).TypeNum == StratifiedChilledWaterStorage) {
NeedsCool = true;
}
} else if (OutletTemp >= SetPointTemp) {
NeedsCool = false;
}

} // chilled water

NeedsHeatOrCool = SourceHeatNeed(WaterThermalTank(WaterThermalTankNum), OutletTemp, DeadBandTemp, SetPointTemp);
if (MassFlowRequest > 0.0) {
if (NeedsHeat || NeedsCool) {
if (NeedsHeatOrCool) {
FlowResult = MassFlowRequest;
} else {
FlowResult = 0.0;
Expand Down
5 changes: 5 additions & 0 deletions src/EnergyPlus/WaterThermalTanks.hh
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,11 @@ namespace WaterThermalTanks {

Real64 PLRResidualHPWH(Real64 const HPPartLoadRatio, Array1<Real64> const &Par);

bool SourceHeatNeed(WaterThermalTankData const WaterThermalTank,
Real64 const OutletTemp,
Real64 const DeadBandTemp,
Real64 const SetPointTemp);

Real64 PlantMassFlowRatesFunc(int const WaterThermalTankNum,
int const InNodeNum,
bool const FirstHVACIteration,
Expand Down
Loading