31 #include "TCilindro4T.h"
32 #include "TBloqueMotor.h"
33 #include "TCCCilindro.h"
41 TCilindro4T::TCilindro4T(
TBloqueMotor *Engine,
int nc,
bool ThereIsEGR) :
51 FAnguloRetrasoCombustion = 2.;
52 FPrimerInstanteCicloCerrado =
false;
59 TCilindro4T::~TCilindro4T() {
66 void TCilindro4T::ActualizaPropiedades(
double TiempoActual) {
68 double masavalesc, MasaAdmInstante = 0., MasaEscInstante = 0.;
69 double FraccionCC = 0., MasaCortocircuitoAdm = 0., MasaCortocircuitoEsc = 0.;
70 int NumeroUnionesEntrante = 0;
71 double FraccionMasicaAcum = 0., mfquefin = 0.;
73 double ctorbadmp = 0.;
75 if(FCicloCerrado & FPrimerInstanteCicloCerrado) {
77 FPrimerInstanteCicloCerrado =
false;
80 FMasaFuel = FMfController->
Output(TiempoActual);
81 else if(FMotor->getCombustible() == nmMEC)
82 FMasaFuel = FMotor->getMasaFuel();
86 FMaint = FMasaPorAdmision;
87 FRegInt = FMotor->getRegimen();
89 if(FMotor->getACT()) {
91 FMotor->NewInjectionData(TiempoActual);
93 VariableInicialesCicloACT();
95 for(
int i = 0; i < FIN; i++) {
96 FSOP[i] = FMotor->getInjecPulse(i).Angulo;
97 FMFI[i] = FMotor->getInjecPulse(i).Masa * FMotor->getMasaFuel() * 1e6;
101 CALCULUS_OF_INJECTION_RATE(FIN, FSOP, FMFI, FSOI, FEOI, Ftest_variables[0], FCAI, Ftest_variables[5], FA_TASA, FB_TASA,
102 FC_TASA, FD_TASA, Finjection_rate, FCAD_injection_rate);
104 ACT(Fengine_parameters, Fengine_model_constants, Ftest_variables, Finjection_rate, FCAD_injection_rate, Fsize_inlet_inj,
105 FIN, FSOI, FEOI, FCAI, FCAD_exit, FHRF_exit, FROHR_exit,
106 Fp_cyl_exit, Fdp_da_cyl_exit, FT_cyl_exit, FH_cooler_exit, Fmean_var_exit, Fheat_transfer, Finjection_rate_exit,
107 Faccum_injection_rate_exit, dataIN, &dataOUT);
110 double ACT_Correction = 0;
111 for(
int i = 0; i < 8; i++) {
112 ACT_Correction += dataOUT.species_EVO[i];
114 for(
int i = 0; i < 8; i++) {
115 dataOUT.species_EVO[i] = dataOUT.species_EVO[i] / ACT_Correction;
122 if(FCalcComb == nmFQL) {
123 InicioFinCombustion();
124 if(FMotor->getFTipoDatosIny() == 1) {
125 FNumIny = FMotor->getFNumeroInyecciones();
126 FTInyeccion = FMotor->getFTIny();
127 FPercentInyeccion = FMotor->getFPercentIny();
128 FAnguloInjeccion = FMotor->getFAngIny();
129 for(
int i = 0; i < FNumIny; i++) {
130 FTInyeccion[i] = FTInyeccion[i] * 1e-3;
131 FPercentInyeccion[i] = FPercentInyeccion[i] / 100;
133 if(FAnguloInjeccion[i] < 0) {
134 FAnguloInjeccion[i] = FAnguloInjeccion[i] + FMotor->getAngTotalCiclo();
140 }
else if(FMotor->getFTipoDatosIny() == 2) {
142 FAnguloInjeccion.resize(FNumIny);
143 FTInyeccion.resize(FNumIny);
144 FPercentInyeccion.resize(FNumIny);
145 if(FMotor->getFAngIniIny() < 0) {
146 FAnguloInjeccion[0] = FMotor->getFAngIniIny() + FMotor->getAngTotalCiclo();
148 FAnguloInjeccion[0] = FMotor->getFAngIniIny();
150 FPercentInyeccion[0] = 1.;
154 if(FMotor->getLeyQuemadoBD()[0].Wiebes.size() == 4) {
156 FAnguloInjeccion.resize(FNumIny);
157 FTInyeccion.resize(FNumIny);
158 FPercentInyeccion.resize(FNumIny);
159 FTInyeccion[0] = 5 / (FMotor->getRegimen() * 6.);
160 FTInyeccion[1] = (FFinComb - FIniComb) / (FMotor->getRegimen() * 6.) / 4.;
161 FPercentInyeccion[0] = FMotor->getLeyQuemadoBD()[0].Wiebes[0].Beta;
162 FPercentInyeccion[1] = 1. - FPercentInyeccion[0];
164 FAnguloInjeccion[1] = FIniComb - FAnguloRetrasoCombustion;
165 if(FAnguloInjeccion[1] < 0)
166 FAnguloInjeccion[1] += FMotor->getAngTotalCiclo();
167 FAnguloInjeccion[0] = FIniComb - 20;
168 if(FAnguloInjeccion[0] < 0)
169 FAnguloInjeccion[0] += FMotor->getAngTotalCiclo();
173 FAnguloInjeccion.resize(FNumIny);
174 FTInyeccion.resize(FNumIny);
175 FPercentInyeccion.resize(FNumIny);
176 if(FMotor->getCombustible() == nmMEC) {
177 FTInyeccion[0] = (FFinComb - FIniComb) / (FMotor->getRegimen() * 6.) / 4.;
178 FAnguloInjeccion[0] = FIniComb - FAnguloRetrasoCombustion;
180 FTInyeccion[0] = (720 - FIniComb - FDistribucion.CA) / (FMotor->getRegimen() * 6.) / 2.;
181 FAnguloInjeccion[0] = FDistribucion.CA + 2.;
183 if(FAnguloInjeccion[0] < 0)
184 FAnguloInjeccion[0] += FMotor->getAngTotalCiclo();
185 FPercentInyeccion[0] = 1;
188 }
else if(FCalcComb == nmACT) {
190 FAnguloInjeccion[0] = FMotor->getInjecPulse(0).Angulo;
191 FIniComb = FMotor->getInjecPulse(0).Angulo;
192 FFinComb = FDistribucion.AE;
197 std::cout <<
"INFO: Fuel mass: " << FMasaFuel * 1e6 <<
" (mg)" << std::endl;
198 std::cout <<
"____________________________________________________" << std::endl;
201 if(FMotor->getGammaCalculation() == nmGammaConstante) {
202 if(FMotor->getSpeciesModel() == nmCalculoCompleto) {
203 if(FMotor->getSpeciesNumber() == 9) {
204 FFraccionMasicaEspecieFuel = 0;
205 }
else if(FMotor->getSpeciesNumber() == 10) {
206 FFraccionMasicaEspecieFuel = FFraccionMasicaEspecie[7];
208 FRMezcla = CalculoCompletoRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
209 FFraccionMasicaEspecieFuel, nmComposicionTemperatura,
210 FMotor->getCombustible());
211 FCpMezcla = CalculoCompletoCpMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
212 FFraccionMasicaEspecieFuel, __units::degCToK(FTemperature),
213 nmComposicionTemperatura, FMotor->getCombustible());
214 FGamma = CalculoCompletoGamma(FRMezcla, FCpMezcla, nmComposicionTemperatura);
216 }
else if(FMotor->getSpeciesModel() == nmCalculoSimple) {
217 FRMezcla = CalculoSimpleRMezcla(FComposicionCicloCerrado[0], FComposicionCicloCerrado[1], FMotor->getGammaCalculation(),
218 FMotor->getCombustible());
220 FCvMezcla = CalculoSimpleCvMezcla(__units::degCToK(FTemperature), FComposicionCicloCerrado[0],
221 FComposicionCicloCerrado[1], nmComposicionTemperatura, FMotor->getCombustible());
222 FGamma = CalculoSimpleGamma(FRMezcla, FCvMezcla, nmComposicionTemperatura);
225 }
else if(FMotor->getGammaCalculation() == nmComposicion || FMotor->getGammaCalculation() == nmComposicionTemperatura) {
226 if(FMotor->getSpeciesModel() == nmCalculoCompleto) {
227 if(FMotor->getSpeciesNumber() == 9) {
228 FFraccionMasicaEspecieFuel = 0;
229 }
else if(FMotor->getSpeciesNumber() == 10) {
230 FFraccionMasicaEspecieFuel = FFraccionMasicaEspecie[7];
232 FRMezcla = CalculoCompletoRMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
233 FFraccionMasicaEspecieFuel, FMotor->getGammaCalculation(),
234 FMotor->getCombustible());
235 FCpMezcla = CalculoCompletoCpMezcla(FFraccionMasicaEspecie[0], FFraccionMasicaEspecie[1], FFraccionMasicaEspecie[2],
236 FFraccionMasicaEspecieFuel, __units::degCToK(FTemperature),
237 FMotor->getGammaCalculation(), FMotor->getCombustible());
238 FGamma = CalculoCompletoGamma(FRMezcla, FCpMezcla, FMotor->getGammaCalculation());
240 }
else if(FMotor->getSpeciesModel() == nmCalculoSimple) {
242 FRMezcla = CalculoSimpleRMezcla(FComposicionCicloCerrado[0], FComposicionCicloCerrado[1], FMotor->getGammaCalculation(),
243 FMotor->getCombustible());
246 FCvMezcla = CalculoSimpleCvMezcla(__units::degCToK(FTemperature), FComposicionCicloCerrado[0],
247 FComposicionCicloCerrado[1], FMotor->getGammaCalculation(), FMotor->getCombustible());
248 FGamma = CalculoSimpleGamma(FRMezcla, FCvMezcla, FMotor->getGammaCalculation());
252 FGamma1 = __Gamma::G1(FGamma);
253 FGamma2 = __Gamma::G2(FGamma);
254 FGamma4 = __Gamma::G4(FGamma);
255 FGamma6 = __Gamma::G6(FGamma);
267 FTime1 = TiempoActual;
268 FDeltaT = FTime1 - FTime0;
269 FDeltaAngulo = 360. * FMotor->getRegimen() / 60. * FDeltaT;
270 FAnguloAnterior = FAnguloActual;
271 FAnguloActual = FAnguloAnterior + FDeltaAngulo;
272 if(FAnguloActual > FMotor->getAngTotalCiclo()) {
273 FAnguloActual -= FMotor->getAngTotalCiclo();
278 if(FAnguloActual > 360.) {
279 FAnguloComb0 = FAnguloActual - FMotor->getAngTotalCiclo() - FDeltaAngulo;
280 FAnguloComb = FAnguloActual - FMotor->getAngTotalCiclo();
282 FAnguloComb0 = FAnguloComb;
283 FAnguloComb = FAnguloActual;
286 if(FAnguloActual >= FDistribucion.AE && FAnguloAnterior < FDistribucion.AE) {
287 FCicloCerrado =
false;
288 FResMediosCilindro.CalorCombustionSUM = FCalor.LiberadoTotal;
289 FCalor.Liberado = 0.;
290 FCalor.LiberadoTotal = 0.;
297 if(FMotor->getACT()) {
298 for(
int i = 0; i < FNumeroUnionesAdm; i++) {
299 FPresionMedAdm += FCCValvulaAdm[i]->GetTuboExtremo(0).Pipe->
GetPresion(0) * FDeltaT / FNumeroUnionesAdm;
301 for(
int i = 0; i < FNumeroUnionesEsc; i++) {
302 FPresionMedEsc += FCCValvulaEsc[i]->GetTuboExtremo(0).Pipe->
GetPresion(0) * FDeltaT / FNumeroUnionesEsc;
304 FTimeAcumAct += FDeltaT;
314 for(
int i = 0; i < FNumeroUnionesAdm; i++) {
315 FMasaValvAdm = -
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getMassflow() *
317 if(FAnguloActual - FDeltaAngulo < FDistribucion.CA
318 && FAnguloActual > FDistribucion.CA) {
319 FMasaValvAdm = FMasaValvAdm * (FDistribucion.CA - FAnguloActual + FDeltaAngulo) / FDeltaAngulo;
321 MasaAdmInstante += FMasaValvAdm;
322 FMasa += FMasaValvAdm;
324 FAcumMasaPorAdm += FMasaValvAdm;
327 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
328 FMasaEspecie[j] += FCCValvulaAdm[i]->GetFraccionMasicaEspecie(j) * FMasaValvAdm;
331 FAcumMasaEGR += FCCValvulaAdm[i]->GetFraccionMasicaEspecie(FMotor->getSpeciesNumber() - 1) * FMasaValvAdm;
334 for(
int i = 0; i < FNumeroUnionesEsc; i++) {
335 masavalesc = -
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getMassflow() *
337 if(FAnguloActual - FDeltaAngulo < FDistribucion.CE && FAnguloActual > FDistribucion.CE) {
338 masavalesc = masavalesc * (FDistribucion.CE - FAnguloActual + FDeltaAngulo) /
341 MasaEscInstante += masavalesc;
343 FAcumMasaPorEsc += masavalesc;
346 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
347 FMasaEspecie[j] += FCCValvulaEsc[i]->GetFraccionMasicaEspecie(j) * masavalesc;
355 if(FPressure > FMotor->getPresionAmb() && FMotor->getGeometria().CDBlowBy > 0.) {
356 if(FMotor->getPresionAmb() / FPressure < pow(2. / FGamma2, FGamma6)) {
357 FPresionCarter = FPressure * pow(2. / FGamma2, FGamma4 / 2.);
360 FPresionCarter = FMotor->getPresionAmb();
362 z = FGamma4 * (pow(FPresionCarter / FPressure, 2 / FGamma) - pow(FPresionCarter / FPressure, FGamma2 / FGamma));
363 FGastoBlowBy = FMotor->getGeometria().CDBlowBy * 3.5e-5 * FMotor->getGeometria().Diametro * __units::BarToPa(
364 FPressure) * sqrt(z / FRMezcla / __units::degCToK(FTemperature));
368 FMasaBlowBy = FGastoBlowBy * FDeltaT;
376 for(
int i = 0; i < FNumIny; i++) {
377 if(FAnguloActual > FAnguloInjeccion[i] && FAnguloAnterior <= FAnguloInjeccion[i]) {
395 if(FMotor->getACT()) {
396 FTasaFuel = Interp1(FAnguloComb, FCAD_injection_rate, Finjection_rate, FCAI) / 1000.;
397 FFuelInstant = FTasaFuel * FDeltaT;
399 if(FAnguloComb > FCAD_injection_rate[FCAI - 1]) {
405 if(FMotor->getFTipoDatosIny() == 2) {
406 FTasaFuel = FMotor->TasaInyInterp(FAnguloComb);
408 FTasaFuel = FMasaFuel * FPercentInyeccion[ind] / FTInyeccion[ind];
410 FFuelInstant = FTasaFuel * FDeltaT;
413 if((FFuelAcum + FFuelInstant) > FMasaFuel * FPercentInyeccion[ind]) {
415 FFuelInstant = FMasaFuel * FPercentInyeccion[ind] - FFuelAcum;
419 FFuelAcum += FFuelInstant;
420 FFuelTotal += FFuelInstant;
426 FMasa = FMasa + FFuelInstant - FMasaBlowBy;
431 if(FAnguloActual > FDistribucion.CA && FAnguloAnterior <= FDistribucion.CA && !FCicloCerrado) {
433 FCicloCerrado =
true;
434 FPrimerInstanteCicloCerrado =
true;
435 FMasaPorAdmision = FAcumMasaPorAdm;
438 FMasaPorEscape = FAcumMasaPorEsc;
440 FMasaEGR = FAcumMasaEGR;
442 FMasaAtrapada = FMasa;
444 FPresionRCA = FPressure;
446 if(FMotor->getACT()) {
447 if(FMotor->getSpeciesNumber() == 9) {
448 FSpecies_IVC[0] = FFraccionMasicaEspecie[7];
449 }
else if(FMotor->getSpeciesNumber() == 10) {
450 FSpecies_IVC[0] = FFraccionMasicaEspecie[8];
452 FSpecies_IVC[1] = FFraccionMasicaEspecie[0];
453 FSpecies_IVC[2] = FFraccionMasicaEspecie[1];
454 FSpecies_IVC[3] = FFraccionMasicaEspecie[2];
455 FSpecies_IVC[4] = FFraccionMasicaEspecie[5];
456 FSpecies_IVC[5] = FFraccionMasicaEspecie[6];
457 FSpecies_IVC[6] = FFraccionMasicaEspecie[4];
458 FSpecies_IVC[7] = FFraccionMasicaEspecie[3];
462 if(FMotor->getSpeciesModel() == nmCalculoCompleto) {
463 if(FMotor->getSpeciesNumber() == 9) {
464 for(
int i = 0; i < FMotor->getSpeciesNumber() - FIntEGR; i++) {
465 FFraccionComienzoCicloCerrado[i] = FFraccionMasicaEspecie[i];
467 FComposicionCicloCerrado[1] = 0.;
470 FComposicionCicloCerrado[2] = FFraccionMasicaEspecie[0] / FMotor->GetComposicionAtmosfera(0);
471 FComposicionCicloCerrado[0] = 1 - FComposicionCicloCerrado[2];
473 }
else if(FMotor->getSpeciesNumber() == 10) {
474 for(
int i = 0; i < FMotor->getSpeciesNumber() - FIntEGR; i++) {
475 FFraccionComienzoCicloCerrado[i] = FFraccionMasicaEspecie[i];
477 FComposicionCicloCerrado[1] = FFraccionMasicaEspecie[7];
480 FComposicionCicloCerrado[2] = FFraccionMasicaEspecie[0] / FMotor->GetComposicionAtmosfera(0);
481 FComposicionCicloCerrado[0] = 1 - FComposicionCicloCerrado[1] - FComposicionCicloCerrado[2];
483 }
else if(FMotor->getSpeciesModel() == nmCalculoSimple) {
484 if(FMotor->getSpeciesNumber() == 3) {
485 FComposicionCicloCerrado[1] = 0.;
487 FComposicionCicloCerrado[2] = FFraccionMasicaEspecie[1];
489 FComposicionCicloCerrado[0] = FFraccionMasicaEspecie[0];
492 }
else if(FMotor->getSpeciesNumber() == 4) {
493 FComposicionCicloCerrado[1] = FFraccionMasicaEspecie[1];
495 FComposicionCicloCerrado[2] = FFraccionMasicaEspecie[2];
497 FComposicionCicloCerrado[0] = FFraccionMasicaEspecie[0];
501 for(
int j = 0; j < 3; j++) {
502 FMasaEspecieCicloCerrado[j] = FMasa * FComposicionCicloCerrado[j];
506 FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 1] = 1.;
508 if(FMotor->getCombustible() == nmMEP) {
509 CalculaFuelMEP(FMasaEspecieCicloCerrado[2]);
512 std::cout <<
"INFO: End of Gas-exchange process in cylinder " << FNumeroCilindro << std::endl;
513 std::cout <<
"____________________________________________________" << std::endl;
514 std::cout <<
"INFO: Intake mass: " << FMasaPorAdmision * 1e3 <<
" (g)" << std::endl;
515 std::cout <<
"INFO: Exhaust mass: " << FMasaPorEscape * 1e3 <<
" (g)" << std::endl;
516 std::cout <<
"INFO: Trapped mass: " << FMasaAtrapada * 1e3 <<
" (g)" << std::endl;
518 std::cout <<
"INFO: Pressure at I.C.: " << FPresionRCA <<
" (bar)" << std::endl;
526 FVolumen0 = FVolumen;
527 FVolumen = CalculaVolumen(FAnguloActual);
531 if(FAnguloActual >= 0. && FAnguloActual <= 180.) {
532 Fequis = Fratioctm + 1 / (pow(cosh(FAnguloActual / 100.), 40.) + Fratioctm / (1 - Fratioctm));
533 }
else if(FAnguloActual >= 540. && FAnguloActual <= 720.) {
534 Fequis = Fratioctm + 1 / (pow(cosh((720. - FAnguloActual) / 100.), 40.) + Fratioctm / (1 - Fratioctm));
538 FCu = __units::RPMToRad_s(FMotor->getRegimen()) * Fequis * Fctorbadmp * FKctm;
539 if(FMotor->getGeometria().DiametroBowl > 0.0) {
540 FCu *=
pow2(FMotor->getGeometria().Diametro) / (2. * FMotor->getGeometria().DiametroBowl);
544 if(FAnguloComb < FIniComb || FAnguloComb > FFinComb || FMasaFuel == 0.) {
553 double deltaP = __units::BarToPa(FPressure - FPresionRCA * pow(FVolumenCA / FVolumen, 1.36));
559 if(FAnguloActual >= 180. && FAnguloActual <= 360.) {
561 Fh = 1.2e-2 * pow(__units::BarToPa(FPressure), 0.8) * pow(__units::degCToK(FTemperature),
562 -0.53) * pow(FMotor->getGeometria().Diametro, -0.2) * pow(
563 (6.18 * FCm + 0.417 * FCu) * FMotor->getAjusteTranCalEsc() + Fc2 * deltaP * FMotor->getGeometria().CilindradaUnitaria /
564 FMasaAtrapada / FRMezcla, 0.8);
566 }
else if(FAnguloActual >= 360. && FAnguloActual <= 540.) {
568 Fh = 1.2e-2 * pow(__units::BarToPa(FPressure), 0.8) * pow(__units::degCToK(FTemperature),
569 -0.53) * pow(FMotor->getGeometria().Diametro, -0.2) * pow(
570 (6.18 * FCm + 0.417 * FCu) * FMotor->getAjusteTranCalAdm() + Fc2 * deltaP * FMotor->getGeometria().CilindradaUnitaria /
571 FMasaAtrapada / 287, 0.8);
573 Fh = 1.2e-2 * pow(__units::BarToPa(FPressure), 0.8) * pow(__units::degCToK(FTemperature),
574 -0.53) * pow(FMotor->getGeometria().Diametro, -0.2) * pow(
575 (FMotor->getWoschni().cw1 * FCm + FMotor->getWoschni().cw2 * FCu) + Fc2 * deltaP *
576 FMotor->getGeometria().CilindradaUnitaria / FMasaAtrapada / 287, 0.8);
579 if(FMotor->getCalculoPared() != nmTempFija)
580 CalculaTemperaturasPared();
583 FCalor.TransCilindro = Fh * (FTempPared[0].Cylinder - FTemperature) * 4 * (FVolumen / 2. + FVolumen0 / 2. -
584 FMotor->getGeometria().VCC) / FMotor->getGeometria().Diametro;
585 FCalor.TransPiston = Fh * (FTempPared[0].Piston - FTemperature) * FMotor->getGeometria().AreaPiston;
586 FCalor.TransCulata = Fh * (FTempPared[0].Culata - FTemperature) * FMotor->getGeometria().AreaCulata;
587 FCalor.TransTotal = (FCalor.TransCilindro + FCalor.TransPiston + FCalor.TransCulata) * FDeltaT;
591 if(FAnguloComb < FIniComb || FAnguloComb > FFinComb || FMasaFuel == 0.) {
592 FCalor.Liberado = 0.;
593 FCalor.LiberadoTotal = 0.;
597 FMasaEspecieCicloCerrado[0] = FMasaEspecieCicloCerrado[0] - FComposicionCicloCerrado[0] * FMasaBlowBy;
599 FMasaEspecieCicloCerrado[1] = FMasaEspecieCicloCerrado[1] + FFuelInstant;
601 FMasaEspecieCicloCerrado[2] = FMasa - FMasaEspecieCicloCerrado[0] - FMasaEspecieCicloCerrado[1];
604 FComposicionCicloCerrado[0] = FMasaEspecieCicloCerrado[0] / FMasa;
605 FComposicionCicloCerrado[1] = FMasaEspecieCicloCerrado[1] / FMasa;
606 FComposicionCicloCerrado[2] = FMasaEspecieCicloCerrado[2] / FMasa;
610 if(FPrimeraCombustion) {
611 if(FCalcComb == nmFQL) {
616 FCalor.FQL0 = CalculaCalorLiberado(FAnguloComb - FDeltaAngulo);
618 FCalor.FQL0 = FCalor.FQL;
620 FPrimeraCombustion =
false;
622 if(FCalcComb == nmFQL) {
623 FUfgasoil = CalculoUfgasoil(FTemperature);
624 Fecg = (FHcl - FUfgasoil) * FFuelInstant;
626 FCalor.FQL = CalculaCalorLiberado(FAnguloComb);
627 FecgInt = (Fecg + Fecg0) / 2 * FDeltaT;
628 FecgTotal += (Fecg + Fecg0) / 2 * FDeltaT;
630 }
else if(FCalcComb == nmACT) {
631 FCalor.FQL = Interp1(FAnguloComb, FCAD_exit, FHRF_exit, FCAI);
634 FCalor.Liberado = (FCalor.FQL - FCalor.FQL0) * FMfint * FMotor->getPoderCalorifico() *
635 FMotor->getRendimientoCombustion();
636 FCalor.LiberadoTotal += FCalor.Liberado;
637 if(FCalor.Liberado < 0)
638 FCalor.Liberado = 0.;
641 FMfquem = FCalor.Liberado / FMotor->getPoderCalorifico();
642 FMairequem = FMfquem / FDosadoEstequiometrico;
643 if(FMairequem > (FMasaEspecieCicloCerrado[2])) {
645 mfquefin = FMasaEspecieCicloCerrado[2] * FDosadoEstequiometrico;
647 printf(
"WARNING: Cylinder %d does not have enough air at CrankAngle %lf\n", FNumeroCilindro, FAnguloActual);
648 FCalor.Liberado = (FCalor.FQL - FCalor.FQL0) * mfquefin * FMotor->getPoderCalorifico() *
649 FMotor->getRendimientoCombustion();
653 FMasaEspecieCicloCerrado[0] = FMasaEspecieCicloCerrado[0] + FMairequem + mfquefin - FComposicionCicloCerrado[0] *
656 FMasaEspecieCicloCerrado[1] = FMasaEspecieCicloCerrado[1] - mfquefin - FComposicionCicloCerrado[1] * FMasaBlowBy +
659 FMasaEspecieCicloCerrado[2] = 0.;
662 FCalor.Liberado = 0.;
668 FMasaEspecieCicloCerrado[0] = FMasaEspecieCicloCerrado[0] + FMairequem + FMfquem - FComposicionCicloCerrado[0] *
671 FMasaEspecieCicloCerrado[1] = FMasaEspecieCicloCerrado[1] - FMfquem - FComposicionCicloCerrado[1] * FMasaBlowBy +
677 FMasaEspecieCicloCerrado[2] = FMasaEspecieCicloCerrado[2] - FMairequem - FComposicionCicloCerrado[2] * FMasaBlowBy;
681 FComposicionCicloCerrado[0] = FMasaEspecieCicloCerrado[0] / FMasa;
682 FComposicionCicloCerrado[1] = FMasaEspecieCicloCerrado[1] / FMasa;
683 FComposicionCicloCerrado[2] = FMasaEspecieCicloCerrado[2] / FMasa;
685 FCalor.FQL0 = FCalor.FQL;
691 if(FMotor->getSpeciesModel() == nmCalculoCompleto) {
692 if(FMotor->getACT()) {
693 double Yfuel = (FFuelTotal - FMfint * FCalor.FQL) / FMasa;
697 FFraccionMasicaEspecie[0] = (FSpecies_IVC[1] * (1 - FCalor.FQL) + dataOUT.species_EVO[1] * FCalor.FQL) * (1 - Yfuel);
698 FFraccionMasicaEspecie[1] = (FSpecies_IVC[2] * (1 - FCalor.FQL) + dataOUT.species_EVO[2] * FCalor.FQL) * (1 - Yfuel);
699 FFraccionMasicaEspecie[2] = (FSpecies_IVC[3] * (1 - FCalor.FQL) + dataOUT.species_EVO[3] * FCalor.FQL) * (1 - Yfuel);
700 FFraccionMasicaEspecie[3] = (FSpecies_IVC[7] * (1 - FCalor.FQL) + dataOUT.species_EVO[7] * FCalor.FQL) * (1 - Yfuel);
701 FFraccionMasicaEspecie[4] = (FSpecies_IVC[6] * (1 - FCalor.FQL) + dataOUT.species_EVO[6] * FCalor.FQL) * (1 - Yfuel);
702 FFraccionMasicaEspecie[5] = (FSpecies_IVC[4] * (1 - FCalor.FQL) + dataOUT.species_EVO[4] * FCalor.FQL) * (1 - Yfuel);
703 FFraccionMasicaEspecie[6] = (FSpecies_IVC[5] * (1 - FCalor.FQL) + dataOUT.species_EVO[5] * FCalor.FQL) * (1 - Yfuel);
705 if(FMotor->getSpeciesNumber() == 9) {
706 FFraccionMasicaEspecie[3] += Yfuel;
707 FFraccionMasicaEspecie[7] = (FSpecies_IVC[0] * (1 - FCalor.FQL) + dataOUT.species_EVO[0] * FCalor.FQL) * (1 - Yfuel);
709 }
else if(FMotor->getSpeciesNumber() == 10) {
710 FFraccionMasicaEspecie[7] = Yfuel;
711 FFraccionMasicaEspecie[8] = (FSpecies_IVC[0] * (1 - FCalor.FQL) + dataOUT.species_EVO[0] * FCalor.FQL) * (1 - Yfuel);
713 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
714 FMasaEspecie[j] = FFraccionMasicaEspecie[j] * FMasa;
717 if(FMotor->getSpeciesNumber() == 9) {
719 FMolesCombQuemado = FMfquem / (FXComb * 12.01 + FYComb * 1.01 + FZComb * 16);
722 FMolesCombQuemado = mfquefin / (FXComb * 12.01 + FYComb * 1.01 + FZComb * 16);
725 FMasaO2Reactivos = FMolesCombQuemado * (FYComb / 4 + FXComb - FZComb / 2) * __PM::O2;
726 FMasaN2Reactivos = FMolesCombQuemado * (FYComb / 4 + FXComb - FZComb / 2) * FRelacionMolarN2_O2 * __PM::N2;
728 FMasaCO2Productos = FMolesCombQuemado * FXComb * __PM::CO2;
729 FMasaH2OProductos = FMolesCombQuemado * (FYComb / 2
731 FMasaN2Productos = FMolesCombQuemado * (FYComb / 4 + FXComb - FZComb / 2) * FRelacionMolarN2_O2 * __PM::N2;
733 FFraccionMasicaEspecie[0] = (FMasaEspecie[0] - FMasaO2Reactivos - FFraccionMasicaEspecie[0] * FMasaBlowBy) / FMasa;
735 FFraccionMasicaEspecie[1] = (FMasaEspecie[1] + FMasaCO2Productos - FFraccionMasicaEspecie[1] * FMasaBlowBy) / FMasa;
737 FFraccionMasicaEspecie[2] = (FMasaEspecie[2] + FMasaH2OProductos - FFraccionMasicaEspecie[2] *
738 FMasaBlowBy ) / FMasa;
740 FFraccionMasicaEspecie[7] = (FMasaEspecie[7] - FFraccionMasicaEspecie[7] * FMasaBlowBy) / FMasa;
742 FFraccionMasicaEspecie[3] = FComposicionCicloCerrado[1];
744 FFraccionMasicaEspecie[4] = 0;
745 FFraccionMasicaEspecie[5] = 0;
746 FFraccionMasicaEspecie[6] = 0;
747 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
748 FMasaEspecie[j] = FFraccionMasicaEspecie[j] * FMasa;
751 }
else if(FMotor->getSpeciesNumber() == 10) {
753 FMolesCombQuemado = FMfquem / (FXComb * 12.01 + FYComb * 1.01 + FZComb * 16);
756 FMolesCombQuemado = mfquefin / (FXComb * 12.01 + FYComb * 1.01 + FZComb * 16);
759 FMasaO2Reactivos = FMolesCombQuemado * (FYComb / 4 + FXComb - FZComb / 2) * __PM::O2;
760 FMasaN2Reactivos = FMolesCombQuemado * (FYComb / 4 + FXComb - FZComb / 2) * FRelacionMolarN2_O2 * __PM::N2;
762 FMasaCO2Productos = FMolesCombQuemado * FXComb * __PM::CO2;
763 FMasaH2OProductos = FMolesCombQuemado * (FYComb / 2
765 FMasaN2Productos = FMolesCombQuemado * (FYComb / 4 + FXComb - FZComb / 2) * FRelacionMolarN2_O2 * __PM::N2;
767 FFraccionMasicaEspecie[0] = (FMasaEspecie[0] - FMasaO2Reactivos - FFraccionMasicaEspecie[0] * FMasaBlowBy) / FMasa;
769 FFraccionMasicaEspecie[1] = (FMasaEspecie[1] + FMasaCO2Productos - FFraccionMasicaEspecie[1] * FMasaBlowBy) / FMasa;
771 FFraccionMasicaEspecie[2] = (FMasaEspecie[2] + FMasaH2OProductos - FFraccionMasicaEspecie[2] *
772 FMasaBlowBy ) / FMasa;
774 FFraccionMasicaEspecie[8] = (FMasaEspecie[8] - FFraccionMasicaEspecie[8] * FMasaBlowBy) / FMasa;
776 FFraccionMasicaEspecie[3] = 0;
777 FFraccionMasicaEspecie[4] = 0;
778 FFraccionMasicaEspecie[5] = 0;
779 FFraccionMasicaEspecie[6] = 0;
780 FFraccionMasicaEspecie[7] = FComposicionCicloCerrado[1];
781 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
782 FMasaEspecie[j] = FFraccionMasicaEspecie[j] * FMasa;
787 }
else if(FMotor->getSpeciesModel() == nmCalculoSimple) {
788 if(FMotor->getSpeciesNumber() == 3) {
789 FFraccionMasicaEspecie[0] = FComposicionCicloCerrado[0] + FComposicionCicloCerrado[1];
790 FFraccionMasicaEspecie[1] = FComposicionCicloCerrado[2];
792 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
793 FMasaEspecie[j] = FFraccionMasicaEspecie[j] * FMasa;
795 }
else if(FMotor->getSpeciesNumber() == 4) {
796 FFraccionMasicaEspecie[0] = FComposicionCicloCerrado[0];
797 FFraccionMasicaEspecie[1] = FComposicionCicloCerrado[1];
798 FFraccionMasicaEspecie[2] = FComposicionCicloCerrado[2];
800 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
801 FMasaEspecie[j] = FFraccionMasicaEspecie[j] * FMasa;
805 }
else if(!FCicloCerrado) {
806 for(
int j = 0; j < FMotor->getSpeciesNumber() - 2; j++) {
807 FFraccionMasicaEspecie[j] = (FMasaEspecie[j] - FFraccionMasicaEspecie[j] * FMasaBlowBy) / FMasa;
808 FraccionMasicaAcum += FFraccionMasicaEspecie[j];
809 FMasaEspecie[j] = FFraccionMasicaEspecie[j] * FMasa;
811 FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 2] = 1. - FraccionMasicaAcum;
812 FMasaEspecie[FMotor->getSpeciesNumber() - 2] = FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 2] * FMasa;
814 FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 1] = (FMasaEspecie[FMotor->getSpeciesNumber() - 1] -
815 FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 1] * FMasaBlowBy) / FMasa;
816 FMasaEspecie[FMotor->getSpeciesNumber() - 1] = FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 1] * FMasa;
821 if(FAnguloActual > FDistribucion.CA && FAnguloAnterior <= FDistribucion.CA) {
822 if(FMasaFuel == 0.) {
825 FAFR = FMasaEspecieCicloCerrado[2] / FMasaFuel;
858 bool PrimerPaso =
true;
859 double ASon0 = FAsonido;
860 double ASon1 = FAsonido;
861 double Temp0 = FTemperature;
862 double Temp1 = FTemperature;
863 double MasTemp0 = 1 / __units::degCToK(FTemperature) / FMasa0;
864 double MasTemp1 = 1 / __units::degCToK(FTemperature) / FMasa0;
865 double MasTempMed = 0.;
866 bool CotaError =
false;
877 for(
int i = 0; i < FNumeroUnionesAdm; i++) {
878 if(
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getMassflow() != 0
879 &&
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getSentidoFlujo() == nmEntrante) {
881 H1 += EntalpiaEntrada(
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getSpeedsound(),
882 dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getVelocity(),
883 -
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getMassflow() * FDeltaT, ASon1 / __cons::ARef, FMasa0);
885 H1 += EntalpiaEntrada(
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getSpeedsound(),
886 dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getVelocity(),
887 -
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getMassflow() * FDeltaT, ASon1 / __cons::ARef, FMasa);
892 for(
int i = 0; i < FNumeroUnionesEsc; i++) {
893 if(
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getMassflow() != 0
894 &&
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getSentidoFlujo() == nmEntrante) {
896 H1 += EntalpiaEntrada(
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getSpeedsound(),
897 dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getVelocity(),
898 -
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getMassflow() * FDeltaT, ASon1 / __cons::ARef, FMasa0);
900 H1 += EntalpiaEntrada(
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getSpeedsound(),
901 dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getVelocity(),
902 -
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getMassflow() * FDeltaT, ASon1 / __cons::ARef, FMasa);
910 MasTempMed = (MasTemp0 + MasTemp1) / 2;
911 Energia = FVolumen0 * FMasa / FVolumen / FMasa0 * exp((H1 + H0) / 2. + (FCalor.TransTotal + FCalor.Liberado + FecgInt)
912 * (MasTempMed / FRMezcla));
913 Temp1 = __units::KTodegC(__units::degCToK(FTemperature) * pow(Energia, FGamma1));
914 Error = (Diff = Temp1 - Temp0, fabs(Diff)) / Temp1;
916 MasTemp1 = 1. / (__units::degCToK(Temp1) * FMasa);
929 FTemperatura0 = FTemperature;
930 FTemperature = Temp1;
932 FAsonido0 = FAsonido;
933 FAsonido = sqrt(FGamma * FRMezcla * __units::degCToK(FTemperature));
935 FPresion0 = FPressure;
936 FPressure = __units::PaToBar(__units::degCToK(FTemperature) * FMasa * FRMezcla / FVolumen);
937 if(FAnguloActual > FDistribucion.AE && FAnguloAnterior <= FDistribucion.AE) {
938 std::cout <<
"INFO: Begin gas-exchange process in cylinder " << FNumeroCilindro << std::endl;
939 std::cout <<
"____________________________________________________" << std::endl << std::endl;
940 std::cout <<
"INFO: Calculated pressure at E.O.: " << FPressure <<
" (bar)" << std::endl;
941 std::cout <<
"INFO: Calculated temperature at E.O.: " << FTemperature <<
" (\260C)" << std::endl;
942 if(FMotor->getCalculoDePAAE() == nmPAAEImpuesta) {
943 FPressure = FMotor->getPresionAAE();
944 FTemperature = __units::KTodegC(__units::BarToPa(FPressure) * FVolumen / FMasa / FRMezcla);
945 FAsonido = sqrt(FRMezcla * FGamma * __units::degCToK(FTemperature));
946 std::cout <<
"INFO: Imposed pressure at E.O.: " << FPressure <<
" (bar)" << std::endl;
947 std::cout <<
"INFO: Imposed temperature at E.O.: " << FTemperature <<
" (\260C)" << std::endl;
949 if(FMotor->getImponerComposicionAE()) {
950 for(
int i = 0; i < FMotor->getSpeciesNumber() - 1; i++) {
951 FFraccionMasicaEspecie[i] = FMotor->GetComposicionInicial(i);
954 std::cout <<
"____________________________________________________" << std::endl << std::endl;
961 double a = __units::DegToRad(FAnguloActual);
962 double L = FMotor->getGeometria().Biela;
963 double R = FMotor->getGeometria().Carrera / 2.;
964 double e = FMotor->getGeometria().Excentricidad / 1000;
965 double area = __geom::Circle_area(FMotor->getGeometria().Diametro);
967 double b = asin((e - R * sin(a)) / L);
970 FParInstantaneo = __units::BarToPa(FPressure - FMotor->getPresionAmb()) * area * R * sin(a - b) / cos(b);
972 FPreMed = (FPressure + FPresion0) / 2.;
974 FTrabajoNetoACUM += __units::BarToPa(FPreMed) * (FVolumen - FVolumen0);
975 if(FAnguloActual > 180 && FAnguloActual <= 540) {
976 FTrabajoBombeoACUM += __units::BarToPa(FPreMed) * (FVolumen - FVolumen0);
978 if(FAnguloActual < FAnguloAnterior) {
979 FTrabajoNeto = FTrabajoNetoACUM;
980 FTrabajoNetoACUM = 0.;
981 FPMN = __units::PaToBar(FTrabajoNeto / FMotor->getGeometria().CilindradaUnitaria);
982 FTrabajoBombeo = FTrabajoBombeoACUM;
983 FTrabajoBombeoACUM = 0.;
984 FPMB = __units::PaToBar(FTrabajoBombeo / FMotor->getGeometria().CilindradaUnitaria);
988 FDensidadReferencia = FMotor->getTuboRendVol()->
GetGamma(FMotor->getNodoMedio()) * __units::BarToPa(
989 FMotor->getTuboRendVol()->
GetPresion(FMotor->getNodoMedio())) /
pow2(
990 FMotor->getTuboRendVol()->
GetAsonido(FMotor->getNodoMedio()) * __cons::ARef);
996 if(FAnguloActual > FDistribucion.AA && FAnguloActual < FDistribucion.CE) {
997 if(MasaAdmInstante > 0. && MasaEscInstante < 0.) {
999 MasaCortocircuitoAdm = MasaAdmInstante * FAlphaEscape / __cons::Pi;
1000 MasaCortocircuitoEsc = MasaEscInstante * (__cons::Pi_2 - FAlphaEscape) / __cons::Pi;
1001 if(fabs(MasaCortocircuitoAdm) < fabs(MasaCortocircuitoEsc)) {
1002 FMasaCortocircuito = fabs(MasaCortocircuitoAdm);
1004 FMasaCortocircuito = fabs(MasaCortocircuitoEsc);
1006 FGastoCortocircuito = FMasaCortocircuito / FDeltaT;
1007 for(
int j = 0; j < FMotor->getSpeciesNumber() - 2; j++) {
1008 for(
int i = 0; i < FNumeroUnionesAdm; i++) {
1009 if(
dynamic_cast<TCCCilindro*
>(FCCValvulaAdm[i])->getSentidoFlujo() == nmEntrante) {
1010 FraccionCC += FCCValvulaAdm[i]->GetFraccionMasicaEspecie(j);
1011 NumeroUnionesEntrante++;
1014 FraccionCC = FraccionCC / NumeroUnionesEntrante;
1016 FComposicionSaliente[j] = FFraccionMasicaEspecie[j] * (MasaEscInstante + FMasaCortocircuito) / MasaEscInstante -
1017 FraccionCC * FMasaCortocircuito / MasaEscInstante;
1019 NumeroUnionesEntrante = 0;
1022 FComposicionSaliente[FMotor->getSpeciesNumber() - 1] = FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 1];
1023 }
else if(MasaAdmInstante < 0. && MasaEscInstante > 0.) {
1025 MasaCortocircuitoAdm = MasaAdmInstante * (__cons::Pi_2 - FAlphaAdmision) / __cons::Pi;
1026 MasaCortocircuitoEsc = MasaEscInstante * FAlphaAdmision / __cons::Pi;
1027 if(fabs(MasaCortocircuitoAdm) < fabs(MasaCortocircuitoEsc)) {
1028 FMasaCortocircuito = -fabs(MasaCortocircuitoAdm);
1030 FMasaCortocircuito = -fabs(MasaCortocircuitoEsc);
1032 FGastoCortocircuito = FMasaCortocircuito / FDeltaT;
1033 for(
int j = 0; j < FMotor->getSpeciesNumber() - 2; j++) {
1034 for(
int i = 0; i < FNumeroUnionesEsc; i++) {
1035 if(
dynamic_cast<TCCCilindro*
>(FCCValvulaEsc[i])->getSentidoFlujo() == nmEntrante) {
1036 FraccionCC += FCCValvulaEsc[i]->GetFraccionMasicaEspecie(j);
1037 NumeroUnionesEntrante++;
1040 FraccionCC = FraccionCC / NumeroUnionesEntrante;
1043 FComposicionSaliente[j] = FFraccionMasicaEspecie[j] * (MasaAdmInstante - FMasaCortocircuito) / MasaAdmInstante +
1044 FraccionCC * FMasaCortocircuito / MasaAdmInstante;
1046 NumeroUnionesEntrante = 0;
1049 FComposicionSaliente[FMotor->getSpeciesNumber() - 1] = FFraccionMasicaEspecie[FMotor->getSpeciesNumber() - 1];
1052 FMasaCortocircuito = 0.;
1053 FGastoCortocircuito = 0.;
1054 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
1055 FComposicionSaliente[j] = FFraccionMasicaEspecie[j];
1060 FMasaCortocircuito = 0.;
1061 FGastoCortocircuito = 0.;
1062 for(
int j = 0; j < FMotor->getSpeciesNumber() - FIntEGR; j++) {
1063 FComposicionSaliente[j] = FFraccionMasicaEspecie[j];
1067 }
catch(exception & N) {
1068 std::cout <<
"ERROR: TCilindro4T::ActualizaPropiedades en cilindro: " << FNumeroCilindro << std::endl;
1069 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1077 double TCilindro4T::EntalpiaEntrada(
double ASonEnt,
double VelEnt,
double MasEnt,
double ASonCil,
double MasCil) {
1079 double xx = 0., yy = 0., ret_val = 0.;
1081 if(fabs(MasEnt) != 0.) {
1082 xx = (ASonEnt * ASonEnt / ASonCil / ASonCil - 1.) / FGamma1;
1083 yy = VelEnt * VelEnt / ASonCil / ASonCil / 2.;
1084 ret_val = FGamma * MasEnt * (xx + yy) / MasCil;
1089 }
catch(exception & N) {
1090 std::cout <<
"ERROR: TCilindro4T::EntalpiaEntrada en cilindro: " << FNumeroCilindro << std::endl;
1091 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1099 void TCilindro4T::VariableInicialesCicloACT() {
1101 FPresionMedAdm /= FTimeAcumAct;
1102 FPresionMedEsc /= FTimeAcumAct;
1105 Ftest_variables[0] = FRegInt;
1106 if(FMasaPorAdmision != 0)
1107 Ftest_variables[1] = (FMasaPorAdmision - FMasaEGR) * 1000;
1109 Ftest_variables[2] = FMasaAtrapada * 1000;
1110 Ftest_variables[3] = __units::degCToK(FTemperature);
1111 Ftest_variables[4] = FMasaFuel * 1e6;
1112 Ftest_variables[5] = FMotor->getInjectionSys().InjectPressure;
1114 Ftest_variables[6] = __units::BarToPa(FPresionMedAdm);
1115 Ftest_variables[7] = __units::BarToPa(FPresionMedEsc);
1118 Ftest_variables[10] = 318.15;
1119 Ftest_variables[11] = __units::degCToK(FTempPared[0].Culata);
1121 Ftest_variables[12] = __units::degCToK(FTempPared[0].Cylinder);
1123 Ftest_variables[13] = __units::degCToK(FTempPared[0].Piston);
1124 if(FMotor->getSpeciesModel() == nmCalculoCompleto) {
1125 Ftest_variables[14] = FFraccionMasicaEspecie[5] * 1e6 * 1.587;
1127 Ftest_variables[15] = FFraccionMasicaEspecie[4] * 1e6;
1129 Ftest_variables[16] = FFraccionMasicaEspecie[6] * 1e6;
1131 Ftest_variables[17] = FFraccionMasicaEspecie[3] * 1e6;
1134 }
catch(exception & N) {
1135 std::cout <<
"ERROR: TCilindro4T::VariableInicialesCicloACT en cilindro: " << FNumeroCilindro << std::endl;
1136 std::cout <<
"Tipo de error: " << N.what() << std::endl;
1141 #pragma package(smart_init)