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
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,10 @@ \subsection{PlantEquipmentOperation:ComponentSetpoint}\label{plantequipmentopera

In addition to load range based control on the plant loop, sequencing the plant components based on the outlet temperature of individual equipment is allowed. This scheme is common to many present-day Energy Management Systems sequencing. In this scheme, the sequencing is done based on the order specified in the control object described below.

However, when sequencing a boiler and a cooling tower to control the heating and cooling set point temperatures of a condenser loop, it is recommended that the boiler and the cooling tower be placed in a parallel configuration. The series configuration of these two equipment, though possible to model them, may result in simultaneous heating and cooling operation when the boiler is ON and the cooling tower operates in free cooling mode, i.e.,
the cooling tower may provide free cooling that could over cool the water below the boiler heating setpoint temperature.


\subsubsection{Inputs}\label{inputs-12-011}

\paragraph{Field: Name}\label{field-name-6-014}
Expand Down
3 changes: 2 additions & 1 deletion src/EnergyPlus/CondenserLoopTowers.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5291,6 +5291,7 @@ namespace CondenserLoopTowers {
// SUBROUTINE LOCAL VARIABLE DECLARATIONS:
int SolFla; // Flag of solver
Array1D<Real64> Par(4); // Parameter array for regula falsi solver
Real64 const VSTowerMaxRangeTemp(22.2222); // set VS cooling tower range maximum value used for solver

// determine tower outlet water temperature
Par(1) = this->thisTowerNum; // Index to cooling tower
Expand All @@ -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!


Real64 _OutletWaterTemp = this->WaterTemp - Tr;

Expand Down