Skip to content
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

Merged
merged 14 commits into from Mar 6, 2020

Conversation

Nigusse
Copy link
Contributor

@Nigusse Nigusse commented Jan 22, 2020

Pull request overview

  • Fixes CoolingTower:VariableSpeed control problems #7464
  • This fix increased the upper bound of the solution domain of variable speed cooling tower range from 11.1 to 22.22 deltaC (the same as the YorkCalc model). Otherwise, the root solver will not be able to find a solution if the maximum cooling tower range is limited to 11.1. Increasing the maximum value does not mean that the actual tower range determined by the solver will be that high. In fact for this defect file, the actual range determined for the annual simulation was always below 10.0 deltaC. Some of the 12 test suite files which has variable speed cooling tower could show diffs.

Pull Request Author

Add to this list or remove from it as applicable. This is a simple templated set of guidelines.

  • Title of PR should be user-synopsis style (clearly understandable in a standalone changelog context)
  • Pull requests that impact EnergyPlus code must also include unit tests to cover enhancement or defect repair
  • Author should provide a "walkthrough" of relevant code changes using a GitHub code review comment process
  • If any diffs are expected, author must demonstrate they are justified using plots and descriptions
  • If changes fix a defect, the fix should be demonstrated in plots and descriptions
  • If any defect files are updated to a more recent version, upload new versions here or on DevSupport
  • If adding/removing any LaTeX docs or figures, update that document's CMakeLists file dependencies

Reviewer

This will not be exhaustively relevant to every PR.

  • Perform a Code Review on GitHub
  • If branch is behind develop, merge develop and build locally to check for side effects of the merge
  • If defect, verify by running develop branch and reproducing defect, then running PR and reproducing fix
  • If feature, test running new feature, try creative ways to break it
  • CI status: all green or justified
  • Check that performance is not impacted (CI Linux results include performance check)
  • Run Unit Test(s) locally
  • Check any new function arguments for performance impacts
  • Verify IDF naming conventions and styles, memos and notes and defaults
  • If new idf included, locally check the err file and other outputs

@Nigusse Nigusse added the Defect Includes code to repair a defect in EnergyPlus label Jan 22, 2020
@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 23, 2020

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:

  • sometimes the cooling tower is not providing enough cooling even if the tower fan is running at full flow (as shown below) and the cooling tower leaving water temperature is much higher than the setpoint (30C)
  • the tower entering water temperature is building up for days. This happens during heating and cooling seasons
  • note that tower range (Tr)[detlaC] maximum is capped at 11.11 (VS tower default curve maximum value)

Develop

@rraustad
Copy link
Contributor

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.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 23, 2020

See the updated plot. Now I uploaded the plots that shows the entering water and air wetbulb temperature.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 23, 2020

@rraustad This problem exits even if the tower entering air wetbulb temperature is well below the tower outlet setpoint temperature.

@rraustad
Copy link
Contributor

OK, something looks wrong. Add tower air flow and fan power to see when the tower is active.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 23, 2020

Figure below of this fix demonstrates that the VS cooling tower always meets the tower leaving water setpoint temperature. Summary of this fix:

  • now the cooling tower provides enough cooling all the time (as shown in figure below), as the result the cooling tower leaving water temperature is always at or below the desired setpoint of 30C. This is true for annual run as well.
  • the tower entering water temperature is modest, i.e., not as high as the defect code simply because the cooling tower provdes the required cooling.
  • note that cooling tower range (Tr) never reaches the default performance curve maximum value of 11.11 detlaC. Annual run check also shows that the actual tower range (Tr) was always less than 7.3 [detlaC] for this defect file.

Branch#7464

@rraustad
Copy link
Contributor

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?

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 23, 2020

See below the cooling tower fan electric power, fan part load ratio and air flow ratio for develop and this branch (the fix). Note that develop shows that the cooling tower does not meet the setpoint even if the fan is running at full flow.

Branch_VSCTFan

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 23, 2020

@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).

@rraustad
Copy link
Contributor

If the tower has water flow and no fan power during this time then that would explain it.

@rraustad
Copy link
Contributor

Cooling towers do have bypass valves. I wonder if this would be a feature users would need for more accurate modeling?

@Myoldmopar Myoldmopar added this to the EnergyPlus 9.3.0 milestone Jan 23, 2020
@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 23, 2020

@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:

  • Inlet air wet-bulb temperature (checked against towers.MinInletAirWBTemp and towers.MaxInletAirWBTemp)
  • Tower Approach temperatures (checked against towers.MinApproachTemp and towers.MaxApproachTemp)
  • Tower range temperature (checked against towers.MinRangeTemp and towers.MaxRangeTemp)
  • Water flow rate ratio (checked against towers.MinWaterFlowRatio and towers.MaxWaterFlowRatio)

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?

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

@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.

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

@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.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 24, 2020

@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.

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

5 instances is OK, I didn't realize they were already set up that way.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 24, 2020

@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.

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

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?

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 24, 2020

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.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 24, 2020

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:

Branch#7464NoFreeCooling

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 24, 2020

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.

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

@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?

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 24, 2020

@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.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 24, 2020

Uploaded the plot again:

Branch#7464NoFreeCooling

@mjwitte
Copy link
Contributor

mjwitte commented Jan 24, 2020

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.

@Nigusse
Copy link
Contributor Author

Nigusse commented Jan 27, 2020

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).

@nrel-bot-2b
Copy link

@Nigusse @lgentile it has been 28 days since this pull request was last updated.

@@ -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);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Nigusse Is this overriding the range for all tower types?
Rather than overriding this here, why not set towers(this->VSTower).MaxRangeTemp up in GetTowerInput, here.

Copy link
Contributor Author

@Nigusse Nigusse Mar 5, 2020

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.

Copy link
Contributor Author

@Nigusse Nigusse Mar 6, 2020

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
        }

Copy link
Contributor

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.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Thanks!

Copy link
Contributor

@mjwitte mjwitte left a 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);
Copy link
Contributor

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Defect Includes code to repair a defect in EnergyPlus
Projects
None yet
Development

Successfully merging this pull request may close these issues.

CoolingTower:VariableSpeed control problems
9 participants