FlightGear next
FGTurbine.h
Go to the documentation of this file.
1/*
2 * SPDX-FileName: FGTurbine.h
3 * SPDX-FileCopyrightText: Copyright (C) 2003 David Culp (daveculp@cox.net)
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8HISTORY
9--------------------------------------------------------------------------------
1003/11/2003 DPC Created, based on FGTurbine
1109/22/2003 DPC Added starting, stopping, new framework
1204/29/2004 DPC Renamed from FGSimTurbine to FGTurbine
13
14%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15SENTRY
16%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
17
18#pragma once
19
20/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
21INCLUDES
22%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
23
24#include "FGEngine.h"
25
26/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27FORWARD DECLARATIONS
28%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
29
30namespace JSBSim {
31
32class Element;
33class FGFunction;
34
35/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36CLASS DOCUMENTATION
37%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
38
149
150/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
151CLASS DECLARATION
152%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
153
154class FGTurbine : public FGEngine
155{
156public:
161 FGTurbine(FGFDMExec* Executive, Element* el, int engine_number, struct Inputs& input);
163 ~FGTurbine();
164
172
173 void Calculate(void);
174 double CalcFuelNeed(void);
175 double GetPowerAvailable(void);
182 double Seek(double* var, double target, double accel, double decel);
183
184 phaseType GetPhase(void) { return phase; }
185
186 bool GetOvertemp(void) const { return Overtemp; }
187 bool GetInjection(void) const { return Injection; }
188 bool GetFire(void) const { return Fire; }
189 bool GetAugmentation(void) const { return Augmentation; }
190 bool GetReversed(void) const { return Reversed; }
191 bool GetCutoff(void) const { return Cutoff; }
192 int GetIgnition(void) const { return Ignition; }
193
194 double GetInlet(void) const { return InletPosition; }
195 double GetNozzle(void) const { return NozzlePosition; }
196 double GetBleedDemand(void) const { return BleedDemand; }
197 double GetN1(void) const { return N1; }
198 double GetN2(void) const { return N2; }
199 double GetEPR(void) const { return EPR; }
200 double GetEGT(void) const { return EGT_degC; }
201
202 double GetMaxN1(void) const { return MaxN1; }
203 double GetMaxN2(void) const { return MaxN2; }
204 double getOilPressure_psi() const { return OilPressure_psi; }
205 double getOilTemp_degF(void) { return KelvinToFahrenheit(OilTemp_degK); }
206 double GetInjectionTimer(void) const { return InjectionTimer; }
207 double GetInjWaterNorm(void) const { return InjWaterNorm; }
208 double GetInjN1increment(void) const { return InjN1increment; }
209 double GetInjN2increment(void) const { return InjN2increment; }
210
211 void SetInjection(bool injection) { Injection = injection; }
212 void SetIgnition(int ignition) { Ignition = ignition; }
213 void SetAugmentation(bool augmentation) { Augmentation = augmentation; }
214 void SetPhase(phaseType p) { phase = p; }
215 void SetEPR(double epr) { EPR = epr; }
216 void SetBleedDemand(double bleedDemand) { BleedDemand = bleedDemand; }
217 void SetReverse(bool reversed) { Reversed = reversed; }
218 void SetCutoff(bool cutoff) { Cutoff = cutoff; }
219 void SetMaxN1(double maxn1) { MaxN1 = maxn1; }
220 void SetMaxN2(double maxn2) { MaxN2 = maxn2; }
221 void SetInjectionTimer(double injtimer) { InjectionTimer = injtimer; }
222 void SetInjWaterNorm(double injwater) { InjWaterNorm = injwater; }
223 void SetInjN1increment(double injN1inc) { InjN1increment = injN1inc; }
224 void SetInjN2increment(double injN2inc) { InjN2increment = injN2inc; }
225
226 int InitRunning(void);
227 void ResetToIC(void);
228
229 std::string GetEngineLabels(const std::string& delimiter);
230 std::string GetEngineValues(const std::string& delimiter);
231
232private:
233 phaseType phase;
234 double MilThrust;
235 double MaxThrust;
236 double BypassRatio;
237 double TSFC;
238 double ATSFC;
239 double IdleN1;
240 double IdleN2;
241 double IgnitionN1;
242 double IgnitionN2;
243 double N1;
244 double N2;
245 double N2norm;
246 double MaxN1;
247 double MaxN2;
248 double IdleFF;
249 double N1_factor;
250 double N2_factor;
251 double ThrottlePos;
252 double AugmentCmd;
253 double N1_spinup;
254 double N2_spinup;
255 double N1_start_rate;
256 double N2_start_rate;
257 double N1_spindown;
258 double N2_spindown;
259 bool Stalled;
260 bool Seized;
261 bool Overtemp;
262 bool Fire;
263 bool Injection;
264 bool Augmentation;
265 bool Reversed;
266 bool Cutoff;
267 bool disableWindmill;
268 int Injected;
269 int Ignition;
270 int Augmented;
271 int AugMethod;
274 double EGT_degC;
275 double EPR;
276 double OilPressure_psi;
277 double OilTemp_degK;
278 double BleedDemand;
279 double InletPosition;
280 double NozzlePosition;
281 double correctedTSFC;
282 double InjectionTimer;
283 double InjectionTime;
284 double InjWaterNorm;
285 double InjN1increment;
286 double InjN2increment;
287
288 double Off(void);
289 double Run();
290 double SpinUp(void);
291 double Start(void);
292 double Stall(void);
293 double Seize(void);
294 double Trim();
295
296 FGFunction* IdleThrustLookup;
297 FGFunction* MilThrustLookup;
298 FGFunction* MaxThrustLookup;
299 FGFunction* InjectionLookup;
301 FGParameter* N1SpoolUp;
302 FGParameter* N1SpoolDown;
303 FGParameter* N2SpoolUp;
304 FGParameter* N2SpoolDown;
305
306 bool Load(FGFDMExec* exec, Element* el);
307 void bindmodel(FGPropertyManager* pm);
308 void Debug(int from);
309
310 friend class FGSpoolUp;
311};
312
313class FGSpoolUp : public FGParameter
314{
315public:
316 FGSpoolUp(FGTurbine* _turb, double BPR, double factor)
317 : turb(_turb), delay(factor * 90.0 / (BPR + 3.0)) {}
318 std::string GetName(void) const { return std::string(); };
319 double GetValue(void) const
320 {
321 // adjust acceleration for N2 and atmospheric density
322 double n = std::min(1.0, turb->N2norm + 0.1);
323 return delay / (1 + 3 * (1 - n) * (1 - n) * (1 - n) + (1 - turb->in.DensityRatio));
324 }
325
326private:
327 FGTurbine* turb;
328 double delay;
329};
330} // namespace JSBSim
331//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#define p(x)
JSBSim::FGFDMExec * FDMExec
Definition JSBSim.cpp:88
FGEngine(int engine_number, struct Inputs &input)
Definition FGEngine.cpp:55
Represents a mathematical function.
Definition FGFunction.h:753
static constexpr double KelvinToFahrenheit(double kelvin)
Converts from degrees Kelvin to degrees Fahrenheit.
Definition FGJSBBase.h:195
Represents various types of parameters.
Definition FGParameter.h:59
FGSpoolUp(FGTurbine *_turb, double BPR, double factor)
Definition FGTurbine.h:316
double GetValue(void) const
Definition FGTurbine.h:319
std::string GetName(void) const
Definition FGTurbine.h:318
This class models a turbine engine.
Definition FGTurbine.h:155
bool GetAugmentation(void) const
Definition FGTurbine.h:189
double GetInlet(void) const
Definition FGTurbine.h:194
double GetMaxN1(void) const
Definition FGTurbine.h:202
void SetInjection(bool injection)
Definition FGTurbine.h:211
bool GetInjection(void) const
Definition FGTurbine.h:187
void SetReverse(bool reversed)
Definition FGTurbine.h:217
void SetInjectionTimer(double injtimer)
Definition FGTurbine.h:221
double GetNozzle(void) const
Definition FGTurbine.h:195
void Calculate(void)
Calculates the thrust of the engine, and other engine functions.
FGTurbine(FGFDMExec *Executive, Element *el, int engine_number, struct Inputs &input)
Constructor.
Definition FGTurbine.cpp:59
double GetBleedDemand(void) const
Definition FGTurbine.h:196
double GetInjN2increment(void) const
Definition FGTurbine.h:209
double GetInjectionTimer(void) const
Definition FGTurbine.h:206
double getOilTemp_degF(void)
Definition FGTurbine.h:205
double GetEPR(void) const
Definition FGTurbine.h:199
void SetInjN1increment(double injN1inc)
Definition FGTurbine.h:223
double GetInjWaterNorm(void) const
Definition FGTurbine.h:207
phaseType GetPhase(void)
Definition FGTurbine.h:184
void SetPhase(phaseType p)
Definition FGTurbine.h:214
void SetAugmentation(bool augmentation)
Definition FGTurbine.h:213
double GetN2(void) const
Definition FGTurbine.h:198
void ResetToIC(void)
Resets the Engine parameters to the initial conditions.
double Seek(double *var, double target, double accel, double decel)
A lag filter.
void SetEPR(double epr)
Definition FGTurbine.h:215
void SetMaxN2(double maxn2)
Definition FGTurbine.h:220
friend class FGSpoolUp
Definition FGTurbine.h:310
~FGTurbine()
Destructor.
Definition FGTurbine.cpp:86
double GetN1(void) const
Definition FGTurbine.h:197
std::string GetEngineValues(const std::string &delimiter)
void SetInjWaterNorm(double injwater)
Definition FGTurbine.h:222
bool GetOvertemp(void) const
Definition FGTurbine.h:186
void SetMaxN1(double maxn1)
Definition FGTurbine.h:219
int GetIgnition(void) const
Definition FGTurbine.h:192
bool GetFire(void) const
Definition FGTurbine.h:188
double GetMaxN2(void) const
Definition FGTurbine.h:203
void SetInjN2increment(double injN2inc)
Definition FGTurbine.h:224
bool GetReversed(void) const
Definition FGTurbine.h:190
double CalcFuelNeed(void)
The fuel need is calculated based on power levels and flow rate for that power level.
void SetCutoff(bool cutoff)
Definition FGTurbine.h:218
double GetInjN1increment(void) const
Definition FGTurbine.h:208
int InitRunning(void)
std::string GetEngineLabels(const std::string &delimiter)
void SetBleedDemand(double bleedDemand)
Definition FGTurbine.h:216
double GetEGT(void) const
Definition FGTurbine.h:200
void SetIgnition(int ignition)
Definition FGTurbine.h:212
double GetPowerAvailable(void)
bool GetCutoff(void) const
Definition FGTurbine.h:191
double getOilPressure_psi() const
Definition FGTurbine.h:204