36 #include "TCCCompresor.h"
37 #include "TCompTubDep.h"
38 #include "TCompTubos.h"
39 #include "TCompresorDep.h"
40 #include "TCCEntradaCompresor.h"
43 #include "TDeposito.h"
44 #include "TCompresor.h"
48 TCCCompresor::TCCCompresor(nmTypeBC TipoCC,
int numCC, nmTipoCalculoEspecies SpeciesModel,
int numeroespecies,
49 nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
50 TCondicionContorno(TipoCC, numCC, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
60 TCCCompresor::~TCCCompresor() {
62 if(FNumeroTubo != NULL)
64 if(FTuboExtremo != NULL)
65 delete[] FTuboExtremo;
72 void TCCCompresor::LeeNumeroCompresor(
const char *FileWAM, fpos_t &filepos) {
75 FILE *fich = fopen(FileWAM,
"r");
76 fsetpos(fich, &filepos);
78 fscanf(fich,
"%d ", &FNumeroCompresor);
80 fgetpos(fich, &filepos);
83 }
catch(exception & N) {
84 std::cout <<
"ERROR: TCCCompresor::LeeCompresor en la condicion de contorno: " << FNumeroCC << std::endl;
85 std::cout <<
"Tipo de error: " << N.what() << std::endl;
93 void TCCCompresor::AsignacionDatos(
TCompresor **Compressor,
TDeposito **Plenum,
const char *FileWAM, fpos_t &filepos,
94 int NumberOfPipes,
TTubo **Pipe,
TCondicionContorno **BC,
int numCC,
double AmbientTemperature,
double AmbientPressure,
95 double *AtmosphericComposition) {
101 FTamb = AmbientTemperature;
102 FPamb = AmbientPressure;
103 FCompresor = Compressor[FNumeroCompresor - 1];
104 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
106 if(FCompresor->getModeloCompresor() == nmCompOriginal) {
110 FTuboExtremo[0].Pipe = NULL;
112 while(FNumeroTubosCC < 1 && i < NumberOfPipes) {
113 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
114 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
115 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
118 if(Pipe[i]->getNodoDer() == FNumeroCC) {
119 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
120 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
125 FILE *fich = fopen(FileWAM,
"r");
126 fsetpos(fich, &filepos);
128 fscanf(fich,
"%d ", &tipoentrada);
130 fgetpos(fich, &filepos);
133 switch(tipoentrada) {
135 FEntradaCompresor = nmAtmosphere;
138 FEntradaCompresor = nmPipe;
141 FEntradaCompresor = nmPlenum;
145 if(FEntradaCompresor == nmPlenum) {
147 FILE *fich = fopen(FileWAM,
"r");
148 fsetpos(fich, &filepos);
150 fscanf(fich,
"%d ", &FNumeroDeposito);
152 fgetpos(fich, &filepos);
155 FDeposito = Plenum[FNumeroDeposito - 1];
156 dynamic_cast<TCompTubDep*
>(FCompresor)->BusquedaEntradaSalida(FEntradaCompresor, FTamb, FNumeroCC, BC,
157 AtmosphericComposition);
159 }
else if(FEntradaCompresor == nmPipe) {
160 for(
int i = 0; i < numCC; i++) {
161 if(BC[i]->getTipoCC() == nmEntradaCompre) {
164 FTuboRotor = BC[i]->GetTuboExtremo(0).Pipe;
165 FExtremoTuboRotor = BC[i]->GetTuboExtremo(0).TipoExtremo;
170 dynamic_cast<TCompTubDep*
>(FCompresor)->BusquedaEntradaSalida(FEntradaCompresor, AmbientTemperature, FNumeroCC, BC,
171 AtmosphericComposition);
173 printf(
"ERROR: El compresor %d no tiene una BC tipo EntradaCompresor a su entrada.\n ", FNumeroCompresor);
175 }
else if(FEntradaCompresor == nmAtmosphere) {
176 dynamic_cast<TCompTubDep*
>(FCompresor)->BusquedaEntradaSalida(FEntradaCompresor, AmbientTemperature, FNumeroCC, BC,
177 AtmosphericComposition);
180 }
else if(FCompresor->getModeloCompresor() == nmCompPipes) {
184 FNumeroTubo =
new int[2];
185 for(
int j = 0; j < 2; j++) {
186 FTuboExtremo[j].Pipe = NULL;
189 while(FNumeroTubosCC < 2 && i < NumberOfPipes) {
190 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
191 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
192 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
193 FNumeroTubo[FNumeroTubosCC] = i;
196 if(Pipe[i]->getNodoDer() == FNumeroCC) {
197 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
198 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
199 FNumeroTubo[FNumeroTubosCC] = i;
204 dynamic_cast<TCompTubos*
>(FCompresor)->RelacionTubos(BC, FNumeroCC);
206 }
else if(FCompresor->getModeloCompresor() == nmCompPlenums) {
209 FILE *fich = fopen(FileWAM,
"r");
210 fsetpos(fich, &filepos);
212 fscanf(fich,
"%d ", &FNumeroDepositoRot);
213 fscanf(fich,
"%d ", &FNumeroDepositoEst);
215 fgetpos(fich, &filepos);
218 FDepositoRot = Plenum[FNumeroDepositoRot - 1];
219 FDepositoEst = Plenum[FNumeroDepositoEst - 1];
221 dynamic_cast<TCompresorDep*
>(FCompresor)->RelacionDepositoCompresor(FDepositoRot, FDepositoEst);
225 }
catch(exception & N) {
226 std::cout <<
"ERROR: TCCCompresor::AsignaCompresor en la condicion de contorno: " << FNumeroCC << std::endl;
227 std::cout <<
"Tipo de error: " << N.what() << std::endl;
235 void TCCCompresor::ObtencionValoresInstantaneos(
double Theta,
double tiempoactual) {
239 FTiempoActual = tiempoactual;
241 }
catch(exception & N) {
242 std::cout <<
"ERROR: TCCCompresor::ObtencionValoresInstantaneos en la condicion de contorno: " << FNumeroCC <<
244 std::cout <<
"Tipo de error: " << N.what() << std::endl;
252 void TCCCompresor::CalculaCondicionContorno(
double Time) {
254 double TrabajoInsTurbina = 0.;
255 int TuboCalculado = 0;
257 if(FCompresor->getModeloCompresor() == nmCompOriginal) {
261 dynamic_cast<TCompTubDep*
>(FCompresor)->DatosEntradaCompresor(FTamb, FPamb,
this);
262 FCompresor->CondicionCompresor(FTheta, FTuboExtremo, FTiempoActual, TuboCalculado);
263 FCompresor->AcumulaMedias(FTiempoActual);
265 if(FCompresor->getModeloCompresor() == nmCompPlenums) {
266 FCompresor->CalculaGasto(TrabajoInsTurbina, FTiempoActual);
267 FCompresor->AcumulaMedias(FTiempoActual);
269 if(FCompresor->getModeloCompresor() == nmCompPipes) {
271 if(FTuboActual == 10000) {
272 TuboCalculado = FTuboActual;
274 for(
int i = 0; i < FNumeroTubosCC; i++) {
275 if(FNumeroTubo[i] == FTuboActual) {
280 FCompresor->CondicionCompresor(FTheta, FTuboExtremo, FTiempoActual, TuboCalculado);
281 FCompresor->AcumulaMedias(FTiempoActual);
285 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
286 FFraccionMasicaEspecie[i] = FCompresor->GetFraccionMasicaEspecie(i);
289 }
catch(exception & N) {
290 std::cout <<
"ERROR: TCCCompresor::CalculaCondicionesContorno en la condicion de contorno: " << FNumeroCC << std::endl;
291 std::cout <<
"Tipo de error: " << N.what() << std::endl;
299 void TCCCompresor::TuboCalculandose(
int TuboActual) {
301 FTuboActual = TuboActual;
302 }
catch(exception & N) {
303 std::cout <<
"ERROR: TCCUnionEntreTubos::TuboCalculandose en la condicion de contorno: " << FNumeroCC << std::endl;
304 std::cout <<
"Tipo de error: " << N.what() << std::endl;
309 void TCCCompresor::ReadCompressorData(
const char *FileWAM, fpos_t &filepos,
TCompresor **Compressor) {
313 if(Compressor[FNumeroCompresor - 1]->getModeloCompresor() == nmCompOriginal) {
314 FILE *fich = fopen(FileWAM,
"r");
315 fsetpos(fich, &filepos);
317 fscanf(fich,
"%d ", &tipoentrada);
319 switch(tipoentrada) {
321 FEntradaCompresor = nmAtmosphere;
324 FEntradaCompresor = nmPipe;
327 FEntradaCompresor = nmPlenum;
328 fscanf(fich,
"%d ", &FNumeroDeposito);
331 fgetpos(fich, &filepos);
333 }
else if(Compressor[FNumeroCompresor - 1]->getModeloCompresor() == nmCompPlenums) {
336 FILE *fich = fopen(FileWAM,
"r");
337 fsetpos(fich, &filepos);
339 fscanf(fich,
"%d ", &FNumeroDepositoRot);
340 fscanf(fich,
"%d ", &FNumeroDepositoEst);
342 fgetpos(fich, &filepos);
348 double *AtmosphericComposition,
TCompresor **Compressor,
double AmbientTemperature,
double AmbientPressure) {
351 bool haytubo =
false;
353 FTamb = AmbientTemperature;
354 FPamb = AmbientPressure;
355 FCompresor = Compressor[FNumeroCompresor - 1];
356 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
358 if(FCompresor->getModeloCompresor() == nmCompOriginal) {
362 FTuboExtremo[0].Pipe = NULL;
364 while(FNumeroTubosCC < 1 && i < NumberOfPipes) {
365 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
366 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
367 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
370 if(Pipe[i]->getNodoDer() == FNumeroCC) {
371 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
372 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
378 if(FEntradaCompresor == nmPlenum) {
380 FDeposito = Plenum[FNumeroDeposito - 1];
381 dynamic_cast<TCompTubDep*
>(FCompresor)->BusquedaEntradaSalida(FEntradaCompresor, FTamb, FNumeroCC, BC,
382 AtmosphericComposition);
384 }
else if(FEntradaCompresor == nmPipe) {
385 for(
int i = 0; i < numCC; i++) {
386 if(BC[i]->getTipoCC() == nmEntradaCompre) {
389 FTuboRotor = BC[i]->GetTuboExtremo(0).Pipe;
390 FExtremoTuboRotor = BC[i]->GetTuboExtremo(0).TipoExtremo;
395 dynamic_cast<TCompTubDep*
>(FCompresor)->BusquedaEntradaSalida(FEntradaCompresor, FTamb, FNumeroCC, BC,
396 AtmosphericComposition);
398 printf(
"ERROR: El compresor %d no tiene una BC tipo EntradaCompresor a su entrada.\n ", FNumeroCompresor);
400 }
else if(FEntradaCompresor == nmAtmosphere) {
401 dynamic_cast<TCompTubDep*
>(FCompresor)->BusquedaEntradaSalida(FEntradaCompresor, FTamb, FNumeroCC, BC,
402 AtmosphericComposition);
405 }
else if(FCompresor->getModeloCompresor() == nmCompPipes) {
409 FNumeroTubo =
new int[2];
410 for(
int j = 0; j < 2; j++) {
411 FTuboExtremo[j].Pipe = NULL;
414 while(FNumeroTubosCC < 2 && i < NumberOfPipes) {
415 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
416 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
417 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
418 FNumeroTubo[FNumeroTubosCC] = i;
421 if(Pipe[i]->getNodoDer() == FNumeroCC) {
422 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
423 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
424 FNumeroTubo[FNumeroTubosCC] = i;
430 dynamic_cast<TCompTubos*
>(FCompresor)->AsignPipes(BC, FNumeroCC);
432 }
else if(FCompresor->getModeloCompresor() == nmCompPlenums) {
434 FDepositoRot = Plenum[FNumeroDepositoRot - 1];
435 FDepositoEst = Plenum[FNumeroDepositoEst - 1];
437 dynamic_cast<TCompresorDep*
>(FCompresor)->RelacionDepositoCompresor(FDepositoRot, FDepositoEst);
441 }
catch(exception & N) {
442 std::cout <<
"ERROR: TCCCompresor::AsignaCompresor en la condicion de contorno: " << FNumeroCC << std::endl;
443 std::cout <<
"Tipo de error: " << N.what() << std::endl;
450 #pragma package(smart_init)