OpenWAM
TTC_HTM.h
1 /* --------------------------------------------------------------------------------*\
2 |==========================|
3  |\\ /\ /\ // O pen | OpenWAM: The Open Source 1D Gas-Dynamic Code
4  | \\ | X | // W ave |
5  | \\ \/_\/ // A ction | CMT-Motores Termicos / Universidad Politecnica Valencia
6  | \\/ \// M odel |
7  ----------------------------------------------------------------------------------
8  | License
9  |
10  | This file is part of OpenWAM.
11  |
12  | OpenWAM is free software: you can redistribute it and/or modify
13  | it under the terms of the GNU General Public License as published by
14  | the Free Software Foundation, either version 3 of the License, or
15  | (at your option) any later version.
16  |
17  | OpenWAM is distributed in the hope that it will be useful,
18  | but WITHOUT ANY WARRANTY; without even the implied warranty of
19  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  | GNU General Public License for more details.
21  |
22  | You should have received a copy of the GNU General Public License
23  | along with OpenWAM. If not, see <http://www.gnu.org/licenses/>.
24  |
25  \*-------------------------------------------------------------------------------- */
26 
27 // ---------------------------------------------------------------------------
28 #ifndef TTC_HTMH
29 #define TTC_HTMH
30 // ---------------------------------------------------------------------------
31 
62 #include "Globales.h"
63 #include "THTM_Fluids.h"
64 #include "turbo_bearings.hpp"
65 //#include <cmath>
66 
67 enum nmSide {
68  nmCompressor = 0, nmTurbine = 1
69 };
70 
71 enum nmRePrmu {
72  nmReMassTur = 0, nmReMassCom = 1, nmReMassOil = 2, nmReShaft = 3, nmPrTur = 4, nmPrCom = 5, nmPrOil = 6, nmmuG_T = 7, nmmuA_T = 8, nmmuO_T = 10, nmmuW_T = 11, nmmuG_H1 = 12, nmmuA_H1 = 13, nmmuO_H1 = 15, nmmuW_H1 = 16, nmmuG_H2 = 17, nmmuA_H2 = 18, nmmuO_H2 = 19, nmmuW_H2 = 20, nmmuG_H3 = 21, nmmuA_H3 = 22, nmmuO_H3 = 23, nmmuW_H3 = 24, nmmuG_C = 25, nmmuA_C = 26, nmmuO_C = 27, nmmuW_C = 28, nmReWater = 29, nmPrWater = 30, nmReMassComIn = 31, nmPrComIn = 32, nmReOilH1 = 33, nmReOilH2 = 34, nmReOilH3 = 35, nmPrOilH1 = 36, nmPrOilH2 = 37, nmPrOilH3 = 38
73 
74 };
75 
76 struct stTurbomachinery {
77  double AF; // Air fuel ratio
78  double Humidity; // Humidity
79  double MassFlow; // Mass flow (kg/s)
80  double IT_C; // Inlet temperature (degC)
81  double IT_K; // Inlet temperature (K)
82  double IP; // Inlet pressure (bar)
83  double OP; // Outlet pressure (bar)
84  double IP0; // Total inlet pressure (bar)
85  double OP0; // Total outlet pressure (bar)
86  double PR; // Pressure ratio (-)
87  double RTC_C; // Corrected speed (rpm)
88  double TISO_K; // Isoentropic outlet temperature (K)
89  double TREF_K; // Reference map temperature (K)
90  double PREF; // Reference map pressure (K)
91  double TMAP_K; // Original map measurement temperature (K)
92  double MassFlowC; // Corrected mass flow (kg/s)
93  double EFF; // Efficiency
94  double T0_K; // Stagnation temperature (K)
95  double SecIn; // Inlet section (m^2)
96  double SecOut; // Outlet section (m^2)
97  double DIn;
98  double DOut;
99  stHTMair *Fluid;
100  double OT_K; // Outlet temperature (K)
101  double OT0_K; // Total outlet temperature (K)
102  double IT0_K; // Total inlet temperature (K)
103  double EFFMAX;
104  double Power;
105 
106  double funCORRMass() {
107  return MassFlow * sqrt(IT_K / TREF_K) / (IP / PREF);
108  }
109  ;
110 
111  double funUnCORRMass() {
112  return MassFlowC * (IP / PREF) / sqrt(IT_K / TREF_K);
113  }
114  ;
115 
116  double funCORRRTC(double RTC) {
117  return RTC / sqrt(IT_K / TREF_K);
118  }
119  ;
120 
121  double funUnCORRRTC() {
122  return RTC_C * sqrt(IT_K / TREF_K);
123  }
124  ;
125 
126  double funTiso(double sig) {
127  return funT0_in() * pow(PR, sig * (Fluid->g - 1) / Fluid->g);
128  }
129  ;
130 
131  double funP_toTotal(double P, double T, double T0) {
132  return P / pow(T / T0, Fluid->g / (Fluid->g - 1));
133  }
134  ;
135 
136  double funP_toStatic(double P0, double T, double T0) {
137  return P0 * pow(T / T0, Fluid->g / (Fluid->g - 1));
138  }
139  ;
140 
141  double funT0_in() {
142  return IT_K + pow2(MassFlow * 287 * IT_K / __units::BarToPa(IP) / SecIn) / 2 / Fluid->Cp;
143  }
144  ;
145 
146  double funtT0_out() {
147  return OT_K + pow2(MassFlow * 287 * OT_K / __units::BarToPa(OP) / SecOut) / 2 / Fluid->Cp;
148  }
149  ;
150 
151  double funP0() {
152  return IP * pow(T0_K / IT_K, (Fluid->g - 1) / Fluid->g);
153  }
154  ;
155 
156  double funIsoPower(double sig) {
157  return sig * MassFlow * Fluid->Cp * (TISO_K - IT0_K);
158  }
159  ;
160 
161  double funT_toStatic(double T0, double P0, double M) {
162  OT_K = T0;
163  OP = P0;
164  double error = 1;
165  int iter = 0;
166  do {
167  OT_K = T0 - pow2(M * 287 * OT_K / __units::BarToPa(OP) / SecOut) / 2 / Fluid->Cp;
168  error = funP_toStatic(P0, OT_K, T0) - OP;
169  OP = OP + error;
170  iter++;
171  } while(iter < 100 && fabs(error) < 0.001);
172  return OT_K;
173  }
174  ;
175 };
176 
177 struct stNodesHTM {
178  int Gas;
179  int Air;
180  int Oil;
181  int Water;
182  int T;
183  int H1;
184  int H2;
185  int H3;
186  int C;
187  // int OilNm;
188  // int OilOut;
189  int AirIn;
190  int Amb;
191  int O_H1;
192  int O_H3;
193  int O_H2;
194 };
195 
196 struct stCapacity {
197  double T;
198  double H1;
199  double H2;
200  double H3;
201  double C;
202 };
203 
205  double T_H1;
206  double H1_H2;
207  double H2_H3;
208  double H3_C;
209 };
210 
211 struct stOilTemps {
212  double In;
213  double _1;
214  double _2;
215  double _3;
216  double Out;
217 };
218 
219 // struct stConvectivities {
220 // dVector GAS_T;
221 // dVector GAS_H1;
222 // dVector WAT_H2;
223 // dVector OIL_H1;
224 // dVector OIL_H2;
225 // dVector OIL_H3;
226 // dVector AIR_H3;
227 // dVector AIR_C_C;
228 // dVector AIR_C_H;
229 // };
230 
232  dVector Coef;
233  iVector Ind;
234 
235  double Value(dVector Re_Pr_mu) {
236  double val = Coef[0];
237  for(unsigned int i = 1; i < Coef.size(); i++) {
238  val *= pow(Re_Pr_mu[Ind[i - 1]], Coef[i]);
239  }
240  return val;
241  }
242 };
243 
245  stConvCorrelation GAS_T;
246  stConvCorrelation GAS_H1;
247  stConvCorrelation WAT_H2;
248  stConvCorrelation OIL_H1;
249  stConvCorrelation OIL_H2;
250  stConvCorrelation OIL_H3;
251  stConvCorrelation AIR_H3;
252  stConvCorrelation AIR_C_C;
253  stConvCorrelation AIR_C_H;
254  stConvCorrelation AMB_T_N;
255  stConvCorrelation AMB_T_F;
256  stConvCorrelation AMB_C_N;
257  stConvCorrelation AMB_C_F;
258 };
259 
261  double Power;
262  double m;
263  double efft;
264  double Cp;
265  double Tin;
266  double ga;
267 
268  stTurbinePower(double pow, double ma, double efftur, double Ti, double Cpgas, double gam) {
269  Power = pow;
270  m = ma;
271  efft = efftur;
272  Tin = Ti;
273  Cp = Cpgas;
274  ga = gam;
275 
276  }
277 
278  double operator()(const double er) {
279  return Power - efft * m * Cp * Tin * (1 - pow(er, -ga));
280  }
281 
282 };
283 
285  double Power;
286  double m;
287  double effc;
288  double Cp;
289  double Tin;
290  double ga;
291 
292  stCompressorPower(double pow, double ma, double effcom, double Ti, double Cpgas, double gam) {
293  Power = pow;
294  m = ma;
295  effc = effcom;
296  Tin = Ti;
297  Cp = Cpgas;
298  ga = gam;
299  }
300 
301  double operator()(const double cr) {
302  return Power - m * Cp * Tin * (pow(cr, ga) - 1) / effc;
303  }
304 
305 };
306 
307 class TTC_HTM {
308  private:
309 
310  stTurbomachinery FC;
311  stTurbomachinery FT;
312 
313  stNodesHTM FNode;
314 
315  std::vector<std::string> FNodeLabel;
316 
317  double FTime0;
318 
319  // Input oil data
320  double FO_MassFlow; // Oil mass flow (kg/s)
321  double FO_IT_C; // Oil inlet temperature (degC)
322  double FO_IT_K; // Oil inlet temperature (K)
323  double FO_OT_K; // Oil outlet temperature (K)
324  double FO_NT_K; // Oil mech. losses temperature (K)
325  double FO_IP; // Oil inlet pressure (bar)
326 
327  // Input water data
328  double FW_MassFlow;
329  double FW_IT_C;
330  double FW_IT_K;
331  double FW_IP;
332 
333  double FMechEff;
334 
335  stHTMoil *FOil;
336  stOilTemps FOilTemps;
337 
338  stHTMwater *FWater;
339 
340  double FDShaft;
341  double FHD;
342  double FDOil;
343  double FDWater;
344 
345  double FConverge;
346 
347  // Input data turbocharger
348  double FRTC; // Turbocharger Speed (rpm)
349 
350  double FNumberNodes;
351  dVector FRePrmu;
352 
353  dMatrix FMatrix_Kinv;
354  dMatrix FMatrix_KS;
355  dMatrix FMatrix_C;
356  dMatrix FMatrix_KC;
357 
358  dVector FNode_Temp_K;
359  dVector FNode_Temp_K_Tr;
360  dVector FKnown_Temp_K;
361 
362  dMatrix FMatrix_dT;
363  dMatrix FMatrix_HF;
364 
365  bMatrix FMatrix_Conn;
366 
367  stCapacity FCap;
368  stConductivities FCond;
369  stConvectivities FConv;
370 
371  TurboBearings *FMechLosses;
372 
373  inline double K_T_H1() {
374  // return 12.00;
375  return FCond.T_H1;
376  }
377  ;
378 
379  inline double K_H1_H2() {
380  // return 12.11;
381  return FCond.H1_H2;
382  }
383  ;
384 
385  inline double K_H2_H3() {
386  // return 20.05;
387  return FCond.H2_H3;
388  }
389  ;
390 
391  inline double K_H3_C() {
392  // return 3.74;
393  return FCond.H3_C;
394  }
395  ;
396 
397  double Oil_Heat_Flow();
398 
399  public:
400  TTC_HTM(stHTMoil *Oil);
401 
402  ~TTC_HTM();
403 
404  void InputData(double T_AF, double T_Humidity, double T_MassFlow, double T_IT_C, double T_IP, double T_PR,
405  double C_Humidity, double C_MassFlow, double C_IT_C, double C_IP, double C_PR, double O_MassFlow, double O_IT_C,
406  double O_IP, double RTC);
407 
408  void TurbochargerData(double DShaft, double HD, double Doil, double DWater);
409 
410  void TurbochargerWorkingPoint(double RTC, double MechEff, double O_MassFlow, double O_IT, double O_IP, double W_IT,
411  double W_MassFlow);
412 
413  void CompressorData(double PREF, double TREF, double TMAP_K, double Din);
414 
415  void CompressorWorkingPoint(double C_Humidity, double C_MassFlow, double C_IT_C, double C_IP, double C_PR, double EFF);
416 
417  void TurbineData(double PREF, double TREF, double TMAP_K, double Din);
418 
419  void TurbineWorkingPoint(double T_AF, double T_Humidity, double T_MassFlow, double T_IT_C, double T_IP, double T_PR,
420  double EFF);
421 
422  void BuildMatrix();
423 
424  void BuildCMatrix(double dt);
425 
426  void BuildKCMatrix(double dt);
427 
428  void SolveNodeTemperatures(double TET, double TSC, double TEC, double TOIL, double MassOil, double MechLosses,
429  double TW, double TAMB);
430 
431  void SolveNodeTemperaturesTransient(double TET, double TSC, double TEC, double TOIL, double MassOil, double MechLosses,
432  double TW, double TAMB, double time);
433 
434  void SolveHeatFlowMatix();
435 
436  void SolveDeltaTemp();
437 
438  double AdiabaticEff(nmSide Case);
439 
440  double CorrectCompressorMap(double m, double cr, double eff, double TinC, double TinT, double Rtc);
441 
442  double CorrectTurbineMap(double m, double er, double eff, double TinC, double TinT, double Rtc);
443 
444  void AsignTCMechLosses(TurboBearings *MechLosses) {
445  FMechLosses = MechLosses;
446  }
447  ;
448 
449  void Read_HTM(FILE *fich);
450 
451  void InitializeTemp(double TIT, double COT, double CIT, double OIT, double WIT, double TAMB);
452 
453  double Turb_Heat_Flow();
454 
455  double Comp_Heat_Flow();
456 
457  double Comp_Heat_Flow_In();
458 
459  double NodeTemperature(int i) {
460  return FNode_Temp_K_Tr[i];
461  }
462  ;
463 
464  void PrintInsTemperatures(stringstream & insoutput);
465 
466  void HeaderInsTemperatures(stringstream & insoutput);
467 
468  void PrintInsHeatFlow(stringstream & insoutput);
469 
470  void HeaderInsHeatFlow(stringstream & insoutput);
471 
472  void SolveDeltaTempTr();
473 
474 };
475 // ---------------------------------------------------------------------------
476 #endif
stOilTemps
Definition: TTC_HTM.h:211
stNodesHTM
Definition: TTC_HTM.h:177
stHTMair
Definition: THTM_Fluids.h:78
stHTMwater
Definition: THTM_Fluids.h:249
TTC_HTM
Definition: TTC_HTM.h:307
stConvectivities
Definition: TTC_HTM.h:244
stCompressorPower
Definition: TTC_HTM.h:284
stHTMoil
Definition: THTM_Fluids.h:176
iVector
std::vector< int > iVector
Integer vector.
Definition: Math_wam.h:72
stTurbomachinery
Definition: TEffCorrector.h:9
stConductivities
Definition: TTC_HTM.h:204
TurboBearings
The TurboBearings class represent the bearing system in a turbocharger.
Definition: turbo_bearings.hpp:44
dMatrix
std::vector< std::vector< double > > dMatrix
2-dimensional double matrix
Definition: Math_wam.h:71
bMatrix
std::vector< std::vector< bool > > bMatrix
2-dimensional boolean matrix
Definition: Math_wam.h:75
stConvCorrelation
Definition: TTC_HTM.h:231
pow2
T pow2(T x)
Returns x to the power of 2.
Definition: Math_wam.h:88
stCapacity
Definition: TTC_HTM.h:196
stTurbinePower
Definition: TTC_HTM.h:260
dVector
std::vector< double > dVector
Double vector.
Definition: Math_wam.h:70
turbo_bearings.hpp