31 #include "TTurbinaTwin.h"
33 #include "TCondicionContorno.h"
34 #include "TCCDeposito.h"
35 #include "TRotorTurbina.h"
36 #include "TEstatorTurbina.h"
42 TTurbinaTwin::TTurbinaTwin(
int i, nmTipoCalculoEspecies SpeciesModel,
int numeroespecies,
43 nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
44 TTurbina(i, nmTurbinaTwin, 2, 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 TTurbinaTwin::~TTurbinaTwin() {
104 void TTurbinaTwin::AsignaEntradaSalidaCC() {
110 for(
int i = 0; i < FNumeroUniones; i++) {
111 if(
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getValvula()->getTypeOfValve() == nmStator) {
112 FCCEntrada[contador] = FCCDeposito[i];
114 }
else if(
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getValvula()->getTypeOfValve() == nmRotor) {
115 FCCSalida[0] = FCCDeposito[i];
123 dynamic_cast<TRotorTurbina *
>(
dynamic_cast<TCCDeposito *
>(FCCSalida[0])->getValvula())->AsignaTurbina(FNumeroTurbina);
125 if(FTipoTurbina == nmFixedTurbine) {
129 }
else if(FTipoTurbina == nmTurbineMap) {
139 }
catch(exception &N) {
140 std::cout <<
"ERROR: TTurbinaTwin::AsignaEntradaSalidaCC en la turbina " << FNumeroTurbina << std::endl;
141 std::cout <<
"Tipo de error: " << N.what() << std::endl;
148 void TTurbinaTwin::CalculaCondicionTurbina(
double TimeCalculo) {
150 double cpte[2], cpts ;
152 double TempIsentSal[2];
154 double incrRelCin = 0.;
155 double TrabIsen = 0.;
156 double Landa = 0., Beta = 0., Entropia = 0.;
157 int SentidoEntrada[1], SentidoSalida;
158 int dd = 0, b = 0, c = 0, d = 0;
162 double AbsoluteMass = 0;
168 DeltaT = TimeCalculo - FTimeTurbina;
169 FTimeTurbina = TimeCalculo;
172 FTrabajoIsenInstTotal = 0.;
176 Landa = FCCSalida[0]->GetTuboExtremo(0).Landa;
177 Beta = FCCSalida[0]->GetTuboExtremo(0).Beta;
178 Entropia = FCCSalida[0]->GetTuboExtremo(0).Entropia;
180 TransformaContorno(&Landa, &Beta, &Entropia, &FAsonidoSalida, &FVelocidadSalida, &FPresionSalida, 1,
181 FCCSalida[0]->getGamma());
183 if(
dynamic_cast<TCCDeposito*
>(FCCSalida[0])->getSentidoFlujo() == nmEntrante) {
185 }
else if(
dynamic_cast<TCCDeposito*
>(FCCSalida[0])->getSentidoFlujo() == nmSaliente) {
190 FTempSalida =
pow2(FAsonidoSalida * __cons::ARef) / (FCCSalida[0]->getGamma() * FCCSalida[0]->getR());
191 FVelocidadSalida *= __cons::ARef * SentidoSalida;
192 FRhoSalida = __units::BarToPa(FPresionSalida) / FTempSalida / FCCSalida[0]->getR();
193 FGastoSalida = FRhoSalida * FVelocidadSalida *
dynamic_cast<TCCDeposito*
>(FCCSalida[0])->getSeccionTubo();
196 for(
int i = 0; i < 2; i++) {
198 Landa = FCCEntrada[i]->GetTuboExtremo(0).Landa;
199 Beta = FCCEntrada[i]->GetTuboExtremo(0).Beta;
200 Entropia = FCCEntrada[i]->GetTuboExtremo(0).Entropia;
202 TransformaContorno(&Landa, &Beta, &Entropia, &FAsonidoEntrada[i], &FVelocidadEntrada[i], &FPresionEntrada[i], 1,
203 FCCEntrada[i]->getGamma());
205 if(
dynamic_cast<TCCDeposito*
>(FCCEntrada[i])->getSentidoFlujo() == nmEntrante) {
206 SentidoEntrada[i] = 1;
207 }
else if(
dynamic_cast<TCCDeposito*
>(FCCEntrada[i])->getSentidoFlujo() == nmSaliente) {
208 SentidoEntrada[i] = -1;
210 SentidoEntrada[i] = 0;
212 FTempEntrada[i] =
pow2(FAsonidoEntrada[i] * __cons::ARef) / (FCCEntrada[i]->getGamma() * FCCEntrada[i]->getR());
213 FVelocidadEntrada[i] *= __cons::ARef * SentidoEntrada[i];
214 FRhoEntrada[i] = __units::BarToPa(FPresionEntrada[i]) / FTempEntrada[i] / FCCEntrada[i]->getR();
215 FGastoEntrada[i] = FRhoEntrada[i] * FVelocidadEntrada[i] *
dynamic_cast<TCCDeposito*
>(FCCEntrada[i])->getSeccionTubo();
218 if(FGastoEntrada[0] <= 0. && FGastoEntrada[1] > 0.) {
219 FGastoEntrada[1] = FGastoEntrada[1] + FGastoEntrada[0];
220 FGastoEntrada[0] = 0.;
221 }
else if(FGastoEntrada[1] <= 0. && FGastoEntrada[0] > 0.) {
222 FGastoEntrada[0] = FGastoEntrada[1] + FGastoEntrada[0];
223 FGastoEntrada[1] = 0.;
224 }
else if(FGastoEntrada[0] <= 0. && FGastoEntrada[1] <= 0.) {
225 FGastoEntrada[1] = 0.;
226 FGastoEntrada[0] = 0.;
228 AbsoluteMass = fabs(FGastoEntrada[0]) + fabs(FGastoEntrada[1]);
230 for(
int i = 0; i < 2; i++) {
231 if(FCalculoEspecies == nmCalculoCompleto) {
232 cpte[i] = CpTurbineComplete(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
235 cpte[i] = CpTurbineSimple(FTempEntrada[i], FFraccionMasicaEspecie[0]);
242 for(
int i = 0; i < 2; i++) {
244 FTemp0Entrada[i] = FTempEntrada[i] +
pow2(FVelocidadEntrada[i]) / (2. * cpte[i]);
246 gam_te = cpte[i] / (cpte[i] - FRMezcla);
248 FPresion0Entrada[i] = FPresionEntrada[i] * pow(FTemp0Entrada[i] / FTempEntrada[i], (gam_te / (gam_te - 1.0)));
250 FGastoCorregido[i] = FGastoEntrada[i] * sqrt(FTemp0Entrada[i]) / FPresion0Entrada[i] / 0.1;
251 FRegimenCorregido[i] = FRegimen / sqrt(FTemp0Entrada[i]);
253 if(FCalculoEspecies == nmCalculoCompleto) {
254 cp_med[i] = CpTurbineComplete(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
255 (FTempEntrada[i] + FTempSalida) / 2.);
257 cp_med[i] = CpTurbineSimple((FTempEntrada[i] + FTempSalida) / 2., FFraccionMasicaEspecie[0]);
259 TempIsentSal[i] = FTemp0Entrada[i] * pow(FPresionSalida / FPresion0Entrada[i], (FRMezcla / cp_med[i]));
261 if(FCalculoEspecies == nmCalculoCompleto) {
262 cp_med[i] = CpTurbineComplete(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
263 (FTempEntrada[i] + TempIsentSal[i]) / 2.);
265 cp_med[i] = CpTurbineSimple((FTempEntrada[i] + TempIsentSal[i]) / 2., FFraccionMasicaEspecie[0]);
268 FEntalpia0Entrada[i] = cp_med[i] * FTemp0Entrada[i];
269 EntalEntr[i] = cp_med[i] * FTempEntrada[i];
270 FEntalpiaIsenSalida[i] = cp_med[i] * TempIsentSal[i];
272 FRelacionExpansion[i] = FPresion0Entrada[i] / FPresionSalida;
275 if(FTipoTurbina == nmTurbineMap) {
276 if(FRackIsControlled) {
277 FRack = FRackController->
Output(FTime);
279 double MassAcum = 0.;
282 for(
int i = 0; i < 2; i++) {
284 FMapa->CurrentEffectiveSection(FRegimenCorregido[i] / 60., FRelacionExpansion[i], FRack,
285 __units::degCToK(FTemperature) / FTemp0Entrada[i]);
288 FMapa->StatorEF() / 2.);
290 if(FGastoEntrada[i] > 0) {
291 RotorEF += FMapa->RotorEF() * FGastoEntrada[i];
292 MassAcum += FGastoEntrada[i];
294 FRendTurbina[i] = FMapa->EffTurb();
304 if((FGastoEntrada[0] > 0. || FGastoEntrada[1] > 0.) && ((FEntalpia0Entrada[0] - FEntalpiaIsenSalida[0]) >= 0.
305 && (FEntalpia0Entrada[1] - FEntalpiaIsenSalida[1]) >= 0.)) {
307 for(
int i = 0; i < 2; i++) {
309 if((FEntalpia0Entrada[i] - FEntalpiaIsenSalida[i]) > 0.) {
310 FRelacionCinematica[i] = __units::RPMToRPS(FRegimen) * __cons::Pi * FDiametroRodete / sqrt(2 *
311 (FEntalpia0Entrada[i] - FEntalpiaIsenSalida[i]));
313 FRelacionCinematica[i] = 0.;
316 if(FCalRendTurbina == nmWatson) {
317 if(FRelacionCinematica[i] <= 0 || FRelacionCinematica[i] >= 1.19) {
320 FRendTurbina[i] = 0.004022 + 1.55766 * FRelacionCinematica[i] - 0.511626 *
pow2(FRelacionCinematica[i]) - 0.121795 *
321 pow3(FRelacionCinematica[i]) - 0.445804 *
pow4(
322 FRelacionCinematica[i]);
324 }
else if(FCalRendTurbina == nmPolinomio) {
325 if(FRelacionCinematica[i] >= FRcmaxima || FRelacionCinematica[i] <= 0) {
326 FRendTurbina[i] = 0.;
328 dd = 2. *
pow3(FRcoptima) *
pow2(FRcmaxima) -
pow2(FRcoptima) *
pow3(FRcmaxima) -
pow4(FRcoptima) * FRcmaxima;
329 b = FRendmaximo * (3. *
pow2(FRcmaxima) *
pow2(FRcoptima) - 2 *
pow3(FRcmaxima) * FRcoptima) / dd;
330 c = FRendmaximo * (
pow3(FRcmaxima) - 3. * FRcmaxima *
pow2(FRcoptima)) / dd;
331 d = FRendmaximo * (2. * FRcmaxima * FRcoptima -
pow2(FRcmaxima)) / dd;
333 FRendTurbina[i] = b * FRelacionCinematica[i] + c *
pow2(FRelacionCinematica[i]) + d *
pow3(FRelacionCinematica[i]);
335 }
else if(FCalRendTurbina == nmCalcExtRD) {
337 if(FDatosTGV[FNumeroTurbinaTGV].Rendimiento[i] < 0) {
338 FRendTurbina[i] = 0.;
340 FRendTurbina[i] = FDatosTGV[FNumeroTurbinaTGV].Rendimiento[i];
342 }
else if(FCalRendTurbina == nmRendMapa) {
345 std::cout <<
"ERROR: Calculo del rendimiento de la turbina desconocido" << std::endl;
348 FRendTurbina[i] = FRendTurbina[i] * FAjustRendTurb;
351 FRelacionCinematica[0] = 0.;
352 FRelacionCinematica[1] = 0.;
353 FRendTurbina[0] = 0.;
354 FRendTurbina[1] = 0.;
359 for(
int i = 0; i < 2; i++) {
360 FTrabajoIsen = FGastoEntrada[i] * (FEntalpia0Entrada[i] - FEntalpiaIsenSalida[i]) * DeltaT;
361 FTrabajoIsenInstTotal += FTrabajoIsen;
362 FTrabajoFluido += FTrabajoIsen * FRendTurbina[i] - FGastoEntrada[i] * (FEntalpia0Entrada[i] - EntalEntr[i]) * DeltaT;
363 FTrabajoReal += FTrabajoIsen * FRendTurbina[i];
365 FTrabajoRealPaso += FTrabajoIsen * FRendTurbina[i];
369 incrRelCin = FRendTurbina[i] * FRelacionCinematica[i] * FTrabajoIsen;
371 FTrabajoTotal += FTrabajoIsen;
372 FRelacionCinAcum[i] += incrRelCin;
373 FRelacionCinGlobalAcum += incrRelCin;
374 FPonderacionRelacionCinematica[i] += FRendTurbina[i] * FTrabajoIsen;
376 FGastoCorregido[i] = FGastoEntrada[i] * sqrt(FTemp0Entrada[i]) / FPresion0Entrada[i] / 0.1;
377 FRegimenCorregido[i] = FRegimen / sqrt(FTemp0Entrada[i]);
378 FRelacionExpansion[i] = FPresion0Entrada[i] / FPresionSalida;
382 FPotencia = FTrabajoFluido / DeltaT;
386 FDeltaPaso += DeltaT;
388 FTrabajoIsenInstTotal = 0.;
391 }
catch(exception &N) {
392 std::cout <<
"ERROR: TTurbinaTwin::CalculaCondicionTurbina en la turbina: " << FNumeroTurbina << std::endl;
393 std::cout <<
"Tipo de error: " << N.what() << std::endl;
401 void TTurbinaTwin::ReadAverageResultsTurb(
const char *FileWAM, fpos_t &filepos) {
403 int nvars = 0, var = 0;
405 FILE *fich = fopen(FileWAM,
"r");
406 fsetpos(fich, &filepos);
408 fscanf(fich,
"%d ", &nvars);
409 for(
int i = 0; i < nvars; i++) {
410 fscanf(fich,
"%d ", &var);
413 FResMediosTurbina.Trabajo =
true;
416 FResMediosTurbina.Rendimiento =
true;
419 FResMediosTurbina.RelaCinematica =
true;
422 FResMediosTurbina.GastoCorregido =
true;
425 FResMediosTurbina.RegimenCorregido =
true;
428 FResMediosTurbina.RelacionExpansion =
true;
431 std::cout <<
"Resultados medios en turbina " << FNumeroTurbina <<
" no implementados " << std::endl;
435 fgetpos(fich, &filepos);
437 }
catch(exception &N) {
438 std::cout <<
"ERROR: TTurbinaTwin::ReadAverageResultsTurb en la turbina " << FNumeroTurbina << std::endl;
439 std::cout <<
"Tipo de error: " << N.what() << std::endl;
447 void TTurbinaTwin::CabeceraResultadosMedTurb(stringstream& medoutput) {
453 if(FResMediosTurbina.Trabajo) {
454 Label =
"\t" +
PutLabel(511) + std::to_string(FNumeroTurbina) +
PutLabel(907);
455 medoutput << Label.c_str();
457 if(FResMediosTurbina.Rendimiento) {
458 Label =
"\t" +
PutLabel(512) + std::to_string(FNumeroTurbina) +
PutLabel(901);
459 medoutput << Label.c_str();
461 if(FResMediosTurbina.RelaCinematica) {
462 for(
int i = 0; i < FNumeroEntradas; i++) {
463 Label =
"\t" +
PutLabel(513) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
464 medoutput << Label.c_str();
468 if(FResMediosTurbina.GastoCorregido) {
469 for(
int i = 0; i < FNumeroEntradas; i++) {
470 Label =
"\t" +
PutLabel(516) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(905);
471 medoutput << Label.c_str();
474 if(FResMediosTurbina.RegimenCorregido) {
475 for(
int i = 0; i < FNumeroEntradas; i++) {
476 Label =
"\t" +
PutLabel(517) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(906);
477 medoutput << Label.c_str();
480 if(FResMediosTurbina.RelacionExpansion) {
481 for(
int i = 0; i < FNumeroEntradas; i++) {
482 Label =
"\t" +
PutLabel(518) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
483 medoutput << Label.c_str();
488 }
catch(exception &N) {
489 std::cout <<
"ERROR: TTurbinaTwin::CabeceraResultadosMedTurb en la turbina " << FNumeroTurbina << std::endl;
490 std::cout <<
"Tipo de error: " << N.what() << std::endl;
498 void TTurbinaTwin::IniciaMedias() {
501 FResMediosTurbina.TiempoSUM = 0.;
502 FResMediosTurbina.TrabajoSUM = 0.;
503 FResMediosTurbina.Tiempo0 = 0.;
505 }
catch(exception &N) {
506 std::cout <<
"ERROR: TTurbinaTwin::IniciaMedias en el turbina: " << FNumeroTurbina << std::endl;
507 std::cout <<
"Tipo de error: " << N.what() << std::endl;
508 throw Exception(
"ERROR: TTurbinaTwin::IniciaMedias en el turbina: " + std::to_string(FNumeroTurbina) + N.what());
515 void TTurbinaTwin::AcumulaMedias(
double Tiempo) {
518 DeltaT = Tiempo - FResMediosTurbina.Tiempo0;
519 FResMediosTurbina.TiempoSUM += DeltaT;
520 FResMediosTurbina.TrabajoSUM = FTrabajoReal;
521 FResMediosTurbina.Tiempo0 = Tiempo;
522 for(
int i = 0; i < FNumeroEntradas; i++) {
523 if(FResMediosTurbina.GastoCorregido) {
524 FResMediosTurbina.GastoCorregidoSUM[i] += FGastoCorregido[i] * DeltaT;
526 if(FResMediosTurbina.RegimenCorregido) {
527 FResMediosTurbina.RegimenCorregidoSUM[i] += FRegimenCorregido[i] * DeltaT;
529 if(FResMediosTurbina.RelacionExpansion) {
530 FResMediosTurbina.RelacionExpansionSUM[i] += FRelacionExpansion[i] * DeltaT;
533 }
catch(exception &N) {
534 std::cout <<
"ERROR: TTurbinaTwin::AcumulaMedias en la turbina: " << FNumeroTurbina << std::endl;
535 std::cout <<
"Tipo de error: " << N.what() << std::endl;
536 throw Exception(
"ERROR: TTurbinaTwin::AcumulaMedias en la Turbine: " + std::to_string(FNumeroTurbina) + N.what());
543 void TTurbinaTwin::ImprimeResultadosMedTurb(stringstream& medoutput) {
547 if(FResMediosTurbina.Trabajo)
548 medoutput <<
"\t" << FResMediosTurbina.TrabajoMED;
549 if(FResMediosTurbina.Rendimiento)
550 medoutput <<
"\t" << FResMediosTurbina.RendimientoMED;
551 if(FResMediosTurbina.RelaCinematica) {
552 for(
int i = 0; i < FNumeroEntradas; i++) {
553 medoutput <<
"\t" << FResMediosTurbina.RelaCinematicaMED[i];
557 if(FResMediosTurbina.GastoCorregido) {
558 for(
int i = 0; i < FNumeroEntradas; i++) {
559 medoutput <<
"\t" << FResMediosTurbina.GastoCorregidoMED[i];
562 if(FResMediosTurbina.RegimenCorregido) {
563 for(
int i = 0; i < FNumeroEntradas; i++) {
564 medoutput <<
"\t" << FResMediosTurbina.RegimenCorregidoMED[i];
567 if(FResMediosTurbina.RelacionExpansion) {
568 for(
int i = 0; i < FNumeroEntradas; i++) {
569 medoutput <<
"\t" << FResMediosTurbina.RelacionExpansionMED[i];
574 }
catch(exception &N) {
575 std::cout <<
"ERROR: TTurbinaTwin::ImprimerResultadosMedTurb en la turbina " << FNumeroTurbina << std::endl;
576 std::cout <<
"Tipo de error: " << N.what() << std::endl;
584 void TTurbinaTwin::CalculaResultadosMediosTurb() {
587 if(FResMediosTurbina.Trabajo) {
588 FResMediosTurbina.TrabajoMED = FResMediosTurbina.TrabajoSUM;
590 if(FResMediosTurbina.Rendimiento) {
591 if(FTrabajoTotal != 0.) {
592 FResMediosTurbina.RendimientoMED = FTrabajoReal / FTrabajoTotal;
594 FResMediosTurbina.RendimientoMED = 0.;
597 if(FResMediosTurbina.RelaCinematica) {
598 for(
int i = 0; i < FNumeroEntradas; i++) {
599 FResMediosTurbina.RelaCinematicaMED[i] = FRelacionCinAcum[i] / FPonderacionRelacionCinematica[i];
607 if(FResMediosTurbina.GastoCorregido) {
608 for(
int i = 0; i < FNumeroEntradas; i++) {
609 FResMediosTurbina.GastoCorregidoMED[i] = FResMediosTurbina.GastoCorregidoSUM[i] / FResMediosTurbina.TiempoSUM;
612 if(FResMediosTurbina.RegimenCorregido) {
613 for(
int i = 0; i < FNumeroEntradas; i++) {
614 FResMediosTurbina.RegimenCorregidoMED[i] = FResMediosTurbina.RegimenCorregidoSUM[i] / FResMediosTurbina.TiempoSUM;
617 if(FResMediosTurbina.RelacionExpansion) {
618 for(
int i = 0; i < FNumeroEntradas; i++) {
619 FResMediosTurbina.RelacionExpansionMED[i] = FResMediosTurbina.RelacionExpansionSUM[i] / FResMediosTurbina.TiempoSUM;
623 for(
int i = 0; i < FNumeroEntradas; i++) {
624 FRelacionCinAcum[i] = 0.;
625 FResMediosTurbina.GastoCorregidoSUM[i] = 0.;
626 FResMediosTurbina.RegimenCorregidoSUM[i] = 0.;
627 FResMediosTurbina.RelacionExpansionSUM[i] = 0.;
628 FPonderacionRelacionCinematica[i] = 0.;
630 FRelacionCinGlobalAcum = 0.;
633 FResMediosTurbina.TrabajoSUM = 0.;
634 FResMediosTurbina.TiempoSUM = 0.;
636 }
catch(exception &N) {
637 std::cout <<
"ERROR: TTurbinaTwin::CalculaResultadosMediosTurb en la turbina " << FNumeroTurbina << std::endl;
638 std::cout <<
"Tipo de error: " << N.what() << std::endl;
646 void TTurbinaTwin::LeeResultadosInstantTurb(
const char *FileWAM, fpos_t &filepos) {
647 int nvars = 0, var = 0;
650 FILE *fich = fopen(FileWAM,
"r");
651 fsetpos(fich, &filepos);
653 fscanf(fich,
"%d ", &nvars);
654 for(
int i = 0; i < nvars; i++) {
655 fscanf(fich,
"%d ", &var);
658 FResInstantTurbina.Potencia =
true;
661 FResInstantTurbina.Rendimiento =
true;
664 FResInstantTurbina.RelaCinematica =
true;
667 FResInstantTurbina.GastoCorregido =
true;
670 FResInstantTurbina.RegimenCorregido =
true;
673 FResInstantTurbina.RelacionExpansion =
true;
676 std::cout <<
"Resultados instantaneos en turbina " << FNumeroTurbina <<
" no implementados " << std::endl;
679 fgetpos(fich, &filepos);
681 }
catch(exception &N) {
682 std::cout <<
"ERROR: TTurbinaTwin::LeeResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
683 std::cout <<
"Tipo de error: " << N.what() << std::endl;
691 void TTurbinaTwin::CabeceraResultadosInstantTurb(stringstream& insoutput) {
697 if(FResInstantTurbina.Potencia) {
698 Label =
"\t" +
PutLabel(519) + std::to_string(FNumeroTurbina) +
PutLabel(903);
699 insoutput << Label.c_str();
701 if(FResInstantTurbina.Rendimiento) {
702 Label =
"\t" +
PutLabel(512) + std::to_string(FNumeroTurbina) +
PutLabel(901);
703 insoutput << Label.c_str();
705 if(FResInstantTurbina.RelaCinematica) {
706 for(
int i = 0; i < FNumeroEntradas; i++) {
707 Label =
"\t" +
PutLabel(513) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
708 insoutput << Label.c_str();
711 if(FResInstantTurbina.GastoCorregido) {
712 for(
int i = 0; i < FNumeroEntradas; i++) {
713 Label =
"\t" +
PutLabel(516) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(905);
714 insoutput << Label.c_str();
717 if(FResInstantTurbina.RegimenCorregido) {
718 for(
int i = 0; i < FNumeroEntradas; i++) {
719 Label =
"\t" +
PutLabel(517) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(906);
720 insoutput << Label.c_str();
723 if(FResInstantTurbina.RelacionExpansion) {
724 for(
int i = 0; i < FNumeroEntradas; i++) {
725 Label =
"\t" +
PutLabel(518) + std::to_string(i + 1) +
PutLabel(514) + std::to_string(FNumeroTurbina) +
PutLabel(901);
726 insoutput << Label.c_str();
730 }
catch(exception &N) {
731 std::cout <<
"ERROR: TTurbinaTwin::CabeceraResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
732 std::cout <<
"Tipo de error: " << N.what() << std::endl;
740 void TTurbinaTwin::ResultadosInstantTurb() {
742 if(FResInstantTurbina.Potencia)
743 FResInstantTurbina.PotenciaINS = FPotencia;
744 if(FResInstantTurbina.Rendimiento)
745 if(FTrabajoIsenInstTotal == 0)
746 FResInstantTurbina.RendimientoINS = 0;
748 FResInstantTurbina.RendimientoINS = FTrabajoFluido / FTrabajoIsenInstTotal;
749 if(FResInstantTurbina.RelaCinematica) {
750 for(
int i = 0; i < FNumeroEntradas; i++) {
751 FResInstantTurbina.RelaCinematicaINS[i] = FRelacionCinematica[i];
754 if(FResInstantTurbina.GastoCorregido) {
755 for(
int i = 0; i < FNumeroEntradas; i++) {
756 FResInstantTurbina.GastoCorregidoINS[i] = FGastoCorregido[i];
759 if(FResInstantTurbina.RegimenCorregido) {
760 for(
int i = 0; i < FNumeroEntradas; i++) {
761 FResInstantTurbina.RegimenCorregidoINS[i] = FRegimenCorregido[i];
764 if(FResInstantTurbina.RelacionExpansion) {
765 for(
int i = 0; i < FNumeroEntradas; i++) {
766 FResInstantTurbina.RelacionExpansionINS[i] = FRelacionExpansion[i];
770 }
catch(exception &N) {
771 std::cout <<
"ERROR: TTurbinaTwin::ResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
772 std::cout <<
"Tipo de error: " << N.what() << std::endl;
780 void TTurbinaTwin::ImprimeResultadosInstantTurb(stringstream& insoutput) {
784 if(FResInstantTurbina.Potencia)
785 insoutput <<
"\t" << FResInstantTurbina.PotenciaINS;
786 if(FResInstantTurbina.Rendimiento)
787 insoutput <<
"\t" << FResInstantTurbina.RendimientoINS;
788 if(FResInstantTurbina.RelaCinematica) {
789 for(
int i = 0; i < FNumeroEntradas; i++) {
790 insoutput <<
"\t" << FResInstantTurbina.RelaCinematicaINS[i];
793 if(FResInstantTurbina.GastoCorregido) {
794 for(
int i = 0; i < FNumeroEntradas; i++) {
795 insoutput <<
"\t" << FResInstantTurbina.GastoCorregidoINS[i];
798 if(FResInstantTurbina.RegimenCorregido) {
799 for(
int i = 0; i < FNumeroEntradas; i++) {
800 insoutput <<
"\t" << FResInstantTurbina.RegimenCorregidoINS[i];
803 if(FResInstantTurbina.RelacionExpansion) {
804 for(
int i = 0; i < FNumeroEntradas; i++) {
805 insoutput <<
"\t" << FResInstantTurbina.RelacionExpansionINS[i];
809 }
catch(exception &N) {
810 std::cout <<
"ERROR: TTurbinaTwin::CabeceraResultadosInstantTurb en la turbina " << FNumeroTurbina << std::endl;
811 std::cout <<
"Tipo de error: " << N.what() << std::endl;
819 void TTurbinaTwin::ImprimeResultadosMediosPantalla() {
822 printf(
"TRABAJO TURBINA %d = %lf Julios \n", FNumeroTurbina, FTrabajoReal);
823 if(FTrabajoTotal != 0.) {
824 printf(
"RENDIMIENTO TURBINA %d = %lf \n", FNumeroTurbina, FTrabajoReal / FTrabajoTotal);
826 printf(
"RENDIMIENTO TURBINA %d = %lf \n", FNumeroTurbina, 0.);
828 if(FTrabajoReal != 0.) {
829 printf(
"REL.CINEM.ALABE TURB(Global) %d = %lf \n", FNumeroTurbina, FRelacionCinGlobalAcum / FTrabajoReal);
831 printf(
"REL.CINEM.ALABE TURB(Global) %d = %lf \n", FNumeroTurbina, 0.);
834 }
catch(exception &N) {
835 std::cout <<
"ERROR: TTurbinaTwin::ImprimeResultadosMediosPantalla en la turbina: " << FNumeroTurbina << std::endl;
836 std::cout <<
"Tipo de error: " << N.what() << std::endl;
841 void TTurbinaTwin::UpdateProperties0DModel(
double TimeCalculo) {
843 ActualizaPropiedades(TimeCalculo);
845 CalculaCondicionTurbina(TimeCalculo);
847 AcumulaMedias(TimeCalculo);
849 AcumulaResultadosMedios(TimeCalculo);
856 #pragma package(smart_init)