OpenWAM
TEffCorrector.cpp
1 // ---------------------------------------------------------------------------
2 
3 #pragma hdrstop
4 
5 #include "TEffCorrector.h"
6 
7 // ---------------------------------------------------------------------------
8 
9 TEffCorrector::TEffCorrector() {
10 
11  FNumberNodes = 8;
12 
13  FMatriz_KS.resize(FNumberNodes);
14  for(int i = 0; i < FNumberNodes; i++) {
15  FMatriz_KS[i].resize(FNumberNodes, 0.0);
16  // for (int j = 0; j < FNumberNodes; j++) {
17  // FMatriz_KS[i][j] = 0.0;
18  // }
19  }
20  FMatrix_dT.resize(FNumberNodes);
21  for(int i = 0; i < FNumberNodes; i++) {
22  FMatrix_dT[i].resize(FNumberNodes, 0.0);
23  }
24  FMatrix_HF.resize(FNumberNodes);
25  for(int i = 0; i < FNumberNodes; i++) {
26  FMatrix_HF[i].resize(FNumberNodes, 0.0);
27  }
28  FNode_Temp_K.resize(FNumberNodes);
29 
30  TurbineNode = 0;
31  CompressorNode = 1;
32  OilNode = 2;
33 }
34 
35 TEffCorrector::~TEffCorrector() {
36 }
37 
38 void TEffCorrector::InputData(double T_AF, double T_Humidity, double T_MassFlow, double T_IT_C, double T_IP,
39  double T_PR, double C_Humidity, double C_MassFlow, double C_IT_C, double C_IP, double C_PR, double O_MassFlow,
40  double O_IT_C, double O_IP, double RTC) {
41 
42  FT.AF = T_AF; // Turbine A/F
43  FT.Humidity = T_Humidity; // Turbine Humidity
44  FT.MassFlow = T_MassFlow; // Turbine mass flow (kg/s)
45  FT.IT_C = T_IT_C; // Turbine Inlet Temperature (degC)
46  FT.IT_K = __units::degCToK(FT.IT_C); // Turbine Inlet Temperature (K)
47  FT.IP = T_IP; // Turbine Inlet Pressure (bar)
48  FT.PR = T_PR; // Turbine expansion ratio (-)
49 
50  // Input compressor data
51  FC.Humidity = C_Humidity; // Compressor Humidity;
52  FC.MassFlow = C_MassFlow; // Compressor mass flow (kg/s)
53  FC.IT_C = C_IT_C; // Compressor inlet temperature (degC)
54  FC.IT_K = __units::degCToK(FC.IT_C); // Compressor inlet temperature (K)
55  FC.IP = C_IP; // Compressor inelt pressure (bar)
56  FC.PR = C_PR; // Compressor compression ratio (-)
57 
58  // Input oil data
59  FO_MassFlow = O_MassFlow; // Oil mass flow (kg/s)
60  FO_IT_C = O_IT_C; // Oil inlet temperature (degC)
61  FO_IT_K = __units::degCToK(FO_IT_C); // Oil inlet temperature (K)
62  FO_IP = O_IP; // Oil inlet pressure (bar)
63 
64  // Input data turbocharger
65  FRTC = RTC; // Turbocharger Speed
66 
67  FT.MassFlowC = FT.funCORRMass();
68  FT.RTC_C = FC.funCORRRTC(RTC);
69  FT.TISO_K = FC.funTiso(1.4, 1.);
70 
71  FC.MassFlowC = FT.funCORRMass();
72  FC.RTC_C = FC.funCORRRTC(RTC);
73  FC.TISO_K = FC.funTiso(1.32, -1.);
74 
75 }
76 
77 void TEffCorrector::BuidMatrix() {
78 
79  double Re_mass_tur = 0., Re_mass_com = 0., Re_shaft = 0., Re_mass_oil = 0.;
80  double k_air_T = 0., k_air_C = 0., k_oil = 0.;
81  double Pr_oil = 0.;
82  double mu_oil_h1 = 0., mu_oil_h2 = 0., mu_oil_h3 = 0.;
83 
84  FMatriz_KS[0][0] = 1.0;
85  FMatriz_KS[1][1] = 1.0;
86  FMatriz_KS[2][2] = 1.0;
87 
88  FMatriz_KS[3][0] = hAk_GAS_T(Re_mass_tur, Re_shaft) * k_air_T;
89 
90  FMatriz_KS[4][2] = hAk_H1_OIL(Re_mass_oil, Re_shaft, Pr_oil, mu_oil_h1) * k_oil;
91  FMatriz_KS[4][3] = K_T_H1();
92 
93  FMatriz_KS[5][2] = hAk_H2_OIL(Re_mass_oil, Re_shaft, Pr_oil, mu_oil_h2) * k_oil;
94  FMatriz_KS[5][4] = K_H1_H2();
95 
96  FMatriz_KS[6][1] = hAk_H3_AIR(Re_mass_com) * k_air_C;
97  FMatriz_KS[6][2] = hAk_H3_OIL(Re_mass_oil, Re_shaft, Pr_oil, mu_oil_h3) * k_oil;
98  FMatriz_KS[6][5] = K_H2_H3();
99 
100  FMatriz_KS[7][1] = hAk_C_AIR(Re_mass_com) * k_air_C;
101  FMatriz_KS[7][6] = K_H3_C();
102 
103  FMatriz_KS[3][4] = FMatriz_KS[4][3];
104  FMatriz_KS[4][5] = FMatriz_KS[5][4];
105  FMatriz_KS[5][6] = FMatriz_KS[6][5];
106  FMatriz_KS[6][7] = FMatriz_KS[7][6];
107 
108  for(int i = 3; i < FNumberNodes; i++) {
109  FMatriz_KS[i][i] = 0;
110  for(int j = 0; j < FNumberNodes; j++) {
111  if(i != j)
112  FMatriz_KS[i][i] -= FMatriz_KS[i][j];
113  }
114 
115  }
116 
117 }
118 
119 void TEffCorrector::SolveNodeTemperatures(double TET, double TSC, double TOIL) {
120 
121  LUdcmp TempSolver(FMatriz_KS);
122 
123  dVector InputTemp;
124  InputTemp.resize(FNumberNodes, 0.0);
125 
126  InputTemp[0] = TET;
127  InputTemp[1] = TSC;
128  InputTemp[2] = TOIL;
129 
130  TempSolver.solve(InputTemp, FNode_Temp_K);
131 }
132 
133 void TEffCorrector::SolveDeltaTemp() {
134 
135  for(int i = 0; i < FNumberNodes; i++) {
136  for(int j = 0; j < FNumberNodes; j++) {
137  FMatrix_dT[i][j] = FNode_Temp_K[j] - FNode_Temp_K[i];
138  }
139  }
140 
141 }
142 
143 void TEffCorrector::SolveHeatFlowMatix() {
144 
145  for(int i = 0; i < FNumberNodes; i++) {
146  for(int j = 0; j < FNumberNodes; j++) {
147  FMatrix_HF[i][j] = FMatriz_KS[i][j] * FMatrix_dT[i][j];
148  }
149  }
150 }
151 
152 double TEffCorrector::Turb_Heat_Flow() {
153 
154  double heat = 0;
155 
156  for(int i = 0; i < FNumberNodes; i++) {
157  heat += FMatrix_HF[i][TurbineNode];
158  }
159  return heat;
160 }
161 
162 double TEffCorrector::Comp_Heat_Flow() {
163 
164  double heat = 0;
165 
166  for(int i = 0; i < FNumberNodes; i++) {
167  heat += FMatrix_HF[i][CompressorNode];
168  }
169  return heat;
170 }
171 
172 double TEffCorrector::Oil_Heat_Flow() {
173 
174  double heat = 0;
175 
176  for(int i = 0; i < FNumberNodes; i++) {
177  heat += FMatrix_HF[i][OilNode];
178  }
179  return heat;
180 }
181 
182 #pragma package(smart_init)
LUdcmp
Definition: Math_wam.h:758
dVector
std::vector< double > dVector
Double vector.
Definition: Math_wam.h:70