31 #include "TTurbPosition.h"
36 TTurbPosition::TTurbPosition() {
40 TTurbPosition::~TTurbPosition() {
45 void TTurbPosition::ReadTurbinPosition(FILE *Input,
int rows,
double pos,
double ang) {
46 double SP = 0., ER = 0., MF = 0., EF = 0., SP0 = 0., ER0 = 0.;
51 for(
int i = 0; i < rows; i++) {
52 fscanf(Input,
"%lf %lf %lf %lf", &SP, &ER, &MF, &EF);
56 FSpeedLine[0].AsignaValores(ER, MF, EF);
57 FSpeedLine[0].PutSpeed(SP);
61 FSpeedLine[FLines - 1].AsignaValores(ER, MF, EF);
67 FSpeedLine.resize(FLines);
68 FSpeedLine[FLines - 1].AsignaValores(ER, MF, EF);
69 FSpeedLine[FLines - 1].PutSpeed(SP);
75 FSpeedMin = FSpeedLine[0].Speed();
76 FSpeedMax = FSpeedLine[FLines - 1].Speed();
80 void TTurbPosition::EffectiveArea(
double Area,
bool CalculaGR,
double Diam1,
double Diam2,
double Diam3,
82 for(
int i = 0; i < FLines; i++) {
83 FSpeedLine[i].EffectiveSection(Area, CalculaGR, FAngle, Diam1, Diam2, Diam3, n_limit);
84 FSpeedLine[i].Adimensionaliza();
88 void TTurbPosition::CalculatePower(
double Tin) {
89 for(
int i = 0; i < FLines; i++) {
90 FSpeedLine[i].CalculatePower(Tin);
94 void TTurbPosition::PutPosition(
double Pos) {
98 void TTurbPosition::SearchMapLimits() {
99 for(
int i = 0; i < FLines; i++) {
100 FSpeed.push_back(FSpeedLine[i].Speed());
101 FERMax.push_back(FSpeedLine[i].ERMax());
102 FERMin.push_back(FSpeedLine[i].ERMin());
104 h_FERMax.resize(FLines);
105 h_FERMin.resize(FLines);
107 Hermite(FLines, FSpeed, FERMax, &h_FERMax);
108 Hermite(FLines, FSpeed, FERMin, &h_FERMin);
112 void TTurbPosition::InterpolaPosicion(
double n,
double er) {
113 double CDStator0, CDStator1, CDRotor0, CDRotor1, ERAdim, DeltaN, ERMax, ERMin, Eff0, Eff1;
116 if(er < FSpeedLine[0].ERMin()) {
118 }
else if(er > FSpeedLine[0].ERMax()) {
121 ERAdim = (er - FSpeedLine[0].ERMin()) / (FSpeedLine[0].ERMax() - FSpeedLine[0].ERMin());
124 FStatorSec = FSpeedLine[0].Stator(ERAdim);
125 FRotorSec = FSpeedLine[0].Rotor(ERAdim);
126 FEfficiency = FSpeedLine[0].Efficiency(ERAdim);
127 }
else if(n >= FSpeedMax) {
128 if(er < FSpeedLine[FLines - 1].ERMin()) {
130 }
else if(er > FSpeedLine[FLines - 1].ERMax()) {
133 ERAdim = (er - FSpeedLine[FLines - 1].ERMin()) / (FSpeedLine[FLines - 1].ERMax() - FSpeedLine[FLines - 1].ERMin());
136 FStatorSec = FSpeedLine[FLines - 1].Stator(ERAdim);
137 FRotorSec = FSpeedLine[FLines - 1].Rotor(ERAdim);
138 FEfficiency = FSpeedLine[FLines - 1].Efficiency(ERAdim);
141 while(FSpeedLine[i].Speed() < n) {
145 ERMax = EvaluaHermite(n, FLines, FSpeed, FERMax, h_FERMax);
146 ERMin = EvaluaHermite(n, FLines, FSpeed, FERMin, h_FERMin);
147 ERAdim = (er - ERMin) / (ERMax - ERMin);
148 CDStator0 = FSpeedLine[i - 1].Stator(ERAdim);
149 CDStator1 = FSpeedLine[i].Stator(ERAdim);
150 CDRotor0 = FSpeedLine[i - 1].Rotor(ERAdim);
151 CDRotor1 = FSpeedLine[i].Rotor(ERAdim);
152 Eff0 = FSpeedLine[i - 1].Efficiency(ERAdim);
153 Eff1 = FSpeedLine[i].Efficiency(ERAdim);
154 DeltaN = (n - FSpeed[i - 1]) / (FSpeed[i] - FSpeed[i - 1]);
155 FStatorSec = CDStator0 * (1 - DeltaN) + CDStator1 * DeltaN;
156 FRotorSec = CDRotor0 * (1 - DeltaN) + CDRotor1 * DeltaN;
157 FEfficiency = Eff0 * (1 - DeltaN) + Eff1 * DeltaN;
161 void TTurbPosition::PrintTurbinePosition(FILE *fich) {
162 for(
int i = 0; i < FLines; i++) {
163 FSpeedLine[i].PrintEffectiveSection(fich);
167 double TTurbPosition::StatorSec() {
171 double TTurbPosition::RotorSec() {
175 double TTurbPosition::Rack() {
179 double TTurbPosition::Efficiency() {
183 double TTurbPosition::MaxPowerLimit(
double rtc) {
186 while(FSpeedLine[i].Speed() < rtc) {
189 double DeltaN = (rtc - FSpeed[i - 1]) / (FSpeed[i] - FSpeed[i - 1]);
190 double PowerMax0 = FSpeedLine[i - 1].PowerMax();
191 double PowerMax1 = FSpeedLine[i].PowerMax();
192 return PowerMax0 * (1 - DeltaN) + PowerMax1 * DeltaN;
196 double TTurbPosition::MinPowerLimit(
double rtc) {
199 while(FSpeedLine[i].Speed() < rtc) {
202 double DeltaN = (rtc - FSpeed[i - 1]) / (FSpeed[i] - FSpeed[i - 1]);
203 double PowerMin0 = FSpeedLine[i - 1].PowerMin();
204 double PowerMin1 = FSpeedLine[i].PowerMin();
205 return PowerMin0 * (1 - DeltaN) + PowerMin1 * DeltaN;
209 void TTurbPosition::AdiabaticEfficiency(
TTC_HTM *HTM,
double TinT,
double TinC) {
210 for(
int i = 0; i < FLines; ++i) {
211 FSpeedLine[i].GetAdiabaticEfficiency(HTM, TinT, TinC);
215 #pragma package(smart_init)