-
Notifications
You must be signed in to change notification settings - Fork 376
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
PTAC hot water heating coil undersized for ventilation load #6079
Changes from 5 commits
e7c1cca
7ded76a
fe0f88e
84b035d
a8b658f
a609699
7729a39
08e69b8
8642695
2e52533
0428801
1c17519
02faf2d
7c26f0d
be9e39f
a7c38d0
e3b346e
a00ab1a
a6e1d7e
780ff25
4a9fe52
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -584,8 +584,7 @@ namespace ReportSizingManager { | |
AutosizeDes = max( FinalZoneSizing( CurZoneEqNum ).DesCoolVolFlow, FinalZoneSizing( CurZoneEqNum ).DesHeatVolFlow ); | ||
} | ||
} | ||
} | ||
} | ||
}} | ||
} else if ( SizingType == CoolingAirflowSizing || SizingType == HeatingAirflowSizing ) { | ||
{ auto const SELECT_CASE_var( ZoneEqSizing( CurZoneEqNum ).SizingMethod( SizingType ) ); | ||
if ( ( SELECT_CASE_var == SupplyAirFlowRate ) || ( SELECT_CASE_var == None ) || ( SELECT_CASE_var == FlowPerFloorArea ) ) { | ||
|
@@ -722,10 +721,16 @@ 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; | ||
} | ||
CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These new sections get the parent air flow rate and then calculate the OA fraction so a "revised" variable can be calculated based on the zone temp/humrat and OA temp/humrat. |
||
CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp; | ||
CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat; | ||
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow; | ||
DesCoilLoad = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp ); | ||
if ( DesCoilLoad >= SmallLoad ) { | ||
Cp = GetSpecificHeatGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::HWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine ); | ||
|
@@ -1094,10 +1099,16 @@ 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 ) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The logic flow here seems a little suspect. I would expect an if - else-if block to be such that only one would be satisfied at a given time, but here both ZoneEqSizing( CurZoneEqNum ).SystemAirFlow and ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow are often true at the same time, like it is in the unit test now. So it will flow to the if and skip the else-if even though it is also satisfied. That may be what you want but it seems hard to follow. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I look at this as priority order when more than 1 is true. |
||
DesMassFlow = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir; | ||
} else { | ||
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow; | ||
} | ||
CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp; | ||
CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp; | ||
CoilOutHumRat = FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat; | ||
DesMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow; | ||
NominalCapacityDes = PsyCpAirFnWTdb( CoilOutHumRat, 0.5 * ( CoilInTemp + CoilOutTemp ) ) * DesMassFlow * ( CoilOutTemp - CoilInTemp ); | ||
} | ||
AutosizeDes = NominalCapacityDes * DataHeatSizeRatio; | ||
|
@@ -1123,7 +1134,13 @@ namespace ReportSizingManager { | |
rho = GetDensityGlycol( PlantLoop( DataWaterLoopNum ).FluidName, DataGlobals::CWInitConvTemp, PlantLoop( DataWaterLoopNum ).FluidIndex, CallingRoutine ); | ||
AutosizeDes = DataWaterFlowUsedForSizing * DataWaterCoilSizHeatDeltaT * Cp * rho; | ||
} 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; | ||
} | ||
CoilInTemp = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp; | ||
CoilInHumRat = FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInHumRat; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Doesn't CoilInHumRat also need to be calculated as a combination of OA and Zone conditions? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also, don't we need similar changes for cooling coil sizing? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I didn't think that humrat would severely affect heating coil sizing, but yes, it should use the same method (and I was just trying the get this to work and ran out of steam). These changes evolved to a point where I think now I understand why the sizing data (T and w) isn't applicable when a zone coil is used in a parent object operating at a higher flow rate. So I think this type of change would be pervasive throughout sizing. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same code 4 or 5 times... anytime coil inlet T needs to be calculated, the new method should be used. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Just seems like that could all happen in one block of code. It's fine for now, but at some future point, this could possibly be refactored to consolidate similar calcs. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. CoilInHumRat only needed to be changed here. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I think that's it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It looks like there's a place in HeatingCapacitySizing (non-water coils) that could use this change, but without a defect file I'm scared to change it. I'm going to add a warning there to see if any example files use that line of code. |
||
CoilOutTemp = FinalZoneSizing( CurZoneEqNum ).HeatDesTemp; | ||
|
@@ -1144,6 +1161,10 @@ namespace ReportSizingManager { | |
AutosizeDes = StdRhoAir * TermUnitSizing( CurZoneEqNum ).AirVolFlow * TermUnitSizing( CurZoneEqNum ).ReheatAirFlowMult; | ||
} else if ( ZoneEqFanCoil ) { | ||
AutosizeDes = StdRhoAir * FinalZoneSizing( CurZoneEqNum ).DesHeatVolFlow; | ||
} else if ( ZoneEqSizing( CurZoneEqNum ).SystemAirFlow ) { | ||
AutosizeDes = ZoneEqSizing( CurZoneEqNum ).AirVolFlow * StdRhoAir; | ||
} else if ( ZoneEqSizing( CurZoneEqNum ).HeatingAirFlow ) { | ||
AutosizeDes = ZoneEqSizing( CurZoneEqNum ).HeatingAirVolFlow * StdRhoAir; | ||
} else { | ||
AutosizeDes = FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow; | ||
} | ||
|
@@ -2138,6 +2159,7 @@ namespace ReportSizingManager { | |
} else { | ||
AutosizeUser = SizingResult; | ||
} | ||
|
||
if ( DataScalableSizingON ) { | ||
if ( SizingType == CoolingAirflowSizing || SizingType == HeatingAirflowSizing || SizingType == SystemAirflowSizing ) { | ||
{ auto const SELECT_CASE_var( ZoneEqSizing( CurZoneEqNum ).SizingMethod( SizingType ) ); | ||
|
@@ -2159,7 +2181,7 @@ namespace ReportSizingManager { | |
{ 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 "; | ||
if ( SizingResult == AutoSize ) ScalableSM = "Design Size "; // how can the SizingResult == AutoSize here ?? It's set a few lines up. | ||
} else if ( SELECT_CASE_var == CapacityPerFloorArea ) { | ||
ScalableSM = "User-Specified (scaled by capacity / area) "; | ||
} else if ( SELECT_CASE_var == FractionOfAutosizedHeatingCapacity || SELECT_CASE_var == FractionOfAutosizedCoolingCapacity ) { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The bools SystemAirFlow, CoolingAirFlow, and HeatingAirFlow are true whenever the values are calculated, but what is really needed is to know which one needs to be used. So instead of a test like "PTUnit( PTUnitNum ).MaxCoolAirVolFlow > 0.0," I would look for conditions like "PTUnit( PTUnitNum ).MaxCoolAirVolFlow > PTUnit( PTUnitNum ).MaxHeatAirVolFlow." I just find it a bit confusing that both CoolingAirFlow and HeatingAirFlow can be true at the same time. just a minor comment since this is already the way it is.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The PTAC and PTHP have inputs for cooling, heating and OA flow rates. So this was set up to allow cooling and heating flow rates to be sized differently (e.g., scalable sizing).