diff --git a/src/EnergyPlus/CondenserLoopTowers.cc b/src/EnergyPlus/CondenserLoopTowers.cc index 6eb94bfbbc2..00b6d8eeb10 100644 --- a/src/EnergyPlus/CondenserLoopTowers.cc +++ b/src/EnergyPlus/CondenserLoopTowers.cc @@ -351,24 +351,24 @@ namespace CondenserLoopTowers { tower.DesInletAirDBTemp = 35.0; tower.TowerInletCondsAutoSize = true; } - tower.DesInletAirWBTemp = NumArray(14); - if (tower.DesInletAirWBTemp == 0) { - tower.DesInletAirWBTemp = 25.6; + tower.DesignInletWB = NumArray(14); + if (tower.DesignInletWB == 0) { + tower.DesignInletWB = 25.6; tower.TowerInletCondsAutoSize = true; } - tower.DesApproach = NumArray(15); - if (tower.DesApproach == DataSizing::AutoSize || tower.DesApproach == 0) { - tower.DesApproach = 3.9; + tower.DesignApproach = NumArray(15); + if (tower.DesignApproach == DataSizing::AutoSize || tower.DesignApproach == 0) { + tower.DesignApproach = 3.9; tower.TowerInletCondsAutoSize = true; } - tower.DesRange = NumArray(16); - if (tower.DesRange == DataSizing::AutoSize || tower.DesRange == 0) { - tower.DesRange = 5.5; + tower.DesignRange = NumArray(16); + if (tower.DesignRange == DataSizing::AutoSize || tower.DesignRange == 0) { + tower.DesignRange = 5.5; tower.TowerInletCondsAutoSize = true; } // set tower design water outlet and inlet temperatures - tower.DesOutletWaterTemp = tower.DesInletAirWBTemp + tower.DesApproach; - tower.DesInletWaterTemp = tower.DesOutletWaterTemp + tower.DesRange; + tower.DesOutletWaterTemp = tower.DesignInletWB + tower.DesignApproach; + tower.DesInletWaterTemp = tower.DesOutletWaterTemp + tower.DesignRange; // Basin heater power as a function of temperature must be greater than or equal to 0 tower.BasinHeaterPowerFTempDiff = NumArray(17); if (NumArray(17) < 0.0) { @@ -662,24 +662,24 @@ namespace CondenserLoopTowers { tower.DesInletAirDBTemp = 35.0; tower.TowerInletCondsAutoSize = true; } - tower.DesInletAirWBTemp = NumArray(22); - if (tower.DesInletAirWBTemp == 0) { - tower.DesInletAirWBTemp = 25.6; + tower.DesignInletWB = NumArray(22); + if (tower.DesignInletWB == 0) { + tower.DesignInletWB = 25.6; tower.TowerInletCondsAutoSize = true; } - tower.DesApproach = NumArray(23); - if (tower.DesApproach == DataSizing::AutoSize || tower.DesApproach == 0) { - tower.DesApproach = 3.9; + tower.DesignApproach = NumArray(23); + if (tower.DesignApproach == DataSizing::AutoSize || tower.DesignApproach == 0) { + tower.DesignApproach = 3.9; tower.TowerInletCondsAutoSize = true; } - tower.DesRange = NumArray(24); - if (tower.DesRange == DataSizing::AutoSize || tower.DesRange == 0) { - tower.DesRange = 5.5; + tower.DesignRange = NumArray(24); + if (tower.DesignRange == DataSizing::AutoSize || tower.DesignRange == 0) { + tower.DesignRange = 5.5; tower.TowerInletCondsAutoSize = true; } // set tower design water outlet and inlet temperatures - tower.DesOutletWaterTemp = tower.DesInletAirWBTemp + tower.DesApproach; - tower.DesInletWaterTemp = tower.DesOutletWaterTemp + tower.DesRange; + tower.DesOutletWaterTemp = tower.DesignInletWB + tower.DesignApproach; + tower.DesInletWaterTemp = tower.DesOutletWaterTemp + tower.DesignRange; // Basin heater power as a function of temperature must be greater than or equal to 0 tower.BasinHeaterPowerFTempDiff = NumArray(25); if (NumArray(25) < 0.0) { @@ -1254,6 +1254,10 @@ namespace CondenserLoopTowers { ErrorsFound = true; } + // set tower design water outlet and inlet temperatures + tower.DesOutletWaterTemp = tower.DesignInletWB + tower.DesignApproach; + tower.DesInletWaterTemp = tower.DesOutletWaterTemp + tower.DesignRange; + tower.DesignWaterFlowRate = NumArray(4); if (tower.DesignWaterFlowRate == DataSizing::AutoSize) { tower.DesignWaterFlowRateWasAutoSized = true; @@ -1521,24 +1525,24 @@ namespace CondenserLoopTowers { tower.DesInletAirDBTemp = 35.0; tower.TowerInletCondsAutoSize = true; } - tower.DesInletAirWBTemp = NumArray(18); - if (tower.DesInletAirWBTemp == 0) { - tower.DesInletAirWBTemp = 25.6; + tower.DesignInletWB = NumArray(18); + if (tower.DesignInletWB == 0) { + tower.DesignInletWB = 25.6; tower.TowerInletCondsAutoSize = true; } - tower.DesApproach = NumArray(19); - if (tower.DesApproach == DataSizing::AutoSize || tower.DesApproach == 0) { - tower.DesApproach = 3.9; + tower.DesignApproach = NumArray(19); + if (tower.DesignApproach == DataSizing::AutoSize || tower.DesignApproach == 0) { + tower.DesignApproach = 3.9; tower.TowerInletCondsAutoSize = true; } - tower.DesRange = NumArray(20); - if (tower.DesRange == DataSizing::AutoSize || tower.DesRange == 0) { - tower.DesRange = 5.5; + tower.DesignRange = NumArray(20); + if (tower.DesignRange == DataSizing::AutoSize || tower.DesignRange == 0) { + tower.DesignRange = 5.5; tower.TowerInletCondsAutoSize = true; } // set tower design water outlet and inlet temperatures - tower.DesOutletWaterTemp = tower.DesInletAirWBTemp + tower.DesApproach; - tower.DesInletWaterTemp = tower.DesOutletWaterTemp + tower.DesRange; + tower.DesOutletWaterTemp = tower.DesignInletWB + tower.DesignApproach; + tower.DesInletWaterTemp = tower.DesOutletWaterTemp + tower.DesignRange; // Basin heater power as a function of temperature must be greater than or equal to 0 tower.BasinHeaterPowerFTempDiff = NumArray(21); if (NumArray(21) < 0.0) { @@ -2266,7 +2270,7 @@ namespace CondenserLoopTowers { Real64 DesTowerExitWaterTemp; // design tower exit water temperature Real64 DesTowerWaterDeltaT; // design tower temperature range Real64 DesTowerApproachFromPlant; // design tower approach temperature from plant sizing object - Real64 TolTemp(0.04); // DeltaT and DesApproach diffs tolerance between plant sizing data and user input in cooling tower + Real64 TolTemp(0.04); // DeltaT and DesignApproach diffs tolerance between plant sizing data and user input in cooling tower // for warning message reporting purpose only Real64 tmpDesignWaterFlowRate = this->DesignWaterFlowRate; @@ -2299,7 +2303,7 @@ namespace CondenserLoopTowers { // use tower sizing data DesTowerExitWaterTemp = this->DesOutletWaterTemp; DesTowerInletWaterTemp = this->DesInletWaterTemp; - DesTowerWaterDeltaT = this->DesRange; + DesTowerWaterDeltaT = this->DesignRange; if (PltSizCondNum > 0) { // check the tower range against the plant sizing data if (std::abs(DesTowerWaterDeltaT - PlantSizData(PltSizCondNum).DeltaT) > TolTemp) { @@ -2311,14 +2315,14 @@ namespace CondenserLoopTowers { ShowContinueError(state, format("is inconsistent with Design Loop Delta Temperature specified in Sizing:Plant object = {}.", PlantSizData(PltSizCondNum).PlantLoopName)); - ShowContinueError(state, format("..The Design Range Temperature specified in tower is = {:.2T}", this->DesRange)); + ShowContinueError(state, format("..The Design Range Temperature specified in tower is = {:.2T}", this->DesignRange)); ShowContinueError(state, format("..The Design Loop Delta Temperature specified in plant sizing data is = {:.2T}", PlantSizData(PltSizCondNum).DeltaT)); } // check if the tower approach is different from plant sizing data - DesTowerApproachFromPlant = PlantSizData(PltSizCondNum).ExitTemp - this->DesInletAirWBTemp; - if (std::abs(DesTowerApproachFromPlant - this->DesApproach) > TolTemp) { + DesTowerApproachFromPlant = PlantSizData(PltSizCondNum).ExitTemp - this->DesignInletWB; + if (std::abs(DesTowerApproachFromPlant - this->DesignApproach) > TolTemp) { ShowWarningError(state, format("Error when autosizing the UA for cooling tower = {}. Tower Design Approach Temperature is " "inconsistent with Approach from Plant Sizing Data.", @@ -2329,7 +2333,7 @@ namespace CondenserLoopTowers { ShowContinueError(state, format("is inconsistent with Design Approach Temperature specified in tower = {}.", this->Name)); ShowContinueError(state, format("..The Design Approach Temperature from inputs specified is = {:.2T}", DesTowerApproachFromPlant)); - ShowContinueError(state, format("..The Design Approach Temperature specified in tower is = {:.2T}", this->DesApproach)); + ShowContinueError(state, format("..The Design Approach Temperature specified in tower is = {:.2T}", this->DesignApproach)); } } } @@ -2546,23 +2550,22 @@ namespace CondenserLoopTowers { DesTowerLoad = rho * Cp * tmpDesignWaterFlowRate * DesTowerWaterDeltaT; // This conditional statement is to trap when the user specified condenser/tower water design setpoint // temperature is less than design inlet air wet bulb temperature - if (PlantSizData(PltSizCondNum).ExitTemp <= this->DesInletAirWBTemp) { + if (PlantSizData(PltSizCondNum).ExitTemp <= this->DesignInletWB) { ShowSevereError(state, format("Error when autosizing the UA value for cooling tower = {}. Design Loop Exit Temperature must be " "greater than {:.2T} C when autosizing the tower UA.", this->Name, - this->DesInletAirWBTemp)); + this->DesignInletWB)); ShowContinueError(state, format("The Design Loop Exit Temperature specified in Sizing:Plant object = {} ({:.2T} C)", PlantSizData(PltSizCondNum).PlantLoopName, PlantSizData(PltSizCondNum).ExitTemp)); ShowContinueError( - state, - format("is less than or equal to the design inlet air wet-bulb temperature of {:.2T} C.", this->DesInletAirWBTemp)); + state, format("is less than or equal to the design inlet air wet-bulb temperature of {:.2T} C.", this->DesignInletWB)); ShowContinueError(state, format("If using HVACTemplate:Plant:ChilledWaterLoop, then check that input field Condenser Water Design " "Setpoint must be > {:.2T} C if autosizing the cooling tower.", - this->DesInletAirWBTemp)); + this->DesignInletWB)); ShowFatalError(state, format("Autosizing of cooling tower fails for tower = {}.", this->Name)); } @@ -2570,8 +2573,8 @@ namespace CondenserLoopTowers { UA0 = 0.0001 * DesTowerLoad; // Assume deltaT = 10000K (limit) UA1 = DesTowerLoad; // Assume deltaT = 1K this->WaterTemp = DesTowerInletWaterTemp; - this->AirTemp = this->DesInletAirDBTemp; // 35.0; - this->AirWetBulb = this->DesInletAirWBTemp; // 25.6; + this->AirTemp = this->DesInletAirDBTemp; // 35.0; + this->AirWetBulb = this->DesignInletWB; // 25.6; this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f1 = [&state, this, DesTowerLoad, solveDesignWaterMassFlow, tmpHighSpeedAirFlowRate, Cp](Real64 UA) { @@ -2641,21 +2644,20 @@ namespace CondenserLoopTowers { // temperature is less than design inlet air wet bulb temperature // Note JM 2018-11-22 // * If actually user-specified: - // this->DesOutletWaterTemp = this->DesInletAirWBTemp - // + this->DesApproach; + // this->DesOutletWaterTemp = this->DesignInletWB + // + this->DesignApproach; // DesTowerExitWaterTemp = this->DesOutletWaterTemp; // => This basically means that approach is negative, which is impossible (must be > 0 per IDD) // * If not, hardcoded above to 21C - if (DesTowerExitWaterTemp <= this->DesInletAirWBTemp) { + if (DesTowerExitWaterTemp <= this->DesignInletWB) { ShowSevereError(state, format("Error when autosizing the UA value for cooling tower = {}. Design Tower Exit Temperature must be " "greater than {:.2T} C when autosizing the tower UA.", this->Name, - this->DesInletAirWBTemp)); + this->DesignInletWB)); ShowContinueError(state, format("The User-specified Design Loop Exit Temperature={:.2T}", DesTowerExitWaterTemp)); ShowContinueError( - state, - format("is less than or equal to the design inlet air wet-bulb temperature of {:.2T} C.", this->DesInletAirWBTemp)); + state, format("is less than or equal to the design inlet air wet-bulb temperature of {:.2T} C.", this->DesignInletWB)); if (this->TowerInletCondsAutoSize) { ShowContinueError(state, @@ -2667,13 +2669,13 @@ namespace CondenserLoopTowers { ShowContinueError(state, format("The Design Loop Exit Temperature is the sum of the design air inlet wet-bulb temperature= " "{:.2T} C plus the cooling tower design approach temperature = {:.2T}C.", - this->DesInletAirWBTemp, - this->DesApproach)); + this->DesignInletWB, + this->DesignApproach)); } ShowContinueError(state, format("If using HVACTemplate:Plant:ChilledWaterLoop, then check that input field Condenser Water Design " "Setpoint must be > {:.2T} C if autosizing the cooling tower.", - this->DesInletAirWBTemp)); + this->DesignInletWB)); ShowFatalError(state, format("Autosizing of cooling tower fails for tower = {}.", this->Name)); } @@ -2681,8 +2683,8 @@ namespace CondenserLoopTowers { UA0 = 0.0001 * DesTowerLoad; // Assume deltaT = 10000K (limit) UA1 = DesTowerLoad; // Assume deltaT = 1K this->WaterTemp = DesTowerInletWaterTemp; - this->AirTemp = this->DesInletAirDBTemp; // 35.0; - this->AirWetBulb = this->DesInletAirWBTemp; // 25.6; + this->AirTemp = this->DesInletAirDBTemp; // 35.0; + this->AirWetBulb = this->DesignInletWB; // 25.6; this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f = [&state, this, DesTowerLoad, solveWaterMassFlow, tmpHighSpeedAirFlowRate, Cp](Real64 UA) { @@ -2761,7 +2763,7 @@ namespace CondenserLoopTowers { UA1 = DesTowerLoad; // Assume deltaT = 1K this->WaterTemp = this->DesInletWaterTemp; // 35.0; // 95F design inlet water temperature this->AirTemp = this->DesInletAirDBTemp; // 95F design inlet air dry-bulb temp - this->AirWetBulb = this->DesInletAirWBTemp; // 78F design inlet air wet-bulb temp + this->AirWetBulb = this->DesignInletWB; // 78F design inlet air wet-bulb temp this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f = [&state, this, DesTowerLoad, solveWaterFlowRate, tmpHighSpeedAirFlowRate, Cp](Real64 UA) { @@ -2941,7 +2943,7 @@ namespace CondenserLoopTowers { UA1 = DesTowerLoad; // Assume deltaT = 1K this->WaterTemp = this->DesInletWaterTemp; // 35.0; // 95F design inlet water temperature this->AirTemp = this->DesInletAirDBTemp; // 35.0; // 95F design inlet air dry-bulb temp - this->AirWetBulb = this->DesInletAirWBTemp; // 25.6; // 78F design inlet air wet-bulb temp + this->AirWetBulb = this->DesignInletWB; // 25.6; // 78F design inlet air wet-bulb temp this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f = [&state, this, DesTowerLoad, solveWaterFlow, tmpLowSpeedAirFlowRate, Cp](Real64 UA) { @@ -3038,7 +3040,7 @@ namespace CondenserLoopTowers { UA1 = DesTowerLoad; // Assume deltaT = 1K this->WaterTemp = this->DesInletWaterTemp; // 35.0; // 95F design inlet water temperature this->AirTemp = this->DesInletAirDBTemp; // 35.0; // 95F design inlet air dry-bulb temp - this->AirWetBulb = this->DesInletAirWBTemp; // 25.6; // 78F design inlet air wet-bulb temp + this->AirWetBulb = this->DesignInletWB; // 25.6; // 78F design inlet air wet-bulb temp this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f = [&state, this, DesTowerLoad, solveWaterFlow, Cp](Real64 UA) { @@ -3249,9 +3251,9 @@ namespace CondenserLoopTowers { OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchCTFCApproach, this->Name, this->DesignApproach); OutputReportPredefined::PreDefTableEntry( state, state.dataOutRptPredefined->pdchCTFCDesFanPwr, this->Name, this->HighSpeedFanPower); // equivalent to Design Fan Power? - OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchCTFCDesInletAirWBT, this->Name, this->DesInletAirWBTemp); + OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchCTFCDesInletAirWBT, this->Name, this->DesignInletWB); OutputReportPredefined::PreDefTableEntry( - state, state.dataOutRptPredefined->pdchCTFCDesWaterFlowRate, this->Name, this->DesignWaterFlowRate); + state, state.dataOutRptPredefined->pdchCTFCDesWaterFlowRate, this->Name, this->DesignWaterFlowRate, 6); OutputReportPredefined::PreDefTableEntry(state, state.dataOutRptPredefined->pdchCTFCLevWaterSPTemp, this->Name, this->DesOutletWaterTemp); } @@ -3337,7 +3339,7 @@ namespace CondenserLoopTowers { Real64 DesTowerExitWaterTemp; // design tower exit water temperature Real64 DesTowerWaterDeltaT; // design tower temperature range Real64 DesTowerApproachFromPlant; // design tower approach temperature from plant sizing object - Real64 TolTemp(0.04); // DeltaT and DesApproach diffs tolerance between plant sizing data and user input in cooling tower + Real64 TolTemp(0.04); // DeltaT and DesignApproach diffs tolerance between plant sizing data and user input in cooling tower // for warning message reporting purpose only // Find the appropriate Plant Sizing object @@ -3348,7 +3350,7 @@ namespace CondenserLoopTowers { Real64 tmpTowerFreeConvNomCap = this->TowerFreeConvNomCap; Real64 tmpDesignAirFlowRate = this->HighSpeedAirFlowRate; Real64 tmpFreeConvAirFlowRate = this->FreeConvAirFlowRate; - Real64 DesTowerInletAirWBTemp = this->DesInletAirWBTemp; + Real64 DesTowerInletAirWBTemp = this->DesignInletWB; Real64 DesTowerInletAirDBTemp = this->DesInletAirDBTemp; auto const &PlantSizData(state.dataSize->PlantSizData); @@ -3363,13 +3365,13 @@ namespace CondenserLoopTowers { // set default values to replace hard wired input assumptions DesTowerExitWaterTemp = this->DesOutletWaterTemp; DesTowerInletWaterTemp = this->DesInletWaterTemp; - DesTowerWaterDeltaT = this->DesRange; + DesTowerWaterDeltaT = this->DesignRange; } } else { // use tower sizing data DesTowerExitWaterTemp = this->DesOutletWaterTemp; DesTowerInletWaterTemp = this->DesInletWaterTemp; - DesTowerWaterDeltaT = this->DesRange; + DesTowerWaterDeltaT = this->DesignRange; if (PltSizCondNum > 0) { // check the tower range against the plant sizing data if (std::abs(DesTowerWaterDeltaT - PlantSizData(PltSizCondNum).DeltaT) > TolTemp) { @@ -3381,14 +3383,14 @@ namespace CondenserLoopTowers { ShowContinueError(state, format("is inconsistent with Design Loop Delta Temperature specified in Sizing:Plant object = {}.", PlantSizData(PltSizCondNum).PlantLoopName)); - ShowContinueError(state, format("..The Design Range Temperature specified in tower is = {:.2T}", this->DesRange)); + ShowContinueError(state, format("..The Design Range Temperature specified in tower is = {:.2T}", this->DesignRange)); ShowContinueError( state, format("..The Design Loop Delta Temperature specified in plant sizing data is = {:.2T}", PlantSizData(PltSizCondNum).DeltaT)); } // check if the tower approach is different from plant sizing data - DesTowerApproachFromPlant = PlantSizData(PltSizCondNum).ExitTemp - this->DesInletAirWBTemp; - if (std::abs(DesTowerApproachFromPlant - this->DesApproach) > TolTemp) { + DesTowerApproachFromPlant = PlantSizData(PltSizCondNum).ExitTemp - this->DesignInletWB; + if (std::abs(DesTowerApproachFromPlant - this->DesignApproach) > TolTemp) { ShowWarningError(state, format("Error when autosizing the UA for cooling tower = {}. Tower Design Approach Temperature is inconsistent " "with Approach from Plant Sizing Data.", @@ -3399,7 +3401,7 @@ namespace CondenserLoopTowers { ShowContinueError(state, format("is inconsistent with Design Approach Temperature specified in tower = {}.", this->Name)); ShowContinueError(state, format("..The Design Approach Temperature from inputs specified is = {:.2T}", DesTowerApproachFromPlant)); - ShowContinueError(state, format("..The Design Approach Temperature specified in tower is = {:.2T}", this->DesApproach)); + ShowContinueError(state, format("..The Design Approach Temperature specified in tower is = {:.2T}", this->DesignApproach)); } } } @@ -3687,8 +3689,8 @@ namespace CondenserLoopTowers { UA0 = 0.0001 * solveLoad; // Assume deltaT = 10000K (limit) UA1 = solveLoad; // Assume deltaT = 1K - this->AirTemp = this->DesInletAirDBTemp; // 35.0; - this->AirWetBulb = this->DesInletAirWBTemp; // 25.6; + this->AirTemp = this->DesInletAirDBTemp; // 35.0; + this->AirWetBulb = this->DesignInletWB; // 25.6; this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f = [&state, this, solveLoad, solveWaterFlow, tmpDesignAirFlowRate, Cp](Real64 UA) { @@ -3726,7 +3728,7 @@ namespace CondenserLoopTowers { UA0 = max(UA0, 1.0); // limit to 1.0 UA1 = solveLoad1; // Assume deltaT = 1K this->AirTemp = this->DesInletAirDBTemp; // 35.0; - this->AirWetBulb = this->DesInletAirWBTemp; // 25.6; + this->AirWetBulb = this->DesignInletWB; // 25.6; this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f2 = [&state, this, solveLoad1, solveWaterFlow1, tmpFreeConvAirFlowRate, Cp](Real64 UA) { @@ -3990,8 +3992,8 @@ namespace CondenserLoopTowers { UA0 = 0.0001 * solveLoad; // Assume deltaT = 10000K (limit) UA1 = solveLoad; // Assume deltaT = 1K this->WaterTemp = DesTowerInletWaterTemp; - this->AirTemp = this->DesInletAirDBTemp; // 35.0; - this->AirWetBulb = this->DesInletAirWBTemp; // 25.6; + this->AirTemp = this->DesInletAirDBTemp; // 35.0; + this->AirWetBulb = this->DesignInletWB; // 25.6; this->AirPress = state.dataEnvrn->StdBaroPress; this->AirHumRat = Psychrometrics::PsyWFnTdbTwbPb(state, this->AirTemp, this->AirWetBulb, this->AirPress); auto f = [&state, this, solveLoad, solveWaterFlow, tmpDesignAirFlowRate, Cp](Real64 UA) { diff --git a/src/EnergyPlus/CondenserLoopTowers.hh b/src/EnergyPlus/CondenserLoopTowers.hh index 3cceb996815..3ae3a76571b 100644 --- a/src/EnergyPlus/CondenserLoopTowers.hh +++ b/src/EnergyPlus/CondenserLoopTowers.hh @@ -247,9 +247,6 @@ namespace CondenserLoopTowers { Real64 DesInletWaterTemp = 0.0; // design tower inlet water temperature (C) Real64 DesOutletWaterTemp = 0.0; // design tower outlet water temperature (C) Real64 DesInletAirDBTemp = 0.0; // design tower inlet air dry-bulb temperature (C) - Real64 DesInletAirWBTemp = 0.0; // design tower outlet air wet-bulb temperature (C) - Real64 DesApproach = 0.0; // design tower approach temperature (deltaC) - Real64 DesRange = 0.0; // design tower range temperature (deltaC) bool TowerInletCondsAutoSize = false; // true if tower inlet condition is autosized or defaulted to autosize // Operational fault parameters bool FaultyCondenserSWTFlag = false; // True if the condenser has SWT sensor fault diff --git a/tst/EnergyPlus/unit/CondenserLoopTowers.unit.cc b/tst/EnergyPlus/unit/CondenserLoopTowers.unit.cc index a92b7159cfc..96b215e2106 100644 --- a/tst/EnergyPlus/unit/CondenserLoopTowers.unit.cc +++ b/tst/EnergyPlus/unit/CondenserLoopTowers.unit.cc @@ -4393,4 +4393,491 @@ TEST_F(EnergyPlusFixture, CondenserLoopTowers_checkTowerIndices) EXPECT_TRUE(index == 1); } +TEST_F(EnergyPlusFixture, CondenserLoopTowers_VSCoolingTower_OutputReport) +{ + + std::string const idf_objects = delimited_string({ + " Site:Location,", + " USA IL-CHICAGO-OHARE, !- Name", + " 41.77, !- Latitude {deg}", + " -87.75, !- Longitude {deg}", + " -6.00, !- Time Zone {hr}", + " 190; !- Elevation {m}", + + " SizingPeriod:DesignDay,", + " CHICAGO Ann Htg 99.6% Condns DB, !- Name", + " 1, !- Month", + " 21, !- Day of Month", + " WinterDesignDay, !- Day Type", + " -20.6, !- Maximum Dry-Bulb Temperature {C}", + " 0.0, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " -20.6, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 4.9, !- Wind Speed {m/s}", + " 270, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 0.00; !- Sky Clearness", + + " SizingPeriod:DesignDay,", + " CHICAGO Ann Clg .4% Condns WB=>MDB, !- Name", + " 7, !- Month", + " 21, !- Day of Month", + " SummerDesignDay, !- Day Type", + " 31.2, !- Maximum Dry-Bulb Temperature {C}", + " 10.7, !- Daily Dry-Bulb Temperature Range {deltaC}", + " , !- Dry-Bulb Temperature Range Modifier Type", + " , !- Dry-Bulb Temperature Range Modifier Day Schedule Name", + " Wetbulb, !- Humidity Condition Type", + " 25.5, !- Wetbulb or DewPoint at Maximum Dry-Bulb {C}", + " , !- Humidity Condition Day Schedule Name", + " , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir}", + " , !- Enthalpy at Maximum Dry-Bulb {J/kg}", + " , !- Daily Wet-Bulb Temperature Range {deltaC}", + " 99063., !- Barometric Pressure {Pa}", + " 5.3, !- Wind Speed {m/s}", + " 230, !- Wind Direction {deg}", + " No, !- Rain Indicator", + " No, !- Snow Indicator", + " No, !- Daylight Saving Time Indicator", + " ASHRAEClearSky, !- Solar Model Indicator", + " , !- Beam Solar Day Schedule Name", + " , !- Diffuse Solar Day Schedule Name", + " , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) {dimensionless}", + " , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) {dimensionless}", + " 1.00; !- Sky Clearness", + + " SimulationControl,", + " no, !- Do Zone Sizing Calculation", + " no, !- Do System Sizing Calculation", + " no, !- Do Plant Sizing Calculation", + " Yes, !- Run Simulation for Sizing Periods", + " no; !- Run Simulation for Weather File Run Periods", + + " Timestep,6;", + + " ScheduleTypeLimits,", + " Any Number; !- Name", + + " Schedule:Compact,", + " ALWAYS_ON, !- Name", + " On/Off, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00,1; !- Field 3", + + " ScheduleTypeLimits,", + " On/Off, !- Name", + " 0, !- Lower Limit Value", + " 1, !- Upper Limit Value", + " DISCRETE; !- Numeric Type", + + " CoolingTower:VariableSpeed,", + " CoolingTower Variable Speed, !- Name", + " Tower Inlet Node, !- Water Inlet Node Name", + " Tower Outlet Node, !- Water Outlet Node Name", + " CoolToolsCrossFlow, !- Model Type", + " , !- Model Coefficient Name", + " 23.28, !- Design Inlet Air Wet-Bulb Temperature {C}", + " 4.56, !- Design Approach Temperature {deltaC}", + " 6.14, !- Design Range Temperature {deltaC}", + " 0.02, !- Design Water Flow Rate {m3/s}", + " 10.0, !- Design Air Flow Rate {m3/s}", + " 1000.0, !- Design Fan Power {W}", + " CoolingTower Variable Speed Fan Power Ratio Curve, !- Fan Power Ratio Function of Air Flow Rate Ratio Curve Name", + " 0.2, !- Minimum Air Flow Rate Ratio", + " 0.125, !- Fraction of Tower Capacity in Free Convection Regime", + " 0, !- Basin Heater Capacity {W/K}", + " 2, !- Basin Heater Setpoint Temperature {C}", + " , !- Basin Heater Operating Schedule Name", + " SaturatedExit, !- Evaporation Loss Mode", + " 0.2, !- Evaporation Loss Factor {percent/K}", + " 0.008, !- Drift Loss Percent {percent}", + " ConcentrationRatio, !- Blowdown Calculation Mode", + " 3, !- Blowdown Concentration Ratio", + " , !- Blowdown Makeup Water Usage Schedule Name", + " , !- Supply Water Storage Tank Name", + " , !- Outdoor Air Inlet Node Name", + " , !- Number of Cells", + " , !- Cell Control", + " , !- Cell Minimum Water Flow Rate Fraction", + " , !- Cell Maximum Water Flow Rate Fraction", + " 2.0, !- Sizing Factor", + " General; !- End-Use Subcategory", + + " Curve:Cubic,", + " CoolingTower Variable Speed Fan Power Ratio Curve, !- Name", + " -0.0093, !- Coefficient1 Constant", + " 0.0512, !- Coefficient2 x", + " -0.0838, !- Coefficient3 x**2", + " 1.0419, !- Coefficient4 x**3", + " 0.15, !- Minimum Value of x", + " 1; !- Maximum Value of x", + + " Pump:VariableSpeed,", + " CoolingTower Pump, !- Name", + " CoolingTower Supply Inlet Node, !- Inlet Node Name", + " CoolingTower Pump-CoolingTower CoolTowerNodeviaConnector, !- Outlet Node Name", + " 0.03, !- Design Maximum Flow Rate {m3/s}", + " 134508, !- Design Pump Head {Pa}", + " 20000.0, !- Design Power Consumption {W}", + " 0.9, !- Motor Efficiency", + " 0, !- Fraction of Motor Inefficiencies to Fluid Stream", + " 0, !- Coefficient 1 of the Part Load Performance Curve", + " 0.0216, !- Coefficient 2 of the Part Load Performance Curve", + " -0.0325, !- Coefficient 3 of the Part Load Performance Curve", + " 1.0095, !- Coefficient 4 of the Part Load Performance Curve", + " 0, !- Design Minimum Flow Rate {m3/s}", + " Intermittent, !- Pump Control Type", + " , !- Pump Flow Rate Schedule Name", + " , !- Pump Curve Name", + " , !- Impeller Diameter {m}", + " , !- VFD Control Type", + " , !- Pump RPM Schedule Name", + " , !- Minimum Pressure Schedule", + " , !- Maximum Pressure Schedule", + " , !- Minimum RPM Schedule", + " , !- Maximum RPM Schedule", + " , !- Zone Name", + " 0.5, !- Skin Loss Radiative Fraction", + " PowerPerFlowPerPressure, !- Design Power Sizing Method", + " 348701.1, !- Design Electric Power per Unit Flow Rate {W/(m3/s)}", + " 1.282051282, !- Design Shaft Power per Unit Flow Rate per Unit Head {W/((m3/s)-Pa)}", + " 0, !- Design Minimum Flow Rate Fraction", + " General; !- End-Use Subcategory", + + " PlantEquipmentList,", + " CoolingTower Equipment List, !- Name", + " CoolingTower:VariableSpeed, !- Equipment 1 Object Type", + " CoolingTower Variable Speed; !- Equipment 1 Name", + + " PlantLoop,", + " CoolingTower Loop, !- Name", + " Water, !- Fluid Type", + " , !- User Defined Fluid Type", + " CoolingTower Loop Operation Scheme List, !- Condenser Equipment Operation Scheme Name", + " CoolingTower Supply Outlet Node, !- Condenser Loop Temperature Setpoint Node Name", + " 80.0, !- Maximum Loop Temperature {C}", + " 5.0, !- Minimum Loop Temperature {C}", + " 0.03, !- Maximum Loop Flow Rate {m3/s}", + " 0.0, !- Minimum Loop Flow Rate {m3/s}", + " Autocalculate, !- Condenser Loop Volume {m3}", + " CoolingTower Supply Inlet Node, !- Condenser Side Inlet Node Name", + " CoolingTower Supply Outlet Node, !- Condenser Side Outlet Node Name", + " CoolingTower Supply Branches, !- Condenser Side Branch List Name", + " CoolingTower Supply Connectors, !- Condenser Side Connector List Name", + " CoolingTower Demand Inlet Node, !- Demand Side Inlet Node Name", + " CoolingTower Demand Outlet Node, !- Demand Side Outlet Node Name", + " CoolingTower Demand Branches, !- Condenser Demand Side Branch List Name", + " CoolingTower Demand Connectors, !- Condenser Demand Side Connector List Name", + " Optimal, !- Load Distribution Scheme", + " , !- Availability Manager List Name", + " SingleSetpoint; !- Plant Loop Demand Calculation Scheme", + + " Sizing:Plant,", + " CoolingTower Loop, !- Plant or Condenser Loop Name", + " Condenser, !- Loop Type", + " 30, !- Design Loop Exit Temperature {C}", + " 5.55555555555556, !- Loop Design Temperature Difference {deltaC}", + " NonCoincident, !- Sizing Option", + " 1, !- Zone Timesteps in Averaging Window", + " None; !- Coincident Sizing Factor Mode", + + " PlantEquipmentOperationSchemes,", + " CoolingTower Loop Operation Scheme List, !- Name", + " PlantEquipmentOperation:CoolingLoad, !- Control Scheme 1 Object Type", + " CoolingTower Operation Scheme, !- Control Scheme 1 Name", + " ALWAYS_ON, !- Control Scheme 1 Schedule Name", + " PlantEquipmentOperation:ComponentSetpoint, !- Control Scheme 3 Object Type", + " CoolingTower Loop Setpoint Operation Scheme, !- Control Scheme 3 Name", + " ALWAYS_ON; !- Control Scheme 3 Schedule Name", + + " PlantEquipmentOperation:ComponentSetpoint,", + " CoolingTower Loop Setpoint Operation Scheme, !- Name", + " CoolingTower:VariableSpeed, !- Equipment 1 Object Type", + " CoolingTower Variable Speed, !- Equipment 1 Name", + " CoolingTower Inlet Node, !- Demand Calculation 1 Node Name", + " CoolingTower Outlet Node, !- Setpoint 1 Node Name", + " 0.03, !- Component 1 Flow Rate {m3/s}", + " Cooling; !- Operation 1 Type", + + " PlantEquipmentOperation:CoolingLoad,", + " CoolingTower Operation Scheme, !- Name", + " 0.0, !- Load Range 1 Lower Limit {W}", + " 1000000000000, !- Load Range 1 Upper Limit {W}", + " CoolingTower Equipment List; !- Range 1 Equipment List Name", + + " SetpointManager:Scheduled,", + " CoolingTower Setpoint Manager, !- Name", + " Temperature, !- Control Variable", + " CoolingTower Temp Sch, !- Schedule Name", + " CoolingTower Control Node List; !- Setpoint Node or NodeList Name", + + " NodeList,", + " CoolingTower Control Node List, !- Name", + " CoolingTower Outlet Node, !- Node 1 Name", + " CoolingTower Supply Outlet Node; !- Node 2 Name", + + " Schedule:Compact,", + " CoolingTower Temp Sch, !- Name", + " Any Number, !- Schedule Type Limits Name", + " THROUGH: 12/31, !- Field 1", + " FOR: AllDays, !- Field 2", + " UNTIL: 24:00,30.0; !- Field 3", + + " BranchList,", + " CoolingTower Demand Branches, !- Name", + " CoolingTower Demand Inlet Branch, !- Branch 1 Name", + " CoolingTower Demand Load Branch 1, !- Branch 2 Name", + " CoolingTower Demand Bypass Branch, !- Branch 4 Name", + " CoolingTower Demand Outlet Branch; !- Branch 5 Name", + + " BranchList,", + " CoolingTower Supply Branches, !- Name", + " CoolingTower Supply Inlet Branch, !- Branch 1 Name", + " CoolingTower Supply Equipment Branch 1, !- Branch 2 Name", + " CoolingTower Supply Equipment Bypass Branch, !- Branch 4 Name", + " CoolingTower Supply Outlet Branch; !- Branch 5 Name", + + " Branch,", + " CoolingTower Demand Bypass Branch, !- Name", + " , !- Pressure Drop Curve Name", + " Pipe:Adiabatic, !- Component 1 Object Type", + " CoolingTower Demand Bypass Pipe, !- Component 1 Name", + " CoolingTower Demand Bypass Pipe Inlet Node, !- Component 1 Inlet Node Name", + " CoolingTower Demand Bypass Pipe Outlet Node; !- Component 1 Outlet Node Name", + + " Branch,", + " CoolingTower Demand Inlet Branch, !- Name", + " , !- Pressure Drop Curve Name", + " Pipe:Adiabatic, !- Component 1 Object Type", + " CoolingTower Demand Inlet Pipe, !- Component 1 Name", + " CoolingTower Demand Inlet Node, !- Component 1 Inlet Node Name", + " CoolingTower Demand Inlet Pipe-CoolingTower Demand Mixer; !- Component 1 Outlet Node Name", + + " Branch,", + " CoolingTower Demand Load Branch 1, !- Name", + " , !- Pressure Drop Curve Name", + " LoadProfile:Plant, !- Component 1 Object Type", + " Load Profile 1, !- Component 1 Name", + " Demand Load Profile 1 Inlet Node, !- Component 1 Inlet Node Name", + " Demand Load Profile 1 Outlet Node; !- Component 1 Outlet Node Name", + + " LoadProfile:Plant,", + " Load Profile 1, !- Name", + " Demand Load Profile 1 Inlet Node, !- Inlet Node Name", + " Demand Load Profile 1 Outlet Node, !- Outlet Node Name", + " Load Profile 1 Load Schedule, !- Load Schedule Name", + " 0.010, !- Peak Flow Rate {m3/s}", + " Load Profile 1 Flow Frac Schedule; !- Flow Rate Fraction Schedule Name", + + " Schedule:Compact,", + " Load Profile 1 Load Schedule, !- Name", + " Any Number, !- Schedule Type Limits Name", + " THROUGH: 12/31, !- Field 1", + " FOR: AllDays, !- Field 2", + " UNTIL: 24:00,0.0; !- Field 3", + + " Schedule:Compact,", + " Load Profile 1 Flow Frac Schedule, !- Name", + " Any Number, !- Schedule Type Limits Name", + " THROUGH: 12/31, !- Field 1", + " FOR: AllDays, !- Field 2", + " UNTIL: 24:00,1.0; !- Field 3", + + " Branch,", + " CoolingTower Demand Outlet Branch, !- Name", + " , !- Pressure Drop Curve Name", + " Pipe:Adiabatic, !- Component 1 Object Type", + " CoolingTower Demand Outlet Pipe, !- Component 1 Name", + " CoolingTower Demand Mixer-CoolingTower Demand Outlet Pipe, !- Component 1 Inlet Node Name", + " CoolingTower Demand Outlet Node; !- Component 1 Outlet Node Name", + + " Branch,", + " CoolingTower Supply Equipment Branch 1, !- Name", + " , !- Pressure Drop Curve Name", + " CoolingTower:VariableSpeed, !- Component 1 Object Type", + " CoolingTower Variable Speed, !- Component 1 Name", + " CoolingTower Inlet Node, !- Component 1 Inlet Node Name", + " CoolingTower Outlet Node; !- Component 1 Outlet Node Name", + + " Branch,", + " CoolingTower Supply Equipment Bypass Branch, !- Name", + " , !- Pressure Drop Curve Name", + " Pipe:Adiabatic, !- Component 1 Object Type", + " CoolingTower Supply Equipment Bypass Pipe, !- Component 1 Name", + " CoolingTower Supply Equip Bypass Inlet Node, !- Component 1 Inlet Node Name", + " CoolingTower Supply Equip Bypass Outlet Node; !- Component 1 Outlet Node Name", + + " Branch,", + " CoolingTower Supply Inlet Branch, !- Name", + " , !- Pressure Drop Curve Name", + " Pump:VariableSpeed, !- Component 1 Object Type", + " CoolingTower Pump, !- Component 1 Name", + " CoolingTower Supply Inlet Node, !- Component 1 Inlet Node Name", + " CoolingTower Pump-CoolingTower CoolTowerNodeviaConnector; !- Component 1 Outlet Node Name", + + " Branch,", + " CoolingTower Supply Outlet Branch, !- Name", + " , !- Pressure Drop Curve Name", + " Pipe:Adiabatic, !- Component 1 Object Type", + " CoolingTower Supply Outlet Pipe, !- Component 1 Name", + " CoolingTower Supply Mixer-CoolingTower Supply Outlet Pipe, !- Component 1 Inlet Node Name", + " CoolingTower Supply Outlet Node; !- Component 1 Outlet Node Name", + + " OutdoorAir:Node,", + " CoolingTower CoolTower OA ref Node; !- Name", + + " ConnectorList,", + " CoolingTower Demand Connectors, !- Name", + " Connector:Splitter, !- Connector 1 Object Type", + " CoolingTower Demand Splitter, !- Connector 1 Name", + " Connector:Mixer, !- Connector 2 Object Type", + " CoolingTower Demand Mixer; !- Connector 2 Name", + + " ConnectorList,", + " CoolingTower Supply Connectors, !- Name", + " Connector:Splitter, !- Connector 1 Object Type", + " CoolingTower Supply Splitter, !- Connector 1 Name", + " Connector:Mixer, !- Connector 2 Object Type", + " CoolingTower Supply Mixer; !- Connector 2 Name", + + " Connector:Splitter,", + " CoolingTower Demand Splitter, !- Name", + " CoolingTower Demand Inlet Branch, !- Inlet Branch Name", + " CoolingTower Demand Load Branch 1, !- Outlet Branch 1 Name", + " CoolingTower Demand Bypass Branch; !- Outlet Branch 3 Name", + + " Connector:Splitter,", + " CoolingTower Supply Splitter, !- Name", + " CoolingTower Supply Inlet Branch, !- Inlet Branch Name", + " CoolingTower Supply Equipment Branch 1, !- Outlet Branch 1 Name", + " CoolingTower Supply Equipment Bypass Branch; !- Outlet Branch 3 Name", + + " Connector:Mixer,", + " CoolingTower Demand Mixer, !- Name", + " CoolingTower Demand Outlet Branch, !- Outlet Branch Name", + " CoolingTower Demand Load Branch 1, !- Inlet Branch 1 Name", + " CoolingTower Demand Bypass Branch; !- Inlet Branch 3 Name", + + " Connector:Mixer,", + " CoolingTower Supply Mixer, !- Name", + " CoolingTower Supply Outlet Branch, !- Outlet Branch Name", + " CoolingTower Supply Equipment Branch 1, !- Inlet Branch 1 Name", + " CoolingTower Supply Equipment Bypass Branch; !- Inlet Branch 3 Name", + + " Pipe:Adiabatic,", + " CoolingTower Demand Bypass Pipe, !- Name", + " CoolingTower Demand Bypass Pipe Inlet Node, !- Inlet Node Name", + " CoolingTower Demand Bypass Pipe Outlet Node; !- Outlet Node Name", + + " Pipe:Adiabatic,", + " CoolingTower Demand Inlet Pipe, !- Name", + " CoolingTower Demand Inlet Node, !- Inlet Node Name", + " CoolingTower Demand Inlet Pipe-CoolingTower Demand Mixer; !- Outlet Node Name", + + " Pipe:Adiabatic,", + " CoolingTower Demand Outlet Pipe, !- Name", + " CoolingTower Demand Mixer-CoolingTower Demand Outlet Pipe, !- Inlet Node Name", + " CoolingTower Demand Outlet Node; !- Outlet Node Name", + + " Pipe:Adiabatic,", + " CoolingTower Supply Equipment Bypass Pipe, !- Name", + " CoolingTower Supply Equip Bypass Inlet Node, !- Inlet Node Name", + " CoolingTower Supply Equip Bypass Outlet Node; !- Outlet Node Name", + + " Pipe:Adiabatic,", + " CoolingTower Supply Outlet Pipe, !- Name", + " CoolingTower Supply Mixer-CoolingTower Supply Outlet Pipe, !- Inlet Node Name", + " CoolingTower Supply Outlet Node; !- Outlet Node Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + SimulationManager::PostIPProcessing(*state); + + state->init_state(*state); // need to process schedules once they have been input processed + + state->dataGlobal->BeginSimFlag = true; + SimulationManager::GetProjectData(*state); + OutputReportPredefined::SetPredefinedTables(*state); + + OutputProcessor::SetupTimePointers(*state, OutputProcessor::TimeStepType::Zone, state->dataGlobal->TimeStepZone); + OutputProcessor::SetupTimePointers(*state, OutputProcessor::TimeStepType::System, state->dataHVACGlobal->TimeStepSys); + createFacilityElectricPowerServiceObject(*state); + OutputProcessor::GetReportVariableInput(*state); + PlantManager::CheckIfAnyPlant(*state); + BranchInputManager::ManageBranchInput(*state); + + // Get plant loop data + PlantManager::GetPlantLoopData(*state); + PlantManager::GetPlantInput(*state); + SizingManager::GetPlantSizingInput(*state); + PlantManager::InitOneTimePlantSizingInfo(*state, 1); + PlantManager::SizePlantLoop(*state, 1, true); + + state->dataGlobal->DoingSizing = false; + state->dataGlobal->KickOffSimulation = true; + + constexpr Real64 expectedDesignInletWB = 23.28; + constexpr Real64 expectedDesingApproach = 4.56; + constexpr Real64 expectedDesingRange = 6.14; + constexpr Real64 expectedDesOutletWaterTemp = expectedDesignInletWB + expectedDesingApproach; + constexpr Real64 expectedDesInletWaterTemp = expectedDesOutletWaterTemp + expectedDesingRange; + + CondenserLoopTowers::GetTowerInput(*state); + auto &VSTower = state->dataCondenserLoopTowers->towers(1); + + EXPECT_EQ(expectedDesignInletWB, VSTower.DesignInletWB); + EXPECT_EQ(expectedDesingApproach, VSTower.DesignApproach); + EXPECT_EQ(expectedDesingRange, VSTower.DesignRange); + EXPECT_EQ(expectedDesOutletWaterTemp, VSTower.DesOutletWaterTemp); + EXPECT_EQ(expectedDesInletWaterTemp, VSTower.DesInletWaterTemp); + + state->dataPlnt->PlantFirstSizesOkayToFinalize = true; + state->dataGlobal->BeginEnvrnFlag = true; + + state->dataEnvrn->OutDryBulbTemp = 35.0; + state->dataEnvrn->OutWetBulbTemp = 26.0; + state->dataEnvrn->OutBaroPress = 101325.0; + state->dataEnvrn->OutHumRat = + Psychrometrics::PsyWFnTdbTwbPb(*state, state->dataEnvrn->OutDryBulbTemp, state->dataEnvrn->OutWetBulbTemp, state->dataEnvrn->OutBaroPress); + state->dataLoopNodes->Node(VSTower.WaterInletNodeNum).Temp = 35.0; + + EXPECT_TRUE(state->dataPlnt->PlantFinalSizesOkayToReport = true); + + VSTower.initialize(*state); + state->dataGlobal->BeginEnvrnFlag = false; + VSTower.SizeTower(*state); // This calls PreDefTableEntry when state.dataPlnt->PlantFinalSizesOkayToReport == true + + auto &orp = *state->dataOutRptPredefined; + std::string const TowerName = VSTower.Name; + EXPECT_EQ("CoolingTower:VariableSpeed", OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCType, TowerName)); + EXPECT_EQ("WATER", OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCFluidType, TowerName)); + EXPECT_EQ(fmt::format("{:.2f}", expectedDesingRange), OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCRange, TowerName)); + EXPECT_EQ(fmt::format("{:.2f}", expectedDesingApproach), + OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCApproach, TowerName)); + EXPECT_EQ("1000.00", OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCDesFanPwr, TowerName)); + EXPECT_EQ(fmt::format("{:.2f}", expectedDesignInletWB), + OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCDesInletAirWBT, TowerName)); + EXPECT_EQ("0.020000", OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCDesWaterFlowRate, TowerName)); + EXPECT_EQ(fmt::format("{:.2f}", expectedDesOutletWaterTemp), + OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCLevWaterSPTemp, TowerName)); + EXPECT_EQ("COOLINGTOWER LOOP", OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCCondLoopName, TowerName)); + EXPECT_EQ("COOLINGTOWER SUPPLY EQUIPMENT BRANCH 1", + OutputReportPredefined::RetrievePreDefTableEntry(*state, orp.pdchCTFCCondLoopBranchName, TowerName)); +} + } // namespace EnergyPlus