OpenWAM
TCilindro.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 TCilindroH
30 #define TCilindroH
31 
32 #include <iostream>
33 #ifdef __BORLANDC__
34 #include <vcl.h>
35 #endif
36 
37 #include "Constantes.h"
38 #include "Globales.h"
39 //#include "simstruc.h"
40 // #include "engine.h"
41 //#include "act_def.h"
42 //#include "ACT_v_8_2.cpp"
43 #include "ACT_Sub_DLL.h"
44 #include "INJECTION_RATE.cpp"
45 #include<malloc.h>
46 // typedef double mxArray;
47 #include "TController.h"
48 
49 class TBloqueMotor;
50 class TCondicionContorno;
51 
52 enum nmValvula {
53  nmAdmision = 0, nmEscape = 1
54 };
55 
56 // ---------------------------------------------------------------------------
57 // ---------------------------------------------------------------------------
58 
59 class TCilindro {
60  private:
61 
62  protected:
63 
64  // Parametro de entrada del ACT
65  double *Fengine_parameters;
66  double *Fengine_model_constants;
67  double *Ftest_variables;
68  double *Finjection_rate;
69  double *FCAD_injection_rate;
70  int Fsize_inlet_inj;
71  double *FCAD_exit;
72  double *FHRF_exit;
73  double *FROHR_exit;
74  double *Fp_cyl_exit;
75  double *Fdp_da_cyl_exit;
76  double *FT_cyl_exit;
77  double *FH_cooler_exit;
78  double *Fmean_var_exit;
79  double *Fheat_transfer;
80  double *Finjection_rate_exit;
81  double *Faccum_injection_rate_exit;
82  //double *FSpecies_EVO;
83  double *FSpecies_IVC;
84  sINtype dataIN;
85  sOUTtype dataOUT;
86 
87  // Parametros de entrada del modelo de Tasa
88  int FIN;
89  double *FSOP;
90  double *FMFI;
91  double *FSOI;
92  double *FEOI;
93  int FCAI;
94  double *FA_TASA;
95  double *FB_TASA;
96  double *FC_TASA;
97  double *FD_TASA;
98 
99  double FPresionMedAdm;
100  double FPresionMedEsc;
101  double FTimeAcumAct;
102 
103  nmCombustion FCalcComb;
104 
105  int FNumeroCilindro;
106  TBloqueMotor *FMotor;
107 
108  bool FCicloCerrado; // Controla si el cilindro se encuentra en ciclo cerrado (true) o abierto (false)
109 
110  // double FMasaFuel;
111  double FTasaFuel;
112  stDistribucion FDistribucion;
113 
114  double FCm;
115 
116  // Datos DLL
117  bool FHaydll;
118  bool FModComb;
119 
120  // Asignacion de Valvulas.
121  int FNumeroUnionesAdm;
122  int FNumeroUnionesEsc;
123  TCondicionContorno **FCCValvulaAdm;
124  TCondicionContorno **FCCValvulaEsc;
125  double FMomentoAngular;
126  double FMomentoAngularAdm;
127  double FMomentoAngularEsc;
128  double Fctorbadmp; // Coeficiente de torbellino medio en el cilindro.
129 
130  // Variables Temporales
131  double FAnguloActual;
132  double FAnguloAnterior;
133  double FDeltaAngulo;
134  double FTime1;
135  double FTime0;
136  double FDeltaT;
137  double FDesfase;
138  double FAnguloComb;
139  double FAnguloComb0;
140  double FAnguloRetrasoCombustion;
141  int FNumeroCiclo;
142  double FTiempoCiclo;
143 
144  // Variables Termodinamicas
145  double FMasaValvAdm;
146  double FMasa;
147  double FPressure;
148  double FPresionCarter;
149  double FTemperature;
150  double FAsonido;
151  double FMasa0;
152  double FPresion0;
153  double FPreMed; // Media entre FPressure y FPresion0.
154  double FTemperatura0;
155  double FAsonido0;
156  double FVolumen;
157  double FVolumen0;
158  double FVolumenCA;
159  double FMasaAtrapada;
160  double FAcumMasaPorAdm;
161  double FMasaPorAdmision;
162  double FAcumMasaPorEsc;
163  double FMasaPorEscape;
164  double FAcumMasaEGR;
165  double FMasaEGR;
166  double FPresionRCA;
167  double Fecg0;
168  double Fecg;
169  double FecgTotal;
170  double FecgInt;
171 
172  double FParInstantaneo;
173  double FTrabajoNeto;
174  double FTrabajoBombeo;
175  double FTrabajoNetoACUM;
176  double FTrabajoBombeoACUM;
177  double FPMN;
178  double FPMB;
179  double FPMI;
180  double FDensidadReferencia;
181  double FDensidadReferenciaSUM;
182 
183  // Variables Combustion
184  double FIniComb;
185  double FFinComb;
186  double *FAngDesplazado;
187  double FMfint; // kg/cc Combustible para la interpolacion de la leyes.
188  double FMaint; // kg/cc Masa de aire para la interpolacion de la leyes.
189  double FRegInt; // rpm Regimen para la interpolacion de las leyes.
190 
191  double FNumIny;
192  dVector FAnguloInjeccion;
193  dVector FTInyeccion;
194  dVector FPercentInyeccion;
195  double FFuelAcum;
196  int ind;
197 
198  bool FInyeccion;
199  bool FInyeccionPil;
200  double FFuelTotal;
201  double FFuelInstant;
202  double FFuelInstantPil;
203  double FMasaBlowBy;
204  double FGastoBlowBy;
205 
206  double FNIT;
207  double FAFR;
208  double FSwirl;
209  double FSwirlSUM;
210  double FWoma;
211 
212  // Variable de la ecuacion de Woschni
213  double Fequis;
214  double Fc1;
215  double Fc2;
216  double Fcucm;
217  double Fc1rc;
218  double Fh;
219  double Fratioctm;
220  double FKctm;
221  double FCu;
222 
223  double FCalorLiberadoCiclo; // Variable para la impresion por pantalla del resultado.
224 
225  stTemperaturasPared *FTempPared;
226  stCalor FCalor;
227  bool FPrimeraCombustion;
228  bool FPrimerInstanteCicloCerrado;
229 
230  stValvulasCilindro *FValvAdm;
231  stValvulasCilindro *FValvEsc;
232 
233  int FNumVarMed;
234  int FNumVarIns;
235 
236  stResMediosCilindro FResMediosCilindro;
237  stResInstantCilindro FResInstantCilindro;
238 
239  // Variable de control para el calculo del cilindro.
240  // bool FCalculadoPaso;
241 
242  // Modelo de Cortocircuito
243  double FAlphaEscape;
244  double FAlphaAdmision;
245  double FMasaCortocircuito;
246  double FGastoCortocircuito;
247 
248  // Variables del transporte de especies quimicas.
249  double FMfquem;
250  double FMairequem;
251  // double *FFraccionMasicaEspecie;
252  dVector FFraccionMasicaEspecie;
253  dVector FComposicionSaliente;
254  dVector FComposicionCicloCerrado; // 0 -> Quemados, 1 -> Combustible, 2 -> Aire Fresco
255  dVector FMasaEspecieCicloCerrado;
256  dVector FMasaEspecie;
257  double FFraccionMasicaEspecieFuel; // Para calculo completo de especies
258 
259  // double GetFraccionMasicaEspecie(int i);
260  double GetAireFresco();
261 
262  double FGamma;
263  double FRMezcla;
264  double FCpMezcla;
265  double FCvMezcla;
266  double FGamma1;
267  double FGamma2;
268  double FGamma4;
269  double FGamma6;
270  double FGammaCil; // Se usa cuando se opta por calculo en tubos con gamma constante.
271  bool FHayEGR;
272  int FIntEGR;
273  dVector FFraccionComienzoCicloCerrado;
274  double FUfgasoil;
275  double FHcl;
276 
277  double FRelacionMolarH2O_O2;
278  double FRelacionMolarN2_O2;
279  double FMolesCombQuemado;
280  double FXComb;
281  double FYComb;
282  double FZComb;
283  double FMasaO2Reactivos;
284  double FMasaH2OReactivos;
285  double FMasaN2Reactivos;
286  double FMasaH2OProductos;
287  double FMasaN2Productos;
288  double FMasaCO2Productos;
289  double FDosadoEstequiometrico;
290 
291  int FMfControllerID;
292  bool FMfControlled;
293  TController *FMfController;
294 
295  double CalculaVolumen(double AnguloActual);
296 
297  void InicioFinCombustion();
298 
299  double fun_wiebe(double x, int ley, int wiebe);
300 
301  double fql(double x, int ley);
302 
303  double CalculaCalorLiberado(double x);
304 
305  double FuncionGamma(double T, double X);
306 
307  void CalculaFuelMEP(double MasaAire);
308 
309  double CalculaCTorbAdmProm();
310 
311  double CalculaCm();
312 
313  void CalculoNIT();
314 
315  void CalculaMomentoAngular();
316 
317  void CalculaSWIRL();
318 
319  void CalculoVariablesValvulas();
320 
321  void CalculaTemperaturasPared();
322 
323  // void PutMasaFuel(double valor);
324 
325  // void PutInicioComb(double valor);
326 
327  // void PutFinComb(double valor);
328 
329  // void PutFQL(double valor);
330 
331  // void PutHayDLL(bool valor);
332 
333  // void PutModComb(bool valor);
334 
335  // void PutCalculadoPaso(bool valor);
336 
337  // void PutNumeroInyecciones(int valor);
338 
339  // void PutPresionInyeccion(double valor);
340 
341  // void PutSOP(int i, double valor);
342 
343  // void PutMasaFuelPorInyeccion(int i, double valor);
344 
345  // void PutFraccionMasicaEspecie(int i, double valor);
346 
347  public:
348 
349  void PutFraccionMasicaEspecie(int i, double valor) {
350  FFraccionMasicaEspecie[i] = valor;
351  }
352  ;
353 
354  double GetFraccionMasicaEspecie(int i) {
355  return FFraccionMasicaEspecie[i];
356  }
357  ;
358 
359  double getParInstantaneo() {
360  return FParInstantaneo;
361  }
362  ;
363 
364  double getTrabajoNeto() {
365  return FTrabajoNeto;
366  }
367  ;
368 
369  double getTrabajoBombeo() {
370  return FTrabajoBombeo;
371  }
372  ;
373 
374  double getPressure() {
375  return FPressure;
376  }
377  ;
378 
379  double getMasa() {
380  return FMasa;
381  }
382  ;
383 
384  double getSpeedsound() {
385  return FAsonido;
386  }
387  ;
388 
389  double getMomentoAngular() {
390  return FMomentoAngular;
391  }
392  ;
393 
394  double getMasaValvAdm() {
395  return FMasaValvAdm;
396  }
397  ;
398 
399  void PutMasaFuel(double valor) {
400  FMasaFuel = valor;
401  }
402 
403  double FMasaFuel;
404 
405  double getMasaFuel() {
406  return FMasaFuel;
407  }
408 
409  double getMasaPorAdmision() {
410  return FMasaPorAdmision;
411  }
412  ;
413 
414  double getMasaAtrapada() {
415  return FMasaAtrapada;
416  }
417  ;
418 
419  stDistribucion getDistribucion() {
420  return FDistribucion;
421  }
422  ;
423 
424  double getAnguloActual() {
425  return FAnguloActual;
426  }
427  ;
428 
429  double getAnguloAnterior() {
430  return FAnguloAnterior;
431  }
432  ;
433 
434  double getSwirlSUM() {
435  return FSwirlSUM;
436  }
437  ;
438 
439  int getNumeroUnionesAdm() {
440  return FNumeroUnionesAdm;
441  }
442  ;
443 
444  int getNumeroUnionesEsc() {
445  return FNumeroUnionesEsc;
446  }
447  ;
448 
449  int getNumeroCilindro() {
450  return FNumeroCilindro;
451  }
452  ;
453 
454  TCondicionContorno* GetCCValvulaAdm(int i);
455 
456  TCondicionContorno* GetCCValvulaEsc(int i);
457 
458  double getAFR() {
459  return FAFR;
460  }
461  ;
462 
463  double getTiempoActual() {
464  return FTime1;
465  }
466  ;
467 
468  double getTemperature() {
469  return FTemperature;
470  }
471  ;
472 
473  void PutInicioComb(double valor) {
474  FIniComb = valor;
475  }
476 
477  void PutFinComb(double valor) {
478  FFinComb = valor;
479  }
480 
481  void PutFQL(double valor) {
482  FCalor.FQL = valor;
483  }
484 
485  double getPreMed() {
486  return FPreMed;
487  }
488  ;
489 
490  double getVolumen() {
491  return FVolumen;
492  }
493  ;
494 
495  double getVolumen0() {
496  return FVolumen0;
497  }
498  ;
499 
500  double getGamma() {
501  return FGamma;
502  }
503  ;
504 
505  void PutHayDLL(bool valor) {
506  FHaydll = valor;
507  }
508 
509  void PutModComb(bool valor) {
510  FModComb = valor;
511  }
512 
513  void PutCalculadoPaso(bool valor) {
514  FCalculadoPaso = valor;
515  }
516 
517  bool FCalculadoPaso;
518 
519  bool getCalculadoPaso() {
520  return FCalculadoPaso;
521  }
522 
523  bool FSaturado;
524 
525  double GetComposicionSaliente(int i);
526 
527  double getFraccionAireFresco() {
528  return GetAireFresco();
529  }
530  ;
531 
532  void PutNumeroInyecciones(int valor) {
533  FIN = valor;
534  }
535  ;
536  void PutPresionInyeccion(double valor);
537 
538  void PutSOP(int i, double valor) {
539  FSOP[i] = valor;
540  }
541  ;
542 
543  void PutMasaFuelPorInyeccion(int i, double valor) {
544  FMFI[i] = valor;
545  }
546  ;
547 
548  void PutMfControllerID(int ControllerID) {
549  FMfControllerID = ControllerID;
550  FMfControlled = true;
551  }
552  ;
553 
554  TCilindro(TBloqueMotor *Engine, bool ThereIsEGR);
555 
556  ~TCilindro();
557 
558  virtual void ActualizaPropiedades(double TiempoActual) = 0;
559 
560  void ReadAverageResultsCilindro(const char *FileWAM, fpos_t &filepos);
561 
562  void HeaderAverageResultsCilindro(std::stringstream& medoutput, stEspecies *DatosEspecies);
563 
564  void ImprimeResultadosMediosCilindro(std::stringstream& medoutput);
565 
566  void AcumulaResultadosMediosCilindro(double TActual);
567 
568  void CalculaResultadosMediosCilindro();
569 
570  void ReadInstantaneousResultsCilindro(const char *FileWAM, fpos_t &filepos);
571 
572  void HeaderInstantaneousResultsCilindro(std::stringstream& insoutput, stEspecies *DatosEspecies);
573 
574  void ImprimeResultadosInstantaneosCilindro(std::stringstream& insoutput);
575 
576  void CalculaResultadosInstantaneosCilindro();
577 
578  void IniciaVariables();
579 
580  void AsignacionCC(TCondicionContorno **BC, int numCC);
581 
582  void CalculaVariablesResultados();
583 
584  void SalidaGeneralCilindros();
585 
586  void ControlDesfase(double n0);
587 
588  void DefineCombustion();
589 
590  void AsignMfController(TController **Controller);
591 
592 };
593 
594 // ---------------------------------------------------------------------------
595 #endif
stEspecies
Definition: Globales.h:297
stResMediosCilindro
Definition: Globales.h:1212
TController
Definition: TController.h:37
Constantes.h
TCilindro
Definition: TCilindro.h:59
stTemperaturasPared
Definition: Globales.h:1183
TCondicionContorno
Definition: TCondicionContorno.h:54
stValvulasCilindro
Definition: Globales.h:1377
stResInstantCilindro
Definition: Globales.h:1297
sOUTtype
Definition: ACT_Sub_DLL.h:26
sINtype
Definition: ACT_Sub_DLL.h:22
stCalor
Definition: Globales.h:1198
TBloqueMotor
Definition: TBloqueMotor.h:43
dVector
std::vector< double > dVector
Double vector.
Definition: Math_wam.h:70
stDistribucion
Definition: Globales.h:959