5 #include "TCCExternalConnection.h"
10 TCCExternalConnection::TCCExternalConnection(nmTypeBC TipoCC,
int numCC, nmTipoCalculoEspecies SpeciesModel,
11 int numeroespecies, nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
12 TCondicionContorno(TipoCC, numCC, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
24 TCCExternalConnection::~TCCExternalConnection() {
27 void TCCExternalConnection::UpdateCurrentExternalProperties(
double U0,
double U1,
double T0,
double T1,
double P0,
28 double P1,
double t) {
40 void TCCExternalConnection::AsignGeometricalData(
double D0,
double D1,
double deltaX) {
44 FAExt[0] = __geom::Circle_area(D0);
45 FAExt[1] = __geom::Circle_area(D1);
50 void TCCExternalConnection::ExternalCharacteristics(
double Time) {
53 double x = 0., Px = 0., Tx = 0., Ux = 0., Ax = 0.;
54 double Deltat = Time - FCurrentTime;
56 double g = __Gamma::G;
57 double gg = __Gamma::G_5;
59 double A0 = sqrt(g * __R::Air * FTExt[0]);
60 double A1 = sqrt(g * __R::Air * FTExt[1]);
62 double AA0 = A0 / pow(FPExt[0], gg);
63 double AA1 = A1 / pow(FPExt[1], gg);
66 x = FUExt[0] * FDeltaX / (FDeltaX / Deltat + FUExt[0] - FUExt[1]);
68 FA_AExt = (AA0 * (FDeltaX - x) + AA1 * x) / FDeltaX / __cons::ARef;
71 FA_AExt = AA0 / __cons::ARef;
73 double UWave0 = A0 + FUExt[0];
74 double UWave1 = A1 + FUExt[1];
76 x = UWave0 * FDeltaX / (FDeltaX / Deltat + UWave0 - UWave1);
78 Ux = (FUExt[0] * (FDeltaX - x) + FUExt[1] * x) / FDeltaX;
79 Ax = (A0 * (FDeltaX - x) + A1 * x) / FDeltaX;
81 double deltaEnt = Ax * (AA0 - FA_AExt * __cons::ARef) / FA_AExt / __cons::ARef;
83 FK_CExt = (Ax + (g - 1) / 2 * Ux + deltaEnt) / __cons::ARef;
87 void TCCExternalConnection::CalculaCondicionContorno(
double Time) {
91 ExternalCharacteristics(Time);
93 flujo = (FK_CExt / FA_AExt) / (*FCC / FTuboExtremo[0].Entropia);
95 if(flujo < 0.999995) {
97 double A = FTuboExtremo[0].Entropia / (FTuboExtremo[0].Entropia + FA_AExt) * (*FCC + FK_CExt);
98 FT_Boundary =
pow2(A * __cons::ARef) / __R::Air / __Gamma::G;
99 FU_Boundary = (A - *FCC) / __Gamma::G_3;
100 *FCD = A + __Gamma::G_3 * FU_Boundary;
101 FU_Boundary *= __cons::ARef;
102 FP_Boundary = pow(A / FTuboExtremo[0].Entropia, __Gamma::G_4);
103 }
else if(flujo > 1.000005) {
104 double A = FA_AExt / (FTuboExtremo[0].Entropia + FA_AExt) * (*FCC + FK_CExt);
105 FT_Boundary =
pow2(A * __cons::ARef) / __R::Air / __Gamma::G;
106 FU_Boundary = (FK_CExt - A) / __Gamma::G_3;
107 *FCD = A + __Gamma::G_3 * FU_Boundary;
108 *FCC = A - __Gamma::G_3 * FU_Boundary;
109 FTuboExtremo[0].Entropia = FA_AExt;
110 FU_Boundary *= __cons::ARef;
111 FP_Boundary = pow(A / FTuboExtremo[0].Entropia, __Gamma::G_4);
115 FT_Boundary =
pow2(A * __cons::ARef) / __R::Air / __Gamma::G;
118 FP_Boundary = pow(A / FTuboExtremo[0].Entropia, __Gamma::G_4);
123 void TCCExternalConnection::ReadBoundaryData(
const char *FileWAM, fpos_t &filepos,
int NumberOfPipes,
TTubo **Pipe,
124 int nDPF,
TDPF **DPF) {
129 FTuboExtremo[0].Pipe = NULL;
131 while(FNumeroTubosCC < 1 && i < NumberOfPipes) {
132 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
133 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
134 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
135 FCC = &(FTuboExtremo[FNumeroTubosCC].Beta);
136 FCD = &(FTuboExtremo[FNumeroTubosCC].Landa);
141 if(Pipe[i]->getNodoDer() == FNumeroCC) {
142 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
143 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
144 FCC = &(FTuboExtremo[FNumeroTubosCC].Landa);
145 FCD = &(FTuboExtremo[FNumeroTubosCC].Beta);
146 FNodoFin = FTuboExtremo[FNumeroTubosCC].Pipe->getNin() - 1;
154 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
155 for(
int i = 0; i < FNumeroEspecies - FIntEGR; i++) {
159 FILE *fich = fopen(FileWAM,
"r");
160 fsetpos(fich, &filepos);
162 fscanf(fich,
"%d ", &FID);
164 fgetpos(fich, &filepos);
169 void TCCExternalConnection::LoadNewData(
double* p,
double* T,
double* u) {
176 #pragma package(smart_init)