JSBSim Flight Dynamics Model  1.0 (02 March 2017)
An Open Source Flight Dynamics and Control Software Library in C++
FGTurbine Class Reference

This class models a turbine engine. More...

#include <FGTurbine.h>

+ Inheritance diagram for FGTurbine:
+ Collaboration diagram for FGTurbine:

Public Types

enum  phaseType {
  tpOff, tpRun, tpSpinUp, tpStart,
  tpStall, tpSeize, tpTrim
}
 
- Public Types inherited from FGEngine
enum  EngineType {
  etUnknown, etRocket, etPiston, etTurbine,
  etTurboprop, etElectric
}
 
- Public Types inherited from FGJSBBase
enum  { eL = 1, eM, eN }
 Moments L, M, N.
 
enum  { eP = 1, eQ, eR }
 Rates P, Q, R.
 
enum  { eU = 1, eV, eW }
 Velocities U, V, W.
 
enum  { eX = 1, eY, eZ }
 Positions X, Y, Z.
 
enum  { ePhi = 1, eTht, ePsi }
 Euler angles Phi, Theta, Psi.
 
enum  { eDrag = 1, eSide, eLift }
 Stability axis forces, Drag, Side force, Lift.
 
enum  { eRoll = 1, ePitch, eYaw }
 Local frame orientation Roll, Pitch, Yaw.
 
enum  { eNorth = 1, eEast, eDown }
 Local frame position North, East, Down.
 
enum  { eLat = 1, eLong, eRad }
 Locations Radius, Latitude, Longitude.
 
enum  {
  inNone = 0, inDegrees, inRadians, inMeters,
  inFeet
}
 Conversion specifiers.
 

Public Member Functions

 FGTurbine (FGFDMExec *Executive, Element *el, int engine_number, struct Inputs &input)
 Constructor. More...
 
 ~FGTurbine ()
 Destructor.
 
double CalcFuelNeed (void)
 The fuel need is calculated based on power levels and flow rate for that power level. More...
 
void Calculate (void)
 Calculates the thrust of the engine, and other engine functions. More...
 
bool GetAugmentation (void) const
 
double GetBleedDemand (void) const
 
bool GetCutoff (void) const
 
double GetEGT (void) const
 
std::string GetEngineLabels (const std::string &delimiter)
 
std::string GetEngineValues (const std::string &delimiter)
 
double GetEPR (void) const
 
bool GetFire (void) const
 
int GetIgnition (void) const
 
bool GetInjection (void) const
 
double GetInjectionTimer (void) const
 
double GetInjN1increment (void) const
 
double GetInjN2increment (void) const
 
double GetInjWaterNorm (void) const
 
double GetInlet (void) const
 
double GetMaxN1 (void) const
 
double GetMaxN2 (void) const
 
double GetN1 (void) const
 
double GetN2 (void) const
 
double GetNozzle (void) const
 
double getOilPressure_psi () const
 
double getOilTemp_degF (void)
 
bool GetOvertemp (void) const
 
phaseType GetPhase (void)
 
double GetPowerAvailable (void)
 
bool GetReversed (void) const
 
int InitRunning (void)
 
void ResetToIC (void)
 Resets the Engine parameters to the initial conditions.
 
double Seek (double *var, double target, double accel, double decel)
 A lag filter. More...
 
void SetAugmentation (bool augmentation)
 
void SetBleedDemand (double bleedDemand)
 
void SetCutoff (bool cutoff)
 
void SetEPR (double epr)
 
void SetIgnition (int ignition)
 
void SetInjection (bool injection)
 
void SetInjectionTimer (double injtimer)
 
void SetInjN1increment (double injN1inc)
 
void SetInjN2increment (double injN2inc)
 
void SetInjWaterNorm (double injwater)
 
void SetMaxN1 (double maxn1)
 
void SetMaxN2 (double maxn2)
 
void SetPhase (phaseType p)
 
void SetReverse (bool reversed)
 
- Public Member Functions inherited from FGEngine
 FGEngine (int engine_number, struct Inputs &input)
 
virtual double CalcOxidizerNeed (void)
 
virtual const FGColumnVector3GetBodyForces (void)
 
virtual bool GetCranking (void) const
 
virtual double getFuelFlow_gph () const
 
virtual double getFuelFlow_pph () const
 
virtual double GetFuelFlowRate (void) const
 
virtual double GetFuelFlowRateGPH (void) const
 
virtual double GetFuelUsedLbs (void) const
 
virtual const FGColumnVector3GetMoments (void)
 
virtual const std::string & GetName (void) const
 
size_t GetNumSourceTanks () const
 
virtual bool GetRunning (void) const
 
unsigned int GetSourceTank (unsigned int i) const
 
virtual bool GetStarter (void) const
 
virtual bool GetStarved (void) const
 
virtual double GetThrottleMax (void) const
 
virtual double GetThrottleMin (void) const
 
virtual double GetThrust (void) const
 
FGThrusterGetThruster (void) const
 
EngineType GetType (void) const
 
void LoadThruster (FGFDMExec *exec, Element *el)
 
void LoadThrusterInputs ()
 
virtual void SetFuelDensity (double d)
 
virtual void SetFuelFreeze (bool f)
 
virtual void SetName (const std::string &name)
 
virtual void SetPlacement (const FGColumnVector3 &location, const FGColumnVector3 &orientation)
 Sets engine placement information.
 
virtual void SetRunning (bool bb)
 
virtual void SetStarter (bool s)
 
virtual void SetStarved (bool tt)
 
virtual void SetStarved (void)
 
- Public Member Functions inherited from FGModelFunctions
std::string GetFunctionStrings (const std::string &delimeter) const
 Gets the strings for the current set of functions. More...
 
std::string GetFunctionValues (const std::string &delimeter) const
 Gets the function values. More...
 
FGFunctionGetPreFunction (const std::string &name)
 Get one of the "pre" function. More...
 
bool Load (Element *el, FGPropertyManager *PropertyManager, std::string prefix="")
 
void PostLoad (Element *el, FGPropertyManager *PropertyManager, std::string prefix="")
 
void PreLoad (Element *el, FGPropertyManager *PropertyManager, std::string prefix="")
 
void RunPostFunctions (void)
 
void RunPreFunctions (void)
 
- Public Member Functions inherited from FGJSBBase
 FGJSBBase ()
 Constructor for FGJSBBase.
 
virtual ~FGJSBBase ()
 Destructor for FGJSBBase.
 
void disableHighLighting (void)
 Disables highlighting in the console output.
 
std::string GetVersion (void)
 Returns the version number of JSBSim. More...
 
void PutMessage (const Message &msg)
 Places a Message structure on the Message queue. More...
 
void PutMessage (const std::string &text)
 Creates a message with the given text and places it on the queue. More...
 
void PutMessage (const std::string &text, bool bVal)
 Creates a message with the given text and boolean value and places it on the queue. More...
 
void PutMessage (const std::string &text, int iVal)
 Creates a message with the given text and integer value and places it on the queue. More...
 
void PutMessage (const std::string &text, double dVal)
 Creates a message with the given text and double value and places it on the queue. More...
 
int SomeMessages (void)
 Reads the message on the queue (but does not delete it). More...
 
void ProcessMessage (void)
 Reads the message on the queue and removes it from the queue. More...
 
MessageProcessNextMessage (void)
 Reads the next message on the queue and removes it from the queue. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from FGJSBBase
static double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit. More...
 
static double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin. More...
 
static double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine. More...
 
static double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison. More...
 
static double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius. More...
 
static double FeetToMeters (double measure)
 Converts from feet to meters. More...
 
static double GaussianRandomNumber (void)
 
static double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius. More...
 
static double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit. More...
 
static double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine. More...
 
static double MachFromVcalibrated (double vcas, double p, double psl, double rhosl)
 Calculate the Mach number from the calibrated airspeed. More...
 
static double PitotTotalPressure (double mach, double p)
 Compute the total pressure in front of the Pitot tube. More...
 
static double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius. More...
 
static double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin. More...
 
static double sign (double num)
 
static double VcalibratedFromMach (double mach, double p, double psl, double rhosl)
 Calculate the calibrated airspeed from the Mach number. More...
 
- Public Attributes inherited from FGEngine
struct Inputsin
 
- Static Public Attributes inherited from FGJSBBase
static short debug_lvl = 1
 
static char highint [5] = {27, '[', '1', 'm', '\0' }
 highlights text
 
static char halfint [5] = {27, '[', '2', 'm', '\0' }
 low intensity text
 
static char normint [6] = {27, '[', '2', '2', 'm', '\0' }
 normal intensity text
 
static char reset [5] = {27, '[', '0', 'm', '\0' }
 resets text properties
 
static char underon [5] = {27, '[', '4', 'm', '\0' }
 underlines text
 
static char underoff [6] = {27, '[', '2', '4', 'm', '\0' }
 underline off
 
static char fgblue [6] = {27, '[', '3', '4', 'm', '\0' }
 blue text
 
static char fgcyan [6] = {27, '[', '3', '6', 'm', '\0' }
 cyan text
 
static char fgred [6] = {27, '[', '3', '1', 'm', '\0' }
 red text
 
static char fggreen [6] = {27, '[', '3', '2', 'm', '\0' }
 green text
 
static char fgdef [6] = {27, '[', '3', '9', 'm', '\0' }
 default text
 
- Protected Member Functions inherited from FGEngine
void Debug (int from)
 
- Protected Member Functions inherited from FGModelFunctions
virtual bool InitModel (void)
 
- Protected Member Functions inherited from FGJSBBase
void Debug (int)
 
- Static Protected Member Functions inherited from FGJSBBase
static std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
- Protected Attributes inherited from FGEngine
bool Cranking
 
const int EngineNumber
 
double EnginePitch
 
double EngineYaw
 
double FuelDensity
 
double FuelExpended
 
double FuelFlow_gph
 
double FuelFlow_pph
 
double FuelFlowRate
 
bool FuelFreeze
 
double FuelUsedLbs
 
double MaxThrottle
 
double MinThrottle
 
std::string Name
 
double PctPower
 
bool Running
 
double SLFuelFlowMax
 
std::vector< int > SourceTanks
 
bool Starter
 
bool Starved
 
FGThrusterThruster
 
EngineType Type
 
double X
 
double Y
 
double Z
 
- Protected Attributes inherited from FGModelFunctions
FGPropertyReader LocalProperties
 
std::vector< FGFunction * > PostFunctions
 
std::vector< FGFunction * > PreFunctions
 
- Static Protected Attributes inherited from FGJSBBase
static const double degtorad = 0.017453292519943295769236907684886
 
static const double fpstokts = 1.0/ktstofps
 
static const double fttom = 0.3048
 
static int gaussian_random_number_phase = 0
 
static const double hptoftlbssec = 550.0
 
static const double in3tom3 = 1.638706E-5
 
static const double inchtoft = 0.08333333
 
static const double inhgtopa = 3386.38
 
static const std::string JSBSim_version = "1.0 " __DATE__ " " __TIME__
 
static const double kgtolb = 2.20462
 
static const double kgtoslug = 0.06852168
 
static const double ktstofps = 1.68781
 
static const double lbtoslug = 1.0/slugtolb
 
static Message localMsg
 
static const double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static double Mair = 28.9645
 
static unsigned int messageId = 0
 
static std::queue< MessageMessages
 
static const std::string needed_cfg_version = "2.0"
 
static const double psftoinhg = 0.014138
 
static const double psftopa = 47.88
 
static const double radtodeg = 57.295779513082320876798154814105
 
static double Reng = 1716.56
 
static double Rstar = 1545.348
 
static const double SHRatio = 1.40
 
static const double slugtolb = 32.174049
 

Detailed Description

This class models a turbine engine.

Based on Jon Berndt's FGTurbine module. Here the term "phase" signifies the engine's mode of operation. At any given time the engine is in only one phase. At simulator startup the engine will be placed in the Trim phase in order to provide a simplified thrust value without throttle lag. When trimming is complete the engine will go to the Off phase, unless the value FGEngine::Running has been previously set to true, in which case the engine will go to the Run phase. Once an engine is in the Off phase the full starting procedure (or airstart) must be used to get it running.

  • STARTING (on ground):
    1. Set the control FGEngine::Starter to true. The engine will spin up to a maximum of about %25 N2 (%5.2 N1). This simulates the action of a pneumatic starter.
    2. After reaching %15 N2 set the control FGEngine::Cutoff to false. If fuel is available the engine will now accelerate to idle. The starter will automatically be set to false after the start cycle.
  • STARTING (in air):

    1. Increase speed to obtain a minimum of %15 N2. If this is not possible, the starter may be used to assist.
    2. Place the control FGEngine::Cutoff to false.

    Ignition is assumed to be on anytime the Cutoff control is set to false, therefore a seperate ignition system is not modeled.

Configuration File Format:

<turbine_engine name="{string}">
<milthrust unit="{LBS | N}"> {number} </milthrust>
<maxthrust unit="{LBS | N}"> {number} </maxthrust>
<bypassratio> {number} </bypassratio>
<bleed> {number} </bleed>
<tsfc> {number} </tsfc>
<atsfc> {number} </atsfc>
<idlen1> {number} </idlen1>
<idlen2> {number} </idlen2>
<n1spinup> {number} </n1spinup>
<n2spinup> {number} </n2spinup>
<maxn1> {number} </maxn1>
<maxn2> {number} </maxn2>
<augmented> {0 | 1} </augmented>
<augmethod> {0 | 1 | 2} </augmethod>
<injected> {0 | 1} </injected>
<injection-time> {number} </injection-time>
</turbine_engine>

Definition of the turbine engine configuration file parameters:

  milthrust   - Maximum thrust, static, at sea level.
  maxthrust   - Afterburning thrust, static, at sea level.
  bypassratio - Ratio of bypass air flow to core air flow.
  bleed       - Thrust reduction factor due to losses (0.0 to 1.0).
  tsfc        - Thrust-specific fuel consumption at cruise, lbm/hr/lbf
  atsfc       - Afterburning TSFC, lbm/hr/lbf
  idlen1      - Fan rotor rpm (% of max) at idle
  idlen2      - Core rotor rpm (% of max) at idle
  n1spinup    - Fan rotor rpm starter acceleration (default 1.0)
  n2spinup    - Core rotor rpm starter acceleration (default 3.0)
  maxn1       - Fan rotor rpm (% of max) at full throttle 
  maxn2       - Core rotor rpm (% of max) at full throttle
  augmented
              0 = afterburner not installed
              1 = afterburner installed
  augmethod
              0 = afterburner activated by property /engines/engine[n]/augmentation
              1 = afterburner activated by pushing throttle above 99% position
              2 = throttle range is expanded in the FCS, and values above 1.0 are afterburner range
  injected
              0 = Water injection not installed
              1 = Water injection installed
  injection-time - Time, in seconds, of water injection duration 
  InjN1increment - % increase in N1 when injection is taking place
  InjN2increment - % increase in N2 when injection is taking place

NOTES:

    Bypass ratio is used only to estimate engine acceleration time.  The
    effect of bypass ratio on engine efficiency is already included in
    the TSFC value.  Feel free to set this parameter (even for turbojets) to
    whatever value gives a desired spool-up rate. Default value is 0.
    The bleed factor is multiplied by thrust to give a resulting thrust
    after losses.  This can represent losses due to bleed, or any other cause.
    Default value is 0.  A common value would be 0.04.
    Nozzle position, for variable area exhaust nozzles, is provided for users
    needing to drive a nozzle gauge or animate a virtual nozzle.
    This model can only be used with the "direct" thruster.  See the file:
    /engine/direct.xml
Author
David P. Culp
Version
"$Id: FGTurbine.h,v 1.26 2015/09/27 10:07:53 bcoconni Exp $"

Definition at line 162 of file FGTurbine.h.

Constructor & Destructor Documentation

◆ FGTurbine()

FGTurbine ( FGFDMExec Executive,
Element el,
int  engine_number,
struct Inputs input 
)

Constructor.

Parameters
Executivepointer to executive structure
elpointer to the XML element representing the turbine engine
engine_numberengine number

Definition at line 62 of file FGTurbine.cpp.

63  : FGEngine(engine_number, input), FDMExec(exec)
64 {
65  Type = etTurbine;
66 
67  MilThrust = MaxThrust = 10000.0;
68  TSFC = 0.8;
69  ATSFC = 1.7;
70  IdleN1 = 30.0;
71  IdleN2 = 60.0;
72  MaxN1 = MaxN2 = 100.0;
73  Augmented = AugMethod = Injected = 0;
74  BypassRatio = BleedDemand = 0.0;
75  IdleThrustLookup = MilThrustLookup = MaxThrustLookup = InjectionLookup = 0;
76  N1_spinup = 1.0; N2_spinup = 3.0;
77  InjectionTime = 30.0;
78  InjectionTimer = InjWaterNorm = 0.0;
79  EPR = 1.0;
80 
81  Load(exec, el);
82  Debug(0);
83 }

Member Function Documentation

◆ CalcFuelNeed()

double CalcFuelNeed ( void  )
virtual

The fuel need is calculated based on power levels and flow rate for that power level.

It is also turned from a rate into an actual amount (pounds) by multiplying it by the delta T and the rate.

Returns
Total fuel requirement for this engine in pounds.

Reimplemented from FGEngine.

Definition at line 387 of file FGTurbine.cpp.

388 {
389  FuelFlowRate = FuelFlow_pph / 3600.0; // Calculates flow in lbs/sec from lbs/hr
390  FuelExpended = FuelFlowRate * in.TotalDeltaT; // Calculates fuel expended in this time step
391  if (!Starved) FuelUsedLbs += FuelExpended;
392  return FuelExpended;
393 }

◆ Calculate()

void Calculate ( void  )
virtual

Calculates the thrust of the engine, and other engine functions.

Implements FGEngine.

Definition at line 115 of file FGTurbine.cpp.

116 {
117  double thrust;
118 
119  RunPreFunctions();
120 
121  ThrottlePos = in.ThrottlePos[EngineNumber];
122 
123  if (ThrottlePos > 1.0) {
124  AugmentCmd = ThrottlePos - 1.0;
125  ThrottlePos -= AugmentCmd;
126  } else {
127  AugmentCmd = 0.0;
128  }
129 
130  // When trimming is finished check if user wants engine OFF or RUNNING
131  if ((phase == tpTrim) && (in.TotalDeltaT > 0)) {
132  if (Running && !Starved) {
133  phase = tpRun;
134  N1_factor = MaxN1 - IdleN1;
135  N2_factor = MaxN2 - IdleN2;
136  N2 = IdleN2 + ThrottlePos * N2_factor;
137  N1 = IdleN1 + ThrottlePos * N1_factor;
138  OilTemp_degK = 366.0;
139  Cutoff = false;
140  } else {
141  phase = tpOff;
142  Cutoff = true;
143  EGT_degC = in.TAT_c;
144  }
145  }
146 
147  if (!Running && Cutoff && Starter) {
148  if (phase == tpOff) phase = tpSpinUp;
149  }
150 
151  // start
152  if ((Starter == true) || (in.qbar > 30.0)) {
153  if (!Running && !Cutoff && (N2 > 15.0)) phase = tpStart;
154  }
155 
156  if (Cutoff && (phase != tpSpinUp)) phase = tpOff;
157  if (in.TotalDeltaT == 0) phase = tpTrim;
158  if (Starved) phase = tpOff;
159  if (Stalled) phase = tpStall;
160  if (Seized) phase = tpSeize;
161 
162  switch (phase) {
163  case tpOff: thrust = Off(); break;
164  case tpRun: thrust = Run(); break;
165  case tpSpinUp: thrust = SpinUp(); break;
166  case tpStart: thrust = Start(); break;
167  case tpStall: thrust = Stall(); break;
168  case tpSeize: thrust = Seize(); break;
169  case tpTrim: thrust = Trim(); break;
170  default: thrust = Off();
171  }
172 
173  Thruster->Calculate(thrust); // allow thruster to modify thrust (i.e. reversing)
174 
175  RunPostFunctions();
176 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Seek()

double Seek ( double *  var,
double  target,
double  accel,
double  decel 
)

A lag filter.

Used to control the rate at which values are allowed to change.

Parameters
vara pointer to a variable of type double
targetthe desired (target) value
accelthe rate, per second, the value may increase
decelthe rate, per second, the value may decrease

Definition at line 406 of file FGTurbine.cpp.

406  {
407  double v = *var;
408  if (v > target) {
409  v -= in.TotalDeltaT * decel;
410  if (v < target) v = target;
411  } else if (v < target) {
412  v += in.TotalDeltaT * accel;
413  if (v > target) v = target;
414  }
415  return v;
416 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

The documentation for this class was generated from the following files: