-
Notifications
You must be signed in to change notification settings - Fork 378
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
Variable speed fan powered induction boxes #10368
base: develop
Are you sure you want to change the base?
Conversation
@lymereJ @Myoldmopar it has been 28 days since this pull request was last updated. |
…o `heatingOperatingMode` to be consistent with cooling.
|
||
} else { | ||
// fill PlantSizFac from data structure | ||
// for (BranchNum = 1; | ||
// BranchNum <= PlantLoop(LoopNum).LoopSide(LoopSideLocation::Supply).TotalBranches; ++BranchNum) { | ||
// if (PlantLoop(LoopNum).LoopSide(LoopSideLocation::Supply).NodeNumIn == | ||
// PlantLoop(LoopNum).LoopSide(LoopSideLocation::Supply).Branch(BranchNum).NodeNumIn) { | ||
// break; | ||
// } | ||
// } |
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.
Unused.
${PROJECT_SOURCE_DIR}/input-output-reference/media/VSFanStagedHeatControlDiag.png | ||
${PROJECT_SOURCE_DIR}/input-output-reference/media/SeriesVSFanModulatedHeatControlDiag.png | ||
${PROJECT_SOURCE_DIR}/input-output-reference/media/vav_parallel_fpb_trane_staged.png | ||
${PROJECT_SOURCE_DIR}/input-output-reference/media/vav_parallel_fpb_trane_modulated.png |
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.
Add new figures/pictures.
@@ -1964,3 +1966,1069 @@ TEST_F(EnergyPlusFixture, PIU_InducedAir_Plenums) | |||
}); | |||
EXPECT_TRUE(compare_err_stream(expectedError, true)); | |||
} | |||
|
|||
TEST_F(EnergyPlusFixture, VSParallelPIUStagedHeat) |
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.
New tests were added for both the VS series and parallel PIUs for each stage of the staged and modulated heating operations. A test was also added for the VS cooling operation of the series PIU.
@@ -1496,7 +1376,8 @@ void SizePIU(EnergyPlusData &state, int const PIUNum) | |||
} | |||
|
|||
if (CurTermUnitSizingNum > 0) { | |||
TermUnitSizing(CurTermUnitSizingNum).MinFlowFrac = thisPIU.MinPriAirFlowFrac; | |||
TermUnitSizing(CurTermUnitSizingNum).MinPriFlowFrac = thisPIU.MinPriAirFlowFrac; |
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.
MinFlowFrac
is actually the minimum primary air flow fraction. This was changed throughout.
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.
I see that MinFlowFrac
(now MinPriAirFlowFrac
) is used in the autosizing routines as such:
EnergyPlus/src/EnergyPlus/Autosizing/HeatingCapacitySizing.cc
Lines 115 to 120 in db1a235
if (this->termUnitSizing(this->curTermUnitSizingNum).InducesPlenumAir) { | |
CoilInTemp = (this->termUnitFinalZoneSizing(this->curTermUnitSizingNum).DesHeatCoilInTempTU * MinPriFlowFrac) + | |
(this->termUnitFinalZoneSizing(this->curTermUnitSizingNum).ZoneRetTempAtHeatPeak * (1.0 - MinPriFlowFrac)); | |
} else { | |
CoilInTemp = (this->termUnitFinalZoneSizing(this->curTermUnitSizingNum).DesHeatCoilInTempTU * MinPriFlowFrac) + | |
(this->termUnitFinalZoneSizing(this->curTermUnitSizingNum).ZoneTempAtHeatPeak * (1.0 - MinPriFlowFrac)); |
MinPriAirFlowFrac
is the ratio of minimum primary air to maximum primary air. I think that perhaps for the sizing routine (as shown above) we would need to use the ratio of minimum primary air to maximum total air flow (primary and secondary air flow). This is probably beyond the scope of this PR.
The only diffs (AUD, RDD, Tables) are due to the new output variables and the new default values which are all expected. |
SetupOutputVariable(state, | ||
"Zone Air Terminal Total Air Mass Flow Rate", | ||
Constant::Units::kg_s, | ||
thisPIU.TotMassFlowRate, | ||
OutputProcessor::SOVTimeStepType::System, | ||
OutputProcessor::SOVStoreType::Average, | ||
state.dataPowerInductionUnits->PIU(PIUNum).Name); | ||
SetupOutputVariable(state, | ||
"Zone Air Terminal Primary Air Mass Flow Rate", | ||
Constant::Units::kg_s, | ||
thisPIU.PriMassFlowRate, | ||
OutputProcessor::SOVTimeStepType::System, | ||
OutputProcessor::SOVStoreType::Average, | ||
state.dataPowerInductionUnits->PIU(PIUNum).Name); | ||
SetupOutputVariable(state, | ||
"Zone Air Terminal Secondary Air Mass Flow Rate", | ||
Constant::Units::kg_s, | ||
thisPIU.SecMassFlowRate, | ||
OutputProcessor::SOVTimeStepType::System, | ||
OutputProcessor::SOVStoreType::Average, | ||
state.dataPowerInductionUnits->PIU(PIUNum).Name); | ||
SetupOutputVariable(state, | ||
"Zone Air Terminal Outlet Discharge Air Temperature", | ||
Constant::Units::C, | ||
thisPIU.DischargeAirTemp, | ||
OutputProcessor::SOVTimeStepType::System, | ||
OutputProcessor::SOVStoreType::Average, | ||
state.dataPowerInductionUnits->PIU(PIUNum).Name); | ||
SetupOutputVariable(state, | ||
"Zone Air Terminal Current Operation Control Stage", | ||
Constant::Units::unknown, | ||
thisPIU.CurOperationControlStage, | ||
OutputProcessor::SOVTimeStepType::System, | ||
OutputProcessor::SOVStoreType::Average, | ||
state.dataPowerInductionUnits->PIU(PIUNum).Name); |
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.
New output variables.
if (thisPIU.fanControlType == FanCntrlType::VariableSpeedFan) { | ||
// calculate fan speed ratio | ||
Real64 fanFlowRatio(1.0); | ||
if (thisPIU.MaxTotAirMassFlow > 0.0) { | ||
fanFlowRatio = (thisPIU.PriAirMassFlow + thisPIU.SecAirMassFlow) / thisPIU.MaxTotAirMassFlow; | ||
} | ||
state.dataHVACFan->fanObjs[thisPIU.Fan_Index]->simulate(state, fanFlowRatio, _); | ||
} else { | ||
state.dataHVACFan->fanObjs[thisPIU.Fan_Index]->simulate(state, _, _); | ||
} |
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.
This might seem redundant but it is setup this way to avoid regression diffs due to #10438.
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.
Since your math looks correct, which fan output report changed in the existing example files? FYI, I just fixed a fan sizing issue in PIU in a forked repo.
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.
Here's what I see in the EIO file for PlantLoopHeatPump_EIR_Large-Office-2-AWHP-DedHR-AuxBoiler-Pri-Sec-HW.idf
when running it from this branch but also from develop
:
Component Sizing Information, AirTerminal:SingleDuct:SeriesPIU:Reheat, CORE_BOTTOM PIUHEATING, Design Size Maximum Primary Air Flow Rate [m3/s], 4.18760
Component Sizing Information, Fan:SystemModel, CORE_BOTTOM PIUHEATING FAN, Design Size Design Maximum Air Flow Rate [m3/s], 4.51031
The file is intended to be run for Chicago but I'm running it for Golden, CO.
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.
If you look at SystemAirFlowSizing.cc you will see that the TU fan sizes using FinalZoneSizing data while the TU sizes using TermUnitFinalZoneSizing. So the TU needs to set a flag to use the correct data for sizing a fan. This is what I set over in PoweredInductionUnits.cc to get fan sizing correct for:
SeriesPIU:
state.dataSize->ZoneEqSizing(state.dataSize->CurZoneEqNum).SystemAirFlow = true;
state.dataSize->ZoneEqSizing(state.dataSize->CurZoneEqNum).AirVolFlow =
state.dataPowerInductionUnits->PIU(PIUNum).MaxTotAirVolFlow;
Parallel PIU:
state.dataSize->ZoneEqSizing(state.dataSize->CurZoneEqNum).SystemAirFlow = true;
state.dataSize->ZoneEqSizing(state.dataSize->CurZoneEqNum).AirVolFlow =
state.dataPowerInductionUnits->PIU(PIUNum).MaxSecAirVolFlow;
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.
Thanks, I'll take a look at it. Is that okay if I include these changes in a dedicated PR for #10438? There's already a lot of changes (in my opinion) in this PR and the CI comes out relatively clean, at least with a manageable number of (expected) diffs.
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.
Yes, OK to include this fan sizing change in #10438.
Configuration reminder: @lymereJ another good test for these changes to TU controls is to plot the air flow and outlet temperature versus the zone predicted load. Like these plots in the Eng. Ref. Probably want to also look at primary and secondary flow versus the expected performance. |
Because this requires lots of plots (which might need to get updated based on review comments), I thought that perhaps it would be best to host them somewhere else so I put them a separate repository, here (see the |
The only diffs are |
Those ipnyb plots look pretty good. The controls are in good shape. |
@lymereJ @Myoldmopar it has been 28 days since this pull request was last updated. |
@lymereJ so this got conflicted with some of the other refactors. The GitHub web interface is offering to let me resolve them, so they aren't very complex, but I'm not able to see exactly what changed. Could you take a pass and see what needs to be done? I am assuming it is purely the fan hierarchy refactor that @amirroth contributed. Let me know if you need assistance. |
Thanks for letting me know, I'll take a stab at it and try not to break things. |
@Myoldmopar - Conflicts resolved! |
@lymereJ @Myoldmopar it has been 28 days since this pull request was last updated. |
Pull request overview
Implement variable speed fan powered induction boxes. Follows the approach of #10336 and supersedes it.
Simulation results for the different controls are shown here (see the
.ipnyb
file).Pull Request Author
Add to this list or remove from it as applicable. This is a simple templated set of guidelines.
Reviewer
This will not be exhaustively relevant to every PR.