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
Addressed CoolingTower:VariableSpeed control problems #7702
Conversation
Figure below shows variable speed (VS) cooling tower entering and leaving water temperature, cooling tower entering air wetbulb temperature and tower range (Tr) of develop code. The tower water outlet node setpoint temperature is 30C. The VS cooling tower is autosized and uses a sizing factor of 2.0. However, in several occasions in January and August months the cooling tower leaving temperature exceeds the setpoint temperature of 30C by more than10 deltaC. Observations:
|
Compare the tower outlet water temperature to the tower entering air wet-bulb temperature. The outlet water temperature cannot go below the tower entering air wet-bulb temperature. |
See the updated plot. Now I uploaded the plots that shows the entering water and air wetbulb temperature. |
@rraustad This problem exits even if the tower entering air wetbulb temperature is well below the tower outlet setpoint temperature. |
OK, something looks wrong. Add tower air flow and fan power to see when the tower is active. |
Figure below of this fix demonstrates that the VS cooling tower always meets the tower leaving water setpoint temperature. Summary of this fix:
|
Yes, this looks better. Why is the tower outlet water temperature (blue line) always below the tower water inlet temperature (yellow line) in winter? Isn't the tower off? |
@rraustad A boiler and the cooling tower are placed in series on the supply branch. The boiler is designed to maintain supply temperature of 20C. I suspect, may be the cooling tower is running in free cooling mode (with the fan off). |
If the tower has water flow and no fan power during this time then that would explain it. |
Cooling towers do have bypass valves. I wonder if this would be a feature users would need for more accurate modeling? |
@mjwitte @rraustad @Myoldmopar One of the two problems Mike indicated in issue #7464 was "putting out lots of warnings, most of which say they are expected or may not affect performance". One way to address these warning issues is suppress them unless the user requires them by using the DisplayExtraWarnings option. These warning error messages are about these four variables:
User has no control over these variables. Therefore, I suggest that we suppress them using the DisplayExtraWarnings option. What do you think? Any other alternative approach? |
@Nigusse I'm ok with using DisplayExtraWarnings for these. Or maybe warn once and use recurring warnings? The user does have access to these inputs if using one of the userdefined performance options, but not with the built-in options. If I'm following correctly, these warnings indicate that the tower is operating outside the stated validity range of the coefficients? Which is something we don't do with most components. So, DisaplyExtraWarnings and make it recurring as well so it doesn't generate a huge err file. |
@Nigusse So, what did you conclude about the tower overcooling? FluidBypass is a capacity control option for the singlespeed and twospeed towers. So, I guess it's not an option for this tower. But this tower does have Cell options, so in theory if you take the defect file and increase the number of cells with MinimalCell control, it should never go below setpoint. |
@mjwitte currently all four variables have recurring warning message but Water flow rate ratios and *Inlet air wet-bulb temperature report five instances before switching to recurring warning reporting mode. I can change only the two variables to switch to recurring warning reporting mode after allowing to report only once, instead of 5 times. You are correct, these warning indicate that the tower is operating outside the stated validity range. |
5 instances is OK, I didn't realize they were already set up that way. |
@mjwitte the tower did not go below it's owns set point, instead it is going below the boiler set point because of the free cooling as it does not have the bypass option. Also in this defect file the boiler is placed before the tower in series on the same branch. I do not know if increasing the cell number makes any difference but I did not check, I will run the defect file with higher number of cells and will let you know my findings. |
I'm confused, the tower is in series before the boiler and the tower has a lower setpoint than the boiler? Seems like the two should never fight with each other. Does the tower not have a way to simply pass through the water if it's not being given a load? |
Yes, the boiler and the tower are in series. The boiler set point is 20C and the cooling tower set point is 30C. The boiler controls the loop lower temperature limit and the cooling tower controls the loops upper temperature limit. This loop is connected to hundreds of water source heat pumps. |
I also verified that the cooling tower outlet temperature drops slightly below the set point of 20C when the boiler is ON because of the free cooling provided by the tower. I set the Fraction of Tower Capacity in Free Convection Regime input field to zero to confirm this. See below the updated plot: |
Also increasing the number cells from 1 to 4 did not make any difference on the impact of free cooling when the boiler is ON. |
@Nigusse Your plots aren't displaying here for some reason. If the cooling tower set point is 30C, then it shouldn't be putting out water at 20C. It seems wrong to me that it would be doing any free cooling here. What would the other cooling towers do in this instance? Perhaps the plant should be set up so the tower and boiler are in parallel so there would only be flow in one or the other but never both? |
@mjwitte I agree it is preferable to have a parallel configuration of these two equipment. Here we are dealing with a defect file that has boiler and cooling tower in series. Thus the boiler heats the water that goes through it and maintains loop temp at 20C, then that water has to go through the tower and the free cooling operation is unavoidable for this configuration. But E+ allows such configuration. What we can do is to discourage users from modeling such configuration with the VS cooling tower, I think. |
My browsers think github image pages are insecure so I'm not seeing any at the moment. Doesn't matter really. This tower needs a bypass control option (new issue). And the docs for the current tower need to explain this behavior if they don't already (I/O Ref). I'll stop harping on this. |
Diffs are expected in this branch. The defect file has demonstrated the VS cooling tower fix does better control of meeting the tower cooling setpoint. The tower fan runs at part load, or even cycle to meet the required load and hence the tower fan electric consumption can change significantly. Examining the ASHRAE9012016_Hospital_Denver test suite idf shows big meter absolute diffs but the percent (relative) diffs are small (in the order of 0.02% and -0.01% for annual metered facility electric and gas energy consumption, respectively). |
@@ -5299,7 +5300,7 @@ namespace CondenserLoopTowers { | |||
Par(4) = Twb; // inlet air wet-bulb temperature [C] | |||
Real64 Tr; // range temperature which results in an energy balance | |||
auto f = std::bind(&CoolingTower::residualTr, this, std::placeholders::_1, std::placeholders::_2); | |||
General::SolveRoot(Acc, MaxIte, SolFla, Tr, f, 0.001, towers(this->VSTower).MaxRangeTemp, Par); | |||
General::SolveRoot(Acc, MaxIte, SolFla, Tr, f, 0.001, VSTowerMaxRangeTemp, Par); |
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.
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, the 22.2222 is used for all variable speed cooling towers. I can set it but the default value is used elsewhere to check if the actual tower range is outside the default range. I am concerned to change any curve values that are related the data used to generate the coefficients. And one reason that I chose 22.2222 is that it is the same as the VS York CT so that it does not affect the York Model; otherwise, I experimented with a value higher than that. If you still insist, I will make the changes per your suggestion.
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.
@mjwitte Below is alternative suggestion for your consideration. First, this change impacts the toolcool VS cooling tower model only; second, this model will be able to check and throw warning if the requested tower range is outside the VS cooltool existing (default) tower range maximum limit.
VSTowerMaxRangeTemp = towers(this->VSTower).MaxRangeTemp;
if (this->TowerModelType == CoolToolsXFModel) {
VSTowerMaxRangeTemp = 22.2222; // this relaxes the solution domain
}
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.
Nah, let's leave it like it is. Please push up the doc changes and we'll call this complete.
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.
Done. Thanks!
doc/input-output-reference/src/overview/group-plant-condenser-control.tex
Outdated
Show resolved
Hide resolved
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.
Tested with the defect file before and after (with Austin TX weather).
The tower still generates an excessive amount of warnings, but at least it's putting out the requested water temperature now.
@@ -5299,7 +5300,7 @@ namespace CondenserLoopTowers { | |||
Par(4) = Twb; // inlet air wet-bulb temperature [C] | |||
Real64 Tr; // range temperature which results in an energy balance | |||
auto f = std::bind(&CoolingTower::residualTr, this, std::placeholders::_1, std::placeholders::_2); | |||
General::SolveRoot(Acc, MaxIte, SolFla, Tr, f, 0.001, towers(this->VSTower).MaxRangeTemp, Par); | |||
General::SolveRoot(Acc, MaxIte, SolFla, Tr, f, 0.001, VSTowerMaxRangeTemp, Par); |
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.
Nah, let's leave it like it is. Please push up the doc changes and we'll call this complete.
Pull request overview
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.
If feature, test running new feature, try creative ways to break itCheck any new function arguments for performance impactsVerify IDF naming conventions and styles, memos and notes and defaultsf new idf included, locally check the err file and other outputs