31 #include "TDepVolCte.h"
33 #include "TCCDeposito.h"
34 #include "TCCUnionEntreDepositos.h"
36 #include "TCompresor.h"
38 #include "TCanalDPF.h"
43 TDepVolCte::TDepVolCte(
int i, nmTipoCalculoEspecies SpeciesModel,
int numeroespecies, nmCalculoGamma GammaCalculation,
45 TDepVolCteBase(i, nmDepVolCte, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
51 TDepVolCte::~TDepVolCte() {
58 void TDepVolCte::ActualizaPropiedades(
double TimeCalculo) {
62 double MasaEntrante, FraccionMasicaAcum = 0.;
64 double g = 0., v = 0., a = 0., m = 0., g1 = 0.;
72 DeltaT = TimeCalculo - FTime;
74 if(FCalculoEspecies == nmCalculoCompleto) {
76 FRMezcla = CalculoCompletoRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2], 0,
77 FCalculoGamma, nmMEP);
78 FCpMezcla = CalculoCompletoCpMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2], 0,
79 __units::degCToK(FTemperature), FCalculoGamma, nmMEP);
80 FGamma = CalculoCompletoGamma(FRMezcla, FCpMezcla, FCalculoGamma);
82 }
else if(FCalculoEspecies == nmCalculoSimple) {
84 FRMezcla = CalculoSimpleRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FCalculoGamma, nmMEP);
85 FCvMezcla = CalculoSimpleCvMezcla(__units::degCToK(FTemperature), FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1],
86 FCalculoGamma, nmMEP);
87 FGamma = CalculoSimpleGamma(FRMezcla, FCvMezcla, FCalculoGamma);
91 bool Converge =
false;
92 bool FirstStep =
true;
94 double Asonido0 = FAsonido;
95 double Asonido1 = FAsonido;
99 double MTemp = FGamma / (
pow2(FAsonido * __cons::ARef) * FMasa0);
103 for(
int i = 0; i < FNumeroUniones; i++) {
104 if(FCCDeposito[i]->getTipoCC() == nmPipeToPlenumConnection) {
105 if(
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getSentidoFlujo() == nmEntrante) {
107 }
else if(
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getSentidoFlujo() == nmSaliente) {
110 g = (double) -
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getMassflow();
111 if(!FCCDeposito[i]->getUnionDPF()) {
112 m = g * DeltaT * FCCDeposito[i]->GetTuboExtremo(0).Pipe->getNumeroConductos();
114 #ifdef ParticulateFilter
115 int NumeroCanales = 0;
116 int NumeroHaz = FCCDeposito[i]->GetTuboExtremo(0).NumeroHaz;
117 int TipoCanal = FCCDeposito[i]->GetTuboExtremo(0).TipoCanal;
118 NumeroCanales = FCCDeposito[i]->GetTuboExtremo(0).DPF->GetCanal(NumeroHaz, TipoCanal)->getNumeroCanales();
119 m = g * DeltaT * NumeroCanales;
122 v = (double) SignoFlujo *
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getVelocity();
123 a =
dynamic_cast<TCCDeposito*
>(FCCDeposito[i])->getSpeedSound();
126 for(
int j = 0; j < FNumeroEspecies - FIntEGR; j++) {
127 FMasaEspecie[j] += FCCDeposito[i]->GetFraccionMasicaEspecie(j) * m;
131 H += EntalpiaEntrada(a, v, m, Asonido1, FMasa, FCCDeposito[i]->getGamma());
135 for(
int i = 0; i < FNumeroUnionesED; i++) {
137 if(FCCUnionEntreDep[i]->getTipoCC() == nmUnionEntreDepositos) {
140 }
else if(FNumeroDeposito ==
dynamic_cast<TCCUnionEntreDepositos*
>(FCCUnionEntreDep[i])->getNumeroDeposito2()) {
143 printf(
"ERROR:TDepVolCte::ActualizaPropiedades en el deposito %d, union entre depositos %d\n", FNumeroDeposito, i);
148 v = (double) SignoFlujoED *
dynamic_cast<TCCUnionEntreDepositos*
>(FCCUnionEntreDep[i])->getVelocity() / __cons::ARef;
151 for(
int j = 0; j < FNumeroEspecies - FIntEGR; j++) {
152 FMasaEspecie[j] += FCCUnionEntreDep[i]->GetFraccionMasicaEspecie(j) * m;
156 H += EntalpiaEntrada(a, 0., m, Asonido1, FMasa, FCCUnionEntreDep[i]->getGamma());
164 g = (double) FCompresorSentido * FCompresor->getMassflow();
166 a = FCompresor->getSpeedSound();
169 for(
int j = 0; j < FNumeroEspecies - FIntEGR; j++) {
170 FMasaEspecie[j] += FCompresor->GetFraccionMasicaEspecie(j) * m;
174 H += EntalpiaEntrada(a, 0, m, Asonido1, FMasa, FCompresor->getGamma());
178 FMasa = FMasa0 + MasaEntrante;
179 for(
int j = 0; j < FNumeroEspecies - 2; j++) {
180 FFraccionMasicaEspecie[j] = FMasaEspecie[j] / FMasa;
181 FraccionMasicaAcum += FFraccionMasicaEspecie[j];
183 FFraccionMasicaEspecie[FNumeroEspecies - 2] = 1. - FraccionMasicaAcum;
185 FFraccionMasicaEspecie[FNumeroEspecies - 1] = FMasaEspecie[FNumeroEspecies - 1] / FMasa;
189 Heat = FHeatPower * DeltaT * (MTemp + FGamma / (
pow2(Asonido1 * __cons::ARef) * FMasa)) / 2.;
190 Energia = pow(FMasa / FMasa0 * exp((H0 + H) / 2 - Heat), __Gamma::G1(FGamma));
192 Asonido1 = FAsonido * sqrt(Energia);
193 Error = (Diff = Asonido1 - Asonido0, fabs(Diff)) / Asonido1;
201 double A2 =
pow2(__cons::ARef * FAsonido);
202 FPressure = __units::PaToBar(A2 / FGamma / FVolumen * FMasa);
203 FPresionIsen = pow(FPressure / FPresRef, __Gamma::G5(FGamma));
204 FTemperature = __units::KTodegC(A2 / FGamma / FRMezcla);
206 }
catch(exception & N) {
207 std::cout <<
"ERROR: TDepVolCte::ActualizaPropiedades en el deposito: " << FNumeroDeposito << std::endl;
208 std::cout <<
"Tipo de error: " << N.what() << std::endl;
213 void TDepVolCte::UpdateProperties0DModel(
double TimeCalculo) {
215 ActualizaPropiedades(TimeCalculo);
217 AcumulaResultadosMedios(TimeCalculo);
224 #pragma package(smart_init)