36 #include "TEntradaPulso.h"
41 TCCPulso::TCCPulso(nmTypeBC TipoCC,
int numCC, nmTipoCalculoEspecies SpeciesModel,
int numeroespecies,
42 nmCalculoGamma GammaCalculation,
bool ThereIsEGR) :
43 TCondicionContorno(TipoCC, numCC, SpeciesModel, numeroespecies, GammaCalculation, ThereIsEGR) {
54 TCCPulso::~TCCPulso() {
56 delete[] FTuboExtremo;
61 if(FComposicion != NULL)
62 delete[] FComposicion;
69 void TCCPulso::ReadBoundaryData(
const char *FileWAM, fpos_t &filepos,
int NumberOfPipes,
TTubo **Pipe,
int nDPF,
73 double fracciontotal = 0.;
76 FTuboExtremo[0].Pipe = NULL;
81 while(FNumeroTubosCC < 1 && i < NumberOfPipes) {
82 if(Pipe[i]->getNodoIzq() == FNumeroCC) {
83 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
84 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmLeft;
85 FCC = &(FTuboExtremo[FNumeroTubosCC].Beta);
86 FCD = &(FTuboExtremo[FNumeroTubosCC].Landa);
91 if(Pipe[i]->getNodoDer() == FNumeroCC) {
92 FTuboExtremo[FNumeroTubosCC].Pipe = Pipe[i];
93 FTuboExtremo[FNumeroTubosCC].TipoExtremo = nmRight;
94 FCC = &(FTuboExtremo[FNumeroTubosCC].Landa);
95 FCD = &(FTuboExtremo[FNumeroTubosCC].Beta);
96 FNodoFin = FTuboExtremo[FNumeroTubosCC].Pipe->getNin() - 1;
103 FILE *fich = fopen(FileWAM,
"r");
104 fsetpos(fich, &filepos);
107 FPulso->LeeEntradaPulso(fich);
110 FFraccionMasicaEspecie =
new double[FNumeroEspecies - FIntEGR];
111 FComposicion =
new double[FNumeroEspecies - FIntEGR];
112 for(
int i = 0; i < FNumeroEspecies - 1; i++) {
113 fscanf(fich,
"%lf ", &FComposicion[i]);
115 fracciontotal += FComposicion[i];
119 if(FCalculoEspecies == nmCalculoCompleto) {
120 if(FComposicion[0] > 0.2)
121 FComposicion[FNumeroEspecies - 1] = 0.;
123 FComposicion[FNumeroEspecies - 1] = 1.;
125 if(FComposicion[0] > 0.5)
126 FComposicion[FNumeroEspecies - 1] = 1.;
128 FComposicion[FNumeroEspecies - 1] = 0.;
132 if(fracciontotal != 1.) {
134 "ERROR: La fraccion masica total no puede ser distinta de 1. Repasa la lectura en la condicion de contorno " <<
135 FNumeroCC << std::endl;
139 fgetpos(fich, &filepos);
144 catch(exception &N) {
145 std::cout <<
"ERROR: TCCPulso::LecturaPulso en la condicion de contorno: " << FNumeroCC << std::endl;
146 std::cout <<
"Tipo de error: " << N.what() << std::endl;
154 void TCCPulso::CalculaCondicionContorno(
double Time) {
156 double Pressure, Entropia, FraccionMasicaAcum = 0.;
158 FGamma = FTuboExtremo[0].Pipe->
GetGamma(FNodoFin);
160 FTiempo = FTuboExtremo[0].Pipe->
getTime1();
161 FPulso->BusquedaInstante(FTiempo);
163 Pressure = FPulso->InterpolaPresion();
164 Entropia = FPulso->InterpolaEntropia();
166 *FCD = (2.0 * pow((1 + Pressure) / FPref, __Gamma::G5(FGamma)) - 1.0) * Entropia;
168 FTuboExtremo[0].Entropia = Entropia;
172 for(
int j = 0; j < FNumeroEspecies - 2; j++) {
174 FraccionMasicaAcum += FFraccionMasicaEspecie[j];
176 FFraccionMasicaEspecie[FNumeroEspecies - 2] = 1. - FraccionMasicaAcum;
178 FFraccionMasicaEspecie[FNumeroEspecies - 1] = FTuboExtremo[0].Pipe->
GetFraccionMasicaCC(FIndiceCC, FNumeroEspecies - 1);
179 }
else if(*FCD > *FCC) {
180 for(
int j = 0; j < FNumeroEspecies - FIntEGR; j++) {
181 FFraccionMasicaEspecie[j] = FComposicion[j];
187 }
catch(exception &N) {
188 std::cout <<
"ERROR: TCCPulso::CalculaCondicionesContorno en la condicion de contorno: " << FNumeroCC << std::endl;
189 std::cout <<
"Tipo de error: " << N.what() << std::endl;
197 #pragma package(smart_init)