31 #include "TTurbinaSimple.h"
33 #include "TCondicionContorno.h"
34 #include "TCCDeposito.h"
35 #include "TRotorTurbina.h"
36 #include "TEstatorTurbina.h"
42 TTurbinaSimple::TTurbinaSimple(
int i, nmTipoCalculoEspecies SpeciesModel,
int numeroespecies,
43 nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
44 TTurbina(i, nmTurbinaSimple, 1, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
48 FResMediosTurbina.RelaCinematicaMED =
new double[FNumeroEntradas];
49 FResMediosTurbina.GastoCorregidoMED =
new double[FNumeroEntradas];
50 FResMediosTurbina.GastoCorregidoSUM =
new double[FNumeroEntradas];
51 FResMediosTurbina.RegimenCorregidoMED =
new double[FNumeroEntradas];
52 FResMediosTurbina.RegimenCorregidoSUM =
new double[FNumeroEntradas];
53 FResMediosTurbina.RelacionExpansionMED =
new double[FNumeroEntradas];
54 FResMediosTurbina.RelacionExpansionSUM =
new double[FNumeroEntradas];
56 FResMediosTurbina.Trabajo =
false;
57 FResMediosTurbina.Rendimiento =
false;
58 FResMediosTurbina.RelaCinematica =
false;
59 FResMediosTurbina.GastoCorregido =
false;
60 FResMediosTurbina.RegimenCorregido =
false;
61 FResMediosTurbina.RelacionExpansion =
false;
63 FResInstantTurbina.RelaCinematicaINS =
new double[FNumeroEntradas];
64 FResInstantTurbina.GastoCorregidoINS =
new double[FNumeroEntradas];
65 FResInstantTurbina.RegimenCorregidoINS =
new double[FNumeroEntradas];
66 FResInstantTurbina.RelacionExpansionINS =
new double[FNumeroEntradas];
68 FResInstantTurbina.Potencia =
false;
69 FResInstantTurbina.Rendimiento =
false;
70 FResInstantTurbina.RelaCinematica =
false;
71 FResInstantTurbina.GastoCorregido =
false;
72 FResInstantTurbina.RegimenCorregido =
false;
73 FResInstantTurbina.RelacionExpansion =
false;
75 FResInstantTurbina.GastoCorregido =
false;
76 FResInstantTurbina.RegimenCorregido =
false;
78 for(
int i = 0; i < FNumeroEntradas; i++) {
79 FResMediosTurbina.RelaCinematicaMED[i] = 0.;
80 FResMediosTurbina.GastoCorregidoMED[i] = 0.;
81 FResMediosTurbina.GastoCorregidoSUM[i] = 0.;
82 FResMediosTurbina.RegimenCorregidoMED[i] = 0.;
83 FResMediosTurbina.RegimenCorregidoSUM[i] = 0.;
84 FResMediosTurbina.RelacionExpansionMED[i] = 0.;
85 FResMediosTurbina.RelacionExpansionSUM[i] = 0.;
86 FResInstantTurbina.RelaCinematicaINS[i] = 0.;
87 FResInstantTurbina.GastoCorregidoINS[i] = 0.;
88 FResInstantTurbina.RegimenCorregidoINS[i] = 0.;
89 FResInstantTurbina.RelacionExpansionINS[i] = 0.;
97 TTurbinaSimple::~TTurbinaSimple() {
104 void TTurbinaSimple::AsignaEntradaSalidaCC() {
109 for(
int i = 0; i < FNumeroUniones; i++) {
110 if(
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getValvula()->getTypeOfValve() == nmStator) {
111 FCCEntrada[0] = FCCDeposito[i];
112 }
else if(
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getValvula()->getTypeOfValve() == nmRotor) {
113 FCCSalida[0] = FCCDeposito[i];
119 dynamic_cast<TRotorTurbina*
>(
dynamic_cast<TCCDeposito*
>(FCCSalida[0])->getValvula())->AsignaTurbina(FNumeroTurbina);
121 if(FTipoTurbina == nmFixedTurbine) {
124 }
else if(FTipoTurbina == nmTurbineMap) {
132 }
catch(exception & N) {
133 std::cout <<
"ERROR: TTurbinaSimple::AsignaEntradaSalidaCC en la turbina " << FNumeroTurbina << std::endl;
134 std::cout <<
"Tipo de error: " << N.what() << std::endl;
142 void TTurbinaSimple::CalculaCondicionTurbina(
double TimeCalculo) {
146 double TempIsentSal = 0.;
148 double incrRelCin = 0.;
149 double Landa = 0., Beta = 0., Entropia = 0.;
150 int SentidoSalida = -1, SentidoEntrada = 1;
151 double dd = 0., b = 0., c = 0., d = 0.;
152 int NumberOfPipes = 0;
159 DeltaT = TimeCalculo - FTimeTurbina;
160 FTimeTurbina = TimeCalculo;
164 FTrabajoIsenInstTotal = 0.;
168 Landa = FCCSalida[0]->GetTuboExtremo(0).Landa;
169 Beta = FCCSalida[0]->GetTuboExtremo(0).Beta;
170 Entropia = FCCSalida[0]->GetTuboExtremo(0).Entropia;
172 TransformaContorno(&Landa, &Beta, &Entropia, &FAsonidoSalida, &FVelocidadSalida, &FPresionSalida, 1,
173 FCCSalida[0]->getGamma());
175 if(
dynamic_cast<TCCDeposito*
>(FCCSalida[0])->getSentidoFlujo() == nmEntrante) {
177 }
else if(
dynamic_cast<TCCDeposito*
>(FCCSalida[0])->getSentidoFlujo() == nmSaliente) {
182 FTempSalida =
pow2(FAsonidoSalida * __cons::ARef) / (FCCSalida[0]->getGamma() * FCCSalida[0]->getR());
183 FVelocidadSalida *= __cons::ARef * SentidoSalida;
184 FRhoSalida = __units::BarToPa(FPresionSalida) / FTempSalida / FCCSalida[0]->getR();
186 FGastoSalida = FRhoSalida * FVelocidadSalida *
dynamic_cast<TCCDeposito*
>(FCCSalida[0])->getSeccionTubo();
190 Landa = FCCEntrada[0]->GetTuboExtremo(0).Landa;
191 Beta = FCCEntrada[0]->GetTuboExtremo(0).Beta;
192 Entropia = FCCEntrada[0]->GetTuboExtremo(0).Entropia;
194 TransformaContorno(&Landa, &Beta, &Entropia, &FAsonidoEntrada[0], &FVelocidadEntrada[0], &FPresionEntrada[0], 1,
195 FCCEntrada[0]->getGamma());
197 if(
dynamic_cast<TCCDeposito*
>(FCCEntrada[0])->getSentidoFlujo() == nmEntrante) {
199 }
else if(
dynamic_cast<TCCDeposito*
>(FCCEntrada[0])->getSentidoFlujo() == nmSaliente) {
203 FTempEntrada[0] =
pow2(FAsonidoEntrada[0] * __cons::ARef) / (FCCEntrada[0]->getGamma() * FCCEntrada[0]->getR());
206 FVelocidadEntrada[0] = FVelocidadEntrada[0] * __cons::ARef * SentidoEntrada;
207 FRhoEntrada[0] = __units::BarToPa(FPresionEntrada[0]) / FTempEntrada[0] / FCCEntrada[0]->getR();
208 FGastoEntrada[0] = FRhoEntrada[0] * FVelocidadEntrada[0] *
dynamic_cast<TCCDeposito*
>(FCCEntrada[0])->getSeccionTubo();
213 FTempEntrada[0] = FAcTurb->T3();
214 FPresionEntrada[0] = FAcTurb->P3();
216 FGastoEntrada[0] = FAcTurb->MassIn();
218 FTempSalida = FAcTurb->T4();
219 FPresionSalida = FAcTurb->P4();
228 if(FCalculoEspecies == nmCalculoCompleto) {
229 cpte = CpTurbineComplete(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
232 cpte = CpTurbineSimple(FTempEntrada[0], FFraccionMasicaEspecie[0]);
234 gam_te = cpte / (cpte - FRMezcla);
238 FTemp0Entrada[0] = FTempEntrada[0] +
pow2(FVelocidadEntrada[0]) / (2. * cpte);
239 FPresion0Entrada[0] = FPresionEntrada[0] * pow(FTemp0Entrada[0] / FTempEntrada[0], (gam_te / (gam_te - 1.0)));
245 if(fabs(FGastoEntrada[0]) > 1e-10) {
247 if(FTempEntrada[0] < FHTM->NodeTemperature(10)) {
249 FTempEntrada[0] = FTempEntrada[0] - FHTM->Turb_Heat_Flow()
250 / cpte / FGastoEntrada[0];
254 FTempEntrada[0] = FTempEntrada[0] - FHTM->Turb_Heat_Flow()
255 / cpte / FGastoEntrada[0];
257 if(FTempEntrada[0] < FHTM->NodeTemperature(10))
258 FTempEntrada[0] = FHTM->NodeTemperature(10);
262 FVelocidadEntrada[0] = FGastoEntrada[0] * FRMezcla * FTempEntrada
263 [0] / (__units::BarToPa(FPresionEntrada[0]) * FAcTurb->SIn());
265 FTemp0Entrada[0] = FTempEntrada[0] +
pow2(FVelocidadEntrada[0]) /
267 FPresion0Entrada[0] = FPresionEntrada[0] * pow
268 (FTemp0Entrada[0] / FTempEntrada[0],
269 (gam_te / (gam_te - 1.0)));
273 FGastoCorregido[0] = FGastoEntrada[0] * sqrt(FTemp0Entrada[0]) / FPresion0Entrada[0] / 0.1;
274 FRegimenCorregido[0] = FRegimen / sqrt(FTemp0Entrada[0]);
276 if(FCalculoEspecies == nmCalculoCompleto) {
277 cp_med = CpTurbineComplete(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
278 (FTempEntrada[0] + FTempSalida) / 2.);
280 cp_med = CpTurbineSimple((FTempEntrada[0] + FTempSalida) / 2., FFraccionMasicaEspecie[0]);
282 gam_med = cpte / (cpte - FRMezcla);
284 TempIsentSal = FTemp0Entrada[0] * pow(FPresionSalida / FPresion0Entrada[0], ((gam_med - 1.0) / gam_med));
286 if(FCalculoEspecies == nmCalculoCompleto) {
287 cp_med = CpTurbineComplete(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
288 (FTempEntrada[0] + TempIsentSal) / 2.);
290 cp_med = CpTurbineSimple((FTempEntrada[0] + TempIsentSal) / 2., FFraccionMasicaEspecie[0]);
293 FEntalpia0Entrada[0] = cp_med * FTemp0Entrada[0];
294 double EntalEntr = cp_med * FTempEntrada[0];
295 FEntalpiaIsenSalida[0] = cp_med * TempIsentSal;
297 FRelacionExpansion[0] = FPresion0Entrada[0] / FPresionSalida;
301 if(FTipoTurbina == nmTurbineMap) {
302 if(FRackIsControlled) {
303 FRack = FRackController->
Output(FTime);
306 FMapa->CurrentEffectiveSection(FRegimenCorregido[0] / 60., FRelacionExpansion[0], FRack,
307 __units::degCToK(FTemperature) / FTemp0Entrada[0]);
316 if((FGastoEntrada[0] > 0.) && (FEntalpia0Entrada[0] - FEntalpiaIsenSalida[0]) >= 0.) {
318 if((FEntalpia0Entrada[0] - FEntalpiaIsenSalida[0]) > 0.) {
319 FRelacionCinematica[0] = __units::RPMToRPS(FRegimen) * __cons::Pi * FDiametroRodete / sqrt(2 *
320 (FEntalpia0Entrada[0] - FEntalpiaIsenSalida[0]));
322 FRelacionCinematica[0] = 0.;
324 if(FCalRendTurbina == nmWatson) {
325 if(FRelacionCinematica[0] <= 0 || FRelacionCinematica[0] >= 1.19) {
328 FRendTurbina[0] = 0.004022 + FRelacionCinematica[0] * (1.55766 + FRelacionCinematica[0] *
329 (-0.511626 + FRelacionCinematica[0] * (-0.121795 - 0.445804 * FRelacionCinematica[0])));
331 }
else if(FCalRendTurbina == nmPolinomio) {
332 if(FRelacionCinematica[0] >= FRcmaxima || FRelacionCinematica[0] <= 0) {
333 FRendTurbina[0] = 0.;
335 dd = 2. *
pow3(FRcoptima) *
pow2(FRcmaxima) -
pow2(FRcoptima) *
pow3(FRcmaxima) -
pow4(FRcoptima) * FRcmaxima;
336 b = FRendmaximo * (3. *
pow2(FRcmaxima) *
pow2(FRcoptima) - 2 *
pow3(FRcmaxima) * FRcoptima) / dd;
337 c = FRendmaximo * (
pow3(FRcmaxima) - 3. * FRcmaxima *
pow2(FRcoptima)) / dd;
338 d = FRendmaximo * (2. * FRcmaxima * FRcoptima -
pow2(FRcmaxima)) / dd;
340 FRendTurbina[0] = b * FRelacionCinematica[0] + c *
pow2(FRelacionCinematica[0]) + d *
pow3(FRelacionCinematica[0]);
342 }
else if(FCalRendTurbina == nmCalcExtRD) {
344 if(FDatosTGV[FNumeroTurbinaTGV].Rendimiento[0] < 0) {
345 FRendTurbina[0] = 0.;
347 FRendTurbina[0] = FDatosTGV[FNumeroTurbinaTGV].Rendimiento[0];
349 }
else if(FCalRendTurbina == nmRendMapa) {
352 FRendTurbina[0] = FMapa->EffTurb();
355 std::cout <<
"ERROR: Calculo del rendimiento de la turbina desconocido " << std::endl;
358 FRendTurbina[0] = FRendTurbina[0] * FAjustRendTurb;
360 FRelacionCinematica[0] = 0.;
361 FRendTurbina[0] = 0.;
366 FTrabajoIsen = FGastoEntrada[0] * (FEntalpia0Entrada[0] - FEntalpiaIsenSalida[0]) * DeltaT;
367 double TurbWork = FTrabajoIsen * FRendTurbina[0];
368 FTrabajoFluido = TurbWork - FGastoEntrada[0] * (FEntalpia0Entrada[0] - EntalEntr) * DeltaT;
369 FTrabajoReal += TurbWork;
370 FTrabajoRealPaso += TurbWork;
371 FRendInstantaneo += FRendTurbina[0] * FGastoEntrada[0];
372 incrRelCin += TurbWork * FRelacionCinematica[0];
374 FDeltaPaso += DeltaT;
376 FPotencia = TurbWork / DeltaT;
377 FTrabajoTotal += FTrabajoIsen;
378 FRelacionCinAcum[0] += incrRelCin;
379 FPonderacionRelacionCinematica[0] += TurbWork;
382 }
catch(exception & N) {
383 std::cout <<
"ERROR: TTurbinaSimple::CalculaCondicionTurbina en la turbina: " << FNumeroTurbina << std::endl;
384 std::cout <<
"Tipo de error: " << N.what() << std::endl;
392 void TTurbinaSimple::ImprimeResultadosMediosPantalla() {
395 printf(
"TURBINE WORK %d = %6.3lf Julios \n", FNumeroTurbina, FTrabajoReal);
396 if(FTrabajoTotal != 0.) {
397 printf(
"TURBINE EFFICIENCY %d = %6.3lf \n", FNumeroTurbina, FTrabajoReal / FTrabajoTotal);
399 printf(
"TURBINE EFFICIENCY %d = %6.3lf \n", FNumeroTurbina, 0.);
401 if(FTrabajoReal != 0.) {
402 printf(
"BLADE SPEED RATIO TURB %d= %6.3lf \n", FNumeroTurbina, FRelacionCinAcum[0] / FTrabajoReal);
404 printf(
"BLADE SPEED RATIO TURB %d= %6.3lf \n", FNumeroTurbina, 0.);
407 }
catch(exception & N) {
408 std::cout <<
"ERROR: TTurbinaSimple::ImprimeResultadosMediosPantalla en la turbina: " << FNumeroTurbina << std::endl;
409 std::cout <<
"Tipo de error: " << N.what() << std::endl;
417 void TTurbinaSimple::ReadAverageResultsTurb(
const char *FileWAM, fpos_t &filepos) {
419 int nvars = 0, var = 0;
421 FILE *fich = fopen(FileWAM,
"r");
422 fsetpos(fich, &filepos);
424 fscanf(fich,
"%d ", &nvars);
425 for(
int i = 0; i < nvars; i++) {
426 fscanf(fich,
"%d ", &var);
429 FResMediosTurbina.Trabajo =
true;
432 FResMediosTurbina.Rendimiento =
true;
435 FResMediosTurbina.RelaCinematica =
true;
438 FResMediosTurbina.GastoCorregido =
true;
441 FResMediosTurbina.RegimenCorregido =
true;
444 FResMediosTurbina.RelacionExpansion =
true;
447 std::cout <<
"Resultados medios en turbina " << FNumeroTurbina <<
" no implementados " << std::endl;
451 fgetpos(fich, &filepos);
453 }
catch(exception & N) {
454 std::cout <<
"ERROR: TTurbinaSimple::ReadAverageResultsTurb en la turbina " << FNumeroTurbina << std::endl;
455 std::cout <<
"Tipo de error: " << N.what() << std::endl;
463 void TTurbinaSimple::CabeceraResultadosMedTurb(stringstream& medoutput) {
468 if(FResMediosTurbina.Trabajo) {
469 Label =
"\t" +
PutLabel(511) + std::to_string(FNumeroTurbina) +
PutLabel(907);
470 medoutput << Label.c_str();
472 if(FResMediosTurbina.Rendimiento) {
473 Label =
"\t" +
PutLabel(512) + std::to_string(FNumeroTurbina) +
PutLabel(901);
474 medoutput << Label.c_str();
476 if(FResMediosTurbina.RelaCinematica) {
477 for(
int i = 0; i < FNumeroEntradas; i++) {
478 Label =
"\t" +
PutLabel(513) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
479 medoutput << Label.c_str();
483 if(FResMediosTurbina.GastoCorregido) {
484 for(
int i = 0; i < FNumeroEntradas; i++) {
485 Label =
"\t" +
PutLabel(516) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(905);
486 medoutput << Label.c_str();
489 if(FResMediosTurbina.RegimenCorregido) {
490 for(
int i = 0; i < FNumeroEntradas; i++) {
491 Label =
"\t" +
PutLabel(517) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(906);
492 medoutput << Label.c_str();
495 if(FResMediosTurbina.RelacionExpansion) {
496 for(
int i = 0; i < FNumeroEntradas; i++) {
497 Label =
"\t" +
PutLabel(518) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
498 medoutput << Label.c_str();
503 }
catch(exception & N) {
504 std::cout <<
"ERROR: TTurbinaSimple::CabeceraResultadosMedTurb en la turbina " << FNumeroTurbina << std::endl;
505 std::cout <<
"Tipo de error: " << N.what() << std::endl;
513 void TTurbinaSimple::IniciaMedias() {
516 FResMediosTurbina.TiempoSUM = 0.;
517 FResMediosTurbina.TrabajoSUM = 0.;
518 FResMediosTurbina.Tiempo0 = 0.;
520 }
catch(exception & N) {
521 std::cout <<
"ERROR: TTurbinaSimple::IniciaMedias en el turbina: " << FNumeroTurbina << std::endl;
522 std::cout <<
"Tipo de error: " << N.what() << std::endl;
523 throw Exception(
"ERROR: TTurbinaSimple::IniciaMedias en el turbina: " + std::to_string(FNumeroTurbina) + N.what());
530 void TTurbinaSimple::AcumulaMedias(
double Tiempo) {
533 DeltaT = Tiempo - FResMediosTurbina.Tiempo0;
534 FResMediosTurbina.TiempoSUM += DeltaT;
536 FResMediosTurbina.TrabajoSUM += FPotencia * DeltaT;
537 FResMediosTurbina.Tiempo0 = Tiempo;
538 for(
int i = 0; i < FNumeroEntradas; i++) {
539 if(FResMediosTurbina.GastoCorregido) {
540 FResMediosTurbina.GastoCorregidoSUM[i] += FGastoCorregido[i] * DeltaT;
542 if(FResMediosTurbina.RegimenCorregido) {
543 FResMediosTurbina.RegimenCorregidoSUM[i] += FRegimenCorregido[i] * DeltaT;
545 if(FResMediosTurbina.RelacionExpansion) {
546 FResMediosTurbina.RelacionExpansionSUM[i] += FRelacionExpansion[i] * DeltaT;
549 }
catch(exception & N) {
550 std::cout <<
"ERROR: TTurbinaSimple::AcumulaMedias en la turbina: " << FNumeroTurbina << std::endl;
551 std::cout <<
"Tipo de error: " << N.what() << std::endl;
552 throw Exception(
"ERROR: TTurbinaSimple::AcumulaMedias en la Turbine: " + std::to_string(FNumeroTurbina) + N.what());
559 void TTurbinaSimple::ImprimeResultadosMedTurb(stringstream& medoutput) {
563 if(FResMediosTurbina.Trabajo)
564 medoutput <<
"\t" << FResMediosTurbina.TrabajoMED;
565 if(FResMediosTurbina.Rendimiento)
566 medoutput <<
"\t" << FResMediosTurbina.RendimientoMED;
567 if(FResMediosTurbina.RelaCinematica) {
568 for(
int i = 0; i < FNumeroEntradas; i++) {
569 medoutput <<
"\t" << FResMediosTurbina.RelaCinematicaMED[i];
573 if(FResMediosTurbina.GastoCorregido) {
574 for(
int i = 0; i < FNumeroEntradas; i++) {
575 medoutput <<
"\t" << FResMediosTurbina.GastoCorregidoMED[i];
578 if(FResMediosTurbina.RegimenCorregido) {
579 for(
int i = 0; i < FNumeroEntradas; i++) {
580 medoutput <<
"\t" << FResMediosTurbina.RegimenCorregidoMED[i];
583 if(FResMediosTurbina.RelacionExpansion) {
584 for(
int i = 0; i < FNumeroEntradas; i++) {
585 medoutput <<
"\t" << FResMediosTurbina.RelacionExpansionMED[i];
590 }
catch(exception & N) {
591 std::cout <<
"ERROR: TTurbinaSimple::ImprimerResultadosMedTurb en la turbina " << FNumeroTurbina << std::endl;
592 std::cout <<
"Tipo de error: " << N.what() << std::endl;
600 void TTurbinaSimple::CalculaResultadosMediosTurb() {
603 if(FResMediosTurbina.Trabajo) {
604 FResMediosTurbina.TrabajoMED = FResMediosTurbina.TrabajoSUM;
606 if(FResMediosTurbina.Rendimiento) {
607 if(FTrabajoTotal != 0.) {
608 FResMediosTurbina.RendimientoMED = FTrabajoReal / FTrabajoTotal;
610 FResMediosTurbina.RendimientoMED = 0.;
613 if(FResMediosTurbina.RelaCinematica) {
614 for(
int i = 0; i < FNumeroEntradas; i++) {
615 FResMediosTurbina.RelaCinematicaMED[i] = FRelacionCinAcum[i] / FPonderacionRelacionCinematica[i];
623 if(FResMediosTurbina.GastoCorregido) {
624 for(
int i = 0; i < FNumeroEntradas; i++) {
625 FResMediosTurbina.GastoCorregidoMED[i] = FResMediosTurbina.GastoCorregidoSUM[i] / FResMediosTurbina.TiempoSUM;
628 if(FResMediosTurbina.RegimenCorregido) {
629 for(
int i = 0; i < FNumeroEntradas; i++) {
630 FResMediosTurbina.RegimenCorregidoMED[i] = FResMediosTurbina.RegimenCorregidoSUM[i] / FResMediosTurbina.TiempoSUM;
633 if(FResMediosTurbina.RelacionExpansion) {
634 for(
int i = 0; i < FNumeroEntradas; i++) {
635 FResMediosTurbina.RelacionExpansionMED[i] = FResMediosTurbina.RelacionExpansionSUM[i] / FResMediosTurbina.TiempoSUM;
639 for(
int i = 0; i < FNumeroEntradas; i++) {
640 FRelacionCinAcum[i] = 0.;
641 FResMediosTurbina.GastoCorregidoSUM[i] = 0.;
642 FResMediosTurbina.RegimenCorregidoSUM[i] = 0.;
643 FResMediosTurbina.RelacionExpansionSUM[i] = 0.;
644 FPonderacionRelacionCinematica[i] = 0.;
649 FResMediosTurbina.TrabajoSUM = 0.;
650 FResMediosTurbina.TiempoSUM = 0.;
652 }
catch(exception & N) {
653 std::cout <<
"ERROR: TTurbinaSimple::CalculaResultadosMediosTurb en la turbina " << FNumeroTurbina << std::endl;
654 std::cout <<
"Tipo de error: " << N.what() << std::endl;
662 void TTurbinaSimple::LeeResultadosInstantTurb(
const char *FileWAM, fpos_t &filepos) {
663 int nvars = 0, var = 0;
666 FILE *fich = fopen(FileWAM,
"r");
667 fsetpos(fich, &filepos);
669 fscanf(fich,
"%d ", &nvars);
670 for(
int i = 0; i < nvars; i++) {
671 fscanf(fich,
"%d ", &var);
674 FResInstantTurbina.Potencia =
true;
677 FResInstantTurbina.Rendimiento =
true;
680 FResInstantTurbina.RelaCinematica =
true;
683 FResInstantTurbina.GastoCorregido =
true;
686 FResInstantTurbina.RegimenCorregido =
true;
689 FResInstantTurbina.RelacionExpansion =
true;
692 std::cout <<
"Instantaneous results in turbine " << FNumeroTurbina <<
" are not implemented " << std::endl;
695 fgetpos(fich, &filepos);
697 }
catch(exception & N) {
698 std::cout <<
"ERROR: TTurbinaSimple::LeeResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
699 std::cout <<
"Tipo de error: " << N.what() << std::endl;
707 void TTurbinaSimple::CabeceraResultadosInstantTurb(stringstream& insoutput) {
712 if(FResInstantTurbina.Potencia) {
713 Label =
"\t" +
PutLabel(519) + std::to_string(FNumeroTurbina) +
PutLabel(903);
714 insoutput << Label.c_str();
716 if(FResInstantTurbina.Rendimiento) {
717 Label =
"\t" +
PutLabel(512) + std::to_string(FNumeroTurbina) +
PutLabel(901);
718 insoutput << Label.c_str();
720 if(FResInstantTurbina.RelaCinematica) {
721 for(
int i = 0; i < FNumeroEntradas; i++) {
722 Label =
"\t" +
PutLabel(513) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
723 insoutput << Label.c_str();
726 if(FResInstantTurbina.GastoCorregido) {
727 for(
int i = 0; i < FNumeroEntradas; i++) {
728 Label =
"\t" +
PutLabel(516) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(905);
729 insoutput << Label.c_str();
732 if(FResInstantTurbina.RegimenCorregido) {
733 for(
int i = 0; i < FNumeroEntradas; i++) {
734 Label =
"\t" +
PutLabel(517) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(906);
735 insoutput << Label.c_str();
738 if(FResInstantTurbina.RelacionExpansion) {
739 for(
int i = 0; i < FNumeroEntradas; i++) {
740 Label =
"\t" +
PutLabel(518) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
741 insoutput << Label.c_str();
745 }
catch(exception & N) {
746 std::cout <<
"ERROR: TTurbinaSimple::CabeceraResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
747 std::cout <<
"Tipo de error: " << N.what() << std::endl;
755 void TTurbinaSimple::ResultadosInstantTurb() {
757 if(FResInstantTurbina.Potencia)
758 FResInstantTurbina.PotenciaINS = FPotencia;
759 if(FResInstantTurbina.Rendimiento)
760 FResInstantTurbina.RendimientoINS = FRendTurbina[0];
761 if(FResInstantTurbina.RelaCinematica) {
762 for(
int i = 0; i < FNumeroEntradas; i++) {
763 FResInstantTurbina.RelaCinematicaINS[i] = FRelacionCinematica[i];
766 if(FResInstantTurbina.GastoCorregido) {
767 for(
int i = 0; i < FNumeroEntradas; i++) {
768 FResInstantTurbina.GastoCorregidoINS[i] = FGastoCorregido[i];
771 if(FResInstantTurbina.RegimenCorregido) {
772 for(
int i = 0; i < FNumeroEntradas; i++) {
773 FResInstantTurbina.RegimenCorregidoINS[i] = FRegimenCorregido[i];
776 if(FResInstantTurbina.RelacionExpansion) {
777 for(
int i = 0; i < FNumeroEntradas; i++) {
778 FResInstantTurbina.RelacionExpansionINS[i] = FRelacionExpansion[i];
782 }
catch(exception & N) {
783 std::cout <<
"ERROR: TTurbinaSimple::ResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
784 std::cout <<
"Tipo de error: " << N.what() << std::endl;
792 void TTurbinaSimple::ImprimeResultadosInstantTurb(stringstream& insoutput) {
796 if(FResInstantTurbina.Potencia)
797 insoutput <<
"\t" << FResInstantTurbina.PotenciaINS;
798 if(FResInstantTurbina.Rendimiento)
799 insoutput <<
"\t" << FResInstantTurbina.RendimientoINS;
800 if(FResInstantTurbina.RelaCinematica) {
801 for(
int i = 0; i < FNumeroEntradas; i++) {
802 insoutput <<
"\t" << FResInstantTurbina.RelaCinematicaINS[i];
805 if(FResInstantTurbina.GastoCorregido) {
806 for(
int i = 0; i < FNumeroEntradas; i++) {
807 insoutput <<
"\t" << FResInstantTurbina.GastoCorregidoINS[i];
810 if(FResInstantTurbina.RegimenCorregido) {
811 for(
int i = 0; i < FNumeroEntradas; i++) {
812 insoutput <<
"\t" << FResInstantTurbina.RegimenCorregidoINS[i];
815 if(FResInstantTurbina.RelacionExpansion) {
816 for(
int i = 0; i < FNumeroEntradas; i++) {
817 insoutput <<
"\t" << FResInstantTurbina.RelacionExpansionINS[i];
822 }
catch(exception & N) {
823 std::cout <<
"ERROR: TTurbinaSimple::CabeceraResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
824 std::cout <<
"Tipo de error: " << N.what() << std::endl;
829 void TTurbinaSimple::UpdateProperties0DModel(
double TimeCalculo) {
831 CalculaCondicionTurbina(TimeCalculo);
833 ActualizaPropiedades(TimeCalculo);
835 AcumulaMedias(TimeCalculo);
837 AcumulaResultadosMedios(TimeCalculo);
843 #pragma package(smart_init)