Skip to content

Commit

Permalink
Final changes
Browse files Browse the repository at this point in the history
  • Loading branch information
rraustad committed Aug 6, 2017
1 parent 7c26f0d commit be9e39f
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 38 deletions.
20 changes: 10 additions & 10 deletions src/EnergyPlus/DataSurfaces.cc
Expand Up @@ -511,11 +511,11 @@ namespace DataSurfaces {
edges.push_back( vertices[ ( i + 1 ) % n ] - vertices[ i ] );
}
if ( shapeCat == ShapeCat::Rectangular ) { // Set side length squared for ray--surface intersection tests
// assert( n == 4u );
assert( n == 4u );
s1 = edges[ 0 ].magnitude_squared();
s3 = edges[ 3 ].magnitude_squared();
} else if ( ( shapeCat == ShapeCat::Nonconvex ) || ( n >= nVerticesBig ) ) { // Set up slabs
// assert( n >= 4u );
assert( n >= 4u );
slabYs.reserve( n );
for ( size_type i = 0; i < n; ++i ) slabYs.push_back( vertices[ i ].y );
std::sort( slabYs.begin(), slabYs.end() ); // Sort the vertex y coordinates
Expand All @@ -540,7 +540,7 @@ namespace DataSurfaces {
( ( yu <= v.y ) && ( w.y <= yl ) ) ) // Crosses downward
{
Edge const & e( edges[ i ] );
// assert( e.y != 0.0 );
assert( e.y != 0.0 );
Real64 const exy( e.x / e.y );
Real64 const xb( v.x + ( yl - v.y ) * exy ); // x_bot coordinate where edge intersects yl
Real64 const xt( v.x + ( yu - v.y ) * exy ); // x_top coordinate where edge intersects yu
Expand All @@ -551,7 +551,7 @@ namespace DataSurfaces {
}
slab.xl = xl;
slab.xu = xu;
// assert( crossEdges.size() >= 2u );
assert( crossEdges.size() >= 2u );
std::sort( crossEdges.begin(), crossEdges.end(),
[]( CrossEdge const & e1, CrossEdge const & e2 ) -> bool // Lambda to sort by x_mid
{
Expand All @@ -565,22 +565,22 @@ namespace DataSurfaces {
for ( auto const & edge: crossEdges ) { // Detect non-simple polygon with crossing edges
Real64 const xbe( std::get< 0 >( edge ) );
Real64 const xte( std::get< 1 >( edge ) );
// assert( xb <= xbe + tol );
// assert( xt <= xte + tol );
assert( xb <= xbe + tol );
assert( xt <= xte + tol );
xb = xbe;
xt = xte;
}
#endif
// assert( ( shapeCat == ShapeCat::Nonconvex ) || ( crossEdges.size() == 2 ) );
assert( ( shapeCat == ShapeCat::Nonconvex ) || ( crossEdges.size() == 2 ) );
for ( auto const & edge: crossEdges ) {
size_type const iEdge( std::get< 2 >( edge ) );
slab.edges.push_back( iEdge ); // Add edge to slab
Vector2D const & e( edges[ iEdge ] );
// assert( e.y != 0.0 ); // Constant y edge can't be a crossing edge
assert( e.y != 0.0 ); // Constant y edge can't be a crossing edge
slab.edgesXY.push_back( e.y != 0.0 ? e.x / e.y : 0.0 ); // Edge inverse slope
}
// assert( slab.edges.size() %2 == 0u );
// assert( slab.edges.size() == slab.edgesXY.size() );
assert( slab.edges.size() %2 == 0u );
assert( slab.edges.size() == slab.edgesXY.size() );
}
}
}
Expand Down
37 changes: 9 additions & 28 deletions src/EnergyPlus/ReportSizingManager.cc
Expand Up @@ -421,7 +421,6 @@ namespace ReportSizingManager {
std::string ScalableSM; // scalable sizing methods label for reporting
Real64 const RatedInletAirTemp( 26.6667 ); // 26.6667C or 80F
Real64 const RatedInletAirHumRat( 0.01125 ); // Humidity ratio corresponding to 80F dry bulb/67F wet bulb
Real64 VentilationLoad; // outdoor air load used to size water coils [W]

AutosizeDes = 0.0;
AutosizeUser = 0.0;
Expand Down Expand Up @@ -815,17 +814,14 @@ namespace ReportSizingManager {
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
}
if ( DesMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA / DesMassFlow, 1.0 );
OutAirFrac = min( StdRhoAir * ZoneEqSizing( CurZoneEqNum ).OAVolFlow / DesMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
CoilInTemp = ( 1 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
// CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp;
CoilInTemp = ( 1.0 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
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 All @@ -843,15 +839,13 @@ namespace ReportSizingManager {
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak;
} else if ( TermUnitSingDuct ) {
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTempTU;
} else if ( ZoneEqFanCoil ) {
} else {
if ( FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * ZoneEqSizing( CurZoneEqNum ).OAVolFlow / FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
AutosizeDes = OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak + ( 1.0 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak;
} else {
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp;
}
bCheckForZero = false;
} else if ( SizingType == HeatingWaterDesAirInletHumRatSizing ) {
Expand All @@ -862,15 +856,13 @@ namespace ReportSizingManager {
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).ZoneHumRatAtHeatPeak;
} else if ( TermUnitSingDuct ) {
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInHumRatTU;
} else if ( ZoneEqFanCoil ) {
} else {
if ( FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * ZoneEqSizing( CurZoneEqNum ).OAVolFlow / FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
AutosizeDes = OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutHumRatAtHeatPeak + ( 1.0 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneHumRatAtHeatPeak;
} else {
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInHumRat;
}
bCheckForZero = false;
} else if ( SizingType == CoolingWaterDesAirInletTempSizing ) {
Expand Down Expand Up @@ -1200,17 +1192,14 @@ namespace ReportSizingManager {
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
}
if ( DesMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA / DesMassFlow, 1.0 );
OutAirFrac = min( StdRhoAir * ZoneEqSizing( CurZoneEqNum ).OAVolFlow / DesMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
CoilInTemp = ( 1 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
// CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp;
CoilInTemp = ( 1.0 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
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 ) {
Expand All @@ -1224,10 +1213,6 @@ namespace ReportSizingManager {
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 @@ -1252,18 +1237,15 @@ namespace ReportSizingManager {
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow;
}
if ( DesMassFlow > 0.0 ) {
OutAirFrac = min( StdRhoAir * FinalZoneSizing( CurZoneEqNum ).MinOA / DesMassFlow, 1.0 );
OutAirFrac = min( StdRhoAir * ZoneEqSizing( CurZoneEqNum ).OAVolFlow / DesMassFlow, 1.0 );
} else {
OutAirFrac = 0.0;
}
CoilInTemp = ( 1 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
// CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp;
CoilInTemp = ( 1.0 - OutAirFrac ) * FinalZoneSizing( CurZoneEqNum ).ZoneTempAtHeatPeak + OutAirFrac * FinalZoneSizing( CurZoneEqNum ).OutTempAtHeatPeak;
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 Expand Up @@ -2314,12 +2296,11 @@ namespace ReportSizingManager {
}}
}
}

if ( DataScalableCapSizingON ) {
{ auto const SELECT_CASE_var( ZoneEqSizing( CurZoneEqNum ).SizingMethod( SizingType ) );
if ( SELECT_CASE_var == HeatingDesignCapacity || SELECT_CASE_var == CoolingDesignCapacity ) {
ScalableSM = "User-Specified ";
if ( SizingResult == AutoSize ) ScalableSM = "Design Size "; // how can the SizingResult == AutoSize here ?? It's set a few lines up.
if ( SizingResult == AutoSize ) ScalableSM = "Design Size ";
} else if ( SELECT_CASE_var == CapacityPerFloorArea ) {
ScalableSM = "User-Specified (scaled by capacity / area) ";
} else if ( SELECT_CASE_var == FractionOfAutosizedHeatingCapacity || SELECT_CASE_var == FractionOfAutosizedCoolingCapacity ) {
Expand Down
1 change: 1 addition & 0 deletions tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc
Expand Up @@ -528,6 +528,7 @@ namespace EnergyPlus {
// #6028 child components not sizing correctly on air flow rate
// VS coils set SystemAirFlow to true and AirVolFlow to a value, all PTUnits set CoolingAirFlow and HeatingAirFlow, and CoolingAirVolFlow and HeatingAirVolFlow
EXPECT_TRUE( ZoneEqSizing( 1 ).SystemAirFlow );
EXPECT_EQ( ZoneEqSizing( 1 ).AirVolFlow, VariableSpeedCoils::VarSpeedCoil( 1 ).RatedAirVolFlowRate );
EXPECT_TRUE( ZoneEqSizing( 1 ).CoolingAirFlow );
EXPECT_TRUE( ZoneEqSizing( 1 ).HeatingAirFlow );
EXPECT_EQ( ZoneEqSizing( 1 ).CoolingAirVolFlow, PTUnit( 1 ).MaxCoolAirVolFlow );
Expand Down
42 changes: 42 additions & 0 deletions tst/EnergyPlus/unit/WaterCoils.unit.cc
Expand Up @@ -110,6 +110,7 @@ class WaterCoilsTest : public testing::Test
UnitarySysEqSizing.allocate( 1 );
OASysEqSizing.allocate( 1 );
SysSizInput.allocate( 1 );
ZoneSizingInput.allocate( 1 );
SysSizPeakDDNum.allocate( 1 );
SysSizPeakDDNum( 1 ).TimeStepAtSensCoolPk.allocate( 1 );
SysSizPeakDDNum( 1 ).TimeStepAtCoolFlowPk.allocate( 1 );
Expand All @@ -118,6 +119,7 @@ class WaterCoilsTest : public testing::Test
SysSizPeakDDNum( 1 ).CoolFlowPeakDD = 1;
SysSizPeakDDNum( 1 ).TotCoolPeakDD = 1;
FinalSysSizing.allocate( 1 );
FinalZoneSizing.allocate( 1 );
PrimaryAirSystem.allocate( 1 );
AirLoopControlInfo.allocate( 1 );
InitializePsychRoutines();
Expand Down Expand Up @@ -327,6 +329,46 @@ TEST_F( WaterCoilsTest, WaterCoolingCoilSizing )
EXPECT_DOUBLE_EQ( 0.0, DataDesInletAirHumRat );
EXPECT_DOUBLE_EQ( 0.0, DataDesInletWaterTemp );

// size zone water heating coil
CurZoneEqNum = 1;
CurSysNum = 0;
PlantSizData( 1 ).ExitTemp = 60.0;
DataSizing::NumZoneSizingInput = 1;
DataSizing::ZoneSizingRunDone = true;
ZoneSizingInput( 1 ).ZoneNum = CurZoneEqNum;
ZoneEqSizing( 1 ).SizingMethod.allocate( 25 );
ZoneEqSizing( 1 ).SizingMethod( DataHVACGlobals::SystemAirflowSizing ) = DataSizing::SupplyAirFlowRate;
FinalZoneSizing( 1 ).ZoneTempAtHeatPeak = 20.0;
FinalZoneSizing( 1 ).OutTempAtHeatPeak = -20.0;
FinalZoneSizing( 1 ).DesHeatCoilInTemp = -20.0; // simulates zone heating air flow rate <= zone OA flow rate
FinalZoneSizing( 1 ).DesHeatCoilInHumRat = 0.005;
FinalZoneSizing( 1 ).HeatDesTemp = 30.0;
FinalZoneSizing( 1 ).HeatDesHumRat = 0.005;
ZoneEqSizing( 1 ).OAVolFlow = 0.01;
ZoneEqSizing( 1 ).HeatingAirFlow = true;
ZoneEqSizing( 1 ).HeatingAirVolFlow = 0.1;
FinalZoneSizing( 1 ).DesHeatMassFlow = StdRhoAir * ZoneEqSizing( 1 ).HeatingAirVolFlow;
MySizeFlag.allocate( 1 );
MySizeFlag( CoilNum ) = true;
MyUAAndFlowCalcFlag.allocate( 1 );
MyUAAndFlowCalcFlag( CoilNum ) = true;

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

SizeWaterCoil( CoilNum );
EXPECT_NEAR( WaterCoil( CoilNum ).InletAirTemp, 16.0, 0.0001 ); // a mixture of zone air (20 C) and 10% OA (-20 C) = 16 C
EXPECT_NEAR( WaterCoil( CoilNum ).DesTotWaterCoilLoad, 1709.8638, 0.0001 );
EXPECT_NEAR( WaterCoil( CoilNum ).UACoil, 51.3278, 0.0001 );
EXPECT_NEAR( WaterCoil( CoilNum ).OutletAirTemp, 30.1302, 0.0001 ); // reasonable delta T above inlet air temp

}

TEST_F( WaterCoilsTest, TdbFnHRhPbTest )
Expand Down

1 comment on commit be9e39f

@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 (2560 of 2571 tests passed, 0 test warnings)

Messages:

  • 10 tests had: EIO diffs.
  • 6 tests had: ESO big diffs.
  • 10 tests had: Table big diffs.
  • 1 test had: ERR diffs.
  • 4 tests had: MTR big diffs.
  • 1 test had: MTR small diffs.

Failures:

EnergyPlusFixture Test Summary

  • Passed: 498
  • Failed: 1

regression Test Summary

  • Passed: 590
  • Failed: 10

Build Badge Test Badge

Please sign in to comment.