5 #include "TCFDConnection.h"
12 TCFDConnection::TCFDConnection(nmTypeBC TipoCC,
int numCC, nmTipoCalculoEspecies SpeciesModel,
int numeroespecies,
13 nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
14 TCondicionContorno(TipoCC, numCC, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
19 FSpecieCFD.resize(numeroespecies, 0.);
22 TCFDConnection::~TCFDConnection() {
26 void TCFDConnection::ReadBoundaryData(
const char *FileWAM, fpos_t &filepos,
int NumberOfPipes,
TTubo **Pipe,
int nDPF,
30 FTuboExtremo[0].Pipe = NULL;
33 while(FNumeroTubosCC < 1 && i < NumberOfPipes) {
34 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
35 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
36 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
37 FCC = &(FTuboExtremo[FNumeroTubosCC].Beta);
38 FCD = &(FTuboExtremo[FNumeroTubosCC].Landa);
43 if(Pipe[i]->getNodoDer() == FNumeroCC) {
44 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
45 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
46 FCC = &(FTuboExtremo[FNumeroTubosCC].Landa);
47 FCD = &(FTuboExtremo[FNumeroTubosCC].Beta);
48 FNodoFin = FTuboExtremo[FNumeroTubosCC].Pipe->getNin() - 1;
55 FILE *fich = fopen(FileWAM,
"r");
56 fsetpos(fich, &filepos);
59 fscanf(fich,
"%s ", &TMP);
61 FCFDout =
new char[(int) strlen(FCFDModel)];
62 GetName(FCFDModel, FCFDout,
".1d");
64 FCFDin =
new char[(int) strlen(FCFDModel)];
65 GetName(FCFDModel, FCFDin,
".cfd");
70 fgetpos(fich, &filepos);
73 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
74 for(
int i = 0; i < FNumeroEspecies - 1; i++) {
82 void TCFDConnection::CalculaCondicionContorno(
double Time) {
89 double FraccionMasicaAcum = 0.;
92 fileout = fopen(FCFDout,
"r");
100 for(
int j = 0; j < FNumeroEspecies - 2; j++) {
102 FraccionMasicaAcum += FFraccionMasicaEspecie[j];
104 FFraccionMasicaEspecie[FNumeroEspecies - 2] = 1. - FraccionMasicaAcum;
106 FFraccionMasicaEspecie[FNumeroEspecies - 1] = FTuboExtremo[0].Pipe->
GetFraccionMasicaCC(FIndiceCC, FNumeroEspecies - 1);
108 fileout = fopen(FCFDout,
"a");
110 fprintf(fileout,
"%.16f %g %g", Time, *FCC * __cons::ARef, FTuboExtremo[0].Entropia * __cons::ARef);
111 for(
int j = 0; j < FNumeroEspecies - 1; j++) {
112 fprintf(fileout,
" %g", FFraccionMasicaEspecie[j]);
115 fprintf(fileout,
" %g", FFraccionMasicaEspecie[FNumeroEspecies - 1]);
116 fprintf(fileout,
"\n");
121 filein = fopen(FCFDin,
"r");
123 while(filein == NULL) {
124 std::cout <<
"INFO: Waiting for the file creation" << std::endl;
126 filein = fopen(FCFDin,
"r");
143 double AA0 = FTuboExtremo[0].Entropia;
144 double AA1 = FTuboExtremo[0].Entropia;
146 while(t1 < Time - 1e-16) {
147 filein = fopen(FCFDin,
"r");
149 while(!feof(filein)) {
153 fscanf(filein,
"%lf %lf %lf", &t1, &b1, &AA1);
154 for(
int j = 0; j < FNumeroEspecies - 1; j++) {
155 fscanf(filein,
"%lf", &FSpecieCFD[j]);
158 fscanf(filein,
"%lf", &FSpecieCFD[FNumeroEspecies - 1]);
159 fscanf(filein,
"\n");
163 if(t1 < Time - 1e-16) {
166 while(difftime(buf.st_mtime, FUpdateTime) == 0) {
167 std::cout <<
"INFO: Waiting for an update" << std::endl;
171 FUpdateTime = buf.st_mtime;
175 double TimeStep = t1 - t0;
176 double DeltaTime = Time - t0;
178 double Beta = Interpola(b0, b1, TimeStep, DeltaTime);
179 double AA = Interpola(AA0, AA1, TimeStep, DeltaTime);
181 double flow = (Beta / AA) / (*FCC / FTuboExtremo[0].Entropia);
185 *FCD = Beta / __cons::ARef;
186 }
else if(flow > 1.00001) {
187 *FCD = Beta / __cons::ARef;
188 *FCC = *FCC * AA / __cons::ARef / FTuboExtremo[0].Entropia;
189 FTuboExtremo[0].Entropia = AA / __cons::ARef;
196 #pragma package(smart_init)