OpenWAM
TDPF.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 TDPFH
30 #define TDPFH
31 #include <cstdio>
32 
33 #include "Constantes.h"
34 #include "Globales.h"
35 
36 //---------------------------------------------------------------------------
37 //---------------------------------------------------------------------------
38 #include "TCanalDPF.h"
39 
40 class TBloqueMotor;
41 class TTubo;
42 class TConcentrico;
43 class TCondicionContorno;
44 
45 class TDPF {
46  private:
47 //---------------------------------------------------------------------------
48 // VARIABLES PRIVADAS
49 //---------------------------------------------------------------------------
50  int FNumeroDPF;
51  int FNumeroHacesCanales;
52  int *FNumeroCanalesHaz;
53  int FNumeroCanalesTotales; // Numero de canales de entrada
54  int FNumeroEspecies;
55  int FIntEGR;
56 
57  double FDuracionCiclo;
58  int FNumCiclosSinInerciaTermica;
59  int FCicloActual;
60  int FNumResMedios;
61  double FTiempoMedSUM;
62  double FControlResMed;
63  stResMediosDPF **FResMediosDPF;
64  int FNumResMediosCE;
65  int FNumResMediosCS;
66  int FNumResInstantaneos;
67  stResInstantDPF **FResInstantaneosDPF;
68  int FNumResInstantaneosCE;
69  int FNumResInstantaneosCS;
70 
71  bool FHayConcentrico;
72  int FNumTuboExt;
73  int FNumConcentrico;
74 
75  bool FDPFCatalizada;
76  double FDiametroFiltroEfect;
77  double FLongitudEfec;
78  double FLongitudTapon;
79  double FEspesorParedPorosa;
80  double FPorosidadLimpia;
81  double FDiametroMedioPoroso;
82  double **FDiametroPoro;
83  double **FSupActCatalizador;
84  double **FSupActSoot;
85  double **FSupEspecifica;
86  double FPorosidadCapaParticulas;
87  double FMasaSootInicial; // Masa de soot total en la DPF para las condiciones iniciales
88  double *FMasaSootInicialHaz; // Masa de soot total en cada haz para las condiciones iniciales
89  double **FMasaSootLayer; // Masa de soot sobre las paredes porosas en cada VC de cada uno de los nodos de los canales de entrada.
90  double *FMasaSootLayerTotal; // Masa de soot total en la DPF presente sobre las paredes porosas de cada haz
91  double FMasaSootTotal; // Masa de soot en el monolito
92  double FDensidadSootPared;
93  double FDensidadSootCapa;
94  double FDiametroPrimarioSoot;
95  double FDiametroAgregadoSoot;
96  double FFactorPercolacion;
97  double FFraccionParedSaturada;
98  double FFactorForma;
99  double **FEspesorSoot;
100  double ***FVelocidadPared;
101  double ***FVelocidadPared0;
102  double FKwallLimpia;
103  double **FKwall;
104  double **FKsoot;
105  double **FPorosidad;
106  double FDiametroUnidadCelular; // Diametro de la unidad celular del modelo de filtrado
107  double **FDiametroUnidadColectora; // Diametro de la unidad colectora. Se supone constante para todas las unidades colectoras en el volumen de control de cada nodo.
108  double FDiametroUnidadColectoraLimpia; // Diametro de la unidad colectora cuando la trampa esta limpia.
109  double **FParametroIntercepcion;
110  double Ffuncion_f_Limpia; // Valor de la funcion f de Kubawara considerando la trampa limpia.
111  double **FEficiencia;
112  double **FCoeficienteParticion;
113  double FMasaSootSaturacion; // Masa de soot que satura una unidad colectora
114  double *FMasaSootSaturacionHaz; // Masa de soot que satura las unidades colectoras de un haz
115  double FMasaSootSaturacionTotal; // Masa de soot de saturacion total de la trampa.
116  double FVolumenTotalDPF; // Volumen total de pared porosa en la DPF
117  double *FVolumenTotal; // Volumen total de pared porosa en cada haz
118  long long int FNumeroUnidadesCelularesFiltro; // Numero total de unidades celulares en la DPF
119  long long int *FNumeroUnidadesCelularesHaz; // Numero total de unidades celulares en cada haz
120  long long int
121  **FNumeroUnidadesCelulares; // Numero de unidades celulares en el volumen de control de cada nodo de los canales de entrada
122  double **FLongitudVC; // Longitud del volumen de control en cada nodo.
123  double **FMasaSootUC; // Masa de soot en cada unidad colectora.
124 
125  double **FKreg1; // Tasa de reaccion por regeneracion termica (O2)
126  double **FKreg2; // Tasa de reaccion por regeneracion con NO2
127  double FIndiceCompletitud1; // Indice de completitud de la regeneracion termica (O2)
128  double FIndiceCompletitud2; // Indice de completitud de la regeneracion con NO2
129  double **FR1; // Tasa de reaccion de la combustion de CO
130  double **FR2; // Tasa de reaccion de la combustion de HC
131  double **FR3; // Tasa de reaccion de la oxidacion de NO
132  double **FR4; // Tasa de reaccion de la reduccion del NO2
133  double **FR5; // Tasa de reaccion de la combustion de combustible sin quemar.
134  double FRatioNO2_NOx; // Tanto por uno de NO2 en los NOx totales
135  double ***FTasaFraccionMasicaEspecie;
136  double ***FFraccionMasicaEspecieSalida;
137  double **FFraccionMasicaNO2Salida;
138  double **FFraccionMasicaNO2Entrada;
139  double **FQreg; // Calor liberado en el proceso de regeneracion
140  double **FQ1; // Calor liberado en la reaccion de combustion del CO
141  double **FQ2; // Calor liberado en la reaccion de combustion de los HC
142  double FIncrH_reg1;
143  double FIncrH_reg2;
144  double FIncrH_R1;
145  double FIncrH_R2;
146 
147  double **FAreaVCCanalEntrada;
148  double **FAreaVCCanalSalida;
149 
150  TCanalDPF ***FCanal;
151  int *FNodoIzq;
152  int *FNodoDer;
153 
154 // Variables transmision de calor
155  double FCoefAjusTC;
156  double FTExt;
157  int FTctpt; // Tipo calculo temperatura pared tubo.
158  nmTipoCalcTempParedTubos FTipoCalcTempPared;
159  int FCicloDPF;
160  double ***FResistRadial;
161  double ***FResistConv;
162  double **FResistAxialAnt;
163  double **FResistAxialPost;
164  double **FResistEntreHacesAnt;
165  double **FResistEntreHacesPost;
166  double **FCapEntrada;
167  double **FCapPared;
168  double **FCapSalida;
169  double *FDiametroInicialHaz;
170  double *FDiametroHazInt;
171  double *FDiametroHazExt;
172  double ***FTPared;
173  double ***FTParedAnt;
174  double ****FSUMTPPromedio;
175  double ***FSUMTPPromedioConc;
176  double *FResistConduccionAislante;
177  double *FResistConduccionAire;
178  double *FResistRadiacionAire;
179  double *FResistConduccionMetal;
180  double *FResistConveccionExt;
181  double *FResistAxialMetalExtAnt;
182  double *FResistAxialMetalExtPost;
183  double *FCapNodoExteriorSuperficie;
184  double *FCapNodoMedioSuperficie;
185  double *FCapNodoInteriorSuperficie;
186  double **FTSuperficie;
187  double *FNumCanalesHaz;
188  double *FSuperficieTCHazAnt;
189  double *FSuperficieTCHazPost;
190  double *FAreaInternaHaz;
191 
192  double *FRg_int_ext;
193  double *FR_int_radiacion;
194  double *FR_ext_RadInt;
195 
196 //double ***FVelPro;
197 
198  double FTIniPared;
199  double FTIniParedExt;
200  double FCoefExt;
201  nmRefrigerante FTipoRefrig; // Tipo refrigerante
202  double FTRefrigerante;
203  double FEmisividad;
204  double FEspesorAislante;
205  double FEspesorMetal;
206  double FDensidadAislante;
207  double FDensidadMetal;
208  double FConductividadSoot;
209  double FConductividadPared;
210  double FConductividadParedRadial;
211  double FConductividadAislante;
212  double FConductividadMetal;
213  double FDensidadParedPorosa;
214  double FCalorEspPared;
215  double FCalorEspSoot;
216  double FCalorEspMetal;
217  double FCalorEspAislante;
218  double FAjusteResistenciaHazExt;
219  double FEspesorAire;
220  double FConductividadAire;
221  double FEmisividadIntAire;
222  double FEmisividadExtAire;
223 
224  bool FAislante;
225  double FAnguloTotalCiclo;
226  double *FSUMTime;
227 
228  double FTime0DPF;
229  double FTime1DPF;
230  double FDeltaTimeDPF;
231 
232  bool FCalculoRegeneracion;
233  bool FCalculoFiltrado;
234 
235  double FFactorFrecuenciaO2;
236  double FFactorFrecuenciaNO2;
237  double FEnergiaActO2;
238  double FEnergiaActNO2;
239 
240 // Mapa para determinar proporcion de NO2
241  int FNumeroDatos_FraccionesNOx;
242  int FNumeroDatos_Temperaturas;
243  double *FFraccionNOxTabla;
244  double *FTemperaturasTabla;
245  double **FMapa_ProporcionNO2;
246 
247 // Resistencias con los conductos aledanos
248  TTubo *FTuboEntradaDPF;
249  TTubo *FTuboSalidaDPF;
250  int FNodoTuboEntrada;
251  int FNodoTuboSalida;
252 
253  double FAjustRAxAnt;
254  double FAjustRAxPos;
255 
256 //---------------------------------------------------------------------------
257 // FUNCIONES PRIVADAS
258 //---------------------------------------------------------------------------
259  double Interpola(double vizq, double vder, double axid, double xif);
260 
261  void CalculoVelocidadPared();
262 
263  void SubmodeloFiltrado();
264 
265  void SubmodeloRegeneracion();
266 
267  void CalculoKsoot();
268 
269  void CalculoEspesorSoot();
270 
271  void CalculaTemperaturaPared(TBloqueMotor **Motor, double theta, int j, TTubo **Tubo, TConcentrico **Concentrico);
272 
273  void CalculaTemperaturaParedSinMotor(int j, TTubo **Tubo, TConcentrico **Concentrico);
274 
275  public:
276 //---------------------------------------------------------------------------
277 // VARIABLES PUBLICAS
278 //---------------------------------------------------------------------------
279 
280 //---------------------------------------------------------------------------
281 // FUNCIONES PUBLICAS
282 //---------------------------------------------------------------------------
283 
284  TDPF(int numeroDPF, TBloqueMotor **Motor, int NumeroEspecies);
285 
286  ~TDPF();
287 
288  void LeeDatosDPF(const char *FileWAM, fpos_t &filepos, nmTipoCalculoEspecies CalculoEspecies,
289  nmCalculoGamma CalculoGamma, bool HayEGR, TBloqueMotor **Motor);
290 
291  void CalculoTransmisionCalor(TBloqueMotor **Motor, double theta, TTubo **Tubo, TConcentrico **Concentrico);
292 
293  void LeeResultadosMediosDPF(const char *FileWAM, fpos_t &filepos);
294 
295  void ImprimeResultadosMedios(std::stringstream& medoutput) const;
296 
297  void CabeceraResultadosMedios(std::stringstream& medoutput, stEspecies *DatosEspecies) const;
298 
299  void CalculaResultadosMedios(double theta);
300 
301  void LeeResultadosInstantaneosDPF(const char *FileWAM, fpos_t &filepos);
302 
303  void CabeceraResultadosInstantaneos(std::stringstream& insoutput, stEspecies *DatosEspecies) const;
304 
305  void ImprimeResultadosInstantaneos(std::stringstream& insoutput) const;
306 
307  void CalculaResultadosInstantaneos();
308 
309  void InicializaDPF(int nconcentrico, TConcentrico **Concentrico);
310 
311  void IniciaVariablesTransmisionCalor(double tamb);
312 
313  void CalculoEstabilidadDPF();
314 
315  void AjustaPaso(double TiempoFinPaso);
316 
317  void CalculoResistenciaTC(int j, TTubo **Tubo, TConcentrico **Concentrico);
318 
319  void CalculoResistenciaTC_First_Time(int j, TTubo **Tubo, TConcentrico **Concentrico);
320 
321  void ComunicacionTubos(TCondicionContorno **CC, int numCC);
322 
323  void CalculoSubmodelos();
324 
325  double getTime1DPF() {
326  return FTime1DPF;
327  }
328  ;
329  void putTime1DPF(double valor) {
330  FTime1DPF = valor;
331  }
332  ;
333 
334  double getTime0DPF() {
335  return FTime0DPF;
336  }
337  ;
338  void putTime0DPF(double valor) {
339  FTime0DPF = valor;
340  }
341  ;
342 
343  double getDeltaTimeDPF() {
344  return FDeltaTimeDPF;
345  }
346  ;
347  void putDeltaTimeDPF(double valor) {
348  FDeltaTimeDPF = valor;
349  }
350  ;
351 
352  double getDuracionCiclo() {
353  return FDuracionCiclo;
354  }
355  ;
356 
357  int getNumeroHacesCanales() {
358  return FNumeroHacesCanales;
359  }
360  ;
361  double getLongitudEfec() {
362  return FLongitudEfec;
363  }
364  ;
365  double getLongitudTapon() {
366  return FLongitudTapon;
367  }
368  ;
369  double getEspesorParedPorosa() {
370  return FEspesorParedPorosa;
371  }
372  ;
373  double GetEspesorSoot(int j, int i) {
374  return FEspesorSoot[j][i];
375  }
376  ;
377  TCanalDPF* GetCanal(int j, int i) {
378  return FCanal[j][i];
379  }
380  ;
381  double GetVelocidadPared(int j, int i, int k) {
382  return FVelocidadPared[j][i][k];
383  }
384  ;
385  double GetTasaFraccionMasicaEspecie(int j, int i, int k) {
386  return FTasaFraccionMasicaEspecie[j][i][k];
387  }
388  ;
389  double GetFraccionMasicaSalida(int j, int i, int k) {
390  return FFraccionMasicaEspecieSalida[j][i][k];
391  }
392  ;
393  double GetRreg1(int j, int i) {
394  return FKreg1[j][i];
395  }
396  ;
397  double GetRreg2(int j, int i) {
398  return FKreg2[j][i];
399  }
400  ;
401  double getIndCompletitud1() {
402  return FIndiceCompletitud1;
403  }
404  ;
405  double getIndCompletitud2() {
406  return FIndiceCompletitud2;
407  }
408  ;
409  double GetSupEspecifica(int j, int i) {
410  return FSupEspecifica[j][i];
411  }
412  double GetEficiencia(int j, int i) {
413  return FEficiencia[j][i];
414  }
415  ;
416  double GetLongitudVC(int j, int i) {
417  return FLongitudVC[j][i];
418  }
419  ;
420  double GetQreg(int j, int i) {
421  return FQreg[j][i];
422  }
423  ;
424  double Getq_reac1(int j, int i) {
425  return FQ1[j][i];
426  }
427  ;
428  double Getq_reac2(int j, int i) {
429  return FQ2[j][i];
430  }
431  ;
432  double getAnguloTotalCiclo() {
433  return FAnguloTotalCiclo;
434  }
435  ;
436  double GetTPared(int j, int i, int k) {
437  return FTPared[j][i][k];
438  }
439  ;
440  double getCoefAjusTC() {
441  return FCoefAjusTC;
442  }
443  ;
444  double getTExt() {
445  return FTExt;
446  }
447  ;
448  nmTipoCalcTempParedTubos getTipoCalcTempPared() {
449  return FTipoCalcTempPared;
450  }
451  ;
452  nmRefrigerante getTipoRefrig() {
453  return FTipoRefrig;
454  }
455  ;
456  double GetDiametroExtHaz(int i) {
457  return FDiametroHazExt[i];
458  }
459  ;
460  double getCoefExt() {
461  return FCoefExt;
462  }
463  ;
464  double GetTSuperficie(int j, int i) {
465  return FTSuperficie[j][i];
466  }
467  ;
468 
469  int getCicloDPF() {
470  return FCicloDPF;
471  }
472  ;
473 
474  double getAjustRAxAnt() {
475  return FAjustRAxAnt;
476  }
477  ;
478  double getAjustRAxPos() {
479  return FAjustRAxPos;
480  }
481  ;
482  double getEmisividad() {
483  return FEmisividad;
484  }
485  ;
486  double getDiametroExt() {
487  return FDiametroFiltroEfect + 2 * FEspesorAislante + 2 * FEspesorAire + 2 * FEspesorMetal;
488  }
489  ;
490  double getEspesorAislante() {
491  return FEspesorAislante;
492  }
493  ;
494  double getEspesorAire() {
495  return FEspesorAire;
496  }
497  ;
498  double getEspesorMetal() {
499  return FEspesorMetal;
500  }
501  ;
502  double getConductividadMetal() {
503  return FConductividadMetal;
504  }
505  ;
506  double getDiametroEfect() {
507  return FDiametroFiltroEfect;
508  }
509  ;
510 
511  void PutConcentric(int valor) {
512  valor == 0 ? FHayConcentrico = false : FHayConcentrico = true;
513  }
514  ;
515 };
516 #endif
stEspecies
Definition: Globales.h:297
TTubo
a Finite differences pipe.
Definition: TTubo.h:116
Constantes.h
TDPF
Definition: TDPF.h:45
TCanalDPF
Definition: TCanalDPF.h:43
stResInstantDPF
Definition: Globales.h:1486
TCondicionContorno
Definition: TCondicionContorno.h:54
stResMediosDPF
Definition: Globales.h:1408
TBloqueMotor
Definition: TBloqueMotor.h:43
TConcentrico
Definition: TConcentrico.h:45