09/22/2003 DPC Added starting, stopping, new framework
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-COMMENTS, REFERENCES, and NOTES
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SENTRY
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
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.
<P>
- -STARTING (on ground):
- -# 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.
- -# 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 (on ground):
+ -# 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.
+ -# 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.
<P>
- -STARTING (in air):
- -# Increase speed to obtain a minimum of %15 N2. If this is not possible,
- the starter may be used to assist.
- -# Place the control FGEngine::Cutoff to false.
+ - STARTING (in air):
+ -# Increase speed to obtain a minimum of %15 N2. If this is not possible,
+ the starter may be used to assist.
+ -# Place the control FGEngine::Cutoff to false.
<P>
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
+<pre>
+\<FG_SIMTURBINE NAME="<name>">
+ MILTHRUST \<thrust>
+ MAXTHRUST \<thrust>
+ BYPASSRATIO \<bypass ratio>
+ TSFC \<thrust specific fuel consumption>
+ ATSFC \<afterburning thrust specific fuel consumption>
+ IDLEN1 \<idle N1>
+ IDLEN2 \<idle N2>
+ MAXN1 \<max N1>
+ MAXN2 \<max N2>
+ AUGMENTED \<0|1>
+ AUGMETHOD \<0|1>
+ INJECTED \<0|1>
+ ...
+\</FG_SIMTURBINE>
+</pre>
+Definition of the turbine engine configuration file parameters:
+<pre>
+<b>MILTHRUST</b> - Maximum thrust, static, at sea level, lbf.
+<b>MAXTHRUST</b> - Afterburning thrust, static, at sea level, lbf
+[this value will be ignored when AUGMENTED is zero (false)].
+<b>BYPASSRATIO</b> - Ratio of bypass air flow to core air flow.
+<b>TSFC</b> - Thrust-specific fuel consumption, lbm/hr/lbf
+[i.e. fuel flow divided by thrust].
+<b>ATSFC</b> - Afterburning TSFC, lbm/hr/lbf
+[this value will be ignored when AUGMENTED is zero (false)]
+<b>IDLEN1</b> - Fan rotor rpm (% of max) at idle
+<b>IDLEN2</b> - Core rotor rpm (% of max) at idle
+<b>MAXN1</b> - Fan rotor rpm (% of max) at full throttle [not always 100!]
+<b>MAXN2</b> - Core rotor rpm (% of max) at full throttle [not always 100!]
+<b>AUGMENTED</b>
+ 0 == afterburner not installed
+ 1 == afterburner installed
+<b>AUGMETHOD</b>
+ 0 == afterburner activated by property /engines/engine[n]/augmentation
+ 1 == afterburner activated by pushing throttle above 99% position
+ [this item will be ignored when AUGMENTED == 0]
+<b>INJECTED</b>
+ 0 == Water injection not installed
+ 1 == Water injection installed
+</pre>
@author David P. Culp
- @version $Id$
+ @version "$Id$"
*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{
public:
/** Constructor
- @param exec pointer to executive structure
- @param Eng_Cfg pointer to engine config file instance */
- FGSimTurbine(FGFDMExec* exec, FGConfigFile* Eng_cfg);
+ @param Executive pointer to executive structure
+ @param Eng_cfg pointer to engine config file instance */
+ FGSimTurbine(FGFDMExec* Executive, FGConfigFile* Eng_cfg);
/// Destructor
~FGSimTurbine();
enum phaseType { tpOff, tpRun, tpSpinUp, tpStart, tpStall, tpSeize, tpTrim };
- double Calculate(double);
+ double Calculate(double PowerRequired);
double CalcFuelNeed(void);
double GetPowerAvailable(void);
double Seek(double* var, double target, double accel, double decel);
- virtual phaseType GetPhase(void) { return phase; }
- virtual void SetPhase( phaseType p ) { phase = p; }
+ phaseType GetPhase(void) { return phase; }
+
+ bool GetOvertemp(void) {return Overtemp; }
+ bool GetInjection(void) {return Injection;}
+ bool GetFire(void) { return Fire; }
+ bool GetAugmentation(void) {return Augmentation;}
+ bool GetReversed(void) { return Reversed; }
+ bool GetCutoff(void) { return Cutoff; }
+ int GetIgnition(void) {return Ignition;}
+
+ double GetInlet(void) { return InletPosition; }
+ double GetNozzle(void) { return NozzlePosition; }
+ double GetBleedDemand(void) {return BleedDemand;}
+ double GetN1(void) {return N1;}
+ double GetN2(void) {return N2;}
+ double GetEPR(void) {return EPR;}
+ double GetEGT(void) {return EGT_degC;}
+
+ double getOilPressure_psi () const {return OilPressure_psi;}
+ double getOilTemp_degF (void) {return KelvinToFahrenheit(OilTemp_degK);}
+
+ void SetInjection(bool injection) {Injection = injection;}
+ void SetIgnition(int ignition) {Ignition = ignition;}
+ void SetAugmentation(bool augmentation) {Augmentation = augmentation;}
+ void SetPhase( phaseType p ) { phase = p; }
+ void SetEPR(double epr) {EPR = epr;}
+ void SetBleedDemand(double bleedDemand) {BleedDemand = bleedDemand;}
+ void SetReverse(bool reversed) { Reversed = reversed; }
+ void SetCutoff(bool cutoff) { Cutoff = cutoff; }
- virtual bool GetOvertemp(void) { return Overtemp; }
- virtual bool GetFire(void) { return Fire; }
-
private:
typedef vector<FGCoefficient*> CoeffArray;
double ATSFC; ///< Augmented TSFC (lbm/hr/lbf)
double IdleN1; ///< Idle N1
double IdleN2; ///< Idle N2
+ double N1; ///< N1
+ double N2; ///< N2
double MaxN1; ///< N1 at 100% throttle
double MaxN2; ///< N2 at 100% throttle
double IdleFF; ///< Idle Fuel Flow (lbm/hr)
bool Seized; ///< true if inner spool is seized
bool Overtemp; ///< true if EGT exceeds limits
bool Fire; ///< true if engine fire detected
- int Augmented; ///< = 1 if augmentation installed
+ bool Injection;
+ bool Augmentation;
+ bool Reversed;
+ bool Cutoff;
int Injected; ///< = 1 if water injection installed
+ int Ignition;
+ int Augmented; ///< = 1 if augmentation installed
int AugMethod; ///< = 0 if using property /engine[n]/augmentation
///< = 1 if using last 1% of throttle movement
+ double EGT_degC;
+ double EPR;
+ double OilPressure_psi;
+ double OilTemp_degK;
+ double BleedDemand;
+ double InletPosition;
+ double NozzlePosition;
double Off(void);
double Run(void);