64 inline int matherr(
struct exception *a) {
79 enum nmAxisSpeedCalculation {
85 enum nmCompressorModel {
101 enum nmCompressorInlet {
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
112 enum nmTipoDescarga {
113 nmDescargaAtmosfera = 0, nmDescargaRemanso = 1, nmDescargaRemansoMatlab = 2
117 nmValvAdmision = 0, nmValvEscape = 1
121 nmFlujoEntranteSaltoSubcritico = 0, nmFlujoEntranteSaltoSupercritico = 1, nmFlujoSalienteSaltoSubcritico = 2, nmFlujoSalienteSaltoSupercritico = 3
125 nmPPLineal = 0, nmPPCuadratica = 1
128 enum nmSentidoFlujo {
129 nmEntrante = 0, nmSaliente = 1, nmParado = 2
132 enum nmRendimientoTurbina {
133 nmWatson = 0, nmPolinomio = 1, nmCalcExtRD = 2, nmRendMapa = 3
136 enum nmAjusteRdTurbina {
137 nmConstante = 0, nmCalExtARD = 1
140 enum nmVolumenDeposito {
141 nmDepVolCteBase = 0, nmDepVolVariable = 1
144 enum nmTipoDeposito {
145 nmDepVolCte = 0, nmDepVolVble = 1, nmTurbinaSimple = 2, nmTurbinaTwin = 3, nmVenturi = 4, nmUnionDireccional = 5
149 nmAireFresco = 0, nmGasEscape = 1
157 nmLaxWendroff = 0, nmMacCormak = 1, nmCESE = 2, nmTVD = 3
161 nmNinguno = 0, nmFCT = 1
164 enum nmOpcionSubModelo {
165 nmNinguna = 0, nmDDNAD = 1, nmDDPAD = 2, nmDDEAD = 3, nmDSNAD = 4, nmDSPAD = 5, nmDSEAD = 6, nmLimiter1 = 7, nmLimiter2 = 8
168 enum nmFormulacionLeyes {
169 nmSimple = 0, nmSinArea = 1, nmConArea = 2
173 nmDamping = 0, nmSmoothing = 1, nmExplicit = 2, nmNaive = 3, nmPhoenical = 4
176 enum nmTipoTransCal {
177 nmPipaAdmision = 0, nmTuboAdmision = 1, nmTuboEscape = 2, nmPipaEscape = 3
180 enum nmRefrigerante {
181 nmAire = 0, nmAgua = 1
185 nmDistancia = 1, nmAngular = 2
193 nmPersonalizado = 0, nmImpuesto = 1
196 enum nmTipoCombustion {
201 nmPAAECalculada = 0, nmPAAEImpuesta = 1
204 enum nmCalculoPared {
205 nmSinInercia = 0, nmConInercia = 1, nmTempFija = 2
208 enum nmTipoModelado {
209 nmEstacionario = 0, nmTransitorioCarga = 1, nmTransitorioRegimen = 2, nmTransitorioRegimenExterno = 3
213 nmPropio = 0, nmMotor = 1
216 enum nmTipoCalcTempParedTubos {
217 nmVariableConInerciaTermica = 0, nmVariableSinInerciaTermica = 1, nmTempConstante = 2
220 enum nmTipoCalculoEspecies {
221 nmCalculoSimple = 0, nmCalculoCompleto = 1
224 enum nmTipoCombustible {
225 nmDiesel = 0, nmGasolina = 1, nmBlend = 2, nmNone = 3
228 enum nmCalculoGamma {
229 nmGammaConstante = 0, nmComposicion = 1, nmComposicionTemperatura = 2
233 nmFQL = 0, nmEXT = 1, nmACT = 2
237 nmControlPadm = 0, nmControlMasaAire = 1
240 enum nmControlMethod {
241 nmCtlConstant = 0, nmCtlPID = 1, nmCtlTable = 2, nmCtlSwitch = 3, nmGainCtrl = 4
245 nmInController = 0, nmInSensor = 1
248 enum nmObjectSensed {
249 nmSensEjec = 0, nmSensTubo = 1, nmSensDeposito = 2, nmSensMotor = 3
252 enum nmParameterSensed {
253 nmTime = 0, nmPressure = 1, nmTemperature = 2, nmMassFlow = 3, nmFuel = 4, nmEngSpeed = 5
256 enum nmTipoInterpolacion {
257 nmLineal = 0, nmHermite = 1, nmSteps = 2
260 enum nmCompressorMapFormat {
261 nmOldWAMmap = 0, nmSAMmap = 1
265 enum nmSeccionCanal {
266 nmCuadrada = 0, nmCircular = 1, nmRectangular = 2, nmTriangular = 3
270 nmCanalEntrada = 0, nmCanalSalida = 1
348 double aref, gamma, gai123, gamm1, gams1, gas12, gas123, gads1, gar21, r, pi;
357 double CycleDuration;
377 double DosadoRelativo;
385 double MasaPorAdmision;
386 double MasaPorEscape;
399 double RendimientoVolumetrico;
414 double RendimientoVolumetrico;
415 stAcum ParPerdidasMecanicas;
418 stAcum DensidadReferencia;
420 double TrabajoBombeo;
456 double TemperaturaINS;
461 bool FraccionMasicaEspecies;
475 double TemperaturaSUM;
476 double TemperaturaMED;
479 bool FraccionMasicaEspecies;
493 double Valor0Presion;
504 double RendimientoMED;
506 double *RelaCinematicaMED;
507 double RelaCinematicaGlobalMED;
509 double *GastoCorregidoMED;
510 double *GastoCorregidoSUM;
511 bool RegimenCorregido;
512 double *RegimenCorregidoMED;
513 double *RegimenCorregidoSUM;
514 bool RelacionExpansion;
515 double *RelacionExpansionMED;
516 double *RelacionExpansionSUM;
529 double RendimientoINS;
531 double *RelaCinematicaINS;
533 double *GastoCorregidoINS;
534 bool RegimenCorregido;
535 double *RegimenCorregidoINS;
536 bool RelacionExpansion;
537 double *RelacionExpansionINS;
545 double PresionEntradaINS;
546 bool PresionGarganta;
547 double PresionGargantaINS;
549 double MachEntradaINS;
551 double MachGargantaINS;
553 double VelEntradaINS;
555 double VelLateralINS;
557 double GastoEntradaINS;
559 double GastoLateralINS;
569 double PresionEntradaSUM;
570 double PresionEntradaMED;
571 bool PresionGarganta;
572 double PresionGargantaSUM;
573 double PresionGargantaMED;
575 double MachEntradaSUM;
576 double MachEntradaMED;
578 double MachGargantaSUM;
579 double MachGargantaMED;
581 double VelEntradaSUM;
582 double VelEntradaMED;
584 double VelLateralSUM;
585 double VelLateralMED;
587 double GastoEntradaSUM;
588 double GastoEntradaMED;
590 double GastoLateralSUM;
591 double GastoLateralMED;
689 double Output_filtMED;
690 double Output_filtSUM;
707 double Output_filtINS;
732 nmPipeEnd TipoExtremo;
746 nmSubModelo SubModelo;
747 nmOpcionSubModelo OpcionSubModelo;
749 nmTipoFCT Antidifusion;
750 nmFormulacionLeyes FormulacionLeyes;
759 double TemperaturaGasMED;
760 double TemperaturaGasSUM;
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;
782 bool CoefPelInterior;
783 double CoefPelInteriorMED;
784 double CoefPelInteriorSUM;
785 bool FraccionMasicaEspecies;
788 double PonderacionSUM;
789 double GastoPonderacionSUM;
802 double TemperaturaGasINS;
804 double FlujoMasicoINS;
805 bool VelocidadDerecha;
806 double VelocidadDerechaINS;
807 bool VelocidadIzquierda;
808 double VelocidadIzquierdaINS;
810 double PresionDerechaINS;
811 bool PresionIzquierda;
812 double PresionIzquierdaINS;
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;
838 double Valor0Presion;
841 double GanaVelocidad;
843 double ValorVelocidad;
844 double Valor0Velocidad;
845 double SensVelocidad;
847 double GanaTemperatura;
848 double CteTemperatura;
849 double Valor0Temperatura;
850 double ValorTemperatura;
851 double SensTemperatura;
853 double GanaGastoMasico;
854 double CteGastoMasico;
855 double Valor0GastoMasico;
856 double ValorGastoMasico;
857 double SensGastoMasico;
870 bool GraficaRelacionCompresion;
871 double RelacionCompresion;
872 double RelacionCompresionSUM;
876 bool GraficaRendimiento;
878 double RendimientoSUM;
879 bool GraficaGastoCorregido;
880 double GastoCorregido;
881 double GastoCorregidoSUM;
882 bool GraficaRegimenCorregido;
883 double RegimenCorregido;
884 double RegimenCorregidoSUM;
891 bool GraficaInstantaneas;
892 bool GraficaPotencia;
894 bool GraficaRendimiento;
896 bool GraficaRelacionCompresion;
897 double RelacionCompresion;
900 bool GraficaGastoCorregido;
901 double GastoCorregido;
902 bool GraficaRegimenCorregido;
903 double RegimenCorregido;
976 double RelaCompresion;
981 double DistanciaValvulas;
982 double CilindradaUnitaria;
983 double CilindradaTotal;
984 double DiametroBulon;
985 double AlturaCoronaPiston;
986 double Excentricidad;
988 double MasaPistonSegmentosBulon;
990 double ModuloElasticidad;
991 double CoefDeformaciones;
1001 double InjectPressure;
1009 double PendClose_C1;
1010 double PendClose_C2;
1036 double CalorEspecifico;
1037 double Conductividad;
1063 std::vector<stWiebe> Wiebes;
1107 double ParEfectivoMED;
1108 double ParEfectivoSUM;
1109 bool ParEfectivoCiclo;
1110 double ParEfectivoCicloMED;
1112 double TrabajoNetoSUM;
1113 double TrabajoNetoMED;
1115 double TrabajoBombeoSUM;
1116 double TrabajoBombeoMED;
1132 double PotenciaCicloMED;
1134 double MasaAdmisionMED;
1135 double MasaAdmisionSUM;
1140 double MasaAtrapadaMED;
1141 double FraccionAireFrescoMED;
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;
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;
1171 double RendEfectivoMED;
1173 double RendIndicadoMED;
1174 bool ConsumoEspecifico;
1175 double ConsumoEspecificoMED;
1186 double PistonSUMdown;
1189 double CulataSUMdown;
1191 double CilindroSUMup;
1192 double CilindroSUMdown;
1200 double TransCilindro;
1204 double LiberadoTotal;
1214 double TrabajoNetoMED;
1215 double TrabajoNetoSUM;
1216 bool PresionMediaNeta;
1217 double PresionMediaNetaMED;
1219 double TrabajoBombeoMED;
1220 double TrabajoBombeoSUM;
1221 bool PresionMediaBombeo;
1222 double PresionMediaBombeoMED;
1223 bool CalorCombustion;
1224 double CalorCombustionSUM;
1225 double CalorCombustionMED;
1227 double CalorCilindroSUM;
1228 double CalorCilindroMED;
1230 double CalorCulataSUM;
1231 double CalorCulataMED;
1233 double CalorPistonSUM;
1234 double CalorPistonMED;
1235 bool PresionMediaIndicada;
1236 double PresionMediaIndicadaMED;
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;
1273 double MasaBlowBySUM;
1274 double MasaBlowByMED;
1276 double MasaAdmisionMED;
1278 double MasaEscapeMED;
1279 bool TemperaturaMedia;
1280 double TemperaturaMediaMED;
1281 double TemperaturaMediaSUM;
1284 bool RendVolumetrico;
1285 double RendVolumetricoMED;
1286 double DensidadReferenciaSUM;
1287 bool MasaCortocircuito;
1288 double MasaCortocircuitoMED;
1289 double MasaCortocircuitoSUM;
1301 double TemperaturaINS;
1302 bool MomentoAngularEsc;
1303 double *MomentoAngularEscINS;
1304 double MomentoAngularTotalEscINS;
1305 bool MomentoAngularAdm;
1306 double *MomentoAngularAdmINS;
1307 double MomentoAngularTotalAdmINS;
1309 double *GastoEscINS;
1310 double GastoTotalEscINS;
1312 double *GastoAdmINS;
1313 double GastoTotalAdmINS;
1318 bool SeccionEfectivaAdm;
1319 double *SeccionEfectivaAdmINS;
1320 double SeccionEfectivaTotalAdmINS;
1321 bool SeccionEfectivaEsc;
1322 double *SeccionEfectivaEscINS;
1323 double SeccionEfectivaTotalEscINS;
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;
1355 bool ParInstantaneo;
1356 double ParInstantaneoINS;
1357 bool GastoCortocircuito;
1358 double GastoCortocircuitoINS;
1360 double GastoBlowByINS;
1361 bool FraccionMasica;
1362 double *FraccionINS;
1380 double GastoSeccionSUM;
1381 double GastoSeccion;
1384 double RelacionPresionGargantaSUM;
1385 double RelacionPresionGarganta;
1398 double CalorEspecifico;
1399 double Conductividad;
1401 double EmisividadInterior;
1402 double EmisividadExterior;
1410 bool VelocidadParedCanalEntrada;
1411 double VelocidadParedCanalEntradaSUM;
1412 double VelocidadParedCanalEntradaMED;
1413 bool VelocidadParedCanalSalida;
1414 double VelocidadParedCanalSalidaSUM;
1415 double VelocidadParedCanalSalidaMED;
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;
1438 double EficienciaSUM;
1439 double EficienciaMED;
1441 double PorosidadSUM;
1442 double PorosidadMED;
1443 bool CoeficienteParticion;
1444 double CoeficienteParticionSUM;
1445 double CoeficienteParticionMED;
1447 double DiametroUCSUM;
1448 double DiametroUCMED;
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;
1488 bool VelocidadParedCanalEntrada;
1489 double VelocidadParedCanalEntradaINS;
1490 bool VelocidadParedCanalSalida;
1491 double VelocidadParedCanalSalidaINS;
1495 double EspesorSootINS;
1496 bool TemperaturaParedCS;
1497 double TemperaturaParedCSINS;
1498 bool TemperaturaIntermediaPared;
1499 double TemperaturaIntermediaParedINS;
1500 bool TemperaturaParedCE;
1501 double TemperaturaParedCEINS;
1507 double EficienciaINS;
1509 double PorosidadINS;
1510 bool CoeficienteParticion;
1511 double CoeficienteParticionINS;
1513 double DiametroUCINS;
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;
1542 void DestruyeVector(T * pointer) {
1543 if(pointer != NULL) {
1550 void DestruyeMatriz(T * *pointer,
int num) {
1551 if(pointer != NULL) {
1552 for(
int i = 0; i < num; i++) {
1553 delete[] pointer[i];
1575 inline double CalculoSimpleGamma(
double RMezcla,
double CvMezcla, nmCalculoGamma GammaCalculation) {
1576 double g = __Gamma::G;
1578 if(GammaCalculation != nmGammaConstante) {
1579 g = 1. + RMezcla / CvMezcla;
1609 inline double CalculoSimpleCvMezcla(
double Temperature,
double YQuemados,
double YCombustible,
1610 nmCalculoGamma GammaCalculation, nmTipoCombustion TipoCombustible) {
1611 if(TipoCombustible == 0) {
1612 TipoCombustible == nmMEC;
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);
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 -
1627 if(TipoCombustible == nmMEC) {
1629 CvCombustible = -256.4 + Temperature * (6.95372 + Temperature * (-0.00404715 + Temperature * 0.000000910259)) +
1630 1458487 / (Temperature * Temperature);
1631 }
else if(TipoCombustible == nmMEP) {
1633 CvCombustible = ((4.200E-07 * Temperature - 2.524E-03) * Temperature + 5.834E+00) * Temperature + 1.890E+02 -
1639 CvMezcla = CvQuemados * YQuemados + CvCombustible * YCombustible + (CvAire * (1 - YCombustible - YQuemados));
1645 inline double CalculoSimpleRMezcla(
double YQuemados,
double YCombustible, nmCalculoGamma GammaCalculation,
1646 nmTipoCombustion TipoCombustible) {
1649 if(TipoCombustible == nmMEP) {
1650 RFuel = __R::Gasoline;
1652 RFuel = __R::Diesel;
1654 if(GammaCalculation != nmGammaConstante) {
1657 R = __R::Burnt * YQuemados + RFuel * YCombustible + (__R::Air * (1 - YQuemados - YCombustible));
1663 inline double CalculoCompletoGamma(
double RMezcla,
double CpMezcla, nmCalculoGamma GammaCalculation) {
1666 if(GammaCalculation != nmGammaConstante) {
1667 Gamma = CpMezcla / (CpMezcla - RMezcla);
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;
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;
1689 CpCombustible = __R::Gasoline + 1496.92;
1692 if(GammaCalculation == nmComposicionTemperatura) {
1693 double RaizdeT = sqrt(Temperature);
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) {
1701 CpCombustible = __R::Diesel + (-256.4 + Temperature * (6.95372 + Temperature * (-0.00404715 + Temperature *
1702 0.000000910259)) + 1458487 / (Temperature * Temperature));
1703 }
else if(TipoCombustible == nmMEP) {
1708 CpCombustible = ((4.200E-07 * Temperature - 2.524E-03) * Temperature + 5.834E+00) * Temperature + 1.890E+02;
1713 CpMezcla = CpO2 * YO2 + CpCO2 * YCO2 + CpH2O * YH2O + CpN2 * (YN2 - 0.01292) + 520.32 * 0.01292 + CpCombustible *
1721 inline double CalculoCompletoRMezcla(
double YO2,
double YCO2,
double YH2O,
double YCombustible,
1722 nmCalculoGamma GammaCalculation, nmTipoCombustion TipoCombustible) {
1725 if(TipoCombustible == nmMEP) {
1726 RFuel = __R::Gasoline;
1728 RFuel = __R::Diesel;
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;
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);
1747 inline double Interp1(
double x,
double *x1,
double *x2,
int n) {
1748 double ret_val, delta;
1753 }
else if(x > x1[n - 1]) {
1754 ret_val = x2[n - 1];
1757 while(x > x1[pos + 1]) {
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];
1769 inline double Interp1(
double x, std::vector<double> x1, std::vector<double> x2,
int n) {
1770 double ret_val, delta;
1775 }
else if(x > x1[n - 1]) {
1776 ret_val = x2[n - 1];
1779 while(x > x1[pos + 1]) {
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];
1791 inline double StepFunction(
double x, std::vector<double> x1, std::vector<double> x2,
int n) {
1797 }
else if(x > x1[n - 1]) {
1798 ret_val = x2[n - 1];
1801 while(x > x1[pos + 1]) {
1810 inline double Interpolacion_bidimensional(
double xref,
double yref,
double *Mapa_fila,
double *Mapa_col,
double **Mapa,
1811 int dimension_x,
int dimension_y) {
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;
1816 if(yref < Mapa_fila[0]) {
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];
1823 while(Mapa_col[contador_col] <= xref) {
1825 x2 = contador_col + 1;
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]);
1832 }
else if(yref >= Mapa_fila[dimension_y - 1]) {
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];
1839 while(Mapa_col[contador_col] <= xref) {
1841 x2 = contador_col + 1;
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]);
1850 while(Mapa_fila[contador_fila] <= yref) {
1852 y2 = contador_fila + 1;
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]);
1862 while(Mapa_col[contador_col] <= xref) {
1864 x2 = contador_col + 1;
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]);
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]);
1880 return Valor_mapa_fila_yref_columna_xref;
1884 inline void Hermite(
int n,
double *x,
double *y,
double *sol) {
1885 double DeltaK, AlphaK, BetaK, TauK;
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]);
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]);
1893 for(
int i = 0; i < n - 1; i++) {
1894 DeltaK = (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
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;
1911 inline void Hermite(
int n, std::vector<double> x, std::vector<double> y, std::vector<double> *sol) {
1912 double DeltaK, AlphaK, BetaK, TauK;
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]);
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]);
1920 for(
int i = 0; i < n - 1; i++) {
1921 DeltaK = (y[i + 1] - y[i]) / (x[i + 1] - x[i]);
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;
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;
1944 }
else if(punto >= x[n - 1]) {
1947 while(x[k] < punto && k < n - 1) {
1950 h = (x[k] - x[k - 1]);
1951 t = (punto - x[k - 1]) / h;
1954 h00 = 2 * t3 - 3 * t2 + 1;
1955 h10 = t3 - 2 * t2 + t;
1956 h01 = -2 * t3 + 3 * t2;
1958 ret_val = h00 * y[k - 1] + h * h10 * sol[k - 1] + h01 * y[k] + h * h11 * sol[k];
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;
1972 }
else if(punto >= x[n - 1]) {
1975 while(x[k] < punto && k < n - 1) {
1978 h = (x[k] - x[k - 1]);
1979 t = (punto - x[k - 1]) / h;
1982 h00 = 2 * t3 - 3 * t2 + 1;
1983 h10 = t3 - 2 * t2 + t;
1984 h01 = -2 * t3 + 3 * t2;
1986 ret_val = h00 * y[k - 1] + h * h10 * sol[k - 1] + h01 * y[k] + h * h11 * sol[k];
1993 inline void GetName(
char *origin,
char *destination,
const char *add) {
1995 int contpunto = (int) strlen(origin);
1996 for(
int i = (
int) strlen(origin) - 1; i >= 0; i--) {
1997 if(origin[i] ==
'.') {
2002 for(
int i = 0; i < contpunto; i++) {
2003 destination[i] = origin[i];
2005 destination[contpunto] =
'\0';
2007 strcat(destination, add);
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.));
2030 #ifndef __BORLANDC__