OpenWAM
TCanalDPF.h
1 /* --------------------------------------------------------------------------------*\
2 ==========================|
3  \\ /\ /\ // O pen | OpenWAM: The Open Source 1D Gas-Dynamic Code
4  \\ | X | // W ave |
5  \\ \/_\/ // A ction | CMT-Motores Termicos / Universidad Politecnica Valencia
6  \\/ \// M odel |
7  ----------------------------------------------------------------------------------
8  License
9 
10  This file is part of OpenWAM.
11 
12  OpenWAM is free software: you can redistribute it and/or modify
13  it under the terms of the GNU General Public License as published by
14  the Free Software Foundation, either version 3 of the License, or
15  (at your option) any later version.
16 
17  OpenWAM is distributed in the hope that it will be useful,
18  but WITHOUT ANY WARRANTY; without even the implied warranty of
19  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  GNU General Public License for more details.
21 
22  You should have received a copy of the GNU General Public License
23  along with OpenWAM. If not, see <http://www.gnu.org/licenses/>.
24 
25 
26  \*--------------------------------------------------------------------------------*/
27 
28 //---------------------------------------------------------------------------
29 #ifndef TCanalDPFH
30 #define TCanalDPFH
31 #include <cstdio>
32 
33 #include "Constantes.h"
34 #include "Globales.h"
35 
36 //---------------------------------------------------------------------------
37 //---------------------------------------------------------------------------
38 
39 class TDPF;
40 class TCondicionContorno;
41 class TBloqueMotor;
42 
43 class TCanalDPF {
44  private:
45 //---------------------------------------------------------------------------
46 // VARIABLES PRIVADAS
47 //---------------------------------------------------------------------------
48 
49  int FTuboCCNodoIzq; // Guarda la posicion en la estructura de TuboExtremo del tubo para el NodoIzquierdo
50  int FTuboCCNodoDer; // Guarda la posicion en la estructura de TuboExtremo del tubo para el NodoIzquierdo
51 
52  // Datos Geometricos
53 
54  int FContador;
55  int FNumDPF;
56  int FNumeroHaz; // Numero de Haz (discretizacion radial de la DPF"
57  int FNodoIzq; // Nodo Izquierdo
58  int FNodoDer; // Nodo Derecho
59  int FNin; // Numero de nodos
60  double FXref; // Incremento espacial del mallado
61  double FLongitudTotal; // Longitud total del conducto
62  double FMallado; // Mallado inicial
63  int FNTramos; // Numero de tramos del tubo
64  nmTipoMallado FTipoMallado; // Tipo de mallado 1=Distancia 2=Angular
65  double *FLTramo; // Longitud Tramo
66  double *FDExtTramo; // Diametro extremo tramo
67  double *FDiametroTubo; // Diametro de cada nodo de calculo
68  double *FDiametroD12; // Diametro intermedio medias diametros
69  double *FDiametroS12; // Diametro intermedio medias areas
70  double *FArea;
71  double *FArea12;
72  double *FDerLin;
73  double *FDerLin12;
74  double *FDerLinArea;
75  double *FDerLinArea12;
76  bool FIntercooler;
77 
78  // Propiedades termicas y friccion
79 
80  //double FFriccion; // Friccion del conducto
81  nmTipoTransCal FTipoTransCal; // Tipo de transmision de calor PIPA = 3, ESC = 2, ADM = 1
82  double FCoefAjusFric; // Coeficiente Ajuste valor de friccion
83  double FTIniParedTub; // Temperatura inicial pared tubo
84  double *FCoefTurbulencia; // Coeficiente de turbulencia tubos de escape
85  double *FTPared; // Temperatura de pared por nodo de tubo y nodo de pared
86  double **FTPTubo; // Sumatorio temperaturas de pared de los tubos
87  double FTExt;
88  double FCoefExt;
89  double *Fhi; // Coeficiente de pelicula interior en cada nodo.
90  double *Fhe; // Coeficiente de pelicula exterior en cada nodo.
91  double *Frho; // Densidad del gas en cada nodo.
92  double *FRe; // Reynolds del gas en cada nodo.
93  double *FVelPro;
94 
95  // Propiedades termofluidodinamicas
96 
97  double FVelMedia; // Velocidad media a lo largo del conducto
98  double FTini; // Temperatura inicial gas
99  double FPini; // Presion inicial del gas
100  double *FPresion0; // Presion instante de calculo
101  double *FAsonido0; // Velocidad del sonido instante de calculo
102  double *FVelocidad0; // Velocidad instante de calculo
103  double *FPresion1; // Presion instante anterior
104  double *FAsonido1; // Velocidad del sonido instante anterior
105  double *FVelocidad1; // Velocidad instente anterior
106 
107  // Vectores metodo de cqlculo
108 
110  double **FU0; // Vector solucion instante de calculo
111  double **FU1; // Vector solucion instante posterior
112  double **FUt; // Variacion del vector solucion con respecto al tiempo (solo CE-SE)
113  double **FU12; // Vector solucion instante de calculo intermedio
114  double **FW; // Vector de flujo
115  double **FV1; // Termino fuente dependiente de la variacion de seccion
116  double **FV2; // Termino fuente (Friccion - Trans. Calor)
117  double FCcese;
118 
119  // Vectores del flux corrected transport
120 
121  double **FUfct0;
122  double **FUfct1;
123  double **FUfctd;
124  double **FUfctad;
125  double **Ffl;
126  double **FdU;
127  double **FDeltaFCTd;
128  double **FflU;
129  double **FaU;
130 
131  // Vectores de TVD Davis
132 
133  //double **FTVD;
134  //double **FTVDdU;
135  //double *FTVDpp;
136  //double *FTVDpn;
137  //double *FTVDphp;
138  //double *FTVDphn;
139  //double *FTVDrp;
140  //double *FTVDrn;
141  //double *FTVDGn;
142  //double *FTVDGp;
143 
144  // Variables del TVD
145 
146  stTVD FTVD;
147  double *sqrtRhoA;
148 
149  // Calculo Especies
150 
151  int FNumeroEspecies; // Numero de Especies
152  nmTipoCalculoEspecies FCalculoEspecies; // Calculo con 9 o 3 especies quimicas
153  nmCalculoGamma FCalculoGamma;
154  double *FComposicionInicial; // Composicion inicial en el tubo
155  double **FFraccionMasicaEspecie; // Fraccion Masica de cada especie por nodo.
156  double **FFraccionMasicaEspecie1; // Fraccion Masica de cada especie por nodo en el instante anterior.
157  double **FFraccionMasicaCC; // Fraccion Masica de cada especie en el punto de partida
158  // de la linea de corriente que llega a la CC.
159  bool FHayEGR;
160  int FIntEGR;
161 
162  int FNumEcuaciones;
163 
164  double *FVelocidadCC;
165  double *FDensidadCC;
166  double *FAreaCC;
167  double *FGamma;
168  double *FRMezcla;
169  double *FCpMezcla; // EN PRINCIPIO NO HACE FALTA
170  double *FCvMezcla; // EN PRINCIPIO NO HACE FALTA
171 
172  double *FGamma1;
173  double *FGamma3;
174  double *FGamma4;
175  double *FGamma5;
176  double *FGamma6;
177 
178  // Tiempos
179 
180  double FTime0; // Tiempo para el instante de calculo
181  double FTime1; // Tiempo para el instante posterior
182  double FDeltaTime; // Incremento de tiempo.
183  double *FCourantLocal;
184  double FCourant;
185 
186  // Resultados medios e instantaneos
187 
188  stResMediosTubo *ResultadosMedios; // Estructura para resultados medios en tubos
189  int FNumResMedios; // Numero de puntos para los que se piden resultados medios
190  stResInstantTubo *ResultInstantaneos;
191  int FNumResInstant;
192  double FTiempoMedSUM;
193  double FControlResMed;
194  stSensoresTubo *Sensor;
195  int FNumDistSensores;
196 
197  double FAnguloTotalCiclo;
198  double FRegimenFicticio;
199 
200  int FCicloTubo; // Controla el calculo de la Temp de pared una vez por ciclo.
201 
202  //Variables propias de la DPF
203 
204  TDPF *FDPF;
205  int FNumeroParesdeCanales;
206  nmTipoCanal FTipoCanal;
207  int FNumeroCanal;
208 
209  int FTipoSeccionCanal;
210  nmSeccionCanal FSeccionCanal;
211  double *FLadoCanalTramo; // Para canales cuadrados y triangulares (suponemos todos los lados iguales)
212  double *FLadoMenorCanalTramo; // Longitud del lado menor del canal, para caso de canal rectangular
213  double *FLadoMayorCanalTramo; // Longitud del lado mayor del canal, para caso de canal rectangular
214 
215  double *FLadoCanal; // Para canales cuadrados y triangulares (suponemos todos los lados iguales)
216  double *FLadoCanalD12;
217  double *FLadoCanalS12;
218  double *FH0Pared;
219  double FF; // Constante de la perdida de carga por friccion en canales cuadrados F=28.454
220 
221  double *FVelocidadPared;
222  double *FViscosidadDinamica;
223  double *FEspesorSoot;
224 
225  int FNodoInicialFuente;
226  int FNodoFinalFuente;
227  int FNodoInicialFuenteCE;
228  double FDistanciaInterpolacion;
229 
230  double *Fqreg; // Calor liberado durante la regeneracion en el volumen de control del nodo i.
231  double *Fq_reac1; // Calor liberado durante la combustion de CO en el volumen de control del nodo i.
232  double *Fq_reac2; // Calor liberado durante la combustion de HC en el volumen de control del nodo i.
233  double **FTasaFraccionMasicaEspecie; // Tasa de variacion de la Fraccion Masica de cada especie por nodo.
234  double **FFraccionMasicaSalida; // Fraccion masica de cada especie a la salida de la pared porosa.
235  double *FRreg1; // Tasa de regeneracion termica en el nodo i del canal de salida
236  double *FRreg2; // Tasa de regeneracion catalitica en el nodo i del canal de salida
237  double *FEficiencia; // Eficiencia del medio poroso en el nodo i del canal de salida
238  double *FSupEspecifica; // Superficia especifica de la trampa
239  double *FLongitudVC;
240 
241  double FBetaExtremoCerrado;
242  double FLandaExtremoCerrado;
243  double FEntropiaExtremoCerrado;
244 
245  int FNumeroDeposito;
246 
247 //---------------------------------------------------------------------------
248 // FUNCIONES PRIVADAS
249 //---------------------------------------------------------------------------
250 
251  void CalculoPuntosMalla();
252 
253  double InterpolaTubo(double vizq, double vder, double axid, double xif);
254 
255  void Transforma1Area(double v, double a, double p, double **U, double area, double Gamma, double Gamma1,
256  double *Yespecie, int i);
257 
258  void Transforma2Area(double *v, double *a, double *p, double **U, double Area, double Gamma, double Gamma1,
259  double *Yespecie, int i);
260 
261  void Transforma3Area(double **Ufct, double **U, double Area, double Gamma, double Gamma1, double Gamma6, int i);
262 
263  void Transforma4Area(double **U1, double **Ufctd, double Area, double Gamma, double Gamma1, double Gamma3,
264  double Gamma4, double Gamma6, int i);
265 
266  double Maximo(double x, double y);
267 
268  double Minimo(double x, double y);
269 
270  void LaxWendroffArea();
271 
272  void FluxCorrectedTransport();
273 
274  void CalculaFlujo(double **U, double **W, double *Gamma, double *Gamma1, int Nodos);
275 
276  void CalculaFuente1(double **U, double **V1, double *Gamma, double *Gamma1, int Nodos);
277 
278  void CalculaFuente1Area(double **U, double **V1, double *Area, double *Gamma1, int Nodos);
279 
280  void CalculaFuente2(double **U, double **V2, double *diame, double *CoefTurbulencia, double *hi, double *rho,
281  double *TempParedTubo, double *Gamma, double *Rmezcla, double *Gamma1, double *LadoCanal, double *VelocidadPared,
282  double *ViscosidadDinamica, double *q_reac1, double *q_reac2, double **FraccionMasicaSalida, double *H0Pared, int Nodos,
283  double *EspesorSoot, double *Eficiencia, double *Rreg1, double *Rreg2, double *SupEspecifica, double *LongitudVC,
284  double **FraccionMasica);
285 
286  void CalculaFuente2Area(double **U, double **V2, double *diame, double *CoefTurbulencia, double *hi, double *rho,
287  double *TempParedTubo, double *Gamma, double *Rmezcla, double *Gamma1, double *LadoCanal, double *VelocidadPared,
288  double *ViscosidadDinamica, double *q_reac1, double *q_reac2, double **FraccionMasicaSalida, double *H0Pared, int Nodos,
289  double *Area, double *EspesorSoot, double *Eficiencia, double *Rreg1, double *Rreg2, double *SupEspecifica,
290  double *LongitudVC, double **FraccionMasica);
291 
292  double DerLinF(double d1, double d2, double xref);
293 
294  double DerLinFArea(double area1, double area2, double xref);
295 
296  void Colebrook(double rug, double dia, double *f, double Re);
297 
298  void TransmisionCalor(double tgas, double lado, double *q, double CoefTurbulencia, double hi, double rho, double Tw);
299 
300  void TransformaContorno(double *L, double *B, double *E, double *a, double *v, double *p, int modo, double Gamma1,
301  double Gamma3, double Gamma4, double Gamma5);
302 
303  double CalculaNIT(double a, double v, double p, double d, double Gamma, double R);
304 
305  //void FuncionTVD();
306 
307  void Calculo_Entropia(double *entropia, double *velocidadp, int ind, double dist, int signo, double DeltaTiempo,
308  int indiceCC, nmPipeEnd TipoExtremoTubo);
309 
310  void Calculo_Caracteristica(double *caracteristica, double *velocidadp, double *asonidop, int ind, double dist,
311  int signo, double entropia, double DeltaTiempo, nmPipeEnd TipoExtremoTubo);
312 
313  void CalculaB();
314 
315  void CalculaBmen();
316 
317  void CalculaBmas();
318 
319  void CalculaMatrizJacobiana();
320 
321  void TVD_Estabilidad();
322 
323  void TVD_Limitador();
324 
325  void DimensionaTVD();
326 
327  void RoeConstants();
328 
329  double Limita(double r);
330 
331  void NodoTerminoFuente();
332 
333  public:
334 //---------------------------------------------------------------------------
335 // VARIABLES PUBLICAS
336 //---------------------------------------------------------------------------
337 
338 //---------------------------------------------------------------------------
339 // FUNCIONES PUBLICAS
340 //---------------------------------------------------------------------------
341 
342  TCanalDPF(int NumeroEspecies, int j, nmTipoCalculoEspecies CalculoEspecies, nmCalculoGamma CalculoGamma, bool HayEGR,
343  TDPF *DPF, int numerocanal, int NumeroDPF);
344 
345  ~TCanalDPF();
346 
347  void LeeDatosGeneralesCanal(const char *FileWAM, fpos_t &filepos, int NodoIzquierdo, int NodoDerecho);
348 
349  void LeeDatosGeometricosCanal(const char *FileWAM, fpos_t &filepos);
350 
351  void IniciaVariablesFundamentalesCanalDPF();
352 
353  void EstabilidadMetodoCalculo();
354 
355  void CalculaVariablesFundamentales();
356 
357  void ActualizaValoresNuevos(TCondicionContorno **CC);
358 
359  void ReduccionFlujoSubsonico();
360 
361  void ReduccionFlujoSubsonicoFCT();
362 
363  void LeeResultadosMediosCanalDPF(int NumResMedios, char *FileWAM, fpos_t &filepos);
364 
365  void CabeceraResultadosMedios(std::stringstream& medoutput, stEspecies *DatosEspecies) const;
366 
367  void ImprimeResultadosMedios(std::stringstream& medoutput) const;
368 
369  void LeeResultadosInstantaneosCanalDPF(int NumResInstantaneos, char *FileWAM, fpos_t &filepos);
370 
371  void CabeceraResultadosInstantaneos(std::stringstream& insoutput, stEspecies *DatosEspecies) const;
372 
373  void ImprimeResultadosInstantaneos(std::stringstream& insoutput) const;
374 
375  void CalculaResultadosMedios(double theta);
376 
377  void CalculaResultadosInstantaneos();
378 
379  void SalidaGeneralTubos(stEspecies *DatosEspecies) const;
380 
381  void AjustaPaso(double Intervalo);
382 
383  void CalculaCaracteristicasExtremos(TCondicionContorno **CC, double DeltaTiempo);
384 
385  double Interpola_Entropia(nmPipeEnd TipoExtremoTubo, double DeltaTiempo);
386 
387  double Interpola_Caracteristica(double entropia, int signo, int extremo, double DeltaTiempo, nmPipeEnd TipoExtremoTubo);
388 
389  void ComunicacionCanal_CC(TCondicionContorno **CC);
390 
391  void InicializaCaracteristicas(TCondicionContorno **CC);
392 
393  void ActualizaPropiedadesGas();
394 
395  void CalculaCoeficientePeliculaExterior(double pamb);
396 
397  void CalculaCoeficientePeliculaInterior();
398 
399  int GetNumeroDeposito() {
400  return FNumeroDeposito;
401  }
402  ;
403  double GetDiametro(int i) {
404  return FDiametroTubo[i];
405  }
406  ;
407  double GetFraccionMasicaInicial(int i) {
408  return FComposicionInicial[i];
409  }
410  ;
411  double GetFraccionMasicaCC(int j, int i) {
412  return FFraccionMasicaCC[j][i];
413  }
414  ;
415  double GetViscosidadDinamica(int i) {
416  return FViscosidadDinamica[i];
417  }
418  ;
419  double getTime1() {
420  return FTime1;
421  }
422  ;
423  double getNodoIzq() {
424  return FNodoIzq;
425  }
426  ;
427  double getNodoDer() {
428  return FNodoDer;
429  }
430  ;
431  void putTime1(double valor) {
432  FTime1 = valor;
433  }
434  ;
435  double getTime0() {
436  return FTime0;
437  }
438  void putTime0(double valor) {
439  FTime0 = valor;
440  }
441  ;
442  double getDeltaTime() {
443  return FDeltaTime;
444  }
445  void putDeltaTime(double valor) {
446  FDeltaTime = valor;
447  }
448  ;
449  int getNin() {
450  return FNin;
451  }
452  ;
453  double getXRef() {
454  return FXref;
455  }
456  ;
457  double getLongitudTotal() {
458  return FLongitudTotal;
459  }
460  ;
461  nmTipoTransCal getTipoTransCal() {
462  return FTipoTransCal;
463  }
464  ;
465  double getCoefAjustFric() {
466  return FCoefAjusFric;
467  }
468  ;
469  int getNumeroCanales() {
470  return FNumeroParesdeCanales;
471  }
472  ;
473  double getMallado() {
474  return FMallado;
475  }
476  ;
477 
478  double GetDensidad(int i) {
479  return Frho[i];
480  }
481  double GetArea(int i) {
482  return FArea[i];
483  }
484  double GetVelocidad(int i) {
485  return FVelocidad0[i];
486  }
487  ;
488  double GetAsonido(int i) {
489  return FAsonido0[i];
490  }
491  ;
492  double GetPresion(int i) {
493  return FPresion0[i];
494  }
495  ;
496  double GetCoefTurbulencia(int i) {
497  return FCoefTurbulencia[i];
498  }
499  ;
500  double getTemperaturaInicial() {
501  return FTini;
502  }
503  ;
504  double getPresionInicial() {
505  return FPini;
506  }
507  ;
508  double getVelocidadMedia() {
509  return FVelMedia;
510  }
511  ;
512  double GetYespecie(int j, int i) {
513  return FFraccionMasicaEspecie[j][i];
514  }
515  ;
516  double GetYespecieCC(int j, int i) {
517  return FFraccionMasicaCC[j][i];
518  }
519  ;
520  double GetVelocidadCC(int i) {
521  return FVelocidadCC[i];
522  }
523  ;
524  double GetDensidadCC(int i) {
525  return FDensidadCC[i];
526  }
527  ;
528  double GetAreaCC(int i) {
529  return FAreaCC[i];
530  }
531  ;
532  double GetGamma(int i) {
533  return FGamma[i];
534  }
535  ;
536  double GetRMezcla(int i) {
537  return FRMezcla[i];
538  }
539  ;
540  double GetCp(int i) {
541  return FCpMezcla[i];
542  }
543  ;
544  double GetCv(int i) {
545  return FCvMezcla[i];
546  }
547  ;
548  int getNumeroEspecies() {
549  return FNumeroEspecies;
550  }
551  ;
552  double Geth(int i) {
553  return Fhi[i];
554  }
555  ;
556  double Gethext(int i) {
557  return Fhe[i];
558  }
559  ;
560  double GetH0Pared(int i) {
561  return FH0Pared[i];
562  }
563  ;
564 
565  nmFormulacionLeyes getFormulacionLeyes() {
566  return FMod.FormulacionLeyes;
567  }
568  ;
569  double GetU0(int i, int j) {
570  return FU0[i][j];
571  }
572  ;
573  int getNodoInicialFuente() {
574  return FNodoInicialFuente;
575  }
576  ;
577  int getNodoFinalFuente() {
578  return FNodoFinalFuente;
579  }
580  ;
581  double getDistanciaInterpolacion() {
582  return FDistanciaInterpolacion;
583  }
584  ;
585  double GetLadoCanal(int i) {
586  return FLadoCanal[i];
587  }
588  ;
589 
590 };
591 
592 //---------------------------------------------------------------------------
593 #endif
stEspecies
Definition: Globales.h:297
Constantes.h
TDPF
Definition: TDPF.h:45
TCanalDPF
Definition: TCanalDPF.h:43
TCondicionContorno
Definition: TCondicionContorno.h:54
stModeloCalculoTubos
Definition: Globales.h:744
stResInstantTubo
Definition: Globales.h:795
stSensoresTubo
Definition: Globales.h:832
stResMediosTubo
Definition: Globales.h:756
TBloqueMotor
Definition: TBloqueMotor.h:43
stTVD
Definition: Globales.h:305