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#pragma once
2
15#include <math.h>
16
17#include <vector>
18
20 public:
27 CoolingTowerOperatingConditionsData(const double flowRate, const double coolingLoad, const int operationalHours,
28 const double lossCorrectionFactor)
29 : flowRate(flowRate), coolingLoad(coolingLoad), operationalHours(operationalHours),
30 lossCorrectionFactor(lossCorrectionFactor) {}
31
32 double getFlowRate() const { return flowRate; }
33 double getCoolingLoad() const { return coolingLoad; }
34 int getOperationalHours() const { return operationalHours; }
35 double getLossCorrectionFactor() const { return lossCorrectionFactor; }
36
37 void setFlowRate(double flowRate);
38 void setCoolingLoad(double coolingLoad);
39 void setOperationalHours(int operationalHours);
40 void setLossCorrectionFactor(double lossCorrectionFactor);
41
42 private:
43 double flowRate;
44 double coolingLoad;
45 int operationalHours;
46 double lossCorrectionFactor = 0.85;
47};
48
50 public:
55 CoolingTowerWaterConservationData(const int cyclesOfConcentration, const double driftLossFactor)
56 : cyclesOfConcentration(cyclesOfConcentration), driftLossFactor(driftLossFactor) {}
57
58 int getCyclesOfConcentration() const { return cyclesOfConcentration; }
59 double getDriftLossFactor() const { return driftLossFactor; }
60
61 void setCyclesOfConcentration(int cyclesOfConcentration);
62 void setDriftLossFactor(double driftLossFactor);
63
64 private:
65 int cyclesOfConcentration;
66 double driftLossFactor;
67};
68
70 public:
71 struct Output {
77 Output(double wcBaseline, double wcModification, double waterSavings)
78 : wcBaseline(wcBaseline), wcModification(wcModification), waterSavings(waterSavings) {}
79
80 double wcBaseline = 0;
81 double wcModification = 0;
82 double waterSavings = 0;
83 };
84
86 const CoolingTowerWaterConservationData& waterConservationBaselineData,
87 const CoolingTowerWaterConservationData& waterConservationModificationData)
88 : operatingConditionsData(operatingConditionsData),
89 waterConservationBaselineData(waterConservationBaselineData),
90 waterConservationModificationData(waterConservationModificationData) {}
91
93
94 CoolingTowerOperatingConditionsData getOperatingConditionsData() const { return operatingConditionsData; }
95 CoolingTowerWaterConservationData getWaterConservationBaselineData() const { return waterConservationBaselineData; }
96 CoolingTowerWaterConservationData getWaterConservationModificationData() const {
97 return waterConservationModificationData;
98 }
99
100 void setOperatingConditionsData(CoolingTowerOperatingConditionsData operatingConditionsData);
101 void setWaterConservationBaselineData(CoolingTowerWaterConservationData waterConservationBaselineData);
102 void setWaterConservationModificationData(CoolingTowerWaterConservationData waterConservationModificationData);
103
104 private:
105 CoolingTowerOperatingConditionsData operatingConditionsData;
106 CoolingTowerWaterConservationData waterConservationBaselineData;
107 CoolingTowerWaterConservationData waterConservationModificationData;
108};
109
111 public:
112 enum FanControlSpeedType { One, Two, Variable };
113
115 PowerEnergyConsumptionOutput(double baselinePower, double baselineEnergy, double modPower, double modEnergy,
116 double savingsEnergy)
117 : baselinePower(baselinePower), baselineEnergy(baselineEnergy), modPower(modPower), modEnergy(modEnergy),
118 savingsEnergy(savingsEnergy) {}
119
121 double baselinePower = 0, baselineEnergy = 0, modPower = 0, modEnergy = 0, savingsEnergy = 0;
122 };
123
148 BasinHeaterEnergyConsumption(const double ratedCapacity, const double ratedTempSetPoint,
149 const double ratedTempDryBulb, const double ratedWindSpeed,
150 const double operatingTempDryBulb, const double operatingWindSpeed,
151 const double operatingHours, const double baselineTempSetPoint,
152 const double modTempSetPoint, const double panLossRatio) {
153 const double calc1 =
154 ratedCapacity * 4.394960445356 * panLossRatio / /*4.394960445356 = 15000 btu/hr/ton / 3413 kW/btu*/
155 (ratedTempSetPoint - ratedTempDryBulb) / pow((ratedTempSetPoint + ratedTempDryBulb) / 2, -0.181) /
156 pow((ratedTempSetPoint - ratedTempDryBulb), 0.266) / pow((1.277 * ratedWindSpeed + 1), 0.5) *
157 pow((1.277 * operatingWindSpeed + 1), 0.5);
158
159 double baselinePower = CalculatePower(operatingTempDryBulb, baselineTempSetPoint, calc1);
160 double modPower = CalculatePower(operatingTempDryBulb, modTempSetPoint, calc1);
161
162 const double baselineEnergy = baselinePower * operatingHours;
163 const double modEnergy = modPower * operatingHours;
164
165 return PowerEnergyConsumptionOutput(baselinePower, baselineEnergy, modPower, modEnergy,
166 baselineEnergy - modEnergy);
167 }
168
191 static PowerEnergyConsumptionOutput
192 FanEnergyConsumption(const double ratedFanPower, const double waterLeavingTemp, const double waterEnteringTemp,
193 const double operatingTempWetBulb, const double operatingHours,
194 const FanControlSpeedType baselineSpeedType, const FanControlSpeedType modSpeedType) {
195 const double a = -0.09646816;
196 const double b = 1.04669762;
197 const double c =
198 0.04976825 - CalculateFactor(std::vector<double> {0.08352359, 0.11247273, -0.00135847, 0.00003417,
199 0.00003125, -0.00034001},
200 operatingTempWetBulb, waterEnteringTemp - waterLeavingTemp) /
201 CalculateFactor(std::vector<double> {0.50061393, 0.00588251, 0.0002163, -0.01913189,
202 0.00022360, 0.00106108},
203 operatingTempWetBulb, waterLeavingTemp - operatingTempWetBulb);
204 const double airFlow = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
205
206 const double powerFactorFlow = CalculatePowerFactor(airFlow);
207 const double powerFactorFull = CalculatePowerFactor(1);
208 const double powerFactorHalf = CalculatePowerFactor(0.5);
209 const double powerFactorZero = CalculatePowerFactor(0);
210
211 const double highSpeedTime = airFlow < 0.5 ? airFlow / 0.5 : (airFlow - 0.5) / 0.5;
212 const double twoSpeedPower = airFlow < 0.5 ? ratedFanPower * powerFactorHalf * highSpeedTime +
213 ratedFanPower * powerFactorZero * (1 - highSpeedTime)
214 : ratedFanPower * powerFactorFull * highSpeedTime +
215 ratedFanPower * powerFactorHalf * (1 - highSpeedTime);
216
217 const double oneSpeedPower =
218 ratedFanPower * powerFactorFull * airFlow + ratedFanPower * powerFactorZero * (1 - airFlow);
219
220 const double vfdPower = ratedFanPower * powerFactorFlow;
221
222 const double baselinePower = baselineSpeedType == FanControlSpeedType::Variable ? vfdPower
223 : baselineSpeedType == FanControlSpeedType::Two ? twoSpeedPower
224 : baselineSpeedType == FanControlSpeedType::One ? oneSpeedPower
225 : 0;
226 const double modPower = modSpeedType == FanControlSpeedType::Variable ? vfdPower
227 : modSpeedType == FanControlSpeedType::Two ? twoSpeedPower
228 : modSpeedType == FanControlSpeedType::One ? oneSpeedPower
229 : 0;
230
231 const double baselineEnergy = baselinePower * 0.746 * operatingHours;
232 const double modEnergy = modPower * 0.746 * operatingHours;
233
234 return PowerEnergyConsumptionOutput(baselinePower, baselineEnergy, modPower, modEnergy,
235 baselineEnergy - modEnergy);
236 }
237
238 private:
239 static double CalculatePowerFactor(const double var) {
240 return (0.01055507 - 0.05704023 * var + 0.14686301 * var * var + 0.92961746 * var * var * var);
241 }
242
243 static double CalculateFactor(const std::vector<double>& cf, const double operatingTempWetBulb,
244 const double deltaTemp) {
245 return cf[0] + cf[1] * deltaTemp + cf[2] * deltaTemp * deltaTemp + cf[3] * operatingTempWetBulb +
246 cf[4] * operatingTempWetBulb * operatingTempWetBulb + cf[5] * deltaTemp * operatingTempWetBulb;
247 }
248
249 static double CalculatePower(const double operatingTempDryBulb, const double tempSetPoint, const double calc1) {
250 return operatingTempDryBulb > tempSetPoint ? 0
251 : calc1 * (tempSetPoint - operatingTempDryBulb) *
252 pow((tempSetPoint + operatingTempDryBulb) / 2, -0.181) *
253 pow((tempSetPoint - operatingTempDryBulb), 0.266);
254 }
255};
256
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)