9 TSAEMap::TSAEMap(
int i) :
24 void TSAEMap::ReadSAECompressorMap(FILE *fich) {
26 double speed = 0., mass = 0., pres = 0., eff = 0.;
31 double speedmax = 0, massmax = 0, presmax = 1, effmax = 0;
34 fscanf(fich,
"%d", &points);
41 fscanf(fich,
"%lf %lf %lf %lf", &speed, &mass, &pres, &eff);
42 mass *= FMassMultiplier;
43 pres = (pres - 1.) * FCRMultiplier + 1.;
44 eff *= FEffMultiplier;
48 if(speed != FSpeed[i][j - 1]) {
57 FMassMAX.push_back(massmax);
58 FPresMAX.push_back(presmax);
59 FEffMAX.push_back(effmax);
76 FSpeed[i].push_back(speed);
77 FMass[i].push_back(mass);
78 FPres[i].push_back(pres);
79 FEff[i].push_back(eff);
83 FMassMAX.push_back(massmax);
84 FPresMAX.push_back(presmax);
85 FEffMAX.push_back(effmax);
88 FNumLines = FSpeed.size();
94 for(
int i = 0; i < FNumLines; i++) {
95 FSpeedVec.push_back(FSpeed[i][0]);
97 if(FMassMAX[i] > FMassMAXMAX)
98 FMassMAXMAX = FMassMAX[i];
99 if(FPresMAX[i] > FPresMAXMAX)
100 FPresMAXMAX = FPresMAX[i];
101 if(FEffMAX[i] > FEffMAXMAX)
102 FEffMAXMAX = FEffMAX[i];
105 AdimensionalizeMap();
109 void TSAEMap::AdimensionalizeMap() {
114 FMassAdim.resize(FNumLines);
115 FPresAdim.resize(FNumLines);
116 FEffAdim.resize(FNumLines);
118 FPre_MassCurve.resize(FNumLines);
119 FEff_MassCurve.resize(FNumLines);
121 for(
int i = 0; i < FNumLines; i++) {
122 FSpeedAdim.push_back(FSpeedVec[i] / FSpeedMAX);
124 FMassMAXAdim.push_back(FMassMAX[i] / FMassMAXMAX);
125 FPresMAXAdim.push_back((FPresMAX[i] - 1) / (FPresMAXMAX - 1));
126 FEffMAXAdim.push_back(FEffMAX[i] / FEffMAXMAX);
127 for(
unsigned int j = 0; j < FSpeed[i].size(); j++) {
129 FMassAdim[i].push_back(FMass[i][j] / FMassMAX[i]);
130 FPresAdim[i].push_back((FPres[i][j] - 1) / (FPresMAX[i] - 1));
131 FEffAdim[i].push_back(FEff[i][j] / FEffMAX[i]);
133 FMassAdim[i].insert(FMassAdim[i].begin(), 0);
134 FPresAdim[i].insert(FPresAdim[i].begin(), FPresAdim[i][0]);
135 FEffAdim[i].insert(FEffAdim[i].begin(), FEffAdim[i][0]);
137 FPre_MassCurve[i] =
new Hermite_interp(FMassAdim[i], FPresAdim[i]);
138 FEff_MassCurve[i] =
new Hermite_interp(FMassAdim[i], FEffAdim[i]);
141 FSpeedAdim.insert(FSpeedAdim.begin(), 0.);
142 FMassMAXAdim.insert(FMassMAXAdim.begin(), 0.);
143 FPresMAXAdim.insert(FPresMAXAdim.begin(), 0.);
144 FEffMAXAdim.insert(FEffMAXAdim.begin(), 0.);
154 void TSAEMap::InterpolateMAP(
double RTC) {
156 FRTCAdim = RTC / FSpeedMAX;
157 FCurrentIND = FMassMAX_int->locate(FRTCAdim);
162 FCurrentIND = FMassMAX_int->locate(FRTCAdim);
163 FCurrentMassMAX = FMassMAX_int->interp(FRTCAdim) * FMassMAXMAX;
164 FCurrentPresMAX = FPresMAX_int->interp(FRTCAdim) * (FPresMAXMAX - 1.) + 1.;
165 FCurrentEffMAX = FEffMAX_int->interp(FRTCAdim) * FEffMAXMAX;
166 FDeltaLow = (FRTCAdim - FSpeedAdim[FCurrentIND]) / (FSpeedAdim[FCurrentIND + 1] - FSpeedAdim[FCurrentIND]);
169 FCurrentIND = FNumLines;
170 FCurrentMassMAX = pow(FRTCAdim, 1.2) * FMassMAXMAX;
171 FCurrentPresMAX = pow(FRTCAdim, 1.2) * (FPresMAXMAX - 1.) + 1.;
172 FCurrentEffMAX = exp(1 - FRTCAdim) * FEffMAX_int->interp(FRTCAdim) * FEffMAXMAX;
181 double TSAEMap::GetCurrentRC(
double Mass) {
183 double massadim = Mass / FCurrentMassMAX;
184 double CurrentRC = 0.;
186 if(FCurrentIND == 0) {
187 CurrentRC = (FDeltaLow * FPre_MassCurve[FCurrentIND]->interp(massadim)) * (FCurrentPresMAX - 1) + 1;
188 }
else if(FCurrentIND == FNumLines) {
189 CurrentRC = FPre_MassCurve[FCurrentIND - 1]->interp(massadim) * (FCurrentPresMAX - 1) + 1;
191 double pres_lo = FPre_MassCurve[FCurrentIND - 1]->interp(massadim);
192 double pres_hi = FPre_MassCurve[FCurrentIND]->interp(massadim);
194 CurrentRC = ((1 - FDeltaLow) * pres_lo + FDeltaLow * pres_hi) * (FCurrentPresMAX - 1) + 1;
200 double TSAEMap::GetCurrentEff(
double Mass) {
202 double massadim = Mass / FCurrentMassMAX;
203 double CurrentEff = 0.;
205 if(FCurrentIND == 0) {
206 CurrentEff = (FDeltaLow * FEff_MassCurve[FCurrentIND]->interp(massadim)) * FCurrentEffMAX;
207 }
else if(FCurrentIND == FNumLines) {
208 CurrentEff = FEff_MassCurve[FCurrentIND - 1]->interp(massadim) * FCurrentEffMAX;
210 double pres_lo = FEff_MassCurve[FCurrentIND - 1]->interp(massadim);
211 double pres_hi = FEff_MassCurve[FCurrentIND]->interp(massadim);
213 CurrentEff = ((1 - FDeltaLow) * pres_lo + FDeltaLow * pres_hi) * FCurrentEffMAX;
219 void TSAEMap::LeeMapa(FILE *fich) {
223 fscanf(fich,
"%lf %lf ", &FPresionRef, &FTempRef);
224 FTempRef = __units::degCToK(FTempRef);
225 FPresionRef = __units::BarToPa(FPresionRef);
227 fscanf(fich,
"%lf %lf %lf ", &FMassMultiplier, &FCRMultiplier, &FEffMultiplier);
229 fscanf(fich,
"%d ", &Adiab);
231 FIsAdiabatic =
false;
232 fscanf(fich,
"%lf ", &FTempMeasure);
236 ReadSAECompressorMap(fich);
239 double TSAEMap::EvaluaRCHermite(
double mass) {
240 return GetCurrentRC(mass);
243 double TSAEMap::EvaluaRendSplines(
double mass) {
244 return GetCurrentEff(mass);
247 double TSAEMap::getGastoRelComp1() {
248 return FCurrentMassMAX;
251 double TSAEMap::getRelCompBombeo() {
252 if(FCurrentIND == 0) {
253 return (1 - FDeltaLow) + FDeltaLow * FPres[FCurrentIND][0];
255 if(FCurrentIND == FNumLines) {
256 return (FPres[FCurrentIND - 1][0] - 1) * pow(FRTCAdim, 1.2) + 1;
258 return (1 - FDeltaLow) * FPres[FCurrentIND - 1][0] + FDeltaLow * FPres[FCurrentIND][0];
262 double TSAEMap::getGastoBombeo() {
263 if(FCurrentIND == FNumLines) {
264 return FMass[FCurrentIND - 1][0] * pow(FRTCAdim, 1.2);
266 return (1 - FDeltaLow) * FMass[FCurrentIND - 1][0] + FDeltaLow * FMass[FCurrentIND][0];
270 void TSAEMap::InterpolaMapa(
double rtc,
double T10) {
271 double rtc_cor = rtc * sqrt(FTempRef / T10);
273 InterpolateMAP(rtc_cor);
276 double TSAEMap::getRegimenCorregido() {
277 return FRTCAdim * FSpeedMAX;
280 void TSAEMap::PutReference(
double pref,
double tref) {
285 void TSAEMap::CalculateAdiabaticEfficiency(
TTC_HTM *HTM,
double TinT) {
287 double m = 0., eff = 0., Rtc = 0.;
290 for(
int i = 0; i < FNumLines; i++) {
291 for(
unsigned int j = 0; j < FSpeed[i].size(); j++) {
292 m = FMass[i][j] / __units::PaToBar(FPresionRef) / sqrt
293 (FTempMeasure / FTempRef);
294 Rtc = FSpeed[i][j] / sqrt(FTempRef / FTempMeasure);
296 FEff[i][j] = HTM->CorrectCompressorMap(m, FPres[i][j],
297 FEff[i][j], FTempMeasure, TinT, Rtc);
299 FEffMAX[i] = FEff[i][j];
300 else if(FEff[i][j] > FEffMAX[i])
301 FEffMAX[i] = FEff[i][j];
303 for(
unsigned int j = 0; j < FSpeed[i].size(); j++) {
304 FEffAdim[i][j] = FEff[i][j] / FEffMAX[i];
307 if(FEff_MassCurve[i] != NULL)
308 delete FEff_MassCurve[i];
310 FEff_MassCurve[i] =
new Hermite_interp(FMassAdim[i], FEffAdim[i]);
312 FEffMAXMAX = FEffMAX[i];
313 else if(FEffMAX[i] > FEffMAXMAX)
314 FEffMAXMAX = FEffMAX[i];
316 for(
int i = 0; i < FNumLines; i++) {
317 FEffMAXAdim[i] = FEffMAX[i] / FEffMAXMAX;
319 if(FEffMAX_int != NULL)
328 #pragma package(smart_init)