AMO-Tools-Suite  v.0.9.0
Set of tools for calculating energy efficiency in industrial equipment
All Classes Namespaces Files Functions Variables Enumerations Friends Macros Pages
FanCurve.h
Go to the documentation of this file.
1 #ifndef AMO_TOOLS_SUITE_FANCURVE_H
2 #define AMO_TOOLS_SUITE_FANCURVE_H
3 
11 #include <vector>
15 enum class FanCurveType {
16  FanStaticPressure,
17  FanTotalPressure,
18  StaticPressureRise
19 };
25 class ResultData {
26 public:
27 
28  ResultData(const double flow, const double pressure, const double power, const double efficiency)
29  : flow(flow),
30  pressure(pressure),
31  power(power),
32  efficiency(efficiency)
33  {};
34 
35  const double flow, pressure, power, efficiency;
36 };
42 class FanCurveData {
43 public:
48  enum class CalculationType {
49  BaseCurve,
50  RatedPoint,
52  };
53 
54  struct BaseCurve {
55  // pressure here is pressureBox, determined by Curve Type
56  BaseCurve(const double flow, const double pressure, const double power)
57  : flow(flow),
58  pressure(pressure),
59  power(power)
60  {};
61 
62  const double flow, pressure, power;
63  friend class FanCurveData;
64  };
65 
66  struct RatedPoint : public BaseCurve {
67  // pressure here is pressureBox, determined by Curve Type
68  RatedPoint(const double flow, const double pressure, const double power, const double density,
69  const double speed, const double speedCorrected)
70  : BaseCurve(flow, pressure, power),
71  density(density),
72  speed(speed),
73  speedCorrected(speedCorrected)
74  {};
75 
76  const double density, speed, speedCorrected;
77  friend class FanCurveData;
78  };
79 
80  struct BaseOperatingPoint : public RatedPoint {
81  // pressure here is pressureBox, determined by Curve Type
82  BaseOperatingPoint(const double flow, const double pressure, const double power, const double density,
83  const double speed, const double speedCorrected, const double pressureBarometric,
84  const bool usePt1Factor, const double pt1 = 0)
85  : RatedPoint(flow, pressure, power, density, speed, speedCorrected),
86  pressureBarometric(pressureBarometric), usePt1Factor(usePt1Factor), pt1(pt1)
87  {};
88 
89  const double pressureBarometric;
90  bool usePt1Factor;
91  const double pt1;
92  friend class FanCurveData;
93  };
94 
95  FanCurveData(FanCurveType const curveType, std::vector<BaseCurve> baseCurveData)
96  : curveType(curveType),
97  baseCurveData(std::move(baseCurveData)),
98  calcType(CalculationType::BaseCurve)
99  {}
100 
101  FanCurveData(FanCurveType const curveType, std::vector<RatedPoint> ratedPointData)
102  : curveType(curveType),
103  ratedPointData(std::move(ratedPointData)),
104  calcType(CalculationType::RatedPoint)
105  {}
106 
107  FanCurveData(FanCurveType const curveType, std::vector<BaseOperatingPoint> baseOperatingPointData)
108  : curveType(curveType),
109  baseOperatingPointData(std::move(baseOperatingPointData)),
110  calcType(CalculationType::BaseOperatingPoint)
111  {}
112 
113 private:
114  FanCurveType curveType;
115  std::vector<BaseCurve> baseCurveData;
116  std::vector<RatedPoint> ratedPointData;
117  std::vector<BaseOperatingPoint> baseOperatingPointData;
118 
119  CalculationType calcType;
120 
121  friend class FanCurve;
122 };
123 
124 class FanCurve {
125 public:
126  FanCurve(const double density, const double densityCorrected, const double speed, const double speedCorrected,
127  const double pressureBarometric, const double pressureBarometricCorrected, const double pt1Factor,
128  const double gamma, const double gammaCorrected, const double area1, const double area2, FanCurveData data)
129  : density(density),
130  densityCorrected(densityCorrected),
131  speed(speed),
132  speedCorrected(speedCorrected),
133  pressureBarometric(pressureBarometric),
134  pressureBarometricCorrected(pressureBarometricCorrected),
135  pt1Factor(pt1Factor),
136  gamma(gamma),
137  gammaCorrected(gammaCorrected),
138  area1(area1),
139  area2(area2),
140  curveData(std::move(data))
141  {};
142 
143  std::vector<ResultData> calculate();
144 
145 private:
146  std::vector<ResultData> calculateBaseCurve();
147  std::vector<ResultData> calculateBaseOperatingPoint();
148  std::vector<ResultData> calculateRatedPoint();
149 
150  double density, densityCorrected, speed, speedCorrected, pressureBarometric, pressureBarometricCorrected;
151  double pt1Factor, gamma, gammaCorrected, area1, area2;
152 
153  FanCurveData curveData;
154 };
155 
156 #endif //AMO_TOOLS_SUITE_FANCURVE_H
FanCurveType
Definition: FanCurve.h:15