31 #include "TCCEntradaCompresor.h"
34 #include "TCompresor.h"
40 TCCEntradaCompresor::TCCEntradaCompresor(nmTypeBC TipoCC,
int numCC, nmTipoCalculoEspecies SpeciesModel,
41 int numeroespecies, nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
42 TCondicionContorno(TipoCC, numCC, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
55 TCCEntradaCompresor::~TCCEntradaCompresor() {
57 delete[] FTuboExtremo;
64 void TCCEntradaCompresor::ReadBoundaryData(
const char *FileWAM, fpos_t &filepos,
int NumberOfPipes,
TTubo **Pipe,
65 int nDPF,
TDPF **DPF) {
70 FTuboExtremo[0].Pipe = NULL;
72 while(FNumeroTubosCC < 1 && i < NumberOfPipes) {
73 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
74 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
75 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
77 FCC = &(FTuboExtremo[FNumeroTubosCC].Beta);
78 FCD = &(FTuboExtremo[FNumeroTubosCC].Landa);
79 FSeccionTubo = __geom::Circle_area(Pipe[i]->GetDiametro(FNodoFin));
83 if(Pipe[i]->getNodoDer() == FNumeroCC) {
84 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
85 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
86 FNodoFin = Pipe[i]->getNin() - 1;
87 FCC = &(FTuboExtremo[FNumeroTubosCC].Landa);
88 FCD = &(FTuboExtremo[FNumeroTubosCC].Beta);
89 FSeccionTubo = __geom::Circle_area(Pipe[i]->GetDiametro(FNodoFin));
96 FILE *fich = fopen(FileWAM,
"r");
97 fsetpos(fich, &filepos);
99 fscanf(fich,
"%d ", &FNumeroCompresor);
101 fgetpos(fich, &filepos);
105 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
106 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
110 }
catch(exception &N) {
111 std::cout <<
"ERROR: TCCEntradaCompresor::AsignaTubos en la condicion de contorno: " << FNumeroCC << std::endl;
112 std::cout <<
"Tipo de error: " << N.what() << std::endl;
119 void TCCEntradaCompresor::AsignaCompresor(
TCompresor **Compressor) {
122 FCompresor = Compressor[FNumeroCompresor - 1];
124 }
catch(exception &N) {
125 std::cout <<
"ERROR: TCCEntradaCompresor::AsignaCompresor en la condicion de contorno: " << FNumeroCC << std::endl;
126 std::cout <<
"Tipo de error: " << N.what() << std::endl;
134 void TCCEntradaCompresor::CalculaCondicionContorno(
double Time) {
136 double cte1 = 0., cte2 = 0., ctea = 0., numerador = 0., denominador = 0., presionact = 0.;
140 FGamma = FTuboExtremo[0].Pipe->
GetGamma(FNodoFin);
141 FGamma1 = __Gamma::G1(FGamma);
142 FGamma3 = __Gamma::G3(FGamma);
143 FGamma5 = __Gamma::G5(FGamma);
145 FGasto = FCompresor->getMassflow();
146 cte1 = FTuboExtremo[0].Entropia;
147 cte2 = FGamma1 *
pow2(FTuboExtremo[0].Entropia) * FGasto * __cons::ARef / (2 * FGamma * FSeccionTubo * 1e5);
148 ctea = FGamma1 / FGamma;
150 while(error > 1e-5 && contador < 800) {
152 numerador = cte1 * pow(FPressure, FGamma5) + cte2 * pow(FPressure, ctea - 1) - *FCC;
153 denominador = cte1 * FGamma5 * pow(FPressure, FGamma5 - 1) + cte2 * (ctea - 1) * pow(FPressure, ctea - 2);
154 presionact = FPressure - numerador / denominador;
155 error = fabs(FPressure - presionact);
156 FPressure = presionact;
159 printf(
"ERROR: TCCEntradaCompresor::CalculaCondicionContorno, no converge en entrada compresor en la condicion de contorno: %d\n",
161 throw Exception(
"ERROR: TCCEntradaCompresor::CalculaCondicionContorno no converge en entrada compresor");
165 FSonido = FTuboExtremo[0].Entropia * pow(FPressure, FGamma5);
166 FVelocity = (*FCC - FSonido) / FGamma3;
167 *FCD = FSonido - FGamma3 * FVelocity;
173 }
catch(exception &N) {
174 std::cout <<
"ERROR: TCCEntradaCompresor::CalculaCondicionContorno en la condicion de contorno: " << FNumeroCC <<
176 std::cout <<
"Tipo de error: " << N.what() << std::endl;
184 #pragma package(smart_init)