MEASUR-Tools-Suite v1.0.11
The MEASUR Tools Suite is a collection of industrial efficiency calculations written in C++ and with bindings for compilation to WebAssembly.
Loading...
Searching...
No Matches
CoolingTower.h
1
13#ifndef TOOLS_SUITE_COOLING_TOWER_H
14#define TOOLS_SUITE_COOLING_TOWER_H
15
16#include <math.h>
17
18#include <vector>
19
21 public:
28 CoolingTowerOperatingConditionsData(const double flowRate, const double coolingLoad, const int operationalHours,
29 const double lossCorrectionFactor)
30 : flowRate(flowRate), coolingLoad(coolingLoad), operationalHours(operationalHours),
31 lossCorrectionFactor(lossCorrectionFactor) {}
32
33 double getFlowRate() const { return flowRate; }
34 double getCoolingLoad() const { return coolingLoad; }
35 int getOperationalHours() const { return operationalHours; }
36 double getLossCorrectionFactor() const { return lossCorrectionFactor; }
37
38 void setFlowRate(double flowRate);
39 void setCoolingLoad(double coolingLoad);
40 void setOperationalHours(int operationalHours);
41 void setLossCorrectionFactor(double lossCorrectionFactor);
42
43 private:
44 double flowRate;
45 double coolingLoad;
46 int operationalHours;
47 double lossCorrectionFactor = 0.85;
48};
49
51 public:
56 CoolingTowerWaterConservationData(const int cyclesOfConcentration, const double driftLossFactor)
57 : cyclesOfConcentration(cyclesOfConcentration), driftLossFactor(driftLossFactor) {}
58
59 int getCyclesOfConcentration() const { return cyclesOfConcentration; }
60 double getDriftLossFactor() const { return driftLossFactor; }
61
62 void setCyclesOfConcentration(int cyclesOfConcentration);
63 void setDriftLossFactor(double driftLossFactor);
64
65 private:
66 int cyclesOfConcentration;
67 double driftLossFactor;
68};
69
71 public:
72 struct Output {
78 Output(double wcBaseline, double wcModification, double waterSavings)
79 : wcBaseline(wcBaseline), wcModification(wcModification), waterSavings(waterSavings) {}
80
81 double wcBaseline = 0;
82 double wcModification = 0;
83 double waterSavings = 0;
84 };
85
87 const CoolingTowerWaterConservationData& waterConservationBaselineData,
88 const CoolingTowerWaterConservationData& waterConservationModificationData)
89 : operatingConditionsData(operatingConditionsData),
90 waterConservationBaselineData(waterConservationBaselineData),
91 waterConservationModificationData(waterConservationModificationData) {}
92
94
95 CoolingTowerOperatingConditionsData getOperatingConditionsData() const { return operatingConditionsData; }
96 CoolingTowerWaterConservationData getWaterConservationBaselineData() const { return waterConservationBaselineData; }
97 CoolingTowerWaterConservationData getWaterConservationModificationData() const {
98 return waterConservationModificationData;
99 }
100
101 void setOperatingConditionsData(CoolingTowerOperatingConditionsData operatingConditionsData);
102 void setWaterConservationBaselineData(CoolingTowerWaterConservationData waterConservationBaselineData);
103 void setWaterConservationModificationData(CoolingTowerWaterConservationData waterConservationModificationData);
104
105 private:
106 CoolingTowerOperatingConditionsData operatingConditionsData;
107 CoolingTowerWaterConservationData waterConservationBaselineData;
108 CoolingTowerWaterConservationData waterConservationModificationData;
109};
110
112 public:
113 enum FanControlSpeedType { One, Two, Variable };
114
116 PowerEnergyConsumptionOutput(double baselinePower, double baselineEnergy, double modPower, double modEnergy,
117 double savingsEnergy)
118 : baselinePower(baselinePower), baselineEnergy(baselineEnergy), modPower(modPower), modEnergy(modEnergy),
119 savingsEnergy(savingsEnergy) {}
120
122 double baselinePower = 0, baselineEnergy = 0, modPower = 0, modEnergy = 0, savingsEnergy = 0;
123 };
124
149 BasinHeaterEnergyConsumption(const double ratedCapacity, const double ratedTempSetPoint,
150 const double ratedTempDryBulb, const double ratedWindSpeed,
151 const double operatingTempDryBulb, const double operatingWindSpeed,
152 const double operatingHours, const double baselineTempSetPoint,
153 const double modTempSetPoint, const double panLossRatio) {
154 const double calc1 =
155 ratedCapacity * 4.394960445356 * panLossRatio / /*4.394960445356 = 15000 btu/hr/ton / 3413 kW/btu*/
156 (ratedTempSetPoint - ratedTempDryBulb) / pow((ratedTempSetPoint + ratedTempDryBulb) / 2, -0.181) /
157 pow((ratedTempSetPoint - ratedTempDryBulb), 0.266) / pow((1.277 * ratedWindSpeed + 1), 0.5) *
158 pow((1.277 * operatingWindSpeed + 1), 0.5);
159
160 double baselinePower = CalculatePower(operatingTempDryBulb, baselineTempSetPoint, calc1);
161 double modPower = CalculatePower(operatingTempDryBulb, modTempSetPoint, calc1);
162
163 const double baselineEnergy = baselinePower * operatingHours;
164 const double modEnergy = modPower * operatingHours;
165
166 return PowerEnergyConsumptionOutput(baselinePower, baselineEnergy, modPower, modEnergy,
167 baselineEnergy - modEnergy);
168 }
169
192 static PowerEnergyConsumptionOutput
193 FanEnergyConsumption(const double ratedFanPower, const double waterLeavingTemp, const double waterEnteringTemp,
194 const double operatingTempWetBulb, const double operatingHours,
195 const FanControlSpeedType baselineSpeedType, const FanControlSpeedType modSpeedType) {
196 const double a = -0.09646816;
197 const double b = 1.04669762;
198 const double c =
199 0.04976825 - CalculateFactor(std::vector<double> {0.08352359, 0.11247273, -0.00135847, 0.00003417,
200 0.00003125, -0.00034001},
201 operatingTempWetBulb, waterEnteringTemp - waterLeavingTemp) /
202 CalculateFactor(std::vector<double> {0.50061393, 0.00588251, 0.0002163, -0.01913189,
203 0.00022360, 0.00106108},
204 operatingTempWetBulb, waterLeavingTemp - operatingTempWetBulb);
205 const double airFlow = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
206
207 const double powerFactorFlow = CalculatePowerFactor(airFlow);
208 const double powerFactorFull = CalculatePowerFactor(1);
209 const double powerFactorHalf = CalculatePowerFactor(0.5);
210 const double powerFactorZero = CalculatePowerFactor(0);
211
212 const double highSpeedTime = airFlow < 0.5 ? airFlow / 0.5 : (airFlow - 0.5) / 0.5;
213 const double twoSpeedPower = airFlow < 0.5 ? ratedFanPower * powerFactorHalf * highSpeedTime +
214 ratedFanPower * powerFactorZero * (1 - highSpeedTime)
215 : ratedFanPower * powerFactorFull * highSpeedTime +
216 ratedFanPower * powerFactorHalf * (1 - highSpeedTime);
217
218 const double oneSpeedPower =
219 ratedFanPower * powerFactorFull * airFlow + ratedFanPower * powerFactorZero * (1 - airFlow);
220
221 const double vfdPower = ratedFanPower * powerFactorFlow;
222
223 const double baselinePower = baselineSpeedType == FanControlSpeedType::Variable ? vfdPower
224 : baselineSpeedType == FanControlSpeedType::Two ? twoSpeedPower
225 : baselineSpeedType == FanControlSpeedType::One ? oneSpeedPower
226 : 0;
227 const double modPower = modSpeedType == FanControlSpeedType::Variable ? vfdPower
228 : modSpeedType == FanControlSpeedType::Two ? twoSpeedPower
229 : modSpeedType == FanControlSpeedType::One ? oneSpeedPower
230 : 0;
231
232 const double baselineEnergy = baselinePower * 0.746 * operatingHours;
233 const double modEnergy = modPower * 0.746 * operatingHours;
234
235 return PowerEnergyConsumptionOutput(baselinePower, baselineEnergy, modPower, modEnergy,
236 baselineEnergy - modEnergy);
237 }
238
239 private:
240 static double CalculatePowerFactor(const double var) {
241 return (0.01055507 - 0.05704023 * var + 0.14686301 * var * var + 0.92961746 * var * var * var);
242 }
243
244 static double CalculateFactor(const std::vector<double>& cf, const double operatingTempWetBulb,
245 const double deltaTemp) {
246 return cf[0] + cf[1] * deltaTemp + cf[2] * deltaTemp * deltaTemp + cf[3] * operatingTempWetBulb +
247 cf[4] * operatingTempWetBulb * operatingTempWetBulb + cf[5] * deltaTemp * operatingTempWetBulb;
248 }
249
250 static double CalculatePower(const double operatingTempDryBulb, const double tempSetPoint, const double calc1) {
251 return operatingTempDryBulb > tempSetPoint ? 0
252 : calc1 * (tempSetPoint - operatingTempDryBulb) *
253 pow((tempSetPoint + operatingTempDryBulb) / 2, -0.181) *
254 pow((tempSetPoint - operatingTempDryBulb), 0.266);
255 }
256};
257
258#endif // TOOLS_SUITE_COOLING_TOWER_H
Contains the Consumption (Water / Power / Energy) & Savings calculators for Cooling Tower Makeup Wate...
CoolingTowerOperatingConditionsData(const double flowRate, const double coolingLoad, const int operationalHours, const double lossCorrectionFactor)
CoolingTowerWaterConservationData(const int cyclesOfConcentration, const double driftLossFactor)
static PowerEnergyConsumptionOutput BasinHeaterEnergyConsumption(const double ratedCapacity, const double ratedTempSetPoint, const double ratedTempDryBulb, const double ratedWindSpeed, const double operatingTempDryBulb, const double operatingWindSpeed, const double operatingHours, const double baselineTempSetPoint, const double modTempSetPoint, const double panLossRatio)
static PowerEnergyConsumptionOutput FanEnergyConsumption(const double ratedFanPower, const double waterLeavingTemp, const double waterEnteringTemp, const double operatingTempWetBulb, const double operatingHours, const FanControlSpeedType baselineSpeedType, const FanControlSpeedType modSpeedType)
Output(double wcBaseline, double wcModification, double waterSavings)