30 #include "TDeposito.h"
32 #include "TCCDeposito.h"
33 #include "TCCUnionEntreDepositos.h"
34 #include "TCCCompresor.h"
35 #include "TCompresor.h"
38 #include "TCanalDPF.h"
43 TDeposito::TDeposito(
int i, nmTipoDeposito TipoDeposito, nmTipoCalculoEspecies SpeciesModel,
int numeroespecies,
44 nmCalculoGamma GammaCalculation,
bool ThereIsEGR) {
46 FCalculoEspecies = SpeciesModel;
47 FNumeroEspecies = numeroespecies;
48 FCalculoGamma = GammaCalculation;
49 FFraccionMasicaEspecie = NULL;
64 asgFNumUniones =
false;
65 asgFNumConductos =
false;
66 asgFSentidoFlujo =
false;
67 FNumeroDeposito = i + 1;
68 FTipoDeposito = TipoDeposito;
73 FHayCompresor =
false;
75 FEstudioEstabilidadRealizado =
false;
78 FCCUnionEntreDep = NULL;
80 FResMediosDep.Pressure =
false;
81 FResMediosDep.PresionSUM = 0.;
82 FResMediosDep.PresionMED = 1.;
83 FResMediosDep.Temperature =
false;
84 FResMediosDep.TemperaturaSUM = 0.;
85 FResMediosDep.TemperaturaMED = 0.;
86 FResMediosDep.TiempoSUM = 0.;
87 FResMediosDep.Tiempo0 = 0.;
88 FResMediosDep.FraccionMasicaEspecies =
false;
89 FResMediosDep.FraccionMED =
new double[FNumeroEspecies - FIntEGR];
90 FResMediosDep.FraccionSUM =
new double[FNumeroEspecies - FIntEGR];
92 FResInstantDep.Pressure =
false;
93 FResInstantDep.Temperature =
false;
94 FResInstantDep.Volumen =
false;
95 FResInstantDep.Masa =
false;
96 FResInstantDep.PresionINS = 1.;
97 FResInstantDep.TemperaturaINS = 0.;
98 FResInstantDep.VolumenINS = 1.;
99 FResInstantDep.MasaINS = 1.;
100 FResInstantDep.FraccionMasicaEspecies =
false;
101 FResInstantDep.FraccionINS =
new double[FNumeroEspecies - FIntEGR];
102 FResInstantDep.Gamma =
false;
103 FResInstantDep.GammaINS = 1.4;
105 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
106 FResInstantDep.FraccionINS[i] = 0.;
107 FResMediosDep.FraccionSUM[i] = 0.;
108 FResMediosDep.FraccionMED[i] = 0.;
118 TDeposito::~TDeposito() {
121 if(FSentidoFlujo != NULL)
122 delete[] FSentidoFlujo;
123 if(FNumConductos != NULL)
124 delete[] FNumConductos;
125 if(FNumNodos != NULL)
128 if(FFraccionMasicaEspecie != NULL)
129 delete[] FFraccionMasicaEspecie;
130 if(FMasaEspecie != NULL)
131 delete[] FMasaEspecie;
133 if(FCCDeposito != NULL)
134 delete[] FCCDeposito;
135 if(FCCUnionEntreDep != NULL)
136 delete[] FCCUnionEntreDep;
138 if(FResMediosDep.FraccionMED != NULL)
139 delete[] FResMediosDep.FraccionMED;
141 if(FResMediosDep.FraccionSUM != NULL)
142 delete[] FResMediosDep.FraccionSUM;
144 if(FResInstantDep.FraccionINS != NULL)
145 delete[] FResInstantDep.FraccionINS;
151 void TDeposito::LeeDatosGeneralesDepositos(
const char *FileWAM, fpos_t &filepos) {
153 double fracciontotal = 0.;
155 FILE *fich = fopen(FileWAM,
"r");
156 fsetpos(fich, &filepos);
158 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
159 FMasaEspecie =
new double[FNumeroEspecies - FIntEGR];
160 for(
int i = 0; i < FNumeroEspecies - 1; i++) {
161 fscanf(fich,
"%lf ", &FFraccionMasicaEspecie[i]);
162 fracciontotal += FFraccionMasicaEspecie[i];
165 if(FCalculoEspecies == nmCalculoCompleto) {
166 if(FFraccionMasicaEspecie[0] > 0.2)
167 FFraccionMasicaEspecie[FNumeroEspecies - 1] = 0.;
169 FFraccionMasicaEspecie[FNumeroEspecies - 1] = 1.;
171 if(FFraccionMasicaEspecie[0] > 0.5)
172 FFraccionMasicaEspecie[FNumeroEspecies - 1] = 1.;
174 FFraccionMasicaEspecie[FNumeroEspecies - 1] = 0.;
178 if(fracciontotal > 1 + 1.e-10 && fracciontotal < 1 - 1e-10) {
179 std::cout <<
"ERROR: Total mass fraction cannot be different than 1. Check input data in plenum " << FNumeroDeposito <<
184 if(FTipoDeposito != nmDepVolVble) {
185 fscanf(fich,
"%lf %lf %lf ", &FVolumen, &FPressure, &FTemperature);
186 if(FCalculoEspecies == nmCalculoCompleto) {
188 FRMezcla = CalculoCompletoRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2], 0,
189 FCalculoGamma, nmMEP);
190 FCpMezcla = CalculoCompletoCpMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2], 0,
191 __units::degCToK(FTemperature), FCalculoGamma, nmMEP);
192 FGamma = CalculoCompletoGamma(FRMezcla, FCpMezcla, FCalculoGamma);
194 }
else if(FCalculoEspecies == nmCalculoSimple) {
196 FRMezcla = CalculoSimpleRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FCalculoGamma, nmMEP);
197 FCvMezcla = CalculoSimpleCvMezcla(__units::degCToK(FTemperature), FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1],
198 FCalculoGamma, nmMEP);
199 FGamma = CalculoSimpleGamma(FRMezcla, FCvMezcla, FCalculoGamma);
202 FPresionIsen = pow(FPressure / FPresRef, __Gamma::G5(FGamma));
203 FAsonido = sqrt(FGamma * FRMezcla * __units::degCToK(FTemperature)) / __cons::ARef;
204 FMasa = FVolumen * FGamma * __units::BarToPa(FPressure) /
pow2(FAsonido * __cons::ARef);
205 for(
int j = 0; j < FNumeroEspecies - FIntEGR; j++) {
206 FMasaEspecie[j] = FMasa * FFraccionMasicaEspecie[j];
209 fscanf(fich,
" %lf %lf ", &FPressure, &FTemperature);
210 if(FCalculoEspecies == nmCalculoCompleto) {
212 FRMezcla = CalculoCompletoRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2], 0,
213 FCalculoGamma, nmMEP);
214 FCpMezcla = CalculoCompletoCpMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2], 0,
215 __units::degCToK(FTemperature), FCalculoGamma, nmMEP);
216 FGamma = CalculoCompletoGamma(FRMezcla, FCpMezcla, FCalculoGamma);
218 }
else if(FCalculoEspecies == nmCalculoSimple) {
220 FRMezcla = CalculoSimpleRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FCalculoGamma, nmMEP);
221 FCvMezcla = CalculoSimpleCvMezcla(__units::degCToK(FTemperature), FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1],
222 FCalculoGamma, nmMEP);
223 FGamma = CalculoSimpleGamma(FRMezcla, FCvMezcla, FCalculoGamma);
226 FPresionIsen = pow(FPressure / FPresRef, __Gamma::G5(FGamma));
227 FAsonido = sqrt(FGamma * FRMezcla * __units::degCToK(FTemperature)) / __cons::ARef;
228 for(
int j = 0; j < FNumeroEspecies - FIntEGR; j++) {
229 FMasaEspecie[j] = FMasa * FFraccionMasicaEspecie[j];
233 fgetpos(fich, &filepos);
236 }
catch(exception & N) {
237 std::cout <<
"ERROR: TDeposito::LeeDatosGeneralesDepositos en el deposito: " << FNumeroDeposito << std::endl;
238 std::cout <<
"Tipo de error: " << N.what() << std::endl;
250 bool UnionEDAsignada;
252 for(
int i = 0; i < numCC; i++) {
253 if(BC[i]->getTipoCC() == nmPipeToPlenumConnection) {
254 if(FNumeroDeposito ==
dynamic_cast<TCCDeposito*
>(BC[i])->getNumeroDeposito()) {
257 }
else if(BC[i]->getTipoCC() == nmCompresor) {
258 if((
dynamic_cast<TCCCompresor*
>(BC[i])->getCompressor())->getModeloCompresor() == nmCompOriginal) {
259 if(FNumeroDeposito ==
dynamic_cast<TCCCompresor*
>(BC[i])->getNumeroDeposito()) {
267 if(FTipoDeposito == nmTurbinaSimple) {
268 if(FNumeroUniones != 2) {
269 std::cout <<
"ERROR: A single turbine must have 2 connections. Plenum: " << FNumeroDeposito << std::endl;
270 std::cout <<
"Total number of connections: " << FNumeroUniones << std::endl;
273 }
else if(FTipoDeposito == nmTurbinaTwin) {
274 if(FNumeroUniones != 3) {
275 std::cout <<
"ERROR: A twin turbine must have 3 connections. Plenum: " << FNumeroDeposito << std::endl;
276 std::cout <<
"Total number of connections: " << FNumeroUniones << std::endl;
279 }
else if(FTipoDeposito == nmVenturi) {
280 if(FNumeroUniones != 3) {
281 std::cout <<
"ERROR: A venturi must have 3 connections. Plenum: " << FNumeroDeposito << std::endl;
282 std::cout <<
"Total number of connections: " << FNumeroUniones << std::endl;
285 }
else if(FTipoDeposito == nmUnionDireccional) {
286 if(FNumeroUniones != 3) {
287 std::cout <<
"ERROR: A directional junction must have 3 connections. Planum: " << FNumeroDeposito << std::endl;
288 std::cout <<
"Total number of connections: " << FNumeroUniones << std::endl;
293 if(FNumeroUniones != 0)
297 CCasignadaD =
new bool[numCC];
298 for(
int i = 0; i < numCC; i++)
299 CCasignadaD[i] =
false;
301 for(
int j = 0; j < FNumeroUniones; j++) {
302 UnionAsignada =
false;
303 for(
int i = 0; i < numCC; i++) {
304 if(BC[i]->getTipoCC() == nmPipeToPlenumConnection) {
305 if(FNumeroDeposito ==
dynamic_cast<TCCDeposito*
>(BC[i])->getNumeroDeposito() && !CCasignadaD[i] && !UnionAsignada) {
306 FCCDeposito[j] = BC[i];
307 UnionAsignada =
true;
308 CCasignadaD[i] =
true;
311 if(BC[i]->getTipoCC() == nmCompresor) {
312 if(
dynamic_cast<TCCCompresor*
>(BC[i])->getCompressor()->getModeloCompresor() == nmCompOriginal) {
313 if(FNumeroDeposito ==
dynamic_cast<TCCCompresor*
>(BC[i])->getNumeroDeposito() && !CCasignadaD[i] && !UnionAsignada) {
314 FCCDeposito[j] = BC[i];
315 UnionAsignada =
true;
316 CCasignadaD[i] =
true;
323 delete[] CCasignadaD;
327 for(
int i = 0; i < numCC; i++) {
328 if(BC[i]->getTipoCC() == nmUnionEntreDepositos) {
334 if(BC[i]->getTipoCC() == nmCompresor) {
335 if(
dynamic_cast<TCCCompresor*
>(BC[i])->getCompressor()->getModeloCompresor() == nmCompPlenums) {
336 if(FNumeroDeposito ==
dynamic_cast<TCCCompresor*
>(BC[i])->getNumeroDepositoRot()
337 || FNumeroDeposito ==
dynamic_cast<TCCCompresor*
>(BC[i])->getNumeroDepositoEst()) {
344 if((FTipoDeposito == nmTurbinaSimple || FTipoDeposito == nmTurbinaTwin) & FNumeroUnionesED != 0) {
345 std::cout <<
"ERROR: Una turbina no puede estar unida directamente a un deposito. Deposito:" << std::endl;
346 std::cout <<
" Revisa la entrada de datos el apartado de uniones entre depositos" << std::endl;
348 }
else if(FTipoDeposito == nmVenturi & FNumeroUnionesED != 0) {
349 std::cout <<
"ERROR: Un venturi no puede estar unido directamente a un deposito. Deposito:" << std::endl;
350 std::cout <<
" Revisa la entrada de datos el apartado de uniones entre depositos" << std::endl;
352 }
else if(FTipoDeposito == nmUnionDireccional & FNumeroUnionesED != 0) {
353 std::cout <<
"ERROR: Una union direccional no puede estar unido directamente a un deposito" << std::endl;
354 std::cout <<
" Revisa la entrada de datos el apartado de uniones entre depositos" << std::endl;
358 if(FNumeroUnionesED != 0)
362 CCasignadaUD =
new bool[numCC];
363 for(
int i = 0; i < numCC; i++)
364 CCasignadaUD[i] =
false;
366 for(
int j = 0; j < FNumeroUnionesED; j++) {
367 UnionEDAsignada =
false;
368 for(
int i = 0; i < numCC; i++) {
369 if(BC[i]->getTipoCC() == nmUnionEntreDepositos) {
371 || FNumeroDeposito ==
dynamic_cast<TCCUnionEntreDepositos*
>(BC[i])->getNumeroDeposito2()) && !CCasignadaUD[i]
372 && !UnionEDAsignada) {
373 FCCUnionEntreDep[j] = BC[i];
374 CCasignadaUD[i] =
true;
375 UnionEDAsignada =
true;
378 if(BC[i]->getTipoCC() == nmCompresor) {
379 if(
dynamic_cast<TCCCompresor*
>(BC[i])->getCompressor()->getModeloCompresor() == nmCompPlenums) {
380 if((FNumeroDeposito ==
dynamic_cast<TCCCompresor*
>(BC[i])->getNumeroDepositoRot()
381 || FNumeroDeposito ==
dynamic_cast<TCCCompresor*
>(BC[i])->getNumeroDepositoEst()) && !CCasignadaUD[i]
382 && !UnionEDAsignada) {
383 FCCUnionEntreDep[j] = BC[i];
384 CCasignadaUD[i] =
true;
385 UnionEDAsignada =
true;
392 delete[] CCasignadaUD;
394 }
catch(exception & N) {
395 std::cout <<
"ERROR: TDeposito::AsignacionCC en el deposito: " << FNumeroDeposito << std::endl;
396 std::cout <<
"Tipo de error: " << N.what() << std::endl;
404 double TDeposito::EntalpiaEntrada(
double ASonidoE,
double VelocidadE,
double MasaE,
double ASonidoD,
double MasaD,
408 double xx = 0., yy = 0., ret_val = 0.;
410 if(fabs(MasaE) != 0.) {
411 xx = (ASonidoE * ASonidoE / ASonidoD / ASonidoD - 1.) / __Gamma::G1(Gamma);
412 yy = VelocidadE * VelocidadE / ASonidoD / ASonidoD / 2.;
413 ret_val = Gamma * MasaE * (xx + yy) / MasaD;
418 }
catch(exception & N) {
419 std::cout <<
"ERROR: TDeposito:EntalpiaEntrada en el deposito: " << FNumeroDeposito << std::endl;
420 std::cout <<
"Tipo de error: " << N.what() << std::endl;
428 void TDeposito::AsignaCompresor(
TCompresor *Compressor,
int sentido) {
431 std::cout <<
"ERROR: Each plenum only can have one compressor connected" << std::endl;
432 std::cout <<
" Check the input data" << std::endl;
435 if(FTipoDeposito != nmDepVolCte) {
436 std::cout <<
"ERROR: Compressor only can be connected to constant volume plenums" << std::endl;
437 std::cout <<
" Check the input data" << std::endl;
440 FHayCompresor =
true;
441 FCompresor = Compressor;
442 FCompresorSentido = sentido;
445 }
catch(exception & N) {
446 std::cout <<
"ERROR: TDeposito:AsignaCompresor en el deposito: " << FNumeroDeposito << std::endl;
447 std::cout <<
"Tipo de error: " << N.what() << std::endl;
455 void TDeposito::CreaUnionED(
int numero,
int sentido) {
457 if(FTipoDeposito == nmTurbinaSimple || FTipoDeposito == nmTurbinaTwin) {
458 std::cout <<
"ERROR: Turbines can not be connected to plenums directly" << std::endl;
459 std::cout <<
" Check the input data for connections between plenums" << std::endl;
461 }
else if(FTipoDeposito == nmVenturi) {
462 std::cout <<
"ERROR: Venturis can not be connected to plenums directly" << std::endl;
463 std::cout <<
" Check the input data for connections between plenums" << std::endl;
465 }
else if(FTipoDeposito == nmUnionDireccional) {
466 std::cout <<
"ERROR: Directional junctions can not be connected to plenums directly" << std::endl;
467 std::cout <<
" Check the input data for connections between plenums" << std::endl;
471 FUnionED.push_back(numero);
472 FSentidoUED.push_back(sentido);
474 }
catch(exception & N) {
475 std::cout <<
"ERROR: TDeposito:CreaUnionED en el deposito: " << FNumeroDeposito << std::endl;
476 std::cout <<
"Tipo de error: " << N.what() << std::endl;
484 void TDeposito::PutNUniones(
int value) {
486 if(!asgFNumUniones) {
487 FNumeroUniones = value;
488 asgFNumUniones =
true;
490 FUnion =
new int[FNumeroUniones];
491 for(
int i = 0; i < FNumeroUniones; i++) {
495 std::cout <<
"ERROR: The connections vector is already allocated" << std::endl;
498 if(FNumConductos == NULL) {
499 FNumConductos =
new int[FNumeroUniones];
500 for(
int i = 0; i < FNumeroUniones; i++) {
501 FNumConductos[i] = -1;
504 std::cout <<
"ERROR: The pipes vector is already allocated" << std::endl;
507 if(FNumNodos == NULL) {
508 FNumNodos =
new int[FNumeroUniones];
509 for(
int i = 0; i < FNumeroUniones; i++) {
513 std::cout <<
"ERROR: The nodes number vector is already allocated" << std::endl;
516 if(FSentidoFlujo == NULL) {
517 FSentidoFlujo =
new int[FNumeroUniones];
518 for(
int i = 0; i < FNumeroUniones; i++) {
519 FSentidoFlujo[i] = 0;
522 std::cout <<
"ERROR: The flow sense vector is already allocated" << std::endl;
526 std::cout <<
"ERROR: All connections of plenum " << FNumeroDeposito <<
" are already asigned" << std::endl;
529 }
catch(exception & N) {
530 std::cout <<
"ERROR: TDeposito:PutNUniones en el deposito: " << FNumeroDeposito << std::endl;
531 std::cout <<
"Tipo de error: " << N.what() << std::endl;
539 void TDeposito::PutUnion(
int indice,
int valor) {
542 if(indice < FNumeroUniones) {
543 FUnion[indice] = valor;
546 for(
int i = 0; i < FNumeroUniones; i++) {
547 if(FUnion[i] == -1) {
553 std::cout <<
"ERROR: Se intentan definir mas nodos de los que se han declarado" << std::endl;
556 }
catch(exception & N) {
557 std::cout <<
"ERROR: PutUnion en el depositito: " << FNumeroDeposito << std::endl;
558 std::cout <<
"Tipo de error: " << N.what() << std::endl;
569 void TDeposito::PutSentidoFlujo(
int indice,
int valor) {
571 if(!asgFSentidoFlujo) {
572 if(indice < FNumeroUniones) {
573 FSentidoFlujo[indice] = valor;
575 asgFSentidoFlujo =
true;
576 for(
int i = 0; i < FNumeroUniones; i++) {
577 if(FSentidoFlujo[i] == 0) {
578 asgFSentidoFlujo =
false;
583 std::cout <<
"ERROR: Se intentan definir mas nodos de los que se han declarado" << std::endl;
586 }
catch(exception & N) {
587 std::cout <<
"ERROR: PutSentidoFlujo en el depositito: " << FNumeroDeposito << std::endl;
588 std::cout <<
"Tipo de error: " << N.what() << std::endl;
596 void TDeposito::PutNumConductos(
int indice,
int valor) {
598 if(!asgFNumConductos) {
599 if(indice < FNumeroUniones) {
600 FNumConductos[indice] = valor;
602 std::cout <<
"ERROR: Se intentan definir mas nodos de los que se han declarado" << std::endl;
605 asgFNumConductos =
true;
606 for(
int i = 0; i < FNumeroUniones; i++) {
607 if(FNumConductos[indice] == -1) {
608 asgFNumConductos =
false;
613 std::cout <<
"ERROR: All pipes are already asigned" << std::endl;
616 }
catch(exception & N) {
617 std::cout <<
"ERROR: PutNumConductos en el depositito: " << FNumeroDeposito << std::endl;
618 std::cout <<
"Tipo de error: " << N.what() << std::endl;
626 void TDeposito::PutNumNodos(
int indice,
int valor) {
629 if(indice < FNumeroUniones) {
630 FNumNodos[indice] = valor;
632 std::cout <<
"ERROR: The number of connection to the plenum is lower" << std::endl;
636 for(
int i = 0; i < FNumeroUniones; i++) {
637 if(FNumNodos[indice] == -1) {
638 asgFNumNodos =
false;
643 std::cout <<
"ERROR: All connections are already asigned" << std::endl;
646 }
catch(exception & N) {
647 std::cout <<
"ERROR: PutNumConductos en el deposito: " << FNumeroDeposito << std::endl;
648 std::cout <<
"Tipo de error: " << N.what() << std::endl;
656 void TDeposito::ResultadosInstantaneosDep() {
658 if(FResInstantDep.Pressure)
659 FResInstantDep.PresionINS = FPressure;
660 if(FResInstantDep.Temperature)
661 FResInstantDep.TemperaturaINS = __units::KTodegC(
pow2(FAsonido * __cons::ARef) / (FGamma * FRMezcla));
662 if(FResInstantDep.Volumen)
663 FResInstantDep.VolumenINS = FVolumen;
664 if(FResInstantDep.Masa)
665 FResInstantDep.MasaINS = FMasa;
666 if(FResInstantDep.FraccionMasicaEspecies) {
667 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
668 FResInstantDep.FraccionINS[i] = FFraccionMasicaEspecie[i];
671 if(FResInstantDep.Gamma)
672 FResInstantDep.GammaINS = FGamma;
674 }
catch(exception & N) {
675 std::cout <<
"ERROR: TDeposito::ResultadosInstantaneosDep en el deposito: " << FNumeroDeposito << std::endl;
676 std::cout <<
"Tipo de error: " << N.what() << std::endl;
684 void TDeposito::AcumulaResultadosMedios(
double Actual) {
686 double Delta = Actual - FResMediosDep.Tiempo0;
687 if(FResMediosDep.Pressure) {
688 FResMediosDep.PresionSUM += FPressure * Delta;
690 if(FResMediosDep.Temperature) {
691 FResMediosDep.TemperaturaSUM += __units::KTodegC(
pow2(FAsonido * __cons::ARef) / (FGamma * FRMezcla)) * Delta;
693 if(FResMediosDep.FraccionMasicaEspecies) {
694 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
695 FResMediosDep.FraccionSUM[i] += FFraccionMasicaEspecie[i] * Delta;
699 FResMediosDep.TiempoSUM += Delta;
700 FResMediosDep.Tiempo0 = Actual;
701 }
catch(exception & N) {
702 std::cout <<
"ERROR: TDeposito::AcumulaResultadosMedios en el deposito: " << FNumeroDeposito << std::endl;
703 std::cout <<
"Tipo de error: " << N.what() << std::endl;
711 void TDeposito::ResultadosMediosDep() {
714 if(FResMediosDep.Pressure) {
715 FResMediosDep.PresionMED = FResMediosDep.PresionSUM / FResMediosDep.TiempoSUM;
716 FResMediosDep.PresionSUM = 0.;
718 if(FResMediosDep.Temperature) {
719 FResMediosDep.TemperaturaMED = FResMediosDep.TemperaturaSUM / FResMediosDep.TiempoSUM;
720 FResMediosDep.TemperaturaSUM = 0.;
722 if(FResMediosDep.FraccionMasicaEspecies) {
723 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
724 FResMediosDep.FraccionMED[i] = FResMediosDep.FraccionSUM[i] / FResMediosDep.TiempoSUM;
725 FResMediosDep.FraccionSUM[i] = 0.;
728 FResMediosDep.TiempoSUM = 0;
730 }
catch(exception & N) {
731 std::cout <<
"ERROR: TDeposito::ResultadosMediosDep en el deposito: " << FNumeroDeposito << std::endl;
732 std::cout <<
"Tipo de error: " << N.what() << std::endl;
740 void TDeposito::ReadInstantaneousResultsDep(
const char *FileWAM, fpos_t &filepos) {
741 int nvars = 0, var = 0;
743 FILE *fich = fopen(FileWAM,
"r");
744 fsetpos(fich, &filepos);
746 fscanf(fich,
"%d ", &nvars);
747 for(
int i = 0; i < nvars; i++) {
748 fscanf(fich,
"%d ", &var);
751 FResInstantDep.Pressure =
true;
754 FResInstantDep.Temperature =
true;
757 FResInstantDep.Volumen =
true;
760 FResInstantDep.Masa =
true;
763 FResInstantDep.FraccionMasicaEspecies =
true;
766 FResInstantDep.Gamma =
true;
769 std::cout <<
"Instantaneous results in plenum " << FNumeroDeposito <<
" does not exist " << std::endl;
773 fgetpos(fich, &filepos);
775 }
catch(exception & N) {
776 std::cout <<
"ERROR: TDeposito::ReadInstantaneousResultsDep en el deposito: " << FNumeroDeposito << std::endl;
777 std::cout <<
"Tipo de error: " << N.what() << std::endl;
785 void TDeposito::ReadAverageResultsDep(
const char *FileWAM, fpos_t &filepos) {
786 int nvars = 0, var = 0;
788 FILE *fich = fopen(FileWAM,
"r");
789 fsetpos(fich, &filepos);
791 fscanf(fich,
"%d ", &FNumResMed);
792 for(
int i = 0; i < FNumResMed; i++) {
793 fscanf(fich,
"%d ", &var);
796 FResMediosDep.Pressure =
true;
799 FResMediosDep.Temperature =
true;
802 FResMediosDep.FraccionMasicaEspecies =
true;
805 std::cout <<
"Average result in plenum " << FNumeroDeposito <<
" does not exist " << std::endl;
809 fgetpos(fich, &filepos);
811 }
catch(exception & N) {
812 std::cout <<
"ERROR: TDeposito::ReadAverageResultsDep en el deposito: " << FNumeroDeposito << std::endl;
813 std::cout <<
"Tipo de error: " << N.what() << std::endl;
821 void TDeposito::HeaderInstantaneousResultsDep(stringstream& insoutput,
stEspecies *DatosEspecies) {
826 if(FResInstantDep.Pressure) {
827 Label =
"\t" +
PutLabel(501) + std::to_string(FNumeroDeposito) +
PutLabel(908);
828 insoutput << Label.c_str();
830 if(FResInstantDep.Temperature) {
831 Label =
"\t" +
PutLabel(502) + std::to_string(FNumeroDeposito) +
PutLabel(910);
832 insoutput << Label.c_str();
834 if(FResInstantDep.Volumen) {
835 Label =
"\t" +
PutLabel(503) + std::to_string(FNumeroDeposito) +
PutLabel(912);
836 insoutput << Label.c_str();
838 if(FResInstantDep.Masa) {
839 Label =
"\t" +
PutLabel(504) + std::to_string(FNumeroDeposito) +
PutLabel(913);
840 insoutput << Label.c_str();
842 if(FResInstantDep.FraccionMasicaEspecies) {
843 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
844 Label =
"\t" +
PutLabel(505) + DatosEspecies[i].Nombre +
PutLabel(506) + std::to_string(FNumeroDeposito) +
PutLabel(
846 insoutput << Label.c_str();
849 if(FResInstantDep.Gamma) {
850 Label =
"\t" +
PutLabel(507) + std::to_string(FNumeroDeposito) +
PutLabel(901);
851 insoutput << Label.c_str();
855 }
catch(exception & N) {
856 std::cout <<
"ERROR: TDeposito::CabeceraResultadosInstaneosDep en el deposito: " << FNumeroDeposito << std::endl;
857 std::cout <<
"Tipo de error: " << N.what() << std::endl;
865 void TDeposito::ImprimeResultadosInstantaneosDep(stringstream& insoutput) {
869 if(FResInstantDep.Pressure)
870 insoutput <<
"\t" << FResInstantDep.PresionINS;
871 if(FResInstantDep.Temperature)
872 insoutput <<
"\t" << FResInstantDep.TemperaturaINS;
873 if(FResInstantDep.Volumen)
874 insoutput <<
"\t" << FResInstantDep.VolumenINS;
875 if(FResInstantDep.Masa)
876 insoutput <<
"\t" << FResInstantDep.MasaINS;
877 if(FResInstantDep.FraccionMasicaEspecies) {
878 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
879 insoutput <<
"\t" << FResInstantDep.FraccionINS[i];
882 if(FResInstantDep.Gamma)
883 insoutput <<
"\t" << FResInstantDep.GammaINS;
886 }
catch(exception & N) {
887 std::cout <<
"ERROR: TDeposito::ImprimeResultadosInstaneosDep en el deposito: " << FNumeroDeposito << std::endl;
888 std::cout <<
"Tipo de error: " << N.what() << std::endl;
896 void TDeposito::HeaderAverageResultsDep(stringstream& medoutput,
stEspecies *DatosEspecies) {
901 if(FResMediosDep.Pressure) {
902 Label =
"\t" +
PutLabel(501) + std::to_string(FNumeroDeposito) +
PutLabel(908);
903 medoutput << Label.c_str();
905 if(FResMediosDep.Temperature) {
906 Label =
"\t" +
PutLabel(502) + std::to_string(FNumeroDeposito) +
PutLabel(910);
907 medoutput << Label.c_str();
909 if(FResMediosDep.FraccionMasicaEspecies) {
910 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
911 Label =
"\t" +
PutLabel(505) + DatosEspecies[i].Nombre +
PutLabel(506) + std::to_string(FNumeroDeposito) +
PutLabel(
913 medoutput << Label.c_str();
918 }
catch(exception & N) {
919 std::cout <<
"ERROR: TDeposito::HeaderAverageResultsDep en el deposito: " << FNumeroDeposito << std::endl;
920 std::cout <<
"Tipo de error: " << N.what() << std::endl;
928 void TDeposito::ImprimeResultadosMediosDep(stringstream& medoutput) {
932 if(FResMediosDep.Pressure)
933 medoutput <<
"\t" << FResMediosDep.PresionMED;
934 if(FResMediosDep.Temperature)
935 medoutput <<
"\t" << FResMediosDep.TemperaturaMED;
936 if(FResMediosDep.FraccionMasicaEspecies) {
937 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
938 medoutput <<
"\t" << FResMediosDep.FraccionMED[i];
943 }
catch(exception & N) {
944 std::cout <<
"ERROR: TDeposito::ImprimeResultadosMediosDep en el deposito: " << FNumeroDeposito << std::endl;
945 std::cout <<
"Tipo de error: " << N.what() << std::endl;
953 double TDeposito::CriterioEstabilidad(
double TMinimo) {
954 double DeltTMin = 0., MasaFinal = 0., g = 0.;
955 int SignoFlujoED = 0;
959 DeltTMin = TMinimo - FTime;
961 for(
int i = 0; i < FNumeroUniones; i++) {
962 if(FCCDeposito[i]->getTipoCC() == nmPipeToPlenumConnection) {
963 g = (double) -
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getMassflow();
964 if(!(FCCDeposito[i]->getUnionDPF())) {
965 MasaFinal += g * DeltTMin * FCCDeposito[i]->GetTuboExtremo(0).Pipe->getNumeroConductos();
966 }
else if(FCCDeposito[i]->getUnionDPF()) {
967 #ifdef ParticulateFilter
968 MasaFinal += g * DeltTMin * FCCDeposito[i]->GetTuboExtremo(0).DPF->GetCanal(FCCDeposito[i]->GetTuboExtremo(0).NumeroHaz,
969 0)->getNumeroCanales();
974 for(
int i = 1; i < FNumeroUnionesED; i++) {
975 if(FCCUnionEntreDep[i]->getTipoCC() == nmUnionEntreDepositos) {
978 }
else if(FNumeroDeposito ==
dynamic_cast<TCCUnionEntreDepositos*
>(FCCUnionEntreDep[i])->getNumeroDeposito2()) {
981 g = (double) SignoFlujoED *
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getMassflow();
982 MasaFinal += g * DeltTMin;
987 g = (double) FCompresorSentido * FCompresor->getMassflow();
988 MasaFinal += g * DeltTMin;
993 }
catch(exception & N) {
994 std::cout <<
"ERROR: TDeposito::CriterioEstabilidad en el deposito: " << FNumeroDeposito << std::endl;
995 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1003 void TDeposito::SalidaGeneralDep(
stEspecies *DatosEspecies) {
1006 if(FNumResMed > 0) {
1007 std::cout << std::endl;
1008 std::cout <<
"***************************************" << std::endl;
1009 std::cout <<
"****** AVERAGE VALUES IN PLENUMS ******" << std::endl;
1010 std::cout <<
"***************************************" << std::endl << std::endl;
1011 std::cout <<
"In plenum: " << FNumeroDeposito << std::endl;
1012 if(FResMediosDep.Pressure)
1013 std::cout <<
" Pressure: " << FResMediosDep.PresionMED <<
" bares" << std::endl;
1014 if(FResMediosDep.Temperature)
1015 std::cout <<
" Temperature: " << FResMediosDep.TemperaturaMED <<
" degC" << std::endl << std::endl;
1016 if(FResMediosDep.FraccionMasicaEspecies) {
1017 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
1018 std::cout <<
" Average mass fraction of " << DatosEspecies[i].Nombre <<
": " << FResMediosDep.FraccionMED[i] <<
" (-)"
1022 std::cout << std::endl;
1025 }
catch(exception & N) {
1026 std::cout <<
"ERROR: TDeposito::SalidaGeneralDep en el deposito: " << FNumeroDeposito << std::endl;
1027 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1037 return FCCUnionEntreDep[i];
1038 }
catch(exception & N) {
1039 std::cout <<
"ERROR: TDeposito::GetCCUnionEntreDep en el deposito: " << FNumeroDeposito << std::endl;
1040 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1050 return FCCDeposito[i];
1051 }
catch(exception & N) {
1052 std::cout <<
"ERROR: TDeposito::GetCCDeposito en el deposito: " << FNumeroDeposito << std::endl;
1053 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1077 void TDeposito::ActualizaTiempo(
double TiempoActual) {
1080 FTime = TiempoActual;
1082 }
catch(exception & N) {
1083 std::cout <<
"ERROR: TDeposito::PutCalculadoPaso en el deposito: " << FNumeroDeposito << std::endl;
1084 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1091 double TDeposito::GetFraccionMasicaEspecie(
int i) {
1093 return FFraccionMasicaEspecie[i];
1094 }
catch(exception & N) {
1095 std::cout <<
"ERROR: TDeposito::GetConcentracionEspecie en la condicion de contorno: " << FNumeroDeposito << std::endl;
1096 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1103 #pragma package(smart_init)