31 #include "TCCExtremoInyeccion.h"
39 TCCExtremoInyeccion::TCCExtremoInyeccion(nmTypeBC TipoCC,
int numCC, nmTipoCalculoEspecies SpeciesModel,
40 int numeroespecies, nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
41 TCondicionContorno(TipoCC, numCC, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
54 TCCExtremoInyeccion::~TCCExtremoInyeccion() {
56 delete[] FTuboExtremo;
57 if(FComposicion != NULL)
58 delete[] FComposicion;
65 void TCCExtremoInyeccion::ReadBoundaryData(
const char *FileWAM, fpos_t &filepos,
int NumberOfPipes,
TTubo **Pipe,
66 int nDPF,
TDPF **DPF) {
69 double fracciontotal = 0.;
72 FTuboExtremo[0].Pipe = NULL;
74 while(FNumeroTubosCC < 1 && i < NumberOfPipes) {
75 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
76 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
77 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
80 FCC = &(FTuboExtremo[FNumeroTubosCC].Beta);
81 FCD = &(FTuboExtremo[FNumeroTubosCC].Landa);
82 FSeccion = __geom::Circle_area(Pipe[i]->GetDiametro(FNodoFin));
85 if(Pipe[i]->getNodoDer() == FNumeroCC) {
86 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
87 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
88 FNodoFin = Pipe[i]->getNin() - 1;
90 FCC = &(FTuboExtremo[FNumeroTubosCC].Landa);
91 FCD = &(FTuboExtremo[FNumeroTubosCC].Beta);
92 FSeccion = __geom::Circle_area(Pipe[i]->GetDiametro(FNodoFin));
98 FILE *fich = fopen(FileWAM,
"r");
99 fsetpos(fich, &filepos);
101 fscanf(fich,
"%lf %lf %lf ", &FGastoIny, &FTemperaturaIny, &FInicioIny);
102 fscanf(fich,
"%lf ", &FDuracionIny);
105 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
106 FComposicion =
new double[FNumeroEspecies - FIntEGR];
107 for(
int i = 0; i < FNumeroEspecies - 1; i++) {
108 fscanf(fich,
"%lf ", &FComposicion[i]);
110 fracciontotal += FComposicion[i];
114 if(FCalculoEspecies == nmCalculoCompleto) {
115 if(FComposicion[0] > 0.2)
116 FComposicion[FNumeroEspecies - 1] = 0.;
118 FComposicion[FNumeroEspecies - 1] = 1.;
120 if(FComposicion[0] > 0.5)
121 FComposicion[FNumeroEspecies - 1] = 1.;
123 FComposicion[FNumeroEspecies - 1] = 0.;
126 if(fracciontotal != 1.) {
128 "ERROR: La fraccion masica total no puede ser distinta de 1. Repasa la lectura en la condicion de contorno " <<
129 FNumeroCC << std::endl;
133 fgetpos(fich, &filepos);
138 catch(exception &N) {
139 std::cout <<
"ERROR: TCCExtremoInyeccion::LeeExtremoInyeccion en la condicion de contorno: " << FNumeroCC << std::endl;
140 std::cout <<
"Tipo de error: " << N.what() << std::endl;
148 void TCCExtremoInyeccion::ObtencionValoresInstantaneos(
double Theta) {
154 ang0 = FTheta - FInicioIny;
155 FAngap = ang0 - floor(ang0 / 360.) * 360.;
157 }
catch(exception &N) {
158 std::cout <<
"ERROR: TCCExtremoInyeccion::ObtencionValoresInstantaneos en la condicion de contorno: " << FNumeroCC <<
160 std::cout <<
"Tipo de error: " << N.what() << std::endl;
168 void TCCExtremoInyeccion::CalculaCondicionContorno(
double Time) {
170 double FraccionMasicaAcum = 0.;
172 FGamma = FTuboExtremo[0].Pipe->
GetGamma(FNodoFin);
173 FRMezcla = FTuboExtremo[0].Pipe->
GetRMezcla(FNodoFin);
175 FGamma3 = __Gamma::G3(FGamma);
176 FGamma5 = __Gamma::G5(FGamma);
178 if(FAngap < FDuracionIny && FTheta > 720.) {
179 FSonido = sqrt(FGamma * FRMezcla * __units::degCToK(FTemperaturaIny)) / __cons::ARef;
180 FVelocity = (FSonido - *FCC) / FGamma3;
181 FPressure = __units::PaToBar(FGastoIny * FRMezcla * __units::degCToK(FTemperaturaIny) /
182 (FVelocity * __cons::ARef * FSeccion));
183 if(FPressure < 0.0) {
184 printf(
"ERROR: TCCExtremoInyeccion::CalculaCondicionContorno Velocity negativa en inyector %lf,Theta= %lf\n en la condicion de contorno: %d",
185 FVelocity * __cons::ARef, FTheta,
187 printf(
" TCCExtremoInyeccion::CalculaCondicionContorno Presion negativa en inyector %lf\n", FPressure);
190 *FCD = FSonido + FGamma3 * FVelocity;
191 FTuboExtremo[0].Entropia = FSonido / pow(FPressure, FGamma5);
194 for(
int j = 0; j < FNumeroEspecies - FIntEGR; j++) {
195 FFraccionMasicaEspecie[j] = FComposicion[j];
203 for(
int j = 0; j < FNumeroEspecies - 2; j++) {
205 FraccionMasicaAcum += FFraccionMasicaEspecie[j];
207 FFraccionMasicaEspecie[FNumeroEspecies - 2] = 1. - FraccionMasicaAcum;
209 FFraccionMasicaEspecie[FNumeroEspecies - 1] = FTuboExtremo[0].Pipe->
GetFraccionMasicaCC(FIndiceCC, FNumeroEspecies - 1);
212 }
catch(exception &N) {
213 std::cout <<
"ERROR: TCCExtremoInyeccion::CalculaCondicionContorno en la condicion de contorno: " << FNumeroCC <<
215 std::cout <<
"Tipo de error: " << N.what() << std::endl;
261 #pragma package(smart_init)