31 #include "TIsoSpeedLine.h"
37 TIsoSpeedLine::TIsoSpeedLine() {
43 TIsoSpeedLine::~TIsoSpeedLine() {
50 void TIsoSpeedLine::ReadIsoSpeed(
int points, FILE *Input) {
51 double ER = 0., MF = 0., EF = 0.;
53 for(
int i = 0; i < points; i++) {
54 fscanf(Input,
"%lf %lf %lf", &MF, &ER, &EF);
55 FReducedAirMassFlow.push_back(MF);
56 FExpansionRatio.push_back(ER);
57 FEfficiency.push_back(EF);
61 void TIsoSpeedLine::AsignaValores(
double ER,
double MF,
double EF) {
62 FReducedAirMassFlow.push_back(MF);
63 FExpansionRatio.push_back(ER);
64 FEfficiency.push_back(EF);
67 void TIsoSpeedLine::EffectiveSection(
double Area,
bool CalculaGR,
double Angle,
double Diam1,
double Diam2,
68 double Diam3,
double n_limit) {
69 double tmp1 = 0., tmp2 = 0.;
70 double FGamma = 1.40, FR = 287;
71 double T00_T0, P00_P0, P2_P0, T2_T0, f_P2_P0, GR, nN, n, P2_P00, T2_T00, T1_T0, gG, g, kK, k, P1_P0, P00_P1, P1_P2,
74 FNumDatos = FReducedAirMassFlow.size();
76 for(
int i = 0; i < FNumDatos; i++) {
82 tmp2 = 1 + ((FGamma - 1) / 2) * (FR / FGamma) * (
pow2(FReducedAirMassFlow[i] / 1000000) /
pow2(Area)) * pow((tmp1),
83 ((FGamma + 1) / (FGamma - 1)));
84 }
while(fabs(tmp1 - tmp2) / tmp1 > 1e-12);
86 P00_P0 = pow(T00_T0, FGamma / (FGamma - 1));
87 P2_P0 = (1 / FExpansionRatio[i]) * pow(T00_T0, (FGamma / (FGamma - 1)));
88 T2_T0 = 1 - (FEfficiency[i]) * (1 - pow((1 / FExpansionRatio[i]), ((FGamma - 1) / FGamma))) * T00_T0;
89 f_P2_P0 = FExpansionRatio[i] * (1 / T00_T0 - FEfficiency[i] * (1 - pow((1 / FExpansionRatio[i]),
90 ((FGamma - 1) / FGamma))));
92 GR = 1 - (((2 * FR * tan(__units::DegToRad(Angle))) / (Diam1 *
pow2(Diam2) *
pow2(__cons::Pi))) * ((
93 FReducedAirMassFlow[i] / 1000000) / FSpeed) * f_P2_P0);
101 nN = log(P2_P0) / log(T2_T0);
103 P2_P00 = P2_P0 / P00_P0;
104 T2_T00 = T2_T0 / T00_T0;
105 T1_T0 = 1 + T00_T0 * (GR - 1) * FEfficiency[i] * (1 - pow(P2_P00, (FGamma - 1) / FGamma));
107 gG = ((FGamma / (FGamma - 1)) - nN * (log(T2_T00) + log(T00_T0)) / log(T1_T0)) / (1 - (log(T2_T00) + log(T00_T0)) / log(
109 g = (n / (n - n_limit) + (gG / (gG - 1)) / (FGamma - n)) / (1 / (n - n_limit) + 1 / (FGamma - n));
112 g = (FGamma / (n - 1) + n / (n_limit - n)) / (1 / (n - 1) + 1 / (n_limit - n));
114 kK = (g / (g - 1)) + (nN - (g / (g - 1))) * (log(T2_T00) + log(T00_T0)) / log(T1_T0);
116 P1_P0 = pow(1 + T00_T0 * (GR - 1) * FEfficiency[i] * (1 - pow(P2_P00, ((FGamma - 1) / FGamma))), kK);
117 P00_P1 = P00_P0 / P1_P0;
118 P1_P2 = P1_P0 / P2_P0;
119 raiZ = (2 / (FGamma - 1)) * (1 - pow(1 / P00_P1, ((FGamma - 1) / FGamma)));
125 StatorEffectiveSection.push_back(FReducedAirMassFlow[i] * 1e-6 * pow(P00_P1,
126 (1 / FGamma)) * (sqrt(FR / FGamma)) / raiZ);
128 raiZ = (2 / (FGamma - 1)) * (1 - pow(1 / P1_P2, ((FGamma - 1) / FGamma)));
137 RotorEffectiveSection.push_back(FReducedAirMassFlow[i] * 1e-6 * P00_P1 * pow(P1_P2,
138 (1 / FGamma)) * (sqrt(FR / FGamma)) / raiZ);
142 void TIsoSpeedLine::CalculatePower(
double Tin) {
146 double gamma = Cp / (Cp - R);
147 double gam = (1 - gamma) / gamma;
148 for(
int i = 0; i < FNumDatos; i++) {
149 FPower.push_back(FReducedAirMassFlow[i] * Cp * FEfficiency[i] * sqrt(Tin) * FExpansionRatio[i] / 10 * (1 - pow(
150 FExpansionRatio[i], gam)));
153 FPowerMin = FPower.front();
154 FPowerMax = FPower.back();
158 void TIsoSpeedLine::PutSpeed(
double sp) {
162 void TIsoSpeedLine::Adimensionaliza() {
163 double DeltaPreMax = FExpansionRatio.back() - FExpansionRatio.front();
164 double m = 0., Rtc = 0.;
166 for(
int i = 0; i < FNumDatos; ++i) {
167 FExpansionRatioAdim.push_back((FExpansionRatio[i] - FExpansionRatio.front()) / DeltaPreMax);
170 FERMin = FExpansionRatio.front();
171 FERMax = FExpansionRatio.back();
173 iStator =
new Hermite_interp(FExpansionRatioAdim, StatorEffectiveSection);
175 iRotor =
new Hermite_interp(FExpansionRatioAdim, RotorEffectiveSection);
177 iEfficiency =
new Hermite_interp(FExpansionRatioAdim, FEfficiency);
181 void TIsoSpeedLine::GetAdiabaticEfficiency(
TTC_HTM *HTM,
double TinT,
double TinC) {
184 double m = 0., Rtc = 0.;
186 for(
int i = 0; i < FNumDatos; ++i) {
187 m = FReducedAirMassFlow[i] / sqrt(TinT) * FExpansionRatio[i] / 10;
188 Rtc = FSpeed * 60 * sqrt(TinT);
189 FEfficiency[i] = HTM->CorrectTurbineMap(m, FExpansionRatio[i],
190 FEfficiency[i], TinC, TinT, Rtc);
192 if(iEfficiency != NULL)
194 iEfficiency =
new Hermite_interp(FExpansionRatioAdim, FEfficiency);
198 double TIsoSpeedLine::Stator(
double ERAdim) {
199 double ret_val = iStator->interp(ERAdim);
204 double TIsoSpeedLine::Rotor(
double ERAdim) {
205 double ret_val = iRotor->interp(ERAdim);
210 double TIsoSpeedLine::Efficiency(
double ERAdim) {
211 double ret_val = iEfficiency->interp(ERAdim);
216 void TIsoSpeedLine::PrintEffectiveSection(FILE * fich) {
217 for(dVector::size_type i = 0; i < FExpansionRatio.size(); i++) {
218 fprintf(fich,
"%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", FSpeed, FExpansionRatio[i], FReducedAirMassFlow[i], FEfficiency[i],
219 FExpansionRatioAdim[i], StatorEffectiveSection[i],
220 RotorEffectiveSection[i]);
224 double TIsoSpeedLine::Speed() {
228 double TIsoSpeedLine::ERMax() {
232 double TIsoSpeedLine::ERMin() {
236 #pragma package(smart_init)