Skip to content

Commit

Permalink
Calculate mixed air temp for sizing zone water coils
Browse files Browse the repository at this point in the history
  • Loading branch information
rraustad committed Aug 5, 2017
1 parent 02faf2d commit 7c26f0d
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 51 deletions.
108 changes: 63 additions & 45 deletions src/EnergyPlus/ReportSizingManager.cc
Expand Up @@ -807,19 +807,25 @@ namespace ReportSizingManager {
} else if ( ZoneEqUnitHeater || ZoneEqVentedSlab ) { // for unit ventilator the cp value is calculated at 5.05(InitConvTemp) for the child and 60.0C for the unit ventilator //|| ZoneEqUnitVent
AutosizeDes = ZoneEqSizing( CurZoneEqNum ).MaxHWVolFlow;
} else {
// if ( ZoneEqSizing( CurZoneEqNum ).SystemAirFlow ) {
// DesMassFlow = ZoneEqSizing( CurZoneEqNum ).AirVolFlow * StdRhoAir;
// } else if ( ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow ) {
// DesMassFlow = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir;
// } else {
// DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
// }
if ( ZoneEqSizing( CurZoneEqNum ).SystemAirFlow ) {
DesMassFlow = ZoneEqSizing( CurZoneEqNum ).AirVolFlow * StdRhoAir;
} else if ( ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow ) {
DesMassFlow = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir;
} else {
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
}
if ( DesMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA / DesMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
CoilInTemp = ( 1 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
// CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp;
// CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp;
// CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat;
// DesCoilLoad = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp );
VentilationLoad = PsyCpAirFnWTdb( FinalZoneSizing( CurZoneEqNum ).OutHumRatAtHeatPeak, FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak ) * ( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA ) * ( FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak - FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak );
DesCoilLoad = FinalZoneSizing( CurZoneEqNum ).DesHeatLoad + max( 0.0, VentilationLoad * FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor );
CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp;
CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat;
DesCoilLoad = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp );
// VentilationLoad = PsyCpAirFnWTdb( FinalZoneSizing( CurZoneEqNum ).OutHumRatAtHeatPeak, FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak ) * ( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA ) * ( FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak - FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak );
// DesCoilLoad = FinalZoneSizing( CurZoneEqNum ).DesHeatLoad + max( 0.0, VentilationLoad * FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor );
if ( DesCoilLoad >= SmallLoad ) {
Cp = GetSpecificHeatGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::CWInitConvTemp, PlantLoop(DataWaterLoopNum ).FluidIndex, CallingRoutine );
Expand Down Expand Up @@ -1186,36 +1192,42 @@ namespace ReportSizingManager {
NominalCapacityDes = DesMassFlow * DataWaterCoilSizHeatDeltaT * Cp * rho;
// if coil is part of a zonal unit, calc coil load to get hot water flow rate
} else {
// if ( ZoneEqSizing( CurZoneEqNum ).SystemAirFlow ) {
// DesMassFlow = ZoneEqSizing( CurZoneEqNum ).AirVolFlow * StdRhoAir;
// } else if ( ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow ) {
// DesMassFlow = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir;
// } else {
// DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
// }
if ( ZoneEqSizing( CurZoneEqNum ).SystemAirFlow ) {
DesMassFlow = ZoneEqSizing( CurZoneEqNum ).AirVolFlow * StdRhoAir;
} else if ( ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow ) {
DesMassFlow = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir;
} else {
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
}
if ( DesMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA / DesMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
CoilInTemp = ( 1 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
// CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp;
// CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp;
// CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat;
// NominalCapacityDes = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp );
VentilationLoad = PsyCpAirFnWTdb( FinalZoneSizing( CurZoneEqNum ).OutHumRatAtHeatPeak, FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak ) * ( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA ) * ( FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak - FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak );
NominalCapacityDes = FinalZoneSizing( CurZoneEqNum ).DesHeatLoad + max( 0.0, VentilationLoad * FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor );
CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp;
CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat;
NominalCapacityDes = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp );
// VentilationLoad = PsyCpAirFnWTdb( FinalZoneSizing( CurZoneEqNum ).OutHumRatAtHeatPeak, FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak ) * ( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA ) * ( FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak - FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak );
// NominalCapacityDes = FinalZoneSizing( CurZoneEqNum ).DesHeatLoad + max( 0.0, VentilationLoad * FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor );
}
AutosizeDes = NominalCapacityDes * DataHeatSizeRatio;
if ( DisplayExtraWarnings && AutosizeDes <= 0.0 ) {
ShowWarningMessage( CallingRoutine + ": Potential issue with equipment sizing for " + CompType + ' ' + CompName );
ShowContinueError( "...Rated Total Heating Capacity = " + TrimSigDigits( AutosizeDes, 2 ) + " [W]" );
// ShowContinueError( "...Air flow rate used for sizing = " + TrimSigDigits( DesMassFlow / StdRhoAir, 5 ) + " [m3/s]" );
ShowContinueError( "...Air flow rate used for sizing = " + TrimSigDigits( DesMassFlow / StdRhoAir, 5 ) + " [m3/s]" );
if ( TermUnitSingDuct || TermUnitPIU || TermUnitIU || ZoneEqFanCoil ) {
ShowContinueError( "...Air flow rate used for sizing = " + TrimSigDigits( DesMassFlow / StdRhoAir, 5 ) + " [m3/s]" );
ShowContinueError( "...Plant loop temperature difference = " + TrimSigDigits( DataWaterCoilSizHeatDeltaT, 2 ) + " [C]" );
} else {
// ShowContinueError( "...Coil inlet air temperature used for sizing = " + TrimSigDigits( CoilInTemp, 2 ) + " [C]" );
// ShowContinueError( "...Coil outlet air temperature used for sizing = " + TrimSigDigits( CoilOutTemp, 2 ) + " [C]" );
// ShowContinueError( "...Coil outlet air humidity ratio used for sizing = " + TrimSigDigits( CoilOutHumRat, 2 ) + " [kgWater/kgDryAir]" );
ShowContinueError( "...Coil zone load used for sizing = " + TrimSigDigits( FinalZoneSizing( CurZoneEqNum ).DesHeatLoad, 2 ) + " [W]" );
ShowContinueError( "...Coil ventilation load used for sizing = " + TrimSigDigits( VentilationLoad, 2 ) + " [W]" );
ShowContinueError( "...Coil global sizing factor used for sizing = " + TrimSigDigits( FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor, 2 ) + " []" );
ShowContinueError( "...Coil heating sizing factor used for sizing = " + TrimSigDigits( DataHeatSizeRatio, 2 ) + " []" );
ShowContinueError( "...Coil inlet air temperature used for sizing = " + TrimSigDigits( CoilInTemp, 2 ) + " [C]" );
ShowContinueError( "...Coil outlet air temperature used for sizing = " + TrimSigDigits( CoilOutTemp, 2 ) + " [C]" );
ShowContinueError( "...Coil outlet air humidity ratio used for sizing = " + TrimSigDigits( CoilOutHumRat, 2 ) + " [kgWater/kgDryAir]" );
// ShowContinueError( "...Coil zone load used for sizing = " + TrimSigDigits( FinalZoneSizing( CurZoneEqNum ).DesHeatLoad, 2 ) + " [W]" );
// ShowContinueError( "...Coil ventilation load used for sizing = " + TrimSigDigits( VentilationLoad, 2 ) + " [W]" );
// ShowContinueError( "...Coil global sizing factor used for sizing = " + TrimSigDigits( FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor, 2 ) + " []" );
// ShowContinueError( "...Coil heating sizing factor used for sizing = " + TrimSigDigits( DataHeatSizeRatio, 2 ) + " []" );
}
}
} else if ( SizingType == HeatingWaterDesCoilLoadUsedForUASizing ) {
Expand All @@ -1232,20 +1244,26 @@ namespace ReportSizingManager {
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
AutosizeDes = DataWaterFlowUsedForSizing * DataWaterCoilSizHeatDeltaT * Cp * rho;
} else {
// if ( ZoneEqSizing( CurZoneEqNum ).SystemAirFlow ) {
// DesMassFlow = ZoneEqSizing( CurZoneEqNum ).AirVolFlow * StdRhoAir;
// } else if ( ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow ) {
// DesMassFlow = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir;
// } else {
// DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
// }
if ( ZoneEqSizing( CurZoneEqNum ).SystemAirFlow ) {
DesMassFlow = ZoneEqSizing( CurZoneEqNum ).AirVolFlow * StdRhoAir;
} else if ( ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow ) {
DesMassFlow = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir;
} else {
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
}
if ( DesMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA / DesMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
CoilInTemp = ( 1 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
// CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp;
// CoilInHumRat = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInHumRat;
// CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp;
// CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat;
// AutosizeDes = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp );
VentilationLoad = PsyCpAirFnWTdb( FinalZoneSizing( CurZoneEqNum ).OutHumRatAtHeatPeak, FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak ) * ( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA ) * ( FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak - FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak );
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).DesHeatLoad + max( 0.0, VentilationLoad * FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor );
CoilInHumRat = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInHumRat;
CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp;
CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat;
AutosizeDes = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp );
// VentilationLoad = PsyCpAirFnWTdb( FinalZoneSizing( CurZoneEqNum ).OutHumRatAtHeatPeak, FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak ) * ( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA ) * ( FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak - FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak );
// AutosizeDes = FinalZoneSizing( CurZoneEqNum ).DesHeatLoad + max( 0.0, VentilationLoad * FinalZoneSizing( CurZoneEqNum ).HeatSizingFactor );
}
} else if ( SizingType == HeatingWaterDesCoilWaterVolFlowUsedForUASizing ) {
if ( TermUnitSingDuct ) {
Expand Down
12 changes: 6 additions & 6 deletions src/EnergyPlus/WaterCoils.cc
Expand Up @@ -2144,7 +2144,7 @@ namespace WaterCoils {
TempSize = WaterCoil( CoilNum ).UACoil;
}

DataFlowUsedForSizing = WaterCoil( CoilNum ).InletAirMassFlowRate;
DataFlowUsedForSizing = WaterCoil( CoilNum ).InletAirMassFlowRate;
DesCoilWaterInTempSaved = WaterCoil( DataCoilNum ).InletWaterTemp;
if ( DesCoilWaterInTempSaved < DesCoilHWInletTempMin ) {
// at low coil design water inlet temp, sizing has convergence issue hence slightly higher water inlet temperature
Expand All @@ -2162,12 +2162,12 @@ namespace WaterCoils {
WaterCoil( DataCoilNum ).InletWaterTemp = DesCoilWaterInTempSaved; // reset the Design Coil Inlet Water Temperature
}
WaterCoil( CoilNum ).UACoil = TempSize;
// if coil UA did not size due to one of these variables being 0, must set UACoilVariable to avoid crash later on
if ( DataCapacityUsedForSizing == 0.0 || DataWaterFlowUsedForSizing == 0.0 || DataFlowUsedForSizing == 0.0 ) {
if ( WaterCoil( CoilNum ).UACoilVariable == AutoSize ) {
WaterCoil( CoilNum ).UACoilVariable = TempSize;
}
// if coil UA did not size due to one of these variables being 0, must set UACoilVariable to avoid crash later on
if ( DataCapacityUsedForSizing == 0.0 || DataWaterFlowUsedForSizing == 0.0 || DataFlowUsedForSizing == 0.0 ) {
if ( WaterCoil( CoilNum ).UACoilVariable == AutoSize ) {
WaterCoil( CoilNum ).UACoilVariable = TempSize;
}
}
WaterCoil( CoilNum ).UACoilVariable = TempSize;
WaterCoil( CoilNum ).DesWaterHeatingCoilRate = DataCapacityUsedForSizing;
WaterCoil( DataCoilNum ).InletWaterTemp = DesCoilWaterInTempSaved; // reset the Design Coil Inlet Water Temperature
Expand Down

1 comment on commit 7c26f0d

@nrel-bot-3
Copy link

Choose a reason for hiding this comment

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

#6028-PTAC-heating-coil-undersized-for-ventilation-load-when-zone-design-heating-load-is-zero (rraustad) - x86_64-MacOS-10.9-clang: OK (2565 of 2571 tests passed, 0 test warnings)

Messages:

  • 5 tests had: EIO diffs.
  • 5 tests had: Table big diffs.
  • 1 test had: ESO big diffs.
  • 1 test had: MTR big diffs.

Failures:

integration Test Summary

  • Passed: 601
  • Failed: 1

regression Test Summary

  • Passed: 595
  • Failed: 5

Build Badge Test Badge

Please sign in to comment.