36 #include "TMapaComp2Tub.h"
41 TMapaComp2Tub::TMapaComp2Tub(
int i) :
45 FGastoRelComp1 = NULL;
47 FRelCompBombeo = NULL;
53 FCoefSplBombeo = NULL;
57 FNumCurvasRenAd = NULL;
73 FRendCurvaBombeo = 0.4;
75 FRendGastoMaximo = 0.4;
80 FGastoCompNuevo = NULL;
89 TMapaComp2Tub::~TMapaComp2Tub() {
90 if(FGastoRelComp1 != NULL)
91 delete[] FGastoRelComp1;
92 FGastoRelComp1 = NULL;
93 if(FGastoBombeo != NULL)
94 delete[] FGastoBombeo;
96 if(FRelCompBombeo != NULL)
97 delete[] FRelCompBombeo;
98 FRelCompBombeo = NULL;
99 if(FRelComp != NULL) {
100 for(
int i = 0; i < FNumCurvasReg; i++) {
101 delete[] FRelComp[i];
106 if(FGastoRend != NULL) {
107 for(
int i = 0; i < FNumCurvasReg; i++) {
108 delete[] FGastoRend[i];
114 for(
int i = 0; i < FNumCurvasReg; i++) {
126 if(FCoefSplBombeo != NULL)
127 delete[] FCoefSplBombeo;
128 FCoefSplBombeo = NULL;
129 if(FCoefSplRC != NULL)
132 if(FRegimenCurva != NULL)
133 delete[] FRegimenCurva;
134 FRegimenCurva = NULL;
135 if(FNumCurvasRen != NULL)
136 delete[] FNumCurvasRen;
137 FNumCurvasRen = NULL;
138 if(FNumCurvasRenAd != NULL)
139 delete[] FNumCurvasRenAd;
140 FNumCurvasRenAd = NULL;
141 if(FCoefbSup != NULL) {
142 for(
int i = 0; i < FNumCurvasReg; i++) {
143 delete[] FCoefbSup[i];
148 if(FCoefbInf != NULL) {
149 for(
int i = 0; i < FNumCurvasReg; i++) {
150 delete[] FCoefbInf[i];
155 if(FCoefcSup != NULL) {
156 for(
int i = 0; i < FNumCurvasReg; i++) {
157 delete[] FCoefcSup[i];
162 if(FCoefcInf != NULL) {
163 for(
int i = 0; i < FNumCurvasReg; i++) {
164 delete[] FCoefcInf[i];
169 if(FCoefdSup != NULL) {
170 for(
int i = 0; i < FNumCurvasReg; i++) {
171 delete[] FCoefdSup[i];
176 if(FCoefdInf != NULL) {
177 for(
int i = 0; i < FNumCurvasReg; i++) {
178 delete[] FCoefdInf[i];
185 delete[] FRelCompInt;
193 if(FGastoAdim != NULL) {
194 for(
int i = 0; i < FNumCurvasReg; i++) {
195 delete[] FGastoAdim[i];
200 if(FRendAdim != NULL) {
201 for(
int i = 0; i < FNumCurvasReg; i++) {
202 delete[] FRendAdim[i];
207 if(FCoefSplRend != NULL) {
208 for(
int i = 0; i < FNumCurvasReg; i++) {
209 delete[] FCoefSplRend[i];
211 delete[] FCoefSplRend;
223 if(FRelCompNuevo != NULL) {
224 for(
int i = 0; i < FNumCurvasReg; i++) {
225 delete[] FRelCompNuevo[i];
227 delete[] FRelCompNuevo;
229 FRelCompNuevo = NULL;
230 if(FGastoCompNuevo != NULL)
231 delete[] FGastoCompNuevo;
232 FGastoCompNuevo = NULL;
243 void TMapaComp2Tub::LeeMapa(FILE *fich) {
247 std::cout <<
"LECTURA MAPA COMPRESOR" << std::endl;
248 std::cout <<
"______________________" << std::endl;
249 fscanf(fich,
"%lf %lf ", &FPresionRef, &FTempRef);
250 FTempRef = __units::degCToK(FTempRef);
251 FPresionRef = __units::BarToPa(FPresionRef);
253 std::cout <<
"Datos de Referencia:" << std::endl;
254 std::cout <<
"Pressure: " << FPresionRef <<
" Pa" << std::endl;
255 std::cout <<
"Temperature: " << FTempRef <<
" K" << std::endl;
258 fscanf(fich,
"%lf %lf %lf ", &FRegMin, &FRegMax, &FIncReg);
259 FNumCurvasReg = floor(((FRegMax - FRegMin) / FIncReg) + 0.5) + 1;
262 fscanf(fich,
"%lf %lf %lf ", &FGastoMin, &FGastoMax, &FIncGasto);
263 FGastoMin *= FMassMultiplier;
264 FGastoMax *= FMassMultiplier;
265 FIncGasto *= FMassMultiplier;
266 FNumPuntosGasto = floor(((FGastoMax - FGastoMin) / FIncGasto) + 0.5) + 1;
269 fscanf(fich,
"%d ", &FNumCurvasRendMax);
273 FGastoRelComp1 =
new double[FNumCurvasReg];
274 FGastoBombeo =
new double[FNumCurvasReg + 1];
275 FRelCompBombeo =
new double[FNumCurvasReg + 1];
276 FRegimenCurva =
new double[FNumCurvasReg];
277 FNumCurvasRen =
new int[FNumCurvasReg];
278 FNumCurvasRenAd =
new int[FNumCurvasReg];
279 FCoefSplBombeo =
new double[FNumCurvasReg + 1];
281 FRelComp =
new double*[FNumCurvasReg];
282 for(
int i = 0; i < FNumCurvasReg; i++) {
283 FRelComp[i] =
new double[FNumPuntosGasto];
286 FGastoRend =
new double*[FNumCurvasReg];
287 FRend =
new double*[FNumCurvasReg];
288 for(
int i = 0; i < FNumCurvasReg; i++) {
289 FGastoRend[i] =
new double[FNumCurvasRendMax];
290 FRend[i] =
new double[FNumCurvasRendMax];
295 for(
int i = 0; i < FNumCurvasReg; i++) {
296 FRegimenCurva[i] = FRegMin + FIncReg * (double) i;
297 fscanf(fich,
"%lf ", &FGastoRelComp1[i]);
298 FGastoRelComp1[i] *= FMassMultiplier;
300 fscanf(fich,
"%lf %lf ", &FGastoBombeo[i], &FRelCompBombeo[i]);
301 FGastoBombeo[i] *= FMassMultiplier;
302 FRelCompBombeo[i] = (FRelCompBombeo[i] - 1) * FCRMultiplier + 1;
304 for(
int j = 0; j < FNumPuntosGasto; j++) {
305 fscanf(fich,
"%lf ", &FRelComp[i][j]);
306 FRelComp[i][j] = (FRelComp[i][j] - 1) * FCRMultiplier + 1;
308 FNumCurvasRen[i] = 0;
309 for(
int j = 0; j < FNumCurvasRendMax; j++) {
310 fscanf(fich,
"%lf %lf ", &FGastoRend[i][j], &FRend[i][j]);
311 FGastoRend[i][j] = FGastoRend[i][j] * FMassMultiplier;
312 FRend[i][j] = FRend[i][j] * FEffMultiplier;
313 if(FRend[i][j] > 0.) {
316 if(FGastoRend[i][j] > FGastoRelComp1[i]) {
317 std::cout <<
"WARNING: Existen puntos de rendimiento en la curva de regimen: " << FRegimenCurva[i] << std::endl;
318 std::cout <<
" con valores de massflow mayores del massflow de relacion de compresion 1" << std::endl;
319 std::cout <<
" -Valor del massflow del punto de rendimiento: " << FGastoRend[i][j] << std::endl;
320 std::cout <<
" -Valor del massflow de relacion de compresion 1: " << FGastoRelComp1[i] << std::endl;
321 std::cout <<
" Revisa el mapa. Esto puede inducir errores importantes de interpolacion" << std::endl;
322 std::cout <<
" en el compresor numero " << FNumeroCompresor << std::endl << std::endl;
327 Cambio_Mapa(FRadioTip, FRadioHub, FRadioRodete);
333 for(
int i = FNumCurvasReg; i > 0; --i) {
334 FGastoBombeo[i] = FGastoBombeo[i - 1];
335 FRelCompBombeo[i] = FRelCompBombeo[i - 1];
337 FGastoBombeo[0] = 0.;
338 FRelCompBombeo[0] = 1.;
340 Hermite(FNumCurvasReg + 1, FGastoBombeo, FRelCompBombeo, FCoefSplBombeo);
343 FGastoAdim =
new double*[FNumCurvasReg];
344 FRendAdim =
new double*[FNumCurvasReg];
345 FCoefSplRend =
new double*[FNumCurvasReg];
346 bool RendEnBombeo =
false;
347 for(
int i = 0; i < FNumCurvasReg; i++) {
348 if(FGastoRend[i][0] < FGastoBombeo[i + 1] * 1.001 && FGastoRend[i][0] > FGastoBombeo[i + 1] * 0.999) {
349 FNumCurvasRenAd[i] = FNumCurvasRen[i] + 1;
351 std::cout <<
"INFO: Surge limit for " << FRegimenCurva[i] <<
" rpm iso-speed line has an efficiency value deffined" <<
354 FNumCurvasRenAd[i] = FNumCurvasRen[i] + 2;
355 RendEnBombeo =
false;
356 std::cout <<
"INFO: Surge limit for " << FRegimenCurva[i] <<
357 " rpm iso-speed line does not have an efficiency value deffined" << std::endl;
359 FGastoAdim[i] =
new double[FNumCurvasRenAd[i]];
360 FRendAdim[i] =
new double[FNumCurvasRenAd[i]];
361 FCoefSplRend[i] =
new double[FNumCurvasRenAd[i]];
363 FGastoAdim[i][0] = 0.;
365 FRendAdim[i][0] = FRend[i][0];
367 FRendAdim[i][0] = FRendCurvaBombeo;
370 FGastoAdim[i][FNumCurvasRenAd[i] - 1] = 1.;
371 FRendAdim[i][FNumCurvasRenAd[i] - 1] = FRendGastoMaximo;
372 for(
int j = 1; j < FNumCurvasRenAd[i] - 1; j++) {
374 FGastoAdim[i][j] = (FGastoRend[i][j] - FGastoBombeo[i + 1]) / (FGastoRelComp1[i] - FGastoBombeo[i + 1]);
375 FRendAdim[i][j] = FRend[i][j];
377 FGastoAdim[i][j] = (FGastoRend[i][j - 1] - FGastoBombeo[i + 1]) / (FGastoRelComp1[i] - FGastoBombeo[i + 1]);
378 FRendAdim[i][j] = FRend[i][j - 1];
380 if(FGastoAdim[i][j] <= FGastoAdim[i][j - 1]) {
381 std::cout <<
"WARNING: La tabla Massflow-Rendimiento en el regimen de " << FRegimenCurva[i] <<
" rpm esta desordenada"
383 std::cout <<
" Si se continua con este mapa pueden aparecer errores en la interpolacion" << std::endl;
384 std::cout <<
" Ordene los datos de forma creciente en massflow" << std::endl;
387 Hermite(FNumCurvasRenAd[i], FGastoAdim[i], FRendAdim[i], FCoefSplRend[i]);
391 }
catch(exception &N) {
392 std::cout <<
"ERROR: LeeMapa en el compresor: " << FNumeroCompresor << std::endl;
393 std::cout <<
"Tipo de error: " << N.what() << std::endl;
396 throw Exception(
"ERROR: LeeMapa en el compresor: " + std::to_string(FNumeroCompresor) + N.what());
406 void TMapaComp2Tub::Spline(
int n,
double *x,
double *y,
double *sol) {
408 double Espaciado = 0.;
410 for(
int i = 1; i < n; ++i) {
411 FSpl[i].h = x[i] - x[i - 1];
412 FSpl[i].dif = y[i] - y[i - 1];
413 if(FSpl[i].h <= 0.) {
414 std::cout <<
"ERROR: Error al crear la spline" << std::endl;
415 std::cout <<
" Los valores en X no estan ordenados o existen 2 puntos situados en el mismo X" << std::endl <<
417 throw Exception(
"ERROR: Error al crear la spline");
423 for(
int i = 1; i < n - 1; ++i) {
424 Espaciado = FSpl[i + 1].h / FSpl[i].h;
425 if(Espaciado < 0.1 || Espaciado > 10.) {
426 std::cout <<
"WARNING: Deberias utilizar una distribucion mas uniforme entre los valores de X" << std::endl;
427 std::cout <<
" utilizados para ajustar la spline y asi evitar problemas" << std::endl << std::endl;
429 FSpl[i].d = 2 * (FSpl[i + 1].h + FSpl[i].h);
430 FSpl[i].d1 = FSpl[i + 1].h;
431 FSpl[i].b = (FSpl[i + 1].dif / FSpl[i + 1].h - FSpl[i].dif / FSpl[i].h) * 6.;
434 FSpl[1].ud = sqrt(FSpl[1].d);
435 for(
int i = 2; i < n - 1; i++) {
436 FSpl[i - 1].ud1 = FSpl[i - 1].d1 / FSpl[i - 1].ud;
437 FSpl[i].ud = sqrt(FSpl[i].d - FSpl[i - 1].ud1 * FSpl[i - 1].ud1);
440 FSpl[1].yp = FSpl[1].b / FSpl[1].ud;
441 for(
int i = 2; i < n - 1; ++i) {
442 FSpl[i].yp = (FSpl[i].b - FSpl[i - 1].ud1 * FSpl[i - 1].yp) / FSpl[i].ud;
449 sol[n - 2] = FSpl[n - 2].yp / FSpl[n - 2].ud;
452 for(
int i = n - 3; i >= 1; --i) {
453 sol[i] = (FSpl[i].yp - FSpl[i].ud1 * sol[i + 1]) / FSpl[i].ud;
462 }
catch(exception &N) {
463 std::cout <<
"ERROR: Spline en el compresor: " << FNumeroCompresor << std::endl;
464 std::cout <<
"Tipo de error: " << N.what() << std::endl;
465 throw Exception(
"ERROR: Spline en el compresor: ");
543 void TMapaComp2Tub::SplineVector(
int n, std::vector<double> x, std::vector<double> y, std::vector<double> sol) {
545 double Espaciado = 0.;
547 std::vector<stSpline2Tub> Spl;
552 for(
int i = 1; i < n; ++i) {
553 Spl[i].h = x[i] - x[i - 1];
554 Spl[i].dif = y[i] - y[i - 1];
556 std::cout <<
"ERROR: Error al crear la spline" << std::endl;
557 std::cout <<
" Los valores en X no estan ordenados o existen 2 puntos situados en el mismo X" << std::endl <<
559 throw Exception(
"ERROR: Error al crear la spline");
565 for(
int i = 1; i < n - 1; ++i) {
566 Espaciado = Spl[i + 1].h / Spl[i].h;
567 if(Espaciado < 0.1 || Espaciado > 10.) {
568 std::cout <<
"WARNING: Deberias utilizar una distribucion mas uniforme entre los valores de X" << std::endl;
569 std::cout <<
" utilizados para ajustar la spline y asi evitar problemas" << std::endl << std::endl;
571 Spl[i].d = 2 * (Spl[i + 1].h + Spl[i].h);
572 Spl[i].d1 = Spl[i + 1].h;
573 Spl[i].b = (Spl[i + 1].dif / Spl[i + 1].h - Spl[i].dif / Spl[i].h) * 6.;
576 Spl[1].ud = sqrt(Spl[1].d);
577 for(
int i = 2; i < n - 1; i++) {
578 Spl[i - 1].ud1 = Spl[i - 1].d1 / Spl[i - 1].ud;
579 Spl[i].ud = sqrt(Spl[i].d - Spl[i - 1].ud1 * Spl[i - 1].ud1);
582 Spl[1].yp = Spl[1].b / Spl[1].ud;
583 for(
int i = 2; i < n - 1; ++i) {
584 Spl[i].yp = (Spl[i].b - Spl[i - 1].ud1 * Spl[i - 1].yp) / Spl[i].ud;
591 sol[n - 2] = Spl[n - 2].yp / Spl[n - 2].ud;
593 for(
int i = n - 3; i >= 1; --i) {
594 sol[i] = (Spl[i].yp - Spl[i].ud1 * sol[i + 1]) / Spl[i].ud;
600 }
catch(exception &N) {
601 std::cout <<
"ERROR: Spline en el compresor: " << FNumeroCompresor << std::endl;
602 std::cout <<
"Tipo de error: " << N.what() << std::endl;
603 throw Exception(
"ERROR: Spline en el compresor: ");
613 double TMapaComp2Tub::EvaluaSpline(
double punto,
int n,
double *x,
double *y,
double *sol) {
617 while(x[k] < punto && k < n - 1) {
625 double h = x[k + 1] - x[k];
627 double dx1 = x[k + 1] - punto;
628 double dx2 = punto - x[k];
629 double dx13 =
pow3(dx1);
630 double dx23 =
pow3(dx2);
632 double ret_val = (sol[k] * dx13 + sol[k + 1] * dx23 + (6 * y[k + 1] - h2 * sol[k + 1]) * dx2 +
633 (6 * y[k] - h2 * sol[k]) * dx1) / (6 * h);
637 }
catch(exception &N) {
638 std::cout <<
"ERROR: EvaluaSpline en el compresor: " << FNumeroCompresor << std::endl;
639 std::cout <<
"Tipo de error: " << N.what() << std::endl;
640 throw Exception(
"ERROR: EvaluaSpline en el compresor: ");
718 double TMapaComp2Tub::InterpolaLineal(
double punto,
int n,
double *x,
double *y) {
727 }
else if(punto > x[n - 1]) {
730 while(x[k] < punto && k < n - 1) {
733 delta = (punto - x[k - 1]) / (x[k] - x[k - 1]);
734 ret_val = y[k] * delta + y[k - 1] * (1 - delta);
740 }
catch(exception &N) {
741 std::cout <<
"ERROR: EvaluaSpline en el compresor: " << FNumeroCompresor << std::endl;
742 std::cout <<
"Tipo de error: " << N.what() << std::endl;
743 throw Exception(
"ERROR: EvaluaSpline en el compresor: ");
747 double TMapaComp2Tub::EvaluaSpline(
double punto,
int n, std::vector<double> x, std::vector<double> y,
748 std::vector<double> sol) {
752 while(x[k] < punto && k < n - 1) {
760 double h = x[k + 1] - x[k];
762 double dx1 = x[k + 1] - punto;
763 double dx2 = punto - x[k];
764 double dx13 =
pow3(dx1);
765 double dx23 =
pow3(dx2);
767 double ret_val = (sol[k] * dx13 + sol[k + 1] * dx23 + (6 * y[k + 1] - h2 * sol[k + 1]) * dx2 +
768 (6 * y[k] - h2 * sol[k]) * dx1) / (6 * h);
772 }
catch(exception &N) {
773 std::cout <<
"ERROR: EvaluaSpline en el compresor: " << FNumeroCompresor << std::endl;
774 std::cout <<
"Tipo de error: " << N.what() << std::endl;
775 throw Exception(
"ERROR: EvaluaSpline en el compresor: ");
785 double TMapaComp2Tub::EvaluaRCSplines(
double Massflow) {
788 if(Massflow < FGastoInt[0]) {
789 ret_val = FRelCompInt[0];
790 }
else if(Massflow >= FGastoInt[FNumPuntos]) {
796 while(FGastoInt[k] < Massflow && k < n) {
804 double h = FGastoInt[k + 1] - FGastoInt[k];
806 double dx1 = FGastoInt[k + 1] - Massflow;
807 double dx2 = Massflow - FGastoInt[k];
808 double dx13 =
pow3(dx1);
809 double dx23 =
pow3(dx2);
811 ret_val = (FCoefSplRC[k] * dx13 + FCoefSplRC[k + 1] * dx23 + (6 * FRelCompInt[k + 1] - h2 * FCoefSplRC[k + 1]) * dx2 +
812 (6 * FRelCompInt[k] - h2 * FCoefSplRC[k]) * dx1) / (6 * h);
816 }
catch(exception &N) {
817 std::cout <<
"ERROR: EvaluaRCSpline en el compresor: " << FNumeroCompresor << std::endl;
818 std::cout <<
"Tipo de error: " << N.what() << std::endl;
819 throw Exception(
"ERROR: EvaluaRCSpline en el compresor: ");
823 double TMapaComp2Tub::EvaluaRCHermite(
double Massflow) {
825 double ret_val = 0., t2 = 0., t3 = 0., t = 0., h00 = 0., h10 = 0., h01 = 0., h11 = 0., h = 0.;
827 if(Massflow <= FGastoInt[0]) {
828 ret_val = FRelCompInt[0];
829 }
else if(Massflow >= FGastoInt[FNumPuntos]) {
835 while(FGastoInt[k] < Massflow && k < n) {
838 h = (FGastoInt[k] - FGastoInt[k - 1]);
839 t = (Massflow - FGastoInt[k - 1]) / h;
842 h00 = 2 * t3 - 3 * t2 + 1;
843 h10 = t3 - 2 * t2 + t;
844 h01 = -2 * t3 + 3 * t2;
846 ret_val = h00 * FRelCompInt[k - 1] + h * h10 * FCoefSplRC[k - 1] + h01 * FRelCompInt[k] + h * h11 * FCoefSplRC[k];
850 }
catch(exception &N) {
851 std::cout <<
"ERROR: EvaluaRCSpline en el compresor: " << FNumeroCompresor << std::endl;
852 std::cout <<
"Tipo de error: " << N.what() << std::endl;
853 throw Exception(
"ERROR: EvaluaRCSpline en el compresor: ");
867 void TMapaComp2Tub::PolOrtogonal(
int nterms,
int npoint,
double *ma,
double *rd,
double *w,
double *b,
double *c,
871 for(
int j = 0; j < nterms; ++j) {
877 for(
int i = 0; i < npoint; ++i) {
878 d[0] += rd[i] * w[i];
879 b[0] += ma[i] * w[i];
883 for(
int i = 0; i < npoint; ++i) {
884 FOrtp[i].error = rd[i] - d[0];
887 for(
int i = 0; i < npoint; ++i) {
889 FOrtp[i].pj = ma[i] - b[0];
892 while(j < nterms - 1) {
894 for(
int i = 0; i < npoint; ++i) {
895 p = FOrtp[i].pj * w[i];
896 d[j] += FOrtp[i].error * p;
902 for(
int i = 0; i < npoint; ++i) {
903 FOrtp[i].error -= d[j] * FOrtp[i].pj;
907 c[j] = FOrtp[j].s / FOrtp[j - 1].s;
908 for(
int i = 0; i < npoint; ++i) {
910 FOrtp[i].pj = (ma[i] - b[j]) * FOrtp[i].pj - c[j] * FOrtp[i].pjm1;
915 }
catch(exception &N) {
916 std::cout <<
"ERROR: PolOrtogonal en el compresor: " << FNumeroCompresor << std::endl;
917 std::cout <<
"Tipo de error: " << N.what() << std::endl;
918 throw Exception(
"ERROR: PolOrtogonal en el compresor: ");
929 void TMapaComp2Tub::InterpolaMapa(
double rtc,
double AmbientTemperature) {
939 FRegComp = rtc * sqrt(FTempRef / AmbientTemperature);
946 for(
int i = 0; i < FNumCurvasReg; ++i) {
947 if(FRegComp >= FRegimenCurva[i]) {
951 DeltaN = (FRegComp - FRegimenCurva[FCurvInf]) / FIncReg;
955 if(FRegComp >= FRegMax) {
956 FGastoBombeoX = FGastoBombeo[FCurvInf + 1] + (FGastoBombeo[FCurvInf + 1] - FGastoBombeo[FCurvInf]) / FIncReg *
957 (FRegComp - FRegMax);
959 FRelCompBombeoX = FRelCompBombeo[FCurvInf + 1] + (FRelCompBombeo[FCurvInf + 1] - FRelCompBombeo[FCurvInf]) / FIncReg *
960 (FRegComp - FRegMax);
962 FGastoRelComp1X = FGastoRelComp1[FCurvInf] + (FGastoRelComp1[FCurvInf] - FGastoRelComp1[FCurvInf - 1]) / FIncReg *
963 (FRegComp - FRegMax);
965 }
else if(FRegComp < FRegMin) {
966 FGastoBombeoX = FGastoBombeo[FCurvInf + 1] - (FGastoBombeo[FCurvInf + 2] - FGastoBombeo[FCurvInf + 1]) / FIncReg *
967 (FRegMin - FRegComp);
969 FRelCompBombeoX = EvaluaHermite(FGastoBombeoX, FNumCurvasReg + 1, FGastoBombeo, FRelCompBombeo, FCoefSplBombeo);
971 FGastoRelComp1X = FGastoRelComp1[FCurvInf] - (FGastoRelComp1[FCurvInf + 1] - FGastoRelComp1[FCurvInf]) / FIncReg *
972 (FRegMin - FRegComp);
974 FGastoBombeoX = FGastoBombeo[FCurvInf + 1] + (FGastoBombeo[FCurvInf + 2] - FGastoBombeo[FCurvInf + 1]) * DeltaN;
976 FRelCompBombeoX = EvaluaHermite(FGastoBombeoX, FNumCurvasReg + 1, FGastoBombeo, FRelCompBombeo, FCoefSplBombeo);
978 FGastoRelComp1X = FGastoRelComp1[FCurvInf] + (FGastoRelComp1[FCurvInf + 1] - FGastoRelComp1[FCurvInf]) * DeltaN;
980 if(FGastoBombeoX < 0)
982 if(FGastoRelComp1X < FGastoBombeoX)
983 FGastoRelComp1X = FGastoBombeoX + 1e-6;
989 if(FRegComp < FRegMin) {
990 FNumPuntos = floor((FGastoRelComp1X - FGastoMin) / FIncGasto) + 1;
997 if(FRegComp >= FRegMax) {
998 index = FCurvInf - 1;
1002 while((FGastoInt[j] = FGastoMin + FIncGasto * j) < FGastoRelComp1[index]) {
1011 if(FRegComp < FRegMin) {
1012 for(
int j = 0; j < FNumPuntos; ++j) {
1013 FGastoInt[j] = FGastoMin + FIncGasto * j;
1014 FRelCompInt[j] = FRelCompNuevo[FCurvInf][j] - (FRelCompNuevo[FCurvInf + 1][j] - FRelCompNuevo[FCurvInf][j]) / FIncReg
1015 * (FRegMin - FRegComp);
1016 if(FRelCompInt[j] < 1.)
1017 FRelCompInt[j] = 1.;
1020 for(
int j = 0; j < FNumPuntos; ++j) {
1022 if(FRegComp >= FRegMax) {
1023 FRelCompInt[j] = FRelCompNuevo[FCurvInf][j] + (FRelCompNuevo[FCurvInf][j] - FRelCompNuevo[FCurvInf - 1][j]) * DeltaN;
1025 FRelCompInt[j] = FRelCompNuevo[FCurvInf][j] + (FRelCompNuevo[FCurvInf + 1][j] - FRelCompNuevo[FCurvInf][j]) * DeltaN;
1029 FGastoInt[FNumPuntos] = FGastoRelComp1X;
1030 FRelCompInt[FNumPuntos] = 1.;
1034 Hermite(FNumPuntos + 1, FGastoInt, FRelCompInt, FCoefSplRC);
1066 }
catch(exception &N) {
1067 std::cout <<
"ERROR: InterpolaMapa en el compresor: " << FNumeroCompresor << std::endl;
1068 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1069 throw Exception(
"ERROR: InterpolaMapa en el compresor: ");
1080 double TMapaComp2Tub::EvaluaRendimiento(
double MasaAire) {
1084 double ret_val = 0.;
1087 ret_val = FCoefdX[k];
1093 ret_val = FCoefdX[k] + (MasaAire - FCoefbX[k]) * prev - FCoefcX[k + 1] * prev2;
1097 }
catch(exception &N) {
1098 std::cout <<
"ERROR: EvaluaRendimiento en el compresor: " << FNumeroCompresor << std::endl;
1099 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1100 throw Exception(
"ERROR: EvaluaRendimiento en el compresor: ");
1107 double TMapaComp2Tub::EvaluaRendSplines(
double MasaAire) {
1108 double AireAdim = 0.;
1109 double ret_val = 0.;
1110 double RendInf = 0.;
1111 double RendSup = 0.;
1115 if(FRegComp >= FRegMax) {
1116 index = FCurvInf - 1;
1121 if(MasaAire < FGastoBombeoX) {
1123 DeltaN = (FRegComp - FRegimenCurva[FCurvInf]) / FIncReg;
1125 RendInf = FRendAdim[index][0];
1126 RendSup = FRendAdim[index + 1][0];
1128 if(FRegComp > FRegMax) {
1129 ret_val = RendSup + (RendSup - RendInf) / FIncReg * (FRegComp - FRegMax);
1130 }
else if(FRegComp < FRegMin) {
1131 ret_val = RendInf - (RendSup - RendInf) / FIncReg * (FRegMin - FRegComp);
1133 ret_val = RendInf + (RendSup - RendInf) * DeltaN;
1135 }
else if(MasaAire > FGastoRelComp1X) {
1136 ret_val = FRendGastoMaximo;
1138 AireAdim = (MasaAire - FGastoBombeoX) / (FGastoRelComp1X - FGastoBombeoX);
1140 RendInf = EvaluaHermite(AireAdim, FNumCurvasRenAd[index], FGastoAdim[index], FRendAdim[FCurvInf],
1141 FCoefSplRend[FCurvInf]);
1146 RendSup = EvaluaHermite(AireAdim, FNumCurvasRenAd[index + 1], FGastoAdim[index + 1], FRendAdim[index + 1],
1147 FCoefSplRend[index + 1]);
1152 DeltaN = (FRegComp - FRegimenCurva[FCurvInf]) / FIncReg;
1154 if(FRegComp >= FRegMax) {
1155 ret_val = RendSup + (RendSup - RendInf) / FIncReg * (FRegComp - FRegMax);
1156 }
else if(FRegComp < FRegMin) {
1157 ret_val = RendInf - (RendSup - RendInf) / FIncReg * (FRegMin - FRegComp);
1159 ret_val = RendInf + (RendSup - RendInf) * DeltaN;
1163 }
catch(exception &N) {
1164 std::cout <<
"ERROR: EvaluaRendSplines en el compresor: " << FNumeroCompresor << std::endl;
1165 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1166 throw Exception(
"ERROR: EvaluaRendSplines en el compresor: ");
1173 double TMapaComp2Tub::GetRelCompInt(
int i) {
1175 return FRelCompInt[i];
1176 }
catch(exception &N) {
1177 std::cout <<
"ERROR: GetRelCompInt en el compresor: " << FNumeroCompresor << std::endl;
1178 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1179 throw Exception(
"ERROR: GetRelCompInt en el compresor: ");
1186 double TMapaComp2Tub::GetGastoInt(
int i) {
1188 return FGastoInt[i];
1189 }
catch(exception &N) {
1190 std::cout <<
"ERROR: GetGastoInt en el compresor: " << FNumeroCompresor << std::endl;
1191 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1192 throw Exception(
"ERROR: GetGastoInt en el compresor: ");
1199 double TMapaComp2Tub::BuscaRegimen(
double RC,
double Massflow,
double AmbientTemperature) {
1203 double ret_val = 0., val1 = 0., val2 = 0.;
1205 int i = 0, sup, inf;
1206 while(RC > RCSup && i < FNumCurvasReg) {
1207 reg = FRegimenCurva[i] * AmbientTemperature / FTempRef;
1208 InterpolaMapa(reg, AmbientTemperature);
1210 if(Massflow < FGastoRelComp1[i]) {
1211 RCSup = EvaluaRCHermite(Massflow);
1219 std::cout <<
"WARNING: El Punto se sale por arriba del mapa " << std::endl;
1224 reg = FRegimenCurva[inf] * AmbientTemperature / FTempRef;
1225 InterpolaMapa(reg, AmbientTemperature);
1227 if(Massflow < FGastoRelComp1[inf]) {
1228 RCInf = EvaluaRCHermite(Massflow);
1230 std::cout <<
"WARNING: El siguiente punto puede estar mal calculado:" << std::endl;
1231 std::cout <<
" Relacionde compresion: " << RC << std::endl;
1232 std::cout <<
" Massflow masico: " << Massflow << std::endl;
1233 std::cout <<
" Deberias aumentar el numero de curvas del mapa" << std::endl << std::endl;
1236 ret_val = (RC - RCInf) / (RCSup - RCInf) * (FRegimenCurva[sup] - FRegimenCurva[inf]) + FRegimenCurva[inf];
1241 InterpolaMapa(FRegimenCurva[sup], __units::degCToK(AmbientTemperature));
1242 RCSup = EvaluaRCHermite(Massflow);
1243 val1 = (RC - RCInf) / (RCSup - RCInf) * (FRegimenCurva[sup] - FRegimenCurva[inf]) + FRegimenCurva[inf];
1245 val2 = (RC - 1) / (RCInf - 1) * (FRegimenCurva[inf]);
1246 ret_val = (val1 + val2) / 2;
1247 std::cout <<
"WARNING: El siguiente punto puede estar mal calculado:" << std::endl;
1248 std::cout <<
" Relacionde compresion: " << RC << std::endl;
1249 std::cout <<
" Massflow masico: " << Massflow << std::endl;
1250 std::cout <<
" Deberias incluir curvas con menor regimen de giro" << std::endl << std::endl;
1253 }
catch(exception &N) {
1254 std::cout <<
"ERROR: BuscaRegimen en el compresor: " << FNumeroCompresor << std::endl;
1255 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1256 throw Exception(
"ERROR: BuscaRegimen en el compresor: ");
1263 void TMapaComp2Tub::Cambio_Mapa(
double radtip,
double radhub,
double radrodete) {
1272 Fnegmas =
new double[5];
1273 Fnegrc =
new double[5];
1274 Fsolneg =
new double[5];
1275 for(
int i = 0; i < 5; i++) {
1279 while((
double) n * FIncGasto < 0.07) {
1282 FGastoMin = -n * FIncGasto;
1284 r1 = sqrt((
pow2(radhub) +
pow2(radtip)) / 2);
1286 FNumPuntosGastoNuevo = floor(((FGastoMax - FGastoMin) / FIncGasto) + 0.5) + 1;
1289 FGastoInt =
new double[FNumPuntosGastoNuevo + 1];
1290 FRelCompInt =
new double[FNumPuntosGastoNuevo + 1];
1291 FCoefSplRC =
new double[FNumPuntosGastoNuevo + 1];
1293 FRelCompNuevo =
new double*[FNumCurvasReg];
1294 for(
int i = 0; i < FNumCurvasReg; i++) {
1295 FRelCompNuevo[i] =
new double[FNumPuntosGastoNuevo];
1298 FGastoCompNuevo =
new double[FNumPuntosGastoNuevo];
1299 for(
int j = 0; j < FNumPuntosGastoNuevo; ++j) {
1300 FGastoCompNuevo[j] = FGastoMin + j * FIncGasto;
1303 for(
int i = 0; i < FNumCurvasReg; ++i) {
1304 Fnegmas[0] = FGastoMin;
1305 Fnegmas[1] = -0.0001;
1307 Fnegmas[3] = FGastoBombeo[i] - 0.0001;
1308 Fnegmas[4] = FGastoBombeo[i];
1309 Fnegrc[0] = FRelCompBombeo[i];
1310 Fnegrc[1] = pow(1 + 1 / (__Gamma::Cp_x2 * (FTempRef)) *
pow2(__units::RPMToRad_s(FRegMin + i * FIncReg)) * (
pow2(
1311 radrodete) -
pow2(r1)), __Gamma::G_9);
1312 Fnegrc[2] = pow(1 + 1 / (__Gamma::Cp_x2 * (FTempRef)) *
pow2(__units::RPMToRad_s(FRegMin + i * FIncReg)) * (
pow2(
1313 radrodete) -
pow2(r1)), __Gamma::G_9);
1314 Fnegrc[3] = FRelCompBombeo[i];
1315 Fnegrc[4] = FRelCompBombeo[i];
1316 Hermite(5, Fnegmas, Fnegrc, Fsolneg);
1318 for(
int j = 0; j < FNumPuntosGastoNuevo; ++j) {
1319 if(FGastoMin + j * FIncGasto < FGastoBombeo[i]) {
1320 FRelCompNuevo[i][j] = EvaluaHermite(FGastoMin + j * FIncGasto, 5, Fnegmas, Fnegrc, Fsolneg);
1321 if(FGastoMin + j * FIncGasto > FIncGasto / 10)
1324 FRelCompNuevo[i][j] = FRelComp[i][cont];
1343 }
catch(exception &N) {
1344 std::cout <<
"ERROR: Cambio_Mapa: " << FNumeroCompresor << std::endl;
1345 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1353 void TMapaComp2Tub::ImprimeMapa() {
1354 std::cout <<
"Printing compressor map .";
1357 fich = fopen(
"MapaInterp.txt",
"w");
1358 fichrd = fopen(
"MapaRend.txt",
"w");
1366 massflow =
new double[200];
1368 rcbomb =
new double[FNumCurvasReg + 3];
1370 gasbomb =
new double[FNumCurvasReg + 3];
1372 rc =
new double*[200];
1373 rend =
new double*[200];
1374 for(
int j = 0; j < 200; j++) {
1375 rc[j] =
new double[FNumCurvasReg + 2];
1376 rend[j] =
new double[FNumCurvasReg + 2];
1378 inc = (FGastoMax - FGastoMin) / 199;
1379 for(
int j = 0; j < 200; j++) {
1380 massflow[j] = FGastoMin + inc * (double) j;
1385 for(
int i = 0; i < FNumCurvasReg + 1; i++) {
1387 InterpolaMapa(FRegMin + FIncReg * (
double) i, FTempRef);
1388 for(
int j = 0; j < 200; j++) {
1389 if(massflow[j] > FGastoRelComp1X) {
1393 rc[j][i] = EvaluaRCHermite(massflow[j]);
1394 if(massflow[j] <= FGastoBombeoX) {
1395 rend[j][i] = EvaluaRendSplines(FGastoBombeoX);
1397 rend[j][i] = EvaluaRendSplines(massflow[j]);
1401 gasbomb[i + 1] = FGastoBombeoX;
1402 rcbomb[i + 1] = FRelCompBombeoX;
1406 for(
int j = 0; j < 200; j++) {
1407 if(j < FNumCurvasReg + 1 + 2) {
1408 fprintf(fich,
"%lf\t%lf\t", gasbomb[j], rcbomb[j]);
1410 fprintf(fich,
"\t\t");
1412 fprintf(fich,
"%lf\t", massflow[j]);
1413 fprintf(fichrd,
"%lf\t", massflow[j]);
1414 for(
int i = 0; i < FNumCurvasReg + 1; i++) {
1415 fprintf(fich,
"%lf\t", rc[j][i]);
1416 fprintf(fichrd,
"%lf\t", rend[j][i]);
1419 fprintf(fich,
"\n");
1420 fprintf(fichrd,
"\n");
1423 for(
int j = 0; j < 200; j++) {
1437 fich2 = fopen(
"MapaReal.txt",
"w");
1439 for(
int j = 0; j < FNumPuntosGastoNuevo; ++j) {
1440 fprintf(fich2,
"%lf\t", FGastoMin + j * FIncGasto);
1441 for(
int i = 0; i < FNumCurvasReg; ++i) {
1442 fprintf(fich2,
"%lf\t", FRelCompNuevo[i][j]);
1444 fprintf(fich2,
"\n");
1449 std::cout <<
"Finished." << std::endl;
1455 void TMapaComp2Tub::ReadGTPowerMap(FILE *fich,
int correct) {
1457 double speed = 0., mass = 0., pres = 0., eff = 0.;
1464 fscanf(fich,
"%lf %lf", &FPresionRef, &FTempRef);
1465 FPresionRef = __units::BarToPa(FPresionRef);
1466 FGTSpeed.resize(i + 1);
1467 FGTMass.resize(i + 1);
1468 FGTPres.resize(i + 1);
1469 FGTEff.resize(i + 1);
1470 while(!feof(fich)) {
1471 fscanf(fich,
"%lf %lf %lf %lf", &speed, &mass, &pres, &eff);
1474 if(speed != FGTSpeed[i][j - 1]) {
1477 FGTSpeed.resize(i + 1);
1478 FGTMass.resize(i + 1);
1479 FGTPres.resize(i + 1);
1480 FGTEff.resize(i + 1);
1483 FGTSpeed[i].push_back(speed);
1484 FGTMass[i].push_back(mass);
1485 FGTPres[i].push_back(pres);
1486 FGTEff[i].push_back(eff);
1491 }
catch(exception &N) {
1492 std::cout <<
"ERROR: Cambio_Mapa: " << FNumeroCompresor << std::endl;
1493 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1501 void TMapaComp2Tub::RearrangeGTPowerMap(
double rtip,
double rhub,
double rwheel) {
1503 double FlowMass = 0.;
1514 FRegMin = FGTSpeed[0][0];
1515 FRegMax = FGTSpeed[FGTSpeed.size() - 1][0];
1516 FIncReg = (FRegMax - FRegMin) / (FGTSpeed.size() - 1);
1518 FNumCurvasReg = FGTSpeed.size();
1521 FGastoMax = FGTMass[FGTMass.size() - 1][FGTMass[FGTMass.size() - 1].size() - 1];
1522 FIncGasto = (FGastoMax - FGastoMin) / 20;
1524 FNumPuntosGasto = 21;
1526 FGTCoefCR.resize(FNumCurvasReg);
1528 FNumCurvasRendMax = 0;
1530 for(
int i = 0; i < FNumCurvasReg; ++i) {
1531 FGTCoefCR[i].resize(FGTSpeed[i].size());
1533 Hermite(FGTSpeed[i].size(), FGTMass[i], FGTPres[i], &FGTCoefCR[i]);
1539 if(FGTEff[i].size() > (dMatrix::size_type) FNumCurvasRendMax) {
1540 FNumCurvasRendMax = FGTEff[i].size();
1544 FGastoRelComp1 =
new double[FNumCurvasReg];
1545 FGastoBombeo =
new double[FNumCurvasReg + 1];
1546 FRelCompBombeo =
new double[FNumCurvasReg + 1];
1547 FRegimenCurva =
new double[FNumCurvasReg];
1548 FNumCurvasRen =
new int[FNumCurvasReg];
1549 FNumCurvasRenAd =
new int[FNumCurvasReg];
1550 FCoefSplBombeo =
new double[FNumCurvasReg + 1];
1552 FRelComp =
new double*[FNumCurvasReg];
1553 for(
int i = 0; i < FNumCurvasReg; i++) {
1554 FRelComp[i] =
new double[FNumPuntosGasto];
1556 FGastoRend =
new double*[FNumCurvasReg];
1557 FRend =
new double*[FNumCurvasReg];
1558 for(
int i = 0; i < FNumCurvasReg; i++) {
1559 FGastoRend[i] =
new double[FNumCurvasRendMax];
1560 FRend[i] =
new double[FNumCurvasRendMax];
1563 for(
int i = 0; i < FNumCurvasReg; i++) {
1564 FRegimenCurva[i] = FRegMin + FIncReg * (double) i;
1565 FGastoRelComp1[i] = FGTMass[i][FGTMass[i].size() - 1];
1566 FGastoBombeo[i] = FGTMass[i][0];
1567 FRelCompBombeo[i] = FGTPres[i][0];
1568 for(
int j = 0; j < 21; j++) {
1569 FlowMass = FGastoMin + (double) j * FIncGasto;
1570 if(FlowMass > FGastoBombeo[i]) {
1571 if(FlowMass < FGastoRelComp1[i]) {
1572 FRelComp[i][j] = EvaluaHermite(FlowMass, FGTMass[i].size(), FGTMass[i], FGTPres[i], FGTCoefCR[i]);
1574 FRelComp[i][j] = 1.;
1578 FRelComp[i][j] = FRelCompBombeo[i];
1581 FNumCurvasRen[i] = FGTEff[i].size() - 1;
1582 for(
Uint j = 0; j < FGTEff[i].size() - 1; j++) {
1583 FGastoRend[i][j] = FGTMass[i][j];
1584 FRend[i][j] = FGTEff[i][j];
1588 Cambio_Mapa(rtip, rhub, rwheel);
1592 for(
int i = FNumCurvasReg; i > 0; --i) {
1593 FGastoBombeo[i] = FGastoBombeo[i - 1];
1594 FRelCompBombeo[i] = FRelCompBombeo[i - 1];
1596 FGastoBombeo[0] = 0.;
1597 FRelCompBombeo[0] = 1.;
1599 Hermite(FNumCurvasReg + 1, FGastoBombeo, FRelCompBombeo, FCoefSplBombeo);
1602 FGastoAdim =
new double*[FNumCurvasReg];
1603 FRendAdim =
new double*[FNumCurvasReg];
1604 FCoefSplRend =
new double*[FNumCurvasReg];
1605 bool RendEnBombeo =
false;
1606 for(
int i = 0; i < FNumCurvasReg; i++) {
1607 if(FGastoRend[i][0] < FGastoBombeo[i + 1] * 1.001 && FGastoRend[i][0] > FGastoBombeo[i + 1] * 0.999) {
1608 FNumCurvasRenAd[i] = FNumCurvasRen[i] + 1;
1609 RendEnBombeo =
true;
1610 std::cout <<
"INFO: El punto de bombeo de la curva de " << FRegimenCurva[i] <<
" rpm tiene rendimiento" << std::endl;
1612 FNumCurvasRenAd[i] = FNumCurvasRen[i] + 2;
1613 RendEnBombeo =
false;
1614 std::cout <<
"INFO: El punto de bombeo de la curva de " << FRegimenCurva[i] <<
" rpm no tiene rendimiento" << std::endl;
1616 FGastoAdim[i] =
new double[FNumCurvasRenAd[i]];
1617 FRendAdim[i] =
new double[FNumCurvasRenAd[i]];
1618 FCoefSplRend[i] =
new double[FNumCurvasRenAd[i]];
1620 FGastoAdim[i][0] = 0.;
1622 FRendAdim[i][0] = FRend[i][0];
1624 FRendAdim[i][0] = FRendCurvaBombeo;
1627 FGastoAdim[i][FNumCurvasRenAd[i] - 1] = 1.;
1628 FRendAdim[i][FNumCurvasRenAd[i] - 1] = FRendGastoMaximo;
1629 for(
int j = 1; j < FNumCurvasRenAd[i] - 1; j++) {
1631 FGastoAdim[i][j] = (FGastoRend[i][j] - FGastoBombeo[i + 1]) / (FGastoRelComp1[i] - FGastoBombeo[i + 1]);
1632 FRendAdim[i][j] = FRend[i][j];
1634 FGastoAdim[i][j] = (FGastoRend[i][j - 1] - FGastoBombeo[i + 1]) / (FGastoRelComp1[i] - FGastoBombeo[i + 1]);
1635 FRendAdim[i][j] = FRend[i][j - 1];
1637 if(FGastoAdim[i][j] <= FGastoAdim[i][j - 1]) {
1638 std::cout <<
"WARNING: La tabla Massflow-Rendimiento en el regimen de " << FRegimenCurva[i] <<
" rpm esta desordenada"
1640 std::cout <<
" Si se continua con este mapa pueden aparecer errores en la interpolacion" << std::endl;
1641 std::cout <<
" Ordene los datos de forma creciente en massflow" << std::endl;
1644 Hermite(FNumCurvasRenAd[i], FGastoAdim[i], FRendAdim[i], FCoefSplRend[i]);
1649 }
catch(exception &N) {
1650 std::cout <<
"ERROR: RearrangeGTPowerMap: " << FNumeroCompresor << std::endl;
1651 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1656 void TMapaComp2Tub::WriteMapForWAM() {
1661 fich2 = fopen(
"MapaWAM.cmp",
"w");
1663 fprintf(fich2,
"%lf %lf ", FPresionRef, FTempRef);
1664 fprintf(fich2,
"%lf %lf %lf ", FRegMin, FRegMax, FIncReg);
1665 fprintf(fich2,
"%lf %lf %lf ", FGastoMin, FGastoMax, FIncGasto);
1666 fprintf(fich2,
"%d", FNumCurvasRendMax);
1667 fprintf(fich2,
"\n");
1668 for(
int i = 0; i < FNumCurvasReg; i++) {
1669 fprintf(fich2,
"%lf\n", FGastoRelComp1[i]);
1670 fprintf(fich2,
"%lf %lf\n", FGastoBombeo[i + 1], FRelCompBombeo[i + 1]);
1671 for(
int j = 0; j < FNumPuntosGasto; j++) {
1672 gast = (double) j * FIncGasto;
1673 if(gast > FGastoRelComp1[i]) {
1674 fprintf(fich2,
"0.0\n");
1676 fprintf(fich2,
"%lf\n", FRelComp[i][j]);
1679 for(
int j = 0; j < FNumCurvasRendMax; j++) {
1680 if(j < FNumCurvasRen[i]) {
1681 fprintf(fich2,
"%lf %lf\n", FGastoRend[i][j], FRend[i][j]);
1683 fprintf(fich2,
"0.0 0.0\n");
1691 }
catch(exception &N) {
1692 std::cout <<
"ERROR: WriteMapForWAM: " << FNumeroCompresor << std::endl;
1693 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1698 #pragma package(smart_init)