-
Notifications
You must be signed in to change notification settings - Fork 401
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
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.
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. |
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 have studied the code, built locally, compared to contribution in #10336. Looks good. I really like how the control logic is collected into new routines and reused between series PIU and parallel PIU. Going to be a great improvement.
I pulled the develop branch and resolved the errors regarding |
Thanks @dareumnam, I concur. Everything looks happy. Merging this. Thanks @lymereJ |
if (SolFla == -1) { | ||
ShowSevereError(state, "Iteration limit exceeded in calculating variable speed fan powered box cooling signal"); | ||
ShowContinueErrorTimeStamp(state, ""); | ||
ShowFatalError(state, format("Series PIU control failed for {}:{} ", thisPIU.UnitType, thisPIU.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.
This is not good practice to fatal out on an iteration (or even SolFla ==2) error. It's better to write an error message, guess at a result, and proceed.
VariableSpeed, | ||
0.5, | ||
Staged, | ||
, | ||
; |
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'm super late to the party, but this is unfortunate this doesn't have the field comments, as grepping for "Heating Control Type" in the testfiles/ folder returns nothing. I was trying to find an example file to test this is new feature.
ShowSevereError(state, format("Illegal Heating Control Type = {}", heating_control_type)); | ||
ShowContinueError(state, format("Occurs in {} = {}", cCurrentModuleObject, thisPIU.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.
Specifically, the thing I was trying to test was this error message.
The "Heating Control Type" field isn't marked required, because it's used only when "Fan Control Type" = VariableSpeed.
The error is less than informative in case you just forgot to fill it.
** Severe ** Illegal Heating Control Type =
** ~~~ ** Occurs in AirTerminal:SingleDuct:SeriesPIU:Reheat = SPACE1-1 VAV REHEAT
** Fatal ** GetPIUs: Errors found in getting input. Preceding conditions cause termination.
--- a/testfiles/5ZoneAirCooledConvCoef_VSFan.idf
+++ b/testfiles/5ZoneAirCooledConvCoef_VSFan.idf
@@ -2436,7 +2436,7 @@
0.0001, !- Convergence Tolerance
VariableSpeed,
0.5,
- Modulated,
+ ,
,
;
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 for pointing it out, I'll address it today.
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.