OpenWAM
Globales.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 GlobalesH
30 #define GlobalesH
31 
32 #include <vector>
33 #include <iostream>
34 #include <sstream>
35 #include <cstring>
36 //#include <system.hpp>
37 #include <ctime>
38 // #include <sys\timeb.h>
39 #include "Constantes.h"
40 #include "Math_wam.h"
41 #include "labels.hpp"
42 #ifndef __BORLANDC__
43 #include "Exception.hpp"
44 #define ffGeneral 3
45 #endif
46 #ifdef WITH_OPENMP
47 #include <omp.h>
48 #endif
49 
50 // #include "StringDataBase.h"
51 // ---------------------------------------------------------------------------
52 
53 #define vers 2200 /*n. de version de WAM*/
54 
55 #define usetry 1
56 //#define WriteINS 1
57 //#define ConcentricElement 1
58 //#define ParticulateFilter 1
59 //#define tchtm 1
60 
61 // ---------------------------------------------------------------------------
62 // ---------------------------------------------------------------------------
63 
64 inline int matherr(struct exception *a) {
65 
66  return 0;
67 }
68 
69 // ENUM�s
70 
71 // ! Different ways to define how the turbine discharge coefficients are calculated
72 enum nmTurbineType {
73  nmFixedTurbine, /* !< The turbine discharge coefficients are constants. */
74  nmVariableGeometry, /* !< The turbine discharge coefficients are modified externally. */
75  nmTurbineMap /* !< The turbine discharge coefficients are obtained from the turbine map. */
76 };
77 
78 // ! Turbocharger speed calculation
79 enum nmAxisSpeedCalculation {
80  nmFixed = 0, /* !< The turbocharger speed is constant during all the dimulation */
81  nmVariable = 1 /* !< The turbocharger speed is calculated depending on the turbina and compressor work balance */
82 };
83 
84 // ! Model used to calculate the compressor
85 enum nmCompressorModel {
86  nmCompOriginal = 0, /* !< Use plenum to pipe compressor model */
87  nmCompPlenums = 1, /* !< Use plenum to plenum compressor model */
88  nmCompPipes = 2 /* !< Use pipe to pipe compressor model */
89 };
90 
91 // enum nmTipoCompresor{nmCompDep=0,nmCompTub=1};
92 
93 // ! Identify the boundary of the pipe
94 enum nmPipeEnd {
95  nmLeft = 0, /* !< Left boundary of the pipe */
96  nmRight = 1 /* !< Right boundary of the pipe */
97 };
98 
99 // De donde toma el aire el compresor
100 // ! Define the compressor inlet
101 enum nmCompressorInlet {
102  nmAtmosphere = 0, /* !< The compressor inlet is the ambient */
103  nmPipe = 1, /* !< The compressor inlet is a pipe */
104  nmPlenum = 2 /* !< The compressor inlet is a plenum */
105 };
106 
107 // ! Define the type of boundary condition.
108 enum nmTypeBC {
109  nmOpenEndAtmosphere = 0, nmOpenEndReservoir = 1, nmOpenEndCalcExtern = 2, nmClosedEnd = 3, nmAnechoicEnd = 4, nmIncidentPressurWave = 5, nmPipesConnection = 6, nmIntakeValve = 7, nmExhaustValve = 8, nmLinearPressureLoss = 9, nmQuadraticPressureLoss = 10, nmPipeToPlenumConnection = 11, nmBranch = 12, nmVolumetricCompressor = 13, nmInjectionEnd = 14, nmEntradaCompre = 15, nmUnionEntreDepositos = 16, nmCompresor = 17, nmPresionVble = 18, nmCFDConnection = 19, nmExternalConnection = 20
110 };
111 
112 enum nmTipoDescarga {
113  nmDescargaAtmosfera = 0, nmDescargaRemanso = 1, nmDescargaRemansoMatlab = 2
114 };
115 
116 enum nmTipoValv {
117  nmValvAdmision = 0, nmValvEscape = 1
118 };
119 
120 enum nmCaso {
121  nmFlujoEntranteSaltoSubcritico = 0, nmFlujoEntranteSaltoSupercritico = 1, nmFlujoSalienteSaltoSubcritico = 2, nmFlujoSalienteSaltoSupercritico = 3
122 };
123 
124 enum nmTipoPP {
125  nmPPLineal = 0, nmPPCuadratica = 1
126 };
127 
128 enum nmSentidoFlujo {
129  nmEntrante = 0, nmSaliente = 1, nmParado = 2
130 };
131 
132 enum nmRendimientoTurbina {
133  nmWatson = 0, nmPolinomio = 1, nmCalcExtRD = 2, nmRendMapa = 3
134 };
135 
136 enum nmAjusteRdTurbina {
137  nmConstante = 0, nmCalExtARD = 1
138 };
139 
140 enum nmVolumenDeposito {
141  nmDepVolCteBase = 0, nmDepVolVariable = 1
142 };
143 
144 enum nmTipoDeposito {
145  nmDepVolCte = 0, nmDepVolVble = 1, nmTurbinaSimple = 2, nmTurbinaTwin = 3, nmVenturi = 4, nmUnionDireccional = 5
146 };
147 
148 enum nmTipoGas {
149  nmAireFresco = 0, nmGasEscape = 1
150 };
151 
152 //enum nmExtremoTubo {
153 // nmLeft = 0, nmRight = 1
154 //};
155 
156 enum nmModelo {
157  nmLaxWendroff = 0, nmMacCormak = 1, nmCESE = 2, nmTVD = 3
158 };
159 
160 enum nmSubModelo {
161  nmNinguno = 0, nmFCT = 1
162 };
163 
164 enum nmOpcionSubModelo {
165  nmNinguna = 0, nmDDNAD = 1, nmDDPAD = 2, nmDDEAD = 3, nmDSNAD = 4, nmDSPAD = 5, nmDSEAD = 6, nmLimiter1 = 7, nmLimiter2 = 8
166 };
167 
168 enum nmFormulacionLeyes {
169  nmSimple = 0, nmSinArea = 1, nmConArea = 2
170 };
171 
172 enum nmTipoFCT {
173  nmDamping = 0, nmSmoothing = 1, nmExplicit = 2, nmNaive = 3, nmPhoenical = 4
174 };
175 
176 enum nmTipoTransCal {
177  nmPipaAdmision = 0, nmTuboAdmision = 1, nmTuboEscape = 2, nmPipaEscape = 3
178 };
179 
180 enum nmRefrigerante {
181  nmAire = 0, nmAgua = 1
182 };
183 
184 enum nmTipoMallado {
185  nmDistancia = 1, nmAngular = 2
186 };
187 
188 enum nmTipoMotor {
189  nm2T = 0, nm4T = 1
190 };
191 
192 enum nmTipoDesfase {
193  nmPersonalizado = 0, nmImpuesto = 1
194 };
195 
196 enum nmTipoCombustion {
197  nmMEC = 0, nmMEP = 1
198 };
199 
200 enum nmCalculoPAAE {
201  nmPAAECalculada = 0, nmPAAEImpuesta = 1
202 };
203 
204 enum nmCalculoPared {
205  nmSinInercia = 0, nmConInercia = 1, nmTempFija = 2
206 };
207 
208 enum nmTipoModelado {
209  nmEstacionario = 0, nmTransitorioCarga = 1, nmTransitorioRegimen = 2, nmTransitorioRegimenExterno = 3
210 };
211 
212 enum nmRegimenValv {
213  nmPropio = 0, nmMotor = 1
214 };
215 
216 enum nmTipoCalcTempParedTubos {
217  nmVariableConInerciaTermica = 0, nmVariableSinInerciaTermica = 1, nmTempConstante = 2
218 };
219 
220 enum nmTipoCalculoEspecies {
221  nmCalculoSimple = 0, nmCalculoCompleto = 1
222 };
223 
224 enum nmTipoCombustible {
225  nmDiesel = 0, nmGasolina = 1, nmBlend = 2, nmNone = 3
226 };
227 
228 enum nmCalculoGamma {
229  nmGammaConstante = 0, nmComposicion = 1, nmComposicionTemperatura = 2
230 };
231 
232 enum nmCombustion {
233  nmFQL = 0, nmEXT = 1, nmACT = 2
234 };
235 
236 enum nmTipoControl {
237  nmControlPadm = 0, nmControlMasaAire = 1
238 };
239 
240 enum nmControlMethod {
241  nmCtlConstant = 0, nmCtlPID = 1, nmCtlTable = 2, nmCtlSwitch = 3, nmGainCtrl = 4
242 };
243 
244 enum nmInputObjet {
245  nmInController = 0, nmInSensor = 1
246 };
247 
248 enum nmObjectSensed {
249  nmSensEjec = 0, nmSensTubo = 1, nmSensDeposito = 2, nmSensMotor = 3
250 };
251 
252 enum nmParameterSensed {
253  nmTime = 0, nmPressure = 1, nmTemperature = 2, nmMassFlow = 3, nmFuel = 4, nmEngSpeed = 5
254 };
255 
256 enum nmTipoInterpolacion {
257  nmLineal = 0, nmHermite = 1, nmSteps = 2
258 };
259 
260 enum nmCompressorMapFormat {
261  nmOldWAMmap = 0, nmSAMmap = 1
262 };
263 
264 // DPF
265 enum nmSeccionCanal {
266  nmCuadrada = 0, nmCircular = 1, nmRectangular = 2, nmTriangular = 3
267 };
268 
269 enum nmTipoCanal {
270  nmCanalEntrada = 0, nmCanalSalida = 1
271 };
272 
273 // template<class T>
274 // double tmpInterp1(double X,T *X1,T *X2,int n){
275 // return *T[0];
276 // };
277 
278 // ---------------------------------------------------------------------------
279 // ---------------------------------------------------------------------------
280 
281 class TTipoValvula;
282 class TTubo;
283 class TController;
284 class TDPF;
285 
286 // ---------------------------------------------------------------------------
287 // ---------------------------------------------------------------------------
288 
289 // ---------------------------------------------------------------------------
290 // ---------------------------------------------------------------------------
291 
292 // ESTRUCTURAS
293 
294 // ---------------------------------------------------------------------------
295 // ---------------------------------------------------------------------------
296 
297 struct stEspecies {
298  std::string Nombre;
299  double R;
300 };
301 
302 // ---------------------------------------------------------------------------
303 // ---------------------------------------------------------------------------
304 
305 struct stTVD {
306  double **Bmas;
307  double **Bvector;
308  double **Bmen;
309  double ***Qmatrix;
310  double ***Pmatrix;
311  double **gflux;
312  double **Alpha;
313  double **Beta;
314  double **DeltaU;
315  double **DeltaB;
316  double **DeltaW;
317  int **hLandaD;
318  double **LandaD;
319  double **Phi;
320  double **R;
321  double **W;
322 };
323 
324 // ---------------------------------------------------------------------------
325 // ---------------------------------------------------------------------------
326 
327 struct stCombExtern {
328  double FQL;
329  double Inicio;
330  double Final;
331 };
332 
333 // ---------------------------------------------------------------------------
334 // ---------------------------------------------------------------------------
335 
336 struct stDatosTGV {
337  int Turbine;
338  int Entradas;
339  TTipoValvula **Estator;
340  TTipoValvula *Rotor;
341  double *Rendimiento;
342 };
343 
344 // ---------------------------------------------------------------------------
345 // ---------------------------------------------------------------------------
346 
347 struct stGammas {
348  double aref, gamma, gai123, gamm1, gams1, gas12, gas123, gads1, gar21, r, pi;
349 };
350 
351 // ---------------------------------------------------------------------------
352 // ---------------------------------------------------------------------------
353 
354 struct stRun {
355  double TimeStep;
356  double AngleStep;
357  double CycleDuration;
358 };
359 
360 // ---------------------------------------------------------------------------
361 // ---------------------------------------------------------------------------
362 
363 struct stAcum {
364  double Suma;
365  double Valor;
366 };
367 
368 // ---------------------------------------------------------------------------
369 // ---------------------------------------------------------------------------
370 
371 struct stResMedCil {
372  stAcum TrabajoNeto;
373  double PMN;
374  stAcum TrabajoBombeo;
375  double PMB;
376  double Dosado;
377  double DosadoRelativo;
378  double Pureza;
379  stAcum CalorCombustion;
380  stAcum CalorCilindro;
381  stAcum CalorCulata;
382  stAcum CalorPiston;
383  double PMI;
384  double MasaAtrapada;
385  double MasaPorAdmision;
386  double MasaPorEscape;
387  stAcum MasaBlowBy;
388  stAcum TempCilIn;
389  stAcum TempCilMed;
390  stAcum TempCilOut;
391  stAcum TempPisIn;
392  stAcum TempPisMed;
393  stAcum TempPisOut;
394  stAcum TempCulIn;
395  stAcum TempCulMed;
396  stAcum TempCulOut;
397  stAcum NIT;
398  double AFR;
399  double RendimientoVolumetrico;
400 };
401 
402 // ---------------------------------------------------------------------------
403 // ---------------------------------------------------------------------------
404 
405 struct stResMedMot {
406  stAcum ParNeto;
407  double PMN;
408  stAcum ParEfectivo;
409  double PME;
410  double Potencia;
411  stAcum MasaAdmision;
412  double MasaFuel;
413  stAcum Regimen;
414  double RendimientoVolumetrico;
415  stAcum ParPerdidasMecanicas;
416  stAcum ParResistente;
417  stAcum VelocidadVehiculo;
418  stAcum DensidadReferencia;
419  double TrabajoNeto;
420  double TrabajoBombeo;
421  double PMB;
422  double Dosado;
423  double MasaAtrapada;
424 };
425 
426 // ---------------------------------------------------------------------------
427 // ---------------------------------------------------------------------------
428 
429 /* Estructura para complejos */
430 // struct complex{
431 // double r,i;
432 // };
433 // ---------------------------------------------------------------------------
434 // ---------------------------------------------------------------------------
435 /* Estructura para matriz compleja */
436 // struct submatriz{
437 // complex m11,m12,m21,m22;
438 // };
439 // ---------------------------------------------------------------------------
440 // ---------------------------------------------------------------------------
441 struct stMapa2D {
442  int nx;
443  int ny;
444  double *x;
445  double *y;
446  double **z;
447 };
448 
449 // ---------------------------------------------------------------------------
450 // ---------------------------------------------------------------------------
451 
453  bool Pressure;
454  double PresionINS;
455  bool Temperature;
456  double TemperaturaINS;
457  bool Volumen;
458  double VolumenINS;
459  bool Masa;
460  double MasaINS;
461  bool FraccionMasicaEspecies;
462  double *FraccionINS;
463  bool Gamma;
464  double GammaINS;
465 };
466 
467 // ---------------------------------------------------------------------------
468 // ---------------------------------------------------------------------------
469 
471  bool Pressure;
472  double PresionSUM;
473  double PresionMED;
474  bool Temperature;
475  double TemperaturaSUM;
476  double TemperaturaMED;
477  double Tiempo0;
478  double TiempoSUM;
479  bool FraccionMasicaEspecies;
480  double *FraccionSUM;
481  double *FraccionMED;
482 };
483 
484 // ---------------------------------------------------------------------------
485 // ---------------------------------------------------------------------------
486 
488  bool Pressure;
489  double GanaPresion;
490  double CtePresion;
491  double SensPresion;
492  double ValorPresion;
493  double Valor0Presion;
494 };
495 
496 // ---------------------------------------------------------------------------
497 // ---------------------------------------------------------------------------
498 
500  bool Trabajo;
501  double TrabajoMED;
502  double TrabajoSUM;
503  bool Rendimiento;
504  double RendimientoMED;
505  bool RelaCinematica;
506  double *RelaCinematicaMED;
507  double RelaCinematicaGlobalMED;
508  bool GastoCorregido;
509  double *GastoCorregidoMED;
510  double *GastoCorregidoSUM;
511  bool RegimenCorregido;
512  double *RegimenCorregidoMED;
513  double *RegimenCorregidoSUM;
514  bool RelacionExpansion;
515  double *RelacionExpansionMED;
516  double *RelacionExpansionSUM;
517  double Tiempo0;
518  double TiempoSUM;
519 
520 };
521 
522 // ---------------------------------------------------------------------------
523 // ---------------------------------------------------------------------------
524 
526  bool Potencia;
527  double PotenciaINS;
528  bool Rendimiento;
529  double RendimientoINS;
530  bool RelaCinematica;
531  double *RelaCinematicaINS;
532  bool GastoCorregido;
533  double *GastoCorregidoINS;
534  bool RegimenCorregido;
535  double *RegimenCorregidoINS;
536  bool RelacionExpansion;
537  double *RelacionExpansionINS;
538 };
539 
540 // ---------------------------------------------------------------------------
541 // ---------------------------------------------------------------------------
542 
544  bool PresionEntrada;
545  double PresionEntradaINS;
546  bool PresionGarganta;
547  double PresionGargantaINS;
548  bool MachEntrada;
549  double MachEntradaINS;
550  bool MachGarganta;
551  double MachGargantaINS;
552  bool VelEntrada;
553  double VelEntradaINS;
554  bool VelLateral;
555  double VelLateralINS;
556  bool GastoEntrada;
557  double GastoEntradaINS;
558  bool GastoLateral;
559  double GastoLateralINS;
560 };
561 
562 // ---------------------------------------------------------------------------
563 // ---------------------------------------------------------------------------
564 
566  double Tiempo0;
567  double TiempoSUM;
568  bool PresionEntrada;
569  double PresionEntradaSUM;
570  double PresionEntradaMED;
571  bool PresionGarganta;
572  double PresionGargantaSUM;
573  double PresionGargantaMED;
574  bool MachEntrada;
575  double MachEntradaSUM;
576  double MachEntradaMED;
577  bool MachGarganta;
578  double MachGargantaSUM;
579  double MachGargantaMED;
580  bool VelEntrada;
581  double VelEntradaSUM;
582  double VelEntradaMED;
583  bool VelLateral;
584  double VelLateralSUM;
585  double VelLateralMED;
586  bool GastoEntrada;
587  double GastoEntradaSUM;
588  double GastoEntradaMED;
589  bool GastoLateral;
590  double GastoLateralSUM;
591  double GastoLateralMED;
592 };
593 
594 // ---------------------------------------------------------------------------
595 // ---------------------------------------------------------------------------
596 
598  bool Potencia;
599  bool Massflow;
600  bool Pressure;
601  double PotenciaMED;
602  double GastoMED;
603  double PresionMED;
604  double PotenciaSUM;
605  double GastoSUM;
606  double PresionSUM;
607  double Tiempo0;
608  double TiempoSUM;
609 
610 };
611 
612 // ---------------------------------------------------------------------------
613 // ---------------------------------------------------------------------------
614 
616  bool Potencia;
617  bool Massflow;
618  bool Pressure;
619  double PotenciaINS;
620  double GastoINS;
621  double PresionINS;
622 };
623 
624 // ---------------------------------------------------------------------------
625 // ---------------------------------------------------------------------------
626 
628  bool Massflow;
629  double GastoINS;
630 };
631 
632 // ---------------------------------------------------------------------------
633 // ---------------------------------------------------------------------------
634 
636  bool Massflow;
637  double GastoMED;
638  double GastoSUM;
639  double Tiempo0;
640  double TiempoSUM;
641 
642 };
643 
644 // ---------------------------------------------------------------------------
645 // ---------------------------------------------------------------------------
646 
648  double RegimenSUM;
649  double TiempoSUM;
650  double Tiempo0;
651  bool Regimen;
652  double RegimenMED;
653 };
654 
655 // ---------------------------------------------------------------------------
656 // ---------------------------------------------------------------------------
657 
659  bool Regimen;
660  double RegimenINS;
661  bool MechPower;
662  double MechPowerINS;
663  bool MechEff;
664  double MechEffINS;
665  bool NodeTemp;
666  bool HeatFlow;
667 };
668 
669 // ---------------------------------------------------------------------------
670 // ---------------------------------------------------------------------------
671 
673  bool Output;
674  double OutputMED;
675  double OutputSUM;
676  bool Error;
677  double ErrorMED;
678  double ErrorSUM;
679  bool POutput;
680  double POutputMED;
681  double POutputSUM;
682  bool IOutput;
683  double IOutputMED;
684  double IOutputSUM;
685  bool DOutput;
686  double DOutputMED;
687  double DOutputSUM;
688  bool Output_filt;
689  double Output_filtMED;
690  double Output_filtSUM;
691  double Tiempo0;
692  double TiempoSUM;
693 };
694 
696  bool Output;
697  double OutputINS;
698  bool Error;
699  double ErrorINS;
700  bool POutput;
701  double POutputINS;
702  bool IOutput;
703  double IOutputINS;
704  bool DOutput;
705  double DOutputINS;
706  bool Output_filt;
707  double Output_filtINS;
708 };
709 
711  bool Input;
712  double InputMED;
713  double InputSUM;
714  bool Output;
715  double OutputMED;
716  double OutputSUM;
717  double Tiempo0;
718  double TiempoSUM;
719 };
720 
722  bool Input;
723  double InputINS;
724  bool Output;
725  double OutputINS;
726 };
727 // ---------------------------------------------------------------------------
728 // ---------------------------------------------------------------------------
729 
731  TTubo *Pipe; // Pipe asociado al nodo
732  nmPipeEnd TipoExtremo; // PipeEnd del tubo: derecho o izquierdo
733  double Entropia;
734  double Landa;
735  double Beta;
736  TDPF *DPF;
737  int NumeroHaz;
738  int TipoCanal;
739 };
740 
741 // ---------------------------------------------------------------------------
742 // ---------------------------------------------------------------------------
743 
745  nmModelo Modelo;
746  nmSubModelo SubModelo;
747  nmOpcionSubModelo OpcionSubModelo;
748  nmTipoFCT Difusion;
749  nmTipoFCT Antidifusion;
750  nmFormulacionLeyes FormulacionLeyes;
751 };
752 
753 // ---------------------------------------------------------------------------
754 // ---------------------------------------------------------------------------
755 
757  double Distancia;
758  bool TemperaturaGas;
759  double TemperaturaGasMED;
760  double TemperaturaGasSUM;
761  bool Pressure;
762  double PresionMED;
763  double PresionSUM;
764  bool Velocity;
765  double VelocidadMED;
766  double VelocidadSUM;
767  bool Massflow;
768  double GastoMED;
769  double GastoSUM;
770  bool TemperaturaInternaPared;
771  double TemperaturaInternaParedMED;
772  double TemperaturaInternaParedSUM;
773  bool TemperaturaIntermediaPared;
774  double TemperaturaIntermediaParedMED;
775  double TemperaturaIntermediaParedSUM;
776  bool TemperaturaExternaPared;
777  double TemperaturaExternaParedMED;
778  double TemperaturaExternaParedSUM;
779  bool NITmedio;
780  double NITmedioMED;
781  double NITmedioSUM;
782  bool CoefPelInterior;
783  double CoefPelInteriorMED;
784  double CoefPelInteriorSUM;
785  bool FraccionMasicaEspecies;
786  double *FraccionSUM;
787  double *FraccionMED;
788  double PonderacionSUM;
789  double GastoPonderacionSUM;
790 };
791 
792 // ---------------------------------------------------------------------------
793 // ---------------------------------------------------------------------------
794 
796  double Distancia;
797  bool Pressure;
798  double PresionINS;
799  bool Velocity;
800  double VelocidadINS;
801  bool TemperaturaGas;
802  double TemperaturaGasINS;
803  bool FlujoMasico;
804  double FlujoMasicoINS;
805  bool VelocidadDerecha;
806  double VelocidadDerechaINS;
807  bool VelocidadIzquierda;
808  double VelocidadIzquierdaINS;
809  bool PresionDerecha;
810  double PresionDerechaINS;
811  bool PresionIzquierda;
812  double PresionIzquierdaINS;
813  bool NIT;
814  double NITINS;
815  bool TemperaturaInternaPared;
816  double TemperaturaInternaParedINS;
817  bool TemperaturaIntermediaPared;
818  double TemperaturaIntermediaParedINS;
819  bool TemperaturaExternaPared;
820  double TemperaturaExternaParedINS;
821  bool CoefPelInterior;
822  double CoefPelInteriorINS;
823  bool FraccionMasicaEspecies;
824  double *FraccionINS;
825  bool Gamma;
826  double GammaINS;
827 };
828 
829 // ---------------------------------------------------------------------------
830 // ---------------------------------------------------------------------------
831 
833  double Distancia;
834  bool Pressure;
835  double GanaPresion;
836  double CtePresion;
837  double ValorPresion;
838  double Valor0Presion;
839  double SensPresion;
840  bool Velocity;
841  double GanaVelocidad;
842  double CteVelocidad;
843  double ValorVelocidad;
844  double Valor0Velocidad;
845  double SensVelocidad;
846  bool Temperature;
847  double GanaTemperatura;
848  double CteTemperatura;
849  double Valor0Temperatura;
850  double ValorTemperatura;
851  double SensTemperatura;
852  bool GastoMasico;
853  double GanaGastoMasico;
854  double CteGastoMasico;
855  double Valor0GastoMasico;
856  double ValorGastoMasico;
857  double SensGastoMasico;
858 };
859 
860 // ---------------------------------------------------------------------------
861 // ---------------------------------------------------------------------------
862 
864  bool GraficaMedias;
865  double Tiempo0;
866  double TiempoSUM;
867  bool GraficaTrabajo;
868  double Trabajo;
869  double TrabajoSUM;
870  bool GraficaRelacionCompresion;
871  double RelacionCompresion;
872  double RelacionCompresionSUM;
873  bool GraficaGasto;
874  double Massflow;
875  double GastoSUM;
876  bool GraficaRendimiento;
877  double Rendimiento;
878  double RendimientoSUM;
879  bool GraficaGastoCorregido;
880  double GastoCorregido;
881  double GastoCorregidoSUM;
882  bool GraficaRegimenCorregido;
883  double RegimenCorregido;
884  double RegimenCorregidoSUM;
885 };
886 
887 // ---------------------------------------------------------------------------
888 // ---------------------------------------------------------------------------
889 
891  bool GraficaInstantaneas;
892  bool GraficaPotencia;
893  double Potencia;
894  bool GraficaRendimiento;
895  double Rendimiento;
896  bool GraficaRelacionCompresion;
897  double RelacionCompresion;
898  bool GraficaGasto;
899  double Massflow;
900  bool GraficaGastoCorregido;
901  double GastoCorregido;
902  bool GraficaRegimenCorregido;
903  double RegimenCorregido;
904  bool GraficaGamma;
905  double Gamma;
906 };
907 
908 // ---------------------------------------------------------------------------
909 // ---------------------------------------------------------------------------
910 
911 struct stSpline {
912  double h;
913  double dif;
914  double d1;
915  double d;
916  double b;
917  double ud1;
918  double ud;
919  double yp;
920 };
921 
922 // ---------------------------------------------------------------------------
923 // ---------------------------------------------------------------------------
924 
925 struct stOrtoPol {
926  double s;
927  double error;
928  double pjm1;
929  double pj;
930 };
931 
932 // ---------------------------------------------------------------------------
933 // ---------------------------------------------------------------------------
934 
935 struct stSpline2Tub {
936  double h;
937  double dif;
938  double d1;
939  double d;
940  double b;
941  double ud1;
942  double ud;
943  double yp;
944 };
945 
946 // ---------------------------------------------------------------------------
947 // ---------------------------------------------------------------------------
948 
950  double s;
951  double error;
952  double pjm1;
953  double pj;
954 };
955 
956 // ---------------------------------------------------------------------------
957 // ---------------------------------------------------------------------------
958 
960  double AA;
961  double AE;
962  double CA;
963  double CE;
964 };
965 
966 // ---------------------------------------------------------------------------
967 // ---------------------------------------------------------------------------
968 
969 struct stGeometria {
970  int NCilin;
971  double Carrera;
972  double Diametro;
973  double Biela;
974  double VCC;
975  double CDBlowBy;
976  double RelaCompresion;
977  double AreaPiston;
978  double AreaCulata;
979  double DiametroBowl;
980  double AlturaBowl;
981  double DistanciaValvulas;
982  double CilindradaUnitaria;
983  double CilindradaTotal;
984  double DiametroBulon;
985  double AlturaCoronaPiston;
986  double Excentricidad;
987  double MasaBiela;
988  double MasaPistonSegmentosBulon;
989  double AreaBlowBy;
990  double ModuloElasticidad;
991  double CoefDeformaciones;
992 };
993 
994 // ---------------------------------------------------------------------------
995 // ---------------------------------------------------------------------------
996 
998  int HoleNumber;
999  double HoleDiame;
1000  double CDHole;
1001  double InjectPressure;
1002  int InjectPCtrID;
1003  bool InjectPCtrd;
1004  TController *InjectPCtr;
1005  double PendOpen_A1;
1006  double PendOpen_A2;
1007  double LevMax_B1;
1008  double LevMax_B2;
1009  double PendClose_C1;
1010  double PendClose_C2;
1011  double Desfase_D1;
1012  double Desfase_D2;
1013  int NumPulsos;
1014 };
1015 
1016 // ---------------------------------------------------------------------------
1017 // ---------------------------------------------------------------------------
1018 
1020  double Angulo;
1021  double Masa; // Tanto por uno respecto a la masa total
1022  int CtrAngID;
1023  bool CtrAngd;
1024  TController *CtrAng;
1025  int CtrMasID;
1026  bool CtrMasd;
1027  TController *CtrMas;
1028 };
1029 
1030 // ---------------------------------------------------------------------------
1031 // ---------------------------------------------------------------------------
1032 
1034  double Espesor;
1035  double Density;
1036  double CalorEspecifico;
1037  double Conductividad;
1038 };
1039 
1040 // ---------------------------------------------------------------------------
1041 // ---------------------------------------------------------------------------
1042 
1043 struct stWiebe {
1044  double m;
1045  double C;
1046  double Alpha0;
1047  double IncAlpha;
1048  double Beta;
1049  double Inicia;
1050 };
1051 
1052 // ---------------------------------------------------------------------------
1053 // ---------------------------------------------------------------------------
1054 
1056  double ma;
1057  double mf;
1058  double n;
1059  double dist;
1060  double ley;
1061  int nwiebes;
1062 
1063  std::vector<stWiebe> Wiebes;
1064 };
1065 
1066 // ---------------------------------------------------------------------------
1067 // ---------------------------------------------------------------------------
1068 
1070  double Coef0;
1071  double Coef1;
1072  double Coef2;
1073  double Coef3;
1074 };
1075 
1076 // ---------------------------------------------------------------------------
1077 // ---------------------------------------------------------------------------
1078 
1079 struct stRoadLoad {
1080  double A0;
1081  double B0;
1082  double C0;
1083  double n;
1084  double cd;
1085  double rho;
1086  double A;
1087 };
1088 
1089 // ---------------------------------------------------------------------------
1090 // ---------------------------------------------------------------------------
1091 
1092 struct stWoschni {
1093  double cw1;
1094  double cw2;
1095  double cw3;
1096  double xpe;
1097 };
1098 
1099 // ---------------------------------------------------------------------------
1100 // ---------------------------------------------------------------------------
1101 
1103  bool ParNeto;
1104  double ParNetoMED;
1105  double ParNetoSUM;
1106  bool ParEfectivo;
1107  double ParEfectivoMED;
1108  double ParEfectivoSUM;
1109  bool ParEfectivoCiclo;
1110  double ParEfectivoCicloMED;
1111  bool TrabajoNeto;
1112  double TrabajoNetoSUM;
1113  double TrabajoNetoMED;
1114  bool TrabajoBombeo;
1115  double TrabajoBombeoSUM;
1116  double TrabajoBombeoMED;
1117  bool PMN;
1118  double PMNMED;
1119  bool PME;
1120  double PMEMED;
1121  bool PMNCiclo;
1122  double PMNCicloMED;
1123  bool PMECiclo;
1124  double PMECicloMED;
1125  bool PMICiclo;
1126  double PMICicloMED;
1127  bool PMBCiclo;
1128  double PMBCicloMED;
1129  bool Potencia;
1130  double PotenciaMED;
1131  bool PotenciaCiclo;
1132  double PotenciaCicloMED;
1133  bool MasaAdmision;
1134  double MasaAdmisionMED;
1135  double MasaAdmisionSUM;
1136  bool MasaFuel;
1137  double MasaFuelMED;
1138  double MasaFuelSUM;
1139  bool MasaAtrapada;
1140  double MasaAtrapadaMED;
1141  double FraccionAireFrescoMED;
1142  bool RegimenGiro;
1143  double RegimenGiroMED;
1144  double RegimenGiroSUM;
1145  bool RendimientoVolumetrico;
1146  double RendimientoVolumetricoMED;
1147  bool RendimientoVolumetricoAtm;
1148  double RendimientoVolumetricoAtmMED;
1149  bool ParPerdidasMecanicas;
1150  double ParPerdidasMecanicasMED;
1151  double ParPerdidasMecanicasSUM;
1152  bool ParResistente;
1153  double ParResistenteMED;
1154  double ParResistenteSUM;
1155  bool VelocidadVehiculo;
1156  double VelocidadVehiculoMED;
1157  double VelocidadVehiculoSUM;
1158  double DensidadReferenciaMED;
1159  double DensidadReferenciaSUM;
1160  double MasaTuboReferenciaSUM;
1161  double MasaTuboReferenciaMED;
1162  double GastoTuboReferenciaMED;
1163  double GastoTuboReferenciaSUM;
1164  bool Dosado;
1165  double DosadoMED;
1166  bool AFR;
1167  double AFRMED;
1168  bool Swirl;
1169  double SwirlMED;
1170  bool RendEfectivo;
1171  double RendEfectivoMED;
1172  bool RendIndicado;
1173  double RendIndicadoMED;
1174  bool ConsumoEspecifico;
1175  double ConsumoEspecificoMED;
1176  double TiempoSUM;
1177  double Tiempo0;
1178 };
1179 
1180 // ---------------------------------------------------------------------------
1181 // ---------------------------------------------------------------------------
1182 
1184  double Piston;
1185  double PistonSUMup;
1186  double PistonSUMdown;
1187  double Culata;
1188  double CulataSUMup;
1189  double CulataSUMdown;
1190  double Cylinder;
1191  double CilindroSUMup;
1192  double CilindroSUMdown;
1193 };
1194 
1195 // ---------------------------------------------------------------------------
1196 // ---------------------------------------------------------------------------
1197 
1198 struct stCalor {
1199  double TransPiston;
1200  double TransCilindro;
1201  double TransCulata;
1202  double TransTotal;
1203  double Liberado;
1204  double LiberadoTotal;
1205  double FQL;
1206  double FQL0;
1207 };
1208 
1209 // ---------------------------------------------------------------------------
1210 // ---------------------------------------------------------------------------
1211 
1213  bool TrabajoNeto;
1214  double TrabajoNetoMED;
1215  double TrabajoNetoSUM;
1216  bool PresionMediaNeta;
1217  double PresionMediaNetaMED;
1218  bool TrabajoBombeo;
1219  double TrabajoBombeoMED;
1220  double TrabajoBombeoSUM;
1221  bool PresionMediaBombeo;
1222  double PresionMediaBombeoMED;
1223  bool CalorCombustion;
1224  double CalorCombustionSUM;
1225  double CalorCombustionMED;
1226  bool CalorCilindro;
1227  double CalorCilindroSUM;
1228  double CalorCilindroMED;
1229  bool CalorCulata;
1230  double CalorCulataSUM;
1231  double CalorCulataMED;
1232  bool CalorPiston;
1233  double CalorPistonSUM;
1234  double CalorPistonMED;
1235  bool PresionMediaIndicada;
1236  double PresionMediaIndicadaMED;
1237  bool MasaAtrapada;
1238  double MasaAtrapadaMED;
1239  bool TemperaturaCilindroInterna;
1240  double TemperaturaCilindroInternaSUM;
1241  double TemperaturaCilindroInternaMED;
1242  bool TemperaturaCilindroMedia;
1243  double TemperaturaCilindroMediaSUM;
1244  double TemperaturaCilindroMediaMED;
1245  bool TemperaturaCilindroExterna;
1246  double TemperaturaCilindroExternaSUM;
1247  double TemperaturaCilindroExternaMED;
1248  bool TemperaturaPistonInterna;
1249  double TemperaturaPistonInternaSUM;
1250  double TemperaturaPistonInternaMED;
1251  bool TemperaturaPistonMedia;
1252  double TemperaturaPistonMediaSUM;
1253  double TemperaturaPistonMediaMED;
1254  bool TemperaturaPistonExterna;
1255  double TemperaturaPistonExternaSUM;
1256  double TemperaturaPistonExternaMED;
1257  bool TemperaturaCulataInterna;
1258  double TemperaturaCulataInternaSUM;
1259  double TemperaturaCulataInternaMED;
1260  bool TemperaturaCulataMedia;
1261  double TemperaturaCulataMediaSUM;
1262  double TemperaturaCulataMediaMED;
1263  bool TemperaturaCulataExterna;
1264  double TemperaturaCulataExternaSUM;
1265  double TemperaturaCulataExternaMED;
1266  bool NITMedio;
1267  double *NITMED;
1268  double NITMedioSUM;
1269  double NITMedioMED;
1270  bool AFRMedio;
1271  double AFRMedioMED;
1272  bool MasaBlowBy;
1273  double MasaBlowBySUM;
1274  double MasaBlowByMED;
1275  bool MasaAdmision;
1276  double MasaAdmisionMED;
1277  bool MasaEscape;
1278  double MasaEscapeMED;
1279  bool TemperaturaMedia;
1280  double TemperaturaMediaMED;
1281  double TemperaturaMediaSUM;
1282  bool Swirl;
1283  double SwirlMED;
1284  bool RendVolumetrico;
1285  double RendVolumetricoMED;
1286  double DensidadReferenciaSUM;
1287  bool MasaCortocircuito;
1288  double MasaCortocircuitoMED;
1289  double MasaCortocircuitoSUM;
1290  double Tiempo0;
1291  double TiempoSUM;
1292 };
1293 
1294 // ---------------------------------------------------------------------------
1295 // ---------------------------------------------------------------------------
1296 
1298  bool Pressure;
1299  double PresionINS;
1300  bool Temperature;
1301  double TemperaturaINS;
1302  bool MomentoAngularEsc;
1303  double *MomentoAngularEscINS;
1304  double MomentoAngularTotalEscINS;
1305  bool MomentoAngularAdm;
1306  double *MomentoAngularAdmINS;
1307  double MomentoAngularTotalAdmINS;
1308  bool GastoEsc;
1309  double *GastoEscINS;
1310  double GastoTotalEscINS;
1311  bool GastoAdm;
1312  double *GastoAdmINS;
1313  double GastoTotalAdmINS;
1314  bool MachEsc;
1315  double *MachEscINS;
1316  bool MachAdm;
1317  double *MachAdmINS;
1318  bool SeccionEfectivaAdm;
1319  double *SeccionEfectivaAdmINS;
1320  double SeccionEfectivaTotalAdmINS;
1321  bool SeccionEfectivaEsc;
1322  double *SeccionEfectivaEscINS;
1323  double SeccionEfectivaTotalEscINS;
1324  bool Masa;
1325  double MasaINS;
1326  bool Volumen;
1327  double VolumenINS;
1328  bool CoeficienteWoschni;
1329  double CoeficienteWoschniINS;
1330  bool TemperaturaCilindroInterna;
1331  double TemperaturaCilindroInternaINS;
1332  bool TemperaturaCilindroMedia;
1333  double TemperaturaCilindroMediaINS;
1334  bool TemperaturaCilindroExterna;
1335  double TemperaturaCilindroExternaINS;
1336  bool TemperaturaPistonInterna;
1337  double TemperaturaPistonInternaINS;
1338  bool TemperaturaPistonMedia;
1339  double TemperaturaPistonMediaINS;
1340  bool TemperaturaPistonExterna;
1341  double TemperaturaPistonExternaINS;
1342  bool TemperaturaCulataInterna;
1343  double TemperaturaCulataInternaINS;
1344  bool TemperaturaCulataMedia;
1345  double TemperaturaCulataMediaINS;
1346  bool TemperaturaCulataExterna;
1347  double TemperaturaCulataExternaINS;
1348  bool MasaCombustible;
1349  double MasaCombustibleINS;
1350  bool FQL;
1351  double FQLINS;
1352  bool NIT;
1353  double *NITINS;
1354  double NITTotalINS;
1355  bool ParInstantaneo;
1356  double ParInstantaneoINS;
1357  bool GastoCortocircuito;
1358  double GastoCortocircuitoINS;
1359  bool GastoBlowBy;
1360  double GastoBlowByINS;
1361  bool FraccionMasica;
1362  double *FraccionINS;
1363  bool Gamma;
1364  double GammaINS;
1365  bool HeatHead;
1366  double HeatHeadINS;
1367  bool HeatCyl;
1368  double HeatCylINS;
1369  bool HeatPis;
1370  double HeatPisINS;
1371 
1372 };
1373 
1374 // ---------------------------------------------------------------------------
1375 // ---------------------------------------------------------------------------
1376 
1378  double GastoSUM;
1379  double Massflow;
1380  double GastoSeccionSUM;
1381  double GastoSeccion;
1382  double MachSUM;
1383  double Mach;
1384  double RelacionPresionGargantaSUM;
1385  double RelacionPresionGarganta;
1386  double NIT;
1387  double NITSUM;
1388  double NITMED;
1389 };
1390 
1391 // ---------------------------------------------------------------------------
1392 // ---------------------------------------------------------------------------
1393 
1394 struct stCapa { // Capas de los tubos
1395  bool EsPrincipal;
1396  bool EsFluida;
1397  double Density;
1398  double CalorEspecifico;
1399  double Conductividad;
1400  double Espesor;
1401  double EmisividadInterior;
1402  double EmisividadExterior;
1403 };
1404 
1405 // ---------------------------------------------------------------------------
1406 // ---------------------------------------------------------------------------
1407 
1409  double Distancia;
1410  bool VelocidadParedCanalEntrada;
1411  double VelocidadParedCanalEntradaSUM;
1412  double VelocidadParedCanalEntradaMED;
1413  bool VelocidadParedCanalSalida;
1414  double VelocidadParedCanalSalidaSUM;
1415  double VelocidadParedCanalSalidaMED;
1416  bool MasaSoot;
1417  double MasaSootSUM;
1418  double MasaSootMED;
1419  bool EspesorSoot;
1420  double EspesorSootSUM;
1421  double EspesorSootMED;
1422  bool TemperaturaParedCS;
1423  double TemperaturaParedCSSUM;
1424  double TemperaturaParedCSMED;
1425  bool TemperaturaIntermediaPared;
1426  double TemperaturaIntermediaParedSUM;
1427  double TemperaturaIntermediaParedMED;
1428  bool TemperaturaParedCE;
1429  double TemperaturaParedCESUM;
1430  double TemperaturaParedCEMED;
1431  bool Kwall;
1432  double KwallSUM;
1433  double KwallMED;
1434  bool Ksoot;
1435  double KsootSUM;
1436  double KsootMED;
1437  bool Eficiencia;
1438  double EficienciaSUM;
1439  double EficienciaMED;
1440  bool Porosidad;
1441  double PorosidadSUM;
1442  double PorosidadMED;
1443  bool CoeficienteParticion;
1444  double CoeficienteParticionSUM;
1445  double CoeficienteParticionMED;
1446  bool DiametroUC;
1447  double DiametroUCSUM;
1448  double DiametroUCMED;
1449  bool Kreg1;
1450  double Kreg1SUM;
1451  double Kreg1MED;
1452  bool Kreg2;
1453  double Kreg2SUM;
1454  double Kreg2MED;
1455  bool Qreg;
1456  double QregSUM;
1457  double QregMED;
1458  bool Q1;
1459  double Q1SUM;
1460  double Q1MED;
1461  bool Q2;
1462  double Q2SUM;
1463  double Q2MED;
1464  bool TasaFraccionMasicaEspecies;
1465  double *TasaFraccionSUM;
1466  double *TasaFraccionMED;
1467  bool FraccionMasicaEspeciesSalida;
1468  double *FraccionSalidaSUM;
1469  double *FraccionSalidaMED;
1470  double PonderacionSUM;
1471  double GastoPonderacionSUM;
1472  bool TemperaturaExternaSuperficie;
1473  double TemperaturaExternaSuperficieSUM;
1474  double TemperaturaExternaSuperficieMED;
1475  bool TemperaturaMediaSuperficie;
1476  double TemperaturaMediaSuperficieSUM;
1477  double TemperaturaMediaSuperficieMED;
1478  bool TemperaturaInternaSuperficie;
1479  double TemperaturaInternaSuperficieSUM;
1480  double TemperaturaInternaSuperficieMED;
1481 };
1482 
1483 //---------------------------------------------------------------------------
1484 //---------------------------------------------------------------------------
1485 
1487  double Distancia;
1488  bool VelocidadParedCanalEntrada;
1489  double VelocidadParedCanalEntradaINS;
1490  bool VelocidadParedCanalSalida;
1491  double VelocidadParedCanalSalidaINS;
1492  bool MasaSoot;
1493  double MasaSootINS;
1494  bool EspesorSoot;
1495  double EspesorSootINS;
1496  bool TemperaturaParedCS;
1497  double TemperaturaParedCSINS;
1498  bool TemperaturaIntermediaPared;
1499  double TemperaturaIntermediaParedINS;
1500  bool TemperaturaParedCE;
1501  double TemperaturaParedCEINS;
1502  bool Kwall;
1503  double KwallINS;
1504  bool Ksoot;
1505  double KsootINS;
1506  bool Eficiencia;
1507  double EficienciaINS;
1508  bool Porosidad;
1509  double PorosidadINS;
1510  bool CoeficienteParticion;
1511  double CoeficienteParticionINS;
1512  bool DiametroUC;
1513  double DiametroUCINS;
1514  bool Kreg1;
1515  double Kreg1INS;
1516  bool Kreg2;
1517  double Kreg2INS;
1518  bool Qreg;
1519  double QregINS;
1520  bool Q1;
1521  double Q1INS;
1522  bool Q2;
1523  double Q2INS;
1524  bool TasaFraccionMasicaEspecies;
1525  double *TasaFraccionINS;
1526  bool FraccionMasicaEspeciesSalida;
1527  double *FraccionSalidaINS;
1528  bool TemperaturaExternaSuperficie;
1529  double TemperaturaExternaSuperficieINS;
1530  bool TemperaturaMediaSuperficie;
1531  double TemperaturaMediaSuperficieINS;
1532  bool TemperaturaInternaSuperficie;
1533  double TemperaturaInternaSuperficieINS;
1534 };
1535 
1536 // ---------------------------------------------------------------------------
1537 // ---------------------------------------------------------------------------
1538 
1539 // FUNCIONES
1540 
1541 template<class T>
1542 void DestruyeVector(T * pointer) {
1543  if(pointer != NULL) {
1544  delete[] pointer;
1545  pointer = NULL;
1546  }
1547 }
1548 
1549 template<class T>
1550 void DestruyeMatriz(T * *pointer, int num) {
1551  if(pointer != NULL) {
1552  for(int i = 0; i < num; i++) {
1553  delete[] pointer[i];
1554  }
1555  delete[] pointer;
1556  pointer = NULL;
1557  }
1558 }
1559 
1575 inline double CalculoSimpleGamma(double RMezcla, double CvMezcla, nmCalculoGamma GammaCalculation) {
1576  double g = __Gamma::G;
1577 
1578  if(GammaCalculation != nmGammaConstante) {
1579  g = 1. + RMezcla / CvMezcla;
1580  }
1581 
1582  return g;
1583 }
1584 ;
1585 
1609 inline double CalculoSimpleCvMezcla(double Temperature, double YQuemados, double YCombustible,
1610  nmCalculoGamma GammaCalculation, nmTipoCombustion TipoCombustible) {
1611  if(TipoCombustible == 0) {
1612  TipoCombustible == nmMEC;
1613  }
1614  double CvMezcla = __Gamma::Cv;
1615  if(GammaCalculation != nmGammaConstante) {
1616  double CvAire = 714.68;
1617  double CvQuemados = 759.67;
1618  double CvCombustible = 1496.92;
1619  double CvH2O = 1420.63;
1620  if(GammaCalculation == nmComposicionTemperatura) {
1621  double RaizdeT = sqrt(Temperature);
1622 
1623  CvAire = -10.4199 * RaizdeT + 2522.88 + (-67227.1 * RaizdeT + 917124.4 - 4174853.6 / RaizdeT) / Temperature;
1624  CvQuemados = 641.154 + Temperature * (0.43045 + Temperature * (-0.0001125 + Temperature * 8.979e-9));
1625  CvH2O = (22.605 - 0.09067 * RaizdeT + (-826.53 * RaizdeT + 13970.1 - 82114 / RaizdeT) / Temperature) * __R::H2O -
1626  __R::H2O;
1627  if(TipoCombustible == nmMEC) {
1628  //Diesel C10.8H18.7
1629  CvCombustible = -256.4 + Temperature * (6.95372 + Temperature * (-0.00404715 + Temperature * 0.000000910259)) +
1630  1458487 / (Temperature * Temperature);
1631  } else if(TipoCombustible == nmMEP) {
1632  // Octano from NIST data base (1 bar).
1633  CvCombustible = ((4.200E-07 * Temperature - 2.524E-03) * Temperature + 5.834E+00) * Temperature + 1.890E+02 -
1634  __R::Gasoline;
1635  }
1636  }
1637  //CvMezcla = CvQuemados * YQuemados + CvCombustible * YCombustible + (CvAire * (1 - YCombustible - YQuemados - 0.0164) + 0.0164 * CvH2O);
1638  //Sin Humedad en aire
1639  CvMezcla = CvQuemados * YQuemados + CvCombustible * YCombustible + (CvAire * (1 - YCombustible - YQuemados));
1640  }
1641  return CvMezcla;
1642 }
1643 ;
1644 
1645 inline double CalculoSimpleRMezcla(double YQuemados, double YCombustible, nmCalculoGamma GammaCalculation,
1646  nmTipoCombustion TipoCombustible) {
1647  double R = 287;
1648  double RFuel = 0;
1649  if(TipoCombustible == nmMEP) {
1650  RFuel = __R::Gasoline;
1651  } else {
1652  RFuel = __R::Diesel;
1653  }
1654  if(GammaCalculation != nmGammaConstante) {
1655  //R = __R::Burnt * YQuemados + RFuel * YCombustible + (__R::Air * (1 - YQuemados - YCombustible - 0.0164) + 0.0164 * __R::H2O);
1656  //Sin humedad en aire
1657  R = __R::Burnt * YQuemados + RFuel * YCombustible + (__R::Air * (1 - YQuemados - YCombustible));
1658  }
1659  return R;
1660 }
1661 ;
1662 
1663 inline double CalculoCompletoGamma(double RMezcla, double CpMezcla, nmCalculoGamma GammaCalculation) {
1664  double Gamma = 1.4;
1665 
1666  if(GammaCalculation != nmGammaConstante) {
1667  Gamma = CpMezcla / (CpMezcla - RMezcla);
1668  }
1669  return Gamma;
1670 }
1671 ;
1672 
1673 inline double CalculoCompletoCpMezcla(double YO2, double YCO2, double YH2O, double YCombustible, double Temperature,
1674  nmCalculoGamma GammaCalculation, nmTipoCombustion TipoCombustible) {
1675  double YN2 = 1 - YO2 - YCO2 - YH2O;
1676  double CpMezcla = 1004.5;
1677  if(TipoCombustible == 0) {
1678  TipoCombustible == nmMEC;
1679  }
1680  if(GammaCalculation != nmGammaConstante) {
1681  double CpN2 = 1039.82;
1682  double CpO2 = 912.54;
1683  double CpCO2 = 843.13;
1684  double CpH2O = 1856.93;
1685  double CpCombustible = 0;
1686  if(TipoCombustible == nmMEC) {
1687  CpCombustible = __R::Diesel + 1496.92;
1688  } else {
1689  CpCombustible = __R::Gasoline + 1496.92;
1690  }
1691 
1692  if(GammaCalculation == nmComposicionTemperatura) {
1693  double RaizdeT = sqrt(Temperature);
1694  // Temperature en Kelvin. Calculado segun la correlacion de JANAF.
1695  CpN2 = (12.531 - 0.05932 * RaizdeT + (-352.3 * RaizdeT + 5279.1 - 27358 / RaizdeT) / Temperature) * __R::N2;
1696  CpO2 = (-0.112 + 0.0479 * RaizdeT + (195.42 * RaizdeT - 4426.1 + 32538 / RaizdeT) / Temperature) * __R::O2;
1697  CpCO2 = (12.019 - 0.03566 * RaizdeT + (-142.34 * RaizdeT - 163.7 + 9470 / RaizdeT) / Temperature) * __R::CO2;
1698  CpH2O = (22.605 - 0.09067 * RaizdeT + (-826.53 * RaizdeT + 13970.1 - 82114 / RaizdeT) / Temperature) * __R::H2O;
1699  if(TipoCombustible == nmMEC) {
1700  //Diesel C10.8H18.7
1701  CpCombustible = __R::Diesel + (-256.4 + Temperature * (6.95372 + Temperature * (-0.00404715 + Temperature *
1702  0.000000910259)) + 1458487 / (Temperature * Temperature)); //Cp = R + Cv
1703  } else if(TipoCombustible == nmMEP) {
1704  // Octano from NIST data base (1 bar).
1705 // CpCombustible = 4184
1706 // * (-24.078 + Temperature * (0.25663 - Temperature * (0.00020168 + 0.00000006475 * Temperature))
1707 // + 580800 * RaizdeT) * __R::Gasoline / __R::Universal; //cv = cp - R
1708  CpCombustible = ((4.200E-07 * Temperature - 2.524E-03) * Temperature + 5.834E+00) * Temperature + 1.890E+02;
1709 
1710  }
1711 
1712  }
1713  CpMezcla = CpO2 * YO2 + CpCO2 * YCO2 + CpH2O * YH2O + CpN2 * (YN2 - 0.01292) + 520.32 * 0.01292 + CpCombustible *
1714  YCombustible;
1715  }
1716 
1717  return CpMezcla;
1718 }
1719 ;
1720 
1721 inline double CalculoCompletoRMezcla(double YO2, double YCO2, double YH2O, double YCombustible,
1722  nmCalculoGamma GammaCalculation, nmTipoCombustion TipoCombustible) {
1723  double R = 287;
1724  double RFuel = 0;
1725  if(TipoCombustible == nmMEP) {
1726  RFuel = __R::Gasoline;
1727  } else {
1728  RFuel = __R::Diesel;
1729  }
1730  if(GammaCalculation != nmGammaConstante) {
1731  R = __R::O2 * YO2 + __R::CO2 * YCO2 + __R::H2O * YH2O + RFuel * YCombustible + __R::N2 *
1732  (1 - YO2 - YCO2 - YH2O - YCombustible - 0.012) + 208.13 * 0.012; // El ultimo t�rmino es el Arg�n
1733  }
1734  return R;
1735 }
1736 ;
1737 
1738 inline double CalculoUfgasoil(double Temperature) {
1739  double Ufgasoil = 0.;
1740  Ufgasoil = -1234157.8 - 256.4 * __units::degCToK(Temperature) + 3.47686 * pow(__units::degCToK(Temperature),
1741  2) - 0.00134905 * pow(__units::degCToK(Temperature), 3) + 0.000000227565 * pow(
1742  __units::degCToK(Temperature), 4) - 1458487. / __units::degCToK(Temperature);
1743  return Ufgasoil;
1744 }
1745 ;
1746 
1747 inline double Interp1(double x, double *x1, double *x2, int n) {
1748  double ret_val, delta;
1749  int pos;
1750 
1751  if(x < x1[0]) {
1752  ret_val = x2[0];
1753  } else if(x > x1[n - 1]) {
1754  ret_val = x2[n - 1];
1755  } else {
1756  pos = 0;
1757  while(x > x1[pos + 1]) {
1758  pos++;
1759  }
1760  delta = (x - x1[pos]) / (x1[pos + 1] - x1[pos]);
1761  if(delta > 1 || delta < 0)
1762  std::cout << "ERROR: Interpolacion Interp1" << std::endl;
1763  ret_val = (1 - delta) * x2[pos] + delta * x2[pos + 1];
1764  }
1765  return ret_val;
1766 }
1767 ;
1768 
1769 inline double Interp1(double x, std::vector<double> x1, std::vector<double> x2, int n) {
1770  double ret_val, delta;
1771  int pos;
1772 
1773  if(x < x1[0]) {
1774  ret_val = x2[0];
1775  } else if(x > x1[n - 1]) {
1776  ret_val = x2[n - 1];
1777  } else {
1778  pos = 0;
1779  while(x > x1[pos + 1]) {
1780  pos++;
1781  }
1782  delta = (x - x1[pos]) / (x1[pos + 1] - x1[pos]);
1783  if(delta > 1 || delta < 0)
1784  std::cout << "ERROR: Interpolacion Interp1" << std::endl;
1785  ret_val = (1 - delta) * x2[pos] + delta * x2[pos + 1];
1786  }
1787  return ret_val;
1788 }
1789 ;
1790 
1791 inline double StepFunction(double x, std::vector<double> x1, std::vector<double> x2, int n) {
1792  double ret_val;
1793  int pos;
1794 
1795  if(x < x1[0]) {
1796  ret_val = x2[0];
1797  } else if(x > x1[n - 1]) {
1798  ret_val = x2[n - 1];
1799  } else {
1800  pos = 0;
1801  while(x > x1[pos + 1]) {
1802  pos++;
1803  }
1804  ret_val = x2[pos];
1805  }
1806  return ret_val;
1807 }
1808 ;
1809 
1810 inline double Interpolacion_bidimensional(double xref, double yref, double *Mapa_fila, double *Mapa_col, double **Mapa,
1811  int dimension_x, int dimension_y) {
1812  int y1, y2, x1, x2;
1813  double Valor_mapa_fila_yref_columna_x1, Valor_mapa_fila_yref_columna_x2, Valor_mapa_fila_yref_columna_xref;
1814  int contador_col = 0, contador_fila = 0;
1815 
1816  if(yref < Mapa_fila[0]) {
1817 
1818  if(xref < Mapa_col[0]) {
1819  Valor_mapa_fila_yref_columna_xref = Mapa[0][0];
1820  } else if(xref >= Mapa_col[dimension_x - 1]) {
1821  Valor_mapa_fila_yref_columna_xref = Mapa[0][dimension_x - 1];
1822  } else {
1823  while(Mapa_col[contador_col] <= xref) {
1824  x1 = contador_col;
1825  x2 = contador_col + 1;
1826  contador_col++;
1827  }
1828  Valor_mapa_fila_yref_columna_xref = Mapa[0][x1] + (Mapa[0][x1] - Mapa[0][x2]) * (Mapa_col[x1] - xref) /
1829  (Mapa_col[x1] - Mapa_col[x2]);
1830  }
1831 
1832  } else if(yref >= Mapa_fila[dimension_y - 1]) {
1833 
1834  if(xref < Mapa_col[0]) {
1835  Valor_mapa_fila_yref_columna_xref = Mapa[dimension_y - 1][0];
1836  } else if(xref >= Mapa_col[dimension_x - 1]) {
1837  Valor_mapa_fila_yref_columna_xref = Mapa[dimension_y - 1][dimension_x - 1];
1838  } else {
1839  while(Mapa_col[contador_col] <= xref) {
1840  x1 = contador_col;
1841  x2 = contador_col + 1;
1842  contador_col++;
1843  }
1844  Valor_mapa_fila_yref_columna_xref = Mapa[dimension_y - 1][x1] - (Mapa[dimension_y - 1][x1] - Mapa[dimension_y - 1][x2])
1845  * (Mapa_col[x1] - xref) / (Mapa_col[x1] - Mapa_col[x2]);
1846  }
1847 
1848  } else {
1849 
1850  while(Mapa_fila[contador_fila] <= yref) {
1851  y1 = contador_fila;
1852  y2 = contador_fila + 1;
1853  contador_fila++;
1854  }
1855  if(xref < Mapa_col[0]) {
1856  Valor_mapa_fila_yref_columna_xref = Mapa[y1][0] - (Mapa[y1][0] - Mapa[y2][0]) * (Mapa_fila[y1] - yref) /
1857  (Mapa_fila[y1] - Mapa_fila[y2]);
1858  } else if(xref >= Mapa_col[dimension_x - 1]) {
1859  Valor_mapa_fila_yref_columna_xref = Mapa[y1][dimension_x - 1] - (Mapa[y1][dimension_x - 1] - Mapa[y2][dimension_x - 1])
1860  * (Mapa_fila[y1] - yref) / (Mapa_fila[y1] - Mapa_fila[y2]);
1861  } else {
1862  while(Mapa_col[contador_col] <= xref) {
1863  x1 = contador_col;
1864  x2 = contador_col + 1;
1865  contador_col++;
1866  }
1867  /* Se interpolan los valores entre las dos columnas */
1868  Valor_mapa_fila_yref_columna_x1 = Mapa[y1][x1] - (Mapa[y1][x1] - Mapa[y2][x1]) * (Mapa_fila[y1] - yref) /
1869  (Mapa_fila[y1] - Mapa_fila[y2]);
1870  Valor_mapa_fila_yref_columna_x2 = Mapa[y1][x2] - (Mapa[y1][x2] - Mapa[y2][x2]) * (Mapa_fila[y1] - yref) /
1871  (Mapa_fila[y1] - Mapa_fila[y2]);
1872 
1873  /* A continuacion se interpola el valor entre las filas del mapa, para obtener el (valor en xref,yref) */
1874  Valor_mapa_fila_yref_columna_xref = Valor_mapa_fila_yref_columna_x1 - (Valor_mapa_fila_yref_columna_x1 -
1875  Valor_mapa_fila_yref_columna_x2) * (Mapa_col[x1] - xref) / (Mapa_col[x1] - Mapa_col[x2]);
1876  }
1877 
1878  }
1879 
1880  return Valor_mapa_fila_yref_columna_xref;
1881 }
1882 ;
1883 
1884 inline void Hermite(int n, double *x, double *y, double *sol) {
1885  double DeltaK, AlphaK, BetaK, TauK;
1886 
1887  for(int i = 1; i < n - 1; ++i) {
1888  sol[i] = (y[i] - y[i - 1]) / 2. / (x[i] - x[i - 1]) + (y[i + 1] - y[i]) / 2. / (x[i + 1] - x[i]);
1889  }
1890  sol[0] = (y[1] - y[0]) / (x[1] - x[0]);
1891  sol[n - 1] = (y[n - 1] - y[n - 2]) / (x[n - 1] - x[n - 2]);
1892 
1893  for(int i = 0; i < n - 1; i++) {
1894  DeltaK = (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
1895  if(DeltaK == 0) {
1896  sol[i] = 0;
1897  sol[i + 1] = 0;
1898  } else {
1899  AlphaK = sol[i] / DeltaK;
1900  BetaK = sol[i + 1] / DeltaK;
1901  if(BetaK * BetaK + AlphaK * AlphaK > 9) {
1902  TauK = 3 / sqrt(BetaK * BetaK + AlphaK * AlphaK);
1903  sol[i] = TauK * AlphaK * DeltaK;
1904  sol[i + 1] = TauK * BetaK * DeltaK;
1905  }
1906  }
1907  }
1908 }
1909 ;
1910 
1911 inline void Hermite(int n, std::vector<double> x, std::vector<double> y, std::vector<double> *sol) {
1912  double DeltaK, AlphaK, BetaK, TauK;
1913 
1914  for(int i = 1; i < n - 1; ++i) {
1915  (*sol)[i] = (y[i] - y[i - 1]) / 2. / (x[i] - x[i - 1]) + (y[i + 1] - y[i]) / 2. / (x[i + 1] - x[i]);
1916  }
1917  (*sol)[0] = (y[1] - y[0]) / (x[1] - x[0]);
1918  (*sol)[n - 1] = (y[n - 1] - y[n - 2]) / (x[n - 1] - x[n - 2]);
1919 
1920  for(int i = 0; i < n - 1; i++) {
1921  DeltaK = (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
1922  if(DeltaK == 0) {
1923  (*sol)[i] = 0;
1924  (*sol)[i + 1] = 0;
1925  } else {
1926  AlphaK = (*sol)[i] / DeltaK;
1927  BetaK = (*sol)[i + 1] / DeltaK;
1928  if(BetaK * BetaK + AlphaK * AlphaK > 9) {
1929  TauK = 3 / sqrt(BetaK * BetaK + AlphaK * AlphaK);
1930  (*sol)[i] = TauK * AlphaK * DeltaK;
1931  (*sol)[i + 1] = TauK * BetaK * DeltaK;
1932  }
1933  }
1934  }
1935 }
1936 ;
1937 
1938 inline double EvaluaHermite(double punto, int n, double *x, double *y, double *sol) {
1939  double ret_val, h00, h10, h01, h11, t2, t3, t, h;
1940  int k = 0;
1941 
1942  if(punto <= x[0]) {
1943  ret_val = y[0];
1944  } else if(punto >= x[n - 1]) {
1945  ret_val = y[n - 1];
1946  } else {
1947  while(x[k] < punto && k < n - 1) {
1948  ++k;
1949  }
1950  h = (x[k] - x[k - 1]);
1951  t = (punto - x[k - 1]) / h;
1952  t2 = t * t;
1953  t3 = t2 * t;
1954  h00 = 2 * t3 - 3 * t2 + 1;
1955  h10 = t3 - 2 * t2 + t;
1956  h01 = -2 * t3 + 3 * t2;
1957  h11 = t3 - t2;
1958  ret_val = h00 * y[k - 1] + h * h10 * sol[k - 1] + h01 * y[k] + h * h11 * sol[k];
1959  }
1960 
1961  return ret_val;
1962 }
1963 ;
1964 
1965 inline double EvaluaHermite(double punto, int n, std::vector<double> x, std::vector<double> y,
1966  std::vector<double> sol) {
1967  double ret_val, h00, h10, h01, h11, t2, t3, t, h;
1968  int k = 0;
1969 
1970  if(punto <= x[0]) {
1971  ret_val = y[0];
1972  } else if(punto >= x[n - 1]) {
1973  ret_val = y[n - 1];
1974  } else {
1975  while(x[k] < punto && k < n - 1) {
1976  ++k;
1977  }
1978  h = (x[k] - x[k - 1]);
1979  t = (punto - x[k - 1]) / h;
1980  t2 = t * t;
1981  t3 = t2 * t;
1982  h00 = 2 * t3 - 3 * t2 + 1;
1983  h10 = t3 - 2 * t2 + t;
1984  h01 = -2 * t3 + 3 * t2;
1985  h11 = t3 - t2;
1986  ret_val = h00 * y[k - 1] + h * h10 * sol[k - 1] + h01 * y[k] + h * h11 * sol[k];
1987  }
1988 
1989  return ret_val;
1990 }
1991 ;
1992 
1993 inline void GetName(char *origin, char *destination, const char *add) {
1994 
1995  int contpunto = (int) strlen(origin);
1996  for(int i = (int) strlen(origin) - 1; i >= 0; i--) {
1997  if(origin[i] == '.') {
1998  contpunto = i;
1999  break;
2000  } // ha encontrado el punto de la extension
2001  }
2002  for(int i = 0; i < contpunto; i++) {
2003  destination[i] = origin[i];
2004  }
2005  destination[contpunto] = '\0';
2006 
2007  strcat(destination, add);
2008 }
2009 ;
2010 
2011 inline void ReduceSubsonicFlow(double& a, double& v, double g) {
2012  double Machx = v / a;
2013  double g3 = (g - 1) / 2;
2014  double Machy = Machx / fabs(Machx) * sqrt((Machx * Machx + 1 / g3) / (g / g3 * pow(Machx, 2) - 1.));
2015  a = a * sqrt((g3 * Machx * Machx + 1.) / (g3 * Machy * Machy + 1.));
2016 
2017  v = a * Machy;
2018 }
2019 ;
2020 
2021 // int _matherr(struct _exception *a) {
2022 // // throw Exception(std::to_string(a->name)+"("+std::to_string(a->arg1)+","+std::to_string(a->arg2)+")");
2023 //
2024 // if (a->arg2 != 0) {
2025 // MessageBeep(2);
2026 // }
2027 // return 0;
2028 // }
2029 
2030 #ifndef __BORLANDC__
2031 class TObject {
2032 };
2033 #endif
2034 
2035 #endif
2036 
stEspecies
Definition: Globales.h:297
stInjectionSys
Definition: Globales.h:997
stGammas
Definition: Globales.h:347
stResMediosCilindro
Definition: Globales.h:1212
stResMediosMotor
Definition: Globales.h:1102
TTubo
a Finite differences pipe.
Definition: TTubo.h:116
stCombExtern
Definition: Globales.h:327
stResMediosDep
Definition: Globales.h:470
stSpline
Definition: Globales.h:911
stResInstantSensor
Definition: Globales.h:721
stInjecPulse
Definition: Globales.h:1019
stCapa
Definition: Globales.h:1394
stOrtoPol2Tub
Definition: Globales.h:949
TController
Definition: TController.h:37
Constantes.h
stResMediosCtrl
Definition: Globales.h:672
stTemperaturasPared
Definition: Globales.h:1183
stRoadLoad
Definition: Globales.h:1079
stTuboExtremo
Definition: Globales.h:730
TTipoValvula
Definition: TTipoValvula.h:53
stInstantaneosCompresor
Definition: Globales.h:890
TDPF
Definition: TDPF.h:45
stWoschni
Definition: Globales.h:1092
labels.hpp
stResInstantCtrl
Definition: Globales.h:695
stResMediosUED
Definition: Globales.h:635
stResMedCil
Definition: Globales.h:371
stOrtoPol
Definition: Globales.h:925
stResMediosVenturi
Definition: Globales.h:565
stSpline2Tub
Definition: Globales.h:935
stPropTermicas
Definition: Globales.h:1033
stWiebe
Definition: Globales.h:1043
stResInstantDPF
Definition: Globales.h:1486
stValvulasCilindro
Definition: Globales.h:1377
stMapa2D
Definition: Globales.h:441
stResMediosSensor
Definition: Globales.h:710
stModeloCalculoTubos
Definition: Globales.h:744
stDatosTGV
Definition: Globales.h:336
stResInstantTubo
Definition: Globales.h:795
stResInstantCilindro
Definition: Globales.h:1297
stResMediosTurbina
Definition: Globales.h:499
stSensoresTubo
Definition: Globales.h:832
stResInstantTurbina
Definition: Globales.h:525
stResMediosCV
Definition: Globales.h:597
stResMediosDPF
Definition: Globales.h:1408
stCalor
Definition: Globales.h:1198
stResMediosEje
Definition: Globales.h:647
stResMedMot
Definition: Globales.h:405
stMediasCompresor
Definition: Globales.h:863
stResMediosTubo
Definition: Globales.h:756
stLeyQuemadoBD
Definition: Globales.h:1055
Exception.hpp
stAcum
Definition: Globales.h:363
stRun
Definition: Globales.h:354
stSensoresDep
Definition: Globales.h:487
TObject
Definition: Globales.h:2031
stResInstantCV
Definition: Globales.h:615
stResInstantVenturi
Definition: Globales.h:543
Math_wam.h
stResInstantUED
Definition: Globales.h:627
stPerdMecanicas
Definition: Globales.h:1069
stTVD
Definition: Globales.h:305
stDistribucion
Definition: Globales.h:959
stGeometria
Definition: Globales.h:969
stResInstantEje
Definition: Globales.h:658
stResInstantDep
Definition: Globales.h:452