Skip to content

Commit

Permalink
Merge pull request #6049 from NREL/#6044-Reheat-coils-using-main-air-…
Browse files Browse the repository at this point in the history
…loop-air-flow-rate-to-size-coil-UA

Change reheat coil sizing to use air terminal unit air flow rate to size the water coil UA value.
  • Loading branch information
Myoldmopar committed Jun 28, 2017
2 parents c24b7af + 1054c7c commit 7bc114a
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 11 deletions.
18 changes: 13 additions & 5 deletions src/EnergyPlus/ReportSizingManager.cc
Expand Up @@ -1196,13 +1196,17 @@ namespace ReportSizingManager {
}
}
} else if ( SizingType == HeatingWaterDesCoilLoadUsedForUASizing ) {
if ( TermUnitSingDuct || TermUnitPIU || TermUnitIU ) {
if ( TermUnitSingDuct ) {
Cp = GetSpecificHeatGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::CWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
AutosizeDes = DataWaterFlowUsedForSizing * DataWaterCoilSizHeatDeltaT * Cp * rho;
} else if ( TermUnitPIU || TermUnitIU ) {
Cp = GetSpecificHeatGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
AutosizeDes = DataWaterFlowUsedForSizing * DataWaterCoilSizHeatDeltaT * Cp * rho * TermUnitSizing( CurZoneEqNum ).ReheatLoadMult;
} else if ( ZoneEqFanCoil || ZoneEqUnitHeater ) {
Cp = GetSpecificHeatGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::CWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine );
AutosizeDes = DataWaterFlowUsedForSizing * DataWaterCoilSizHeatDeltaT * Cp * rho;
} else {
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
Expand All @@ -1213,7 +1217,9 @@ namespace ReportSizingManager {
AutosizeDes = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp );
}
} else if ( SizingType == HeatingWaterDesCoilWaterVolFlowUsedForUASizing ) {
if ( TermUnitSingDuct || TermUnitPIU || TermUnitIU ) {
if ( TermUnitSingDuct ) {
AutosizeDes = DataWaterFlowUsedForSizing;
} else if ( TermUnitPIU || TermUnitIU ) {
AutosizeDes = DataWaterFlowUsedForSizing * TermUnitSizing( CurZoneEqNum ).ReheatLoadMult;
} else if ( ZoneEqFanCoil ) {
AutosizeDes = DataWaterFlowUsedForSizing;
Expand All @@ -1222,7 +1228,9 @@ namespace ReportSizingManager {
}
bCheckForZero = false;
} else if ( SizingType == HeatingAirflowUASizing ) {
if ( TermUnitSingDuct || TermUnitPIU || TermUnitIU ) {
if ( TermUnitSingDuct ) {
AutosizeDes = StdRhoAir * TermUnitSizing( CurZoneEqNum ).AirVolFlow;
} else if ( TermUnitPIU || TermUnitIU ) {
AutosizeDes = StdRhoAir * TermUnitSizing( CurZoneEqNum ).AirVolFlow * TermUnitSizing( CurZoneEqNum ).ReheatAirFlowMult;
} else if ( ZoneEqFanCoil ) {
AutosizeDes = StdRhoAir * FinalZoneSizing( CurZoneEqNum ).DesHeatVolFlow;
Expand Down
15 changes: 12 additions & 3 deletions src/EnergyPlus/WeatherManager.cc
Expand Up @@ -7459,7 +7459,10 @@ Label9999: ;
// Write Final Ground Reflectance Information to the initialization output file
gio::write( OutputFileInits, fmtA ) << "! <Site:GroundReflectance>,Jan{dimensionless},Feb{dimensionless},Mar{dimensionless},Apr{dimensionless},May{dimensionless},Jun{dimensionless},Jul{dimensionless},Aug{dimensionless},Sep{dimensionless},Oct{dimensionless},Nov{dimensionless},Dec{dimensionless}";
gio::write( OutputFileInits, "(' ',A,$)" ) << "Site:GroundReflectance";
for ( I = 1; I <= 12; ++I ) gio::write( OutputFileInits, "(', ',F5.2,$)" ) << GroundReflectances( I ); gio::write( OutputFileInits );
for ( I = 1; I <= 12; ++I ) {
gio::write( OutputFileInits, "(', ',F5.2,$)" ) << GroundReflectances( I );
}
gio::write( OutputFileInits );

}

Expand Down Expand Up @@ -7541,10 +7544,16 @@ Label9999: ;

gio::write( OutputFileInits, fmtA ) << "! <Site:GroundReflectance:Snow>,Jan{dimensionless},Feb{dimensionless},Mar{dimensionless},Apr{dimensionless},May{dimensionless},Jun{dimensionless},Jul{dimensionless},Aug{dimensionless},Sep{dimensionless},Oct{dimensionless},Nov{dimensionless},Dec{dimensionless}";
gio::write( OutputFileInits, fmtAN ) << " Site:GroundReflectance:Snow";
for ( I = 1; I <= 12; ++I ) gio::write( OutputFileInits, "(', ',F5.2,$)" ) << max( min( GroundReflectances( I ) * SnowGndRefModifier, 1.0 ), 0.0 ); gio::write( OutputFileInits );
for ( I = 1; I <= 12; ++I ) {
gio::write( OutputFileInits, "(', ',F5.2,$)" ) << max( min( GroundReflectances( I ) * SnowGndRefModifier, 1.0 ), 0.0 );
}
gio::write( OutputFileInits );
gio::write( OutputFileInits, fmtA ) << "! <Site:GroundReflectance:Snow:Daylighting>,Jan{dimensionless},Feb{dimensionless},Mar{dimensionless},Apr{dimensionless},May{dimensionless},Jun{dimensionless},Jul{dimensionless},Aug{dimensionless},Sep{dimensionless},Oct{dimensionless},Nov{dimensionless},Dec{dimensionless}";
gio::write( OutputFileInits, fmtAN ) << " Site:GroundReflectance:Snow:Daylighting";
for ( I = 1; I <= 12; ++I ) gio::write( OutputFileInits, "(', ',F5.2,$)" ) << max( min( GroundReflectances( I ) * SnowGndRefModifierForDayltg, 1.0 ), 0.0 ); gio::write( OutputFileInits );
for ( I = 1; I <= 12; ++I ) {
gio::write( OutputFileInits, "(', ',F5.2,$)" ) << max( min( GroundReflectances( I ) * SnowGndRefModifierForDayltg, 1.0 ), 0.0 );
}
gio::write( OutputFileInits );

}

Expand Down
6 changes: 3 additions & 3 deletions tst/EnergyPlus/unit/UnitHeater.unit.cc
Expand Up @@ -1144,13 +1144,13 @@ TEST_F( EnergyPlusFixture, UnitHeater_HWHeatingCoilUAAutoSizingTest ) {
EXPECT_FALSE( ErrorsFound );

HWMaxVolFlowRate = WaterCoils::WaterCoil( CoilNum ).MaxWaterVolFlowRate;
HWDensity = GetDensityGlycol( PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidName, DataGlobals::InitConvTemp, PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidIndex, "xxx" );
CpHW = GetSpecificHeatGlycol( PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidName, 60.0, PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidIndex, "xxx" );
HWDensity = GetDensityGlycol( PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidIndex, "xxx" );
CpHW = GetSpecificHeatGlycol( PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( UnitHeat( UnitHeatNum ).HWLoopNum ).FluidIndex, "xxx" );
HWPlantDeltaTDesign = PlantSizData( PltSizHeatNum ).DeltaT;
// calculate hot water coil design capacity
HWCoilDesignCapacity = HWMaxVolFlowRate * HWDensity * CpHW * HWPlantDeltaTDesign;
EXPECT_NEAR( HWCoilDesignCapacity, WaterCoils::WaterCoil( CoilNum ).DesWaterHeatingCoilRate, 1.0 );
EXPECT_NEAR( 111.27, WaterCoils::WaterCoil( CoilNum ).UACoil, 0.02 );
EXPECT_NEAR( 108.72, WaterCoils::WaterCoil( CoilNum ).UACoil, 0.02 );

}

Expand Down
45 changes: 45 additions & 0 deletions tst/EnergyPlus/unit/WaterCoils.unit.cc
Expand Up @@ -460,6 +460,51 @@ TEST_F( WaterCoilsTest, CoilHeatingWaterUASizing )
// check coil UA-value sizing
EXPECT_NEAR( 1439.30, WaterCoil( CoilNum ).UACoil, 0.01 );

// test single zone VAV reheat coil sizing
CurZoneEqNum = 1;
CurSysNum = 0;
TermUnitSizing.allocate( 1 );
TermUnitSizing( CurZoneEqNum ).AirVolFlow = WaterCoil( CoilNum ).DesAirVolFlowRate / 3.0; // DesAirVolFlowRate = 1.0
TermUnitSizing( CurZoneEqNum ).MaxHWVolFlow = WaterCoil( CoilNum ).MaxWaterVolFlowRate / 3.0;
TermUnitSizing( CurZoneEqNum ).MinFlowFrac = 0.5;
DataSizing::TermUnitSingDuct = true;

WaterCoil( CoilNum ).DesAirVolFlowRate = AutoSize;
WaterCoil( CoilNum ).UACoil = AutoSize;
WaterCoil( CoilNum ).MaxWaterVolFlowRate = AutoSize;
WaterCoil( CoilNum ).CoilPerfInpMeth = UAandFlow;
WaterCoil( CoilNum ).DesInletAirTemp = AutoSize;
WaterCoil( CoilNum ).DesOutletAirTemp = AutoSize;
WaterCoil( CoilNum ).DesInletWaterTemp = AutoSize;
WaterCoil( CoilNum ).DesInletAirHumRat = AutoSize;
WaterCoil( CoilNum ).DesOutletAirHumRat = AutoSize;

SysSizingRunDone = false;
ZoneSizingRunDone = true;
NumZoneSizingInput = 1;
ZoneSizingInput.allocate( 1 );
ZoneSizingInput( 1 ).ZoneNum = 1;
ZoneEqSizing.allocate( 1 );
ZoneEqSizing( CurZoneEqNum ).SizingMethod.allocate( 20 );
ZoneEqSizing( CurZoneEqNum ).SizingMethod( DataHVACGlobals::HeatingAirflowSizing ) = DataHVACGlobals::HeatingAirflowSizing;
ZoneEqSizing( CurZoneEqNum ).CoolingAirVolFlow = 0.0;
ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow = 1.0;
FinalZoneSizing.allocate( 1 );
FinalZoneSizing( CurZoneEqNum ).DesCoolVolFlow = 0.0;
FinalZoneSizing( CurZoneEqNum ).DesHeatVolFlow = 1.0;
FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTempTU = 10.0;
FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak = 21.0;
FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInHumRatTU = 0.006;
FinalZoneSizing( CurZoneEqNum ).ZoneHumRatAtHeatPeak = 0.008;


MySizeFlag( 1 ) = true;
// run water coil sizing
SizeWaterCoil( CoilNum );

// check coil UA-value sizing
EXPECT_NEAR( 558.656, WaterCoil( CoilNum ).UACoil, 0.01 ); // smaller UA than result above at 1435.00

// Close and delete eio output file
{ IOFlags flags; flags.DISPOSE( "DELETE" ); gio::close( OutputFileInits, flags ); }

Expand Down

1 comment on commit 7bc114a

@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.

develop (Myoldmopar) - x86_64-MacOS-10.9-clang: OK (1911 of 1914 tests passed, 0 test warnings)

Failures:

EnergyPlusFixture Test Summary

  • Passed: 477
  • Failed: 3

Build Badge Test Badge

Please sign in to comment.