JSBSim Flight Dynamics Model  1.2.0 (05 Nov 2023)
An Open Source Flight Dynamics and Control Software Library in C++
FGTurbine Class Reference

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 value may be changed using the <startnX> parameter. 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 separate 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>
<ignitionn1> {number} </ignitionn1>
<ignitionn2> {number} </ignitionn2>
<idlen1> {number} </idlen1>
<idlen2> {number} </idlen2>
<n1spinup> {number} </n1spinup>
<n2spinup> {number} </n2spinup>
<n1startrate> {number} </n1startrate>
<n2startrate> {number} </n2startrate>
<n1spindown> {number} </n1spindown>
<n2spindown> {number} </n2spindown>
<maxn1> {number} </maxn1>
<maxn2> {number} </maxn2>
<augmented> {0 | 1} </augmented>
<augmethod> {0 | 1 | 2} </augmethod>
<injected> {0 | 1} </injected>
<injection-time> {number} </injection-time>
<disable-windmill> {0 | 1}</disable-windmill>
</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
  ignitionn1  - Fan rotor rpm (% of max) while starting
  ignitionn2  - Core rotor rpm (% of max) while starting
  idlen1      - Fan rotor rpm (% of max) at idle
  idlen2      - Core rotor rpm (% of max) at idle
  n1spinup    - Fan rotor rpm starter acceleration to ignitionn1 value (default 1.0)
  n2spinup    - Core rotor rpm starter acceleration to ignitionn2 value (default 3.0)
  n1startrate - Fan rotor rpm time taken to accelerate from ignitionn1 to idlen1 value (default 1.4)
  n2startrate - Core rotor rpm time taken to accelerate to ignitionn2 idlen2 value (default 2.0)
  n1spindown  - Factor used in calculation for fan rotor time to spool down to zero (default 2.0)
  n2spindown  - Factor used in calculation for core rotor time to spool down to zero (default 2.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
  disable-windmill - flag that disables engine windmilling when off if true

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

Definition at line 173 of file FGTurbine.h.

#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...
 
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.
 
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 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...
 
std::shared_ptr< FGFunctionGetPreFunction (const std::string &name)
 Get one of the "pre" function. More...
 
bool Load (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PostLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PreLoad (Element *el, FGFDMExec *fdmex, 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.
 

Friends

class FGSimplifiedTSFC
 
class FGSpoolUp
 

Additional Inherited Members

- Static Public Member Functions inherited from FGJSBBase
static const std::string & GetVersion (void)
 Returns the version number of JSBSim. More...
 
static constexpr double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit. More...
 
static constexpr double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine. More...
 
static constexpr double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius. More...
 
static constexpr double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine. More...
 
static constexpr double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin. More...
 
static constexpr double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius. More...
 
static constexpr double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit. More...
 
static constexpr double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin. More...
 
static constexpr double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius. More...
 
static constexpr double FeetToMeters (double measure)
 Converts from feet to meters. More...
 
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 constexpr double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static constexpr double sign (double num)
 
- Public Attributes inherited from FGEngine
struct Inputsin
 
- Static Public Attributes inherited from FGJSBBase
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
 
static short debug_lvl = 1
 
- Protected Member Functions inherited from FGEngine
void Debug (int from)
 
bool Load (FGFDMExec *exec, Element *el)
 
- Protected Member Functions inherited from FGModelFunctions
virtual bool InitModel (void)
 
- 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 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
 
- Protected Attributes inherited from FGModelFunctions
FGPropertyReader LocalProperties
 
std::vector< std::shared_ptr< FGFunction > > PostFunctions
 
std::vector< std::shared_ptr< FGFunction > > PreFunctions
 
- Static Protected Attributes inherited from FGJSBBase
static constexpr double radtodeg = 180. / M_PI
 
static constexpr double degtorad = M_PI / 180.
 
static constexpr double hptoftlbssec = 550.0
 
static constexpr double psftoinhg = 0.014138
 
static constexpr double psftopa = 47.88
 
static constexpr double fttom = 0.3048
 
static constexpr double ktstofps = 1852./(3600*fttom)
 
static constexpr double fpstokts = 1.0 / ktstofps
 
static constexpr double inchtoft = 1.0/12.0
 
static constexpr double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static constexpr double in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3
 
static constexpr double inhgtopa = 3386.38
 
static constexpr double slugtolb = 32.174049
 Note that definition of lbtoslug by the inverse of slugtolb and not to a different constant you can also get from some tables will make lbtoslug*slugtolb == 1 up to the magnitude of roundoff. More...
 
static constexpr double lbtoslug = 1.0/slugtolb
 
static constexpr double kgtolb = 2.20462
 
static constexpr double kgtoslug = 0.06852168
 
static const std::string needed_cfg_version = "2.0"
 
static const std::string JSBSim_version = JSBSIM_VERSION " " __DATE__ " " __TIME__
 

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 60 of file FGTurbine.cpp.

61  : FGEngine(engine_number, input), FDMExec(exec)
62 {
63  Type = etTurbine;
64 
65  MilThrust = MaxThrust = 10000.0;
66  TSFC = std::make_unique<FGSimplifiedTSFC>(this, 0.8);
67  ATSFC = std::make_unique<FGRealValue>(1.7);
68  IdleN1 = 30.0;
69  IdleN2 = 60.0;
70  MaxN1 = MaxN2 = 100.0;
71  Augmented = AugMethod = Injected = 0;
72  BypassRatio = BleedDemand = 0.0;
73  IdleThrustLookup = MilThrustLookup = MaxThrustLookup = InjectionLookup = nullptr;
74  N1_spinup = 1.0; N2_spinup = 3.0; IgnitionN1 = 5.21; IgnitionN2 = 25.18; N1_start_rate = 1.4; N2_start_rate = 2.0;
75  N1_spindown = 2.0; N2_spindown = 2.0;
76  InjectionTime = 30.0;
77  InjectionTimer = InjWaterNorm = 0.0;
78  EPR = 1.0;
79  disableWindmill = false;
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 381 of file FGTurbine.cpp.

382 {
383  FuelFlowRate = FuelFlow_pph / 3600.0; // Calculates flow in lbs/sec from lbs/hr
384  FuelExpended = FuelFlowRate * in.TotalDeltaT; // Calculates fuel expended in this time step
385  if (!Starved) FuelUsedLbs += FuelExpended;
386  return FuelExpended;
387 }

◆ 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 400 of file FGTurbine.cpp.

400  {
401  double v = *var;
402  if (v > target) {
403  v -= in.TotalDeltaT * decel;
404  if (v < target) v = target;
405  } else if (v < target) {
406  v += in.TotalDeltaT * accel;
407  if (v > target) v = target;
408  }
409  return v;
410 }

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