OpenWAM
TCFDConnection.cpp
1 // ---------------------------------------------------------------------------
2 
3 #pragma hdrstop
4 
5 #include "TCFDConnection.h"
6 #include "TTubo.h"
7 // #include <dos.h>
8 #include <sys/stat.h>
9 
10 // ---------------------------------------------------------------------------
11 
12 TCFDConnection::TCFDConnection(nmTypeBC TipoCC, int numCC, nmTipoCalculoEspecies SpeciesModel, int numeroespecies,
13  nmCalculoGamma GammaCalculation, bool ThereIsEGR) :
14  TCondicionContorno(TipoCC, numCC, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
15 
16  FirstTime = true;
17  FUpdateTime = 0;
18  FExistFile = false;
19  FSpecieCFD.resize(numeroespecies, 0.);
20 }
21 
22 TCFDConnection::~TCFDConnection() {
23 
24 }
25 
26 void TCFDConnection::ReadBoundaryData(const char *FileWAM, fpos_t &filepos, int NumberOfPipes, TTubo **Pipe, int nDPF,
27  TDPF **DPF) {
28 
29  FTuboExtremo = new stTuboExtremo[1];
30  FTuboExtremo[0].Pipe = NULL;
31 
32  int i = 0;
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);
39  FNodoFin = 0;
40  FIndiceCC = 0;
41  FNumeroTubosCC++;
42  }
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;
49  FIndiceCC = 1;
50  FNumeroTubosCC++;
51  }
52  i++;
53  }
54 
55  FILE *fich = fopen(FileWAM, "r");
56  fsetpos(fich, &filepos);
57 
58  char *TMP;
59  fscanf(fich, "%s ", &TMP);
60  FCFDModel = TMP;
61  FCFDout = new char[(int) strlen(FCFDModel)];
62  GetName(FCFDModel, FCFDout, ".1d");
63  // GetName(FCFDModel, FCFDout, ".cfd"); //< CFD
64  FCFDin = new char[(int) strlen(FCFDModel)];
65  GetName(FCFDModel, FCFDin, ".cfd");
66  // GetName(FCFDModel, FCFDin, ".1d"); //< CFD
67 
68  // fscanf(fich, "%d ", &FCFDTiemStep);
69 
70  fgetpos(fich, &filepos);
71  fclose(fich);
72 
73  FFraccionMasicaEspecie = new double[FNumeroEspecies - FIntEGR];
74  for(int i = 0; i < FNumeroEspecies - 1; i++) {
75  FFraccionMasicaEspecie[i] = FTuboExtremo[0].Pipe->GetFraccionMasicaInicial(i);
76  }
77  if(FHayEGR) {
78  FFraccionMasicaEspecie[FNumeroEspecies - 1] = FTuboExtremo[0].Pipe->GetFraccionMasicaInicial(FNumeroEspecies - 1);
79  }
80 }
81 
82 void TCFDConnection::CalculaCondicionContorno(double Time) {
83 
84  struct stat buf;
85 
86  FILE *fileout;
87  FILE *filein;
88 
89  double FraccionMasicaAcum = 0.;
90 
91  if(FirstTime) {
92  fileout = fopen(FCFDout, "r");
93  if(fileout != NULL) {
94  fclose(fileout);
95  remove(FCFDout);
96  }
97  FirstTime = false;
98  }
99 
100  for(int j = 0; j < FNumeroEspecies - 2; j++) {
101  FFraccionMasicaEspecie[j] = FTuboExtremo[0].Pipe->GetFraccionMasicaCC(FIndiceCC, j);
102  FraccionMasicaAcum += FFraccionMasicaEspecie[j];
103  }
104  FFraccionMasicaEspecie[FNumeroEspecies - 2] = 1. - FraccionMasicaAcum;
105  if(FHayEGR)
106  FFraccionMasicaEspecie[FNumeroEspecies - 1] = FTuboExtremo[0].Pipe->GetFraccionMasicaCC(FIndiceCC, FNumeroEspecies - 1);
107 
108  fileout = fopen(FCFDout, "a");
109 
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]);
113  }
114  if(FHayEGR)
115  fprintf(fileout, " %g", FFraccionMasicaEspecie[FNumeroEspecies - 1]);
116  fprintf(fileout, "\n");
117 
118  fclose(fileout);
119 
120  if(!FExistFile) {
121  filein = fopen(FCFDin, "r");
122 
123  while(filein == NULL) {
124  std::cout << "INFO: Waiting for the file creation" << std::endl;
125 // sleep(30);
126  filein = fopen(FCFDin, "r");
127  }
128  fclose(filein);
129  FExistFile = true;
130  }
131 
132  // stat(FCFDin, &buf);
133  //
134  // while (difftime(buf.st_mtime, FUpdateTime) == 0) {
135  // sleep(30);
136  // stat(FCFDin, &buf);
137  // }
138 
139  double t0 = 0.;
140  double t1 = 0.;
141  double b0 = *FCC;
142  double b1 = *FCC;
143  double AA0 = FTuboExtremo[0].Entropia;
144  double AA1 = FTuboExtremo[0].Entropia;
145 
146  while(t1 < Time - 1e-16) {
147  filein = fopen(FCFDin, "r");
148 
149  while(!feof(filein)) {
150  t0 = t1;
151  b0 = b1;
152  AA0 = AA1;
153  fscanf(filein, "%lf %lf %lf", &t1, &b1, &AA1);
154  for(int j = 0; j < FNumeroEspecies - 1; j++) {
155  fscanf(filein, "%lf", &FSpecieCFD[j]);
156  }
157  if(FHayEGR)
158  fscanf(filein, "%lf", &FSpecieCFD[FNumeroEspecies - 1]);
159  fscanf(filein, "\n");
160  }
161  fclose(filein);
162 
163  if(t1 < Time - 1e-16) {
164  stat(FCFDin, &buf);
165 
166  while(difftime(buf.st_mtime, FUpdateTime) == 0) {
167  std::cout << "INFO: Waiting for an update" << std::endl;
168 // sleep(3);
169  stat(FCFDin, &buf);
170  }
171  FUpdateTime = buf.st_mtime;
172  }
173  }
174 
175  double TimeStep = t1 - t0;
176  double DeltaTime = Time - t0;
177 
178  double Beta = Interpola(b0, b1, TimeStep, DeltaTime);
179  double AA = Interpola(AA0, AA1, TimeStep, DeltaTime);
180 
181  double flow = (Beta / AA) / (*FCC / FTuboExtremo[0].Entropia);
182 
183  // ! Flow from de pipe to the cfd model
184  if(flow < 0.99999) {
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;
190  } else {
191  *FCD = *FCC;
192  }
193 
194 }
195 
196 #pragma package(smart_init)
TTubo
a Finite differences pipe.
Definition: TTubo.h:116
stTuboExtremo
Definition: Globales.h:730
TDPF
Definition: TDPF.h:45
TTubo::GetFraccionMasicaCC
double GetFraccionMasicaCC(int j, int i)
Definition: TTubo.h:953
TTubo::GetFraccionMasicaInicial
double GetFraccionMasicaInicial(int i) const
Gets the initial mass fraction of species i.
Definition: TTubo.cpp:5440
TCondicionContorno
Definition: TCondicionContorno.h:54
TTubo.h