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)
double GetGamma(int i) const
Gets the specific heat capacities ratio at a given cell.
double GetFraccionMasicaCC(int j, int i)
double GetFraccionMasicaInicial(int i) const
Gets the initial mass fraction of species i.
double GetRMezcla(int i) const
Gets the gas constant of the mixture at a given cell.
a Finite differences pipe.