#include <iostream>
#include <sstream>
+
#include "FGTurbine.h"
#include "FGThruster.h"
-#include "models/FGPropulsion.h"
-#include "models/FGAuxiliary.h"
-#include "models/FGAtmosphere.h"
using namespace std;
namespace JSBSim {
-static const char *IdSrc = "$Id: FGTurbine.cpp,v 1.32 2011/06/07 00:28:03 jentron Exp $";
+static const char *IdSrc = "$Id: FGTurbine.cpp,v 1.36 2011/09/25 23:56:11 jentron Exp $";
static const char *IdHdr = ID_TURBINE;
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-FGTurbine::FGTurbine(FGFDMExec* exec, Element *el, int engine_number)
- : FGEngine(exec, el, engine_number)
+FGTurbine::FGTurbine(FGFDMExec* exec, Element *el, int engine_number, struct Inputs& input)
+ : FGEngine(exec, el, engine_number, input)
{
Type = etTurbine;
N1 = N2 = 0.0;
N2norm = 0.0;
correctedTSFC = TSFC;
- ThrottlePos = AugmentCmd = 0.0;
+ AugmentCmd = 0.0;
InletPosition = NozzlePosition = 1.0;
Stalled = Seized = Overtemp = Fire = Augmentation = Injection = Reversed = false;
Cutoff = true;
phase = tpOff;
- TAT = (Auxiliary->GetTotalTemperature() - 491.69) * 0.5555556;
+ TAT = (in.TotalTempearture - 491.69) * 0.5555556;
EGT_degC = TAT;
OilTemp_degK = TAT + 273.0;
}
RunPreFunctions();
- TAT = (Auxiliary->GetTotalTemperature() - 491.69) * 0.5555556;
- double qbar = Auxiliary->Getqbar();
- dt = FDMExec->GetDeltaT() * Propulsion->GetRate();
- ThrottlePos = FCS->GetThrottlePos(EngineNumber);
+ ThrottlePos = in.ThrottlePos[EngineNumber];
+
+ TAT = (in.TotalTempearture - 491.69) * 0.5555556;
if (ThrottlePos > 1.0) {
AugmentCmd = ThrottlePos - 1.0;
ThrottlePos -= AugmentCmd;
}
// When trimming is finished check if user wants engine OFF or RUNNING
- if ((phase == tpTrim) && (dt > 0)) {
+ if ((phase == tpTrim) && (in.TotalDeltaT > 0)) {
if (Running && !Starved) {
phase = tpRun;
N2 = IdleN2 + ThrottlePos * N2_factor;
}
// start
- if ((Starter == true) || (qbar > 30.0)) {
+ if ((Starter == true) || (in.qbar > 30.0)) {
if (!Running && !Cutoff && (N2 > 15.0)) phase = tpStart;
}
if (Cutoff && (phase != tpSpinUp)) phase = tpOff;
- if (dt == 0) phase = tpTrim;
+ if (in.TotalDeltaT == 0) phase = tpTrim;
if (Starved) phase = tpOff;
if (Stalled) phase = tpStall;
if (Seized) phase = tpSeize;
double FGTurbine::Off(void)
{
- double qbar = Auxiliary->Getqbar();
Running = false;
FuelFlow_pph = Seek(&FuelFlow_pph, 0, 1000.0, 10000.0);
- N1 = Seek(&N1, qbar/10.0, N1/2.0, N1/2.0);
- N2 = Seek(&N2, qbar/15.0, N2/2.0, N2/2.0);
+ N1 = Seek(&N1, in.qbar/10.0, N1/2.0, N1/2.0);
+ N2 = Seek(&N2, in.qbar/15.0, N2/2.0, N2/2.0);
EGT_degC = Seek(&EGT_degC, TAT, 11.7, 7.3);
OilTemp_degK = Seek(&OilTemp_degK, TAT + 273.0, 0.2, 0.2);
OilPressure_psi = N2 * 0.62;
NozzlePosition = Seek(&NozzlePosition, 1.0, 0.8, 0.8);
EPR = Seek(&EPR, 1.0, 0.2, 0.2);
Augmentation = false;
- ConsumeFuel();
return 0.0;
}
{
double idlethrust, milthrust, thrust;
double spoolup; // acceleration in pct/sec
- double sigma = Atmosphere->GetDensityRatio();
- double T = Atmosphere->GetTemperature();
+ double sigma = in.DensityRatio;
+ double T = in.Temperature;
idlethrust = MilThrust * IdleThrustLookup->GetValue();
milthrust = (MilThrust - idlethrust) * MilThrustLookup->GetValue();
}
if ((Injected == 1) && Injection) {
- InjectionTimer += dt;
+ InjectionTimer += in.TotalDeltaT;
if (InjectionTimer < InjectionTime) {
thrust = thrust * InjectionLookup->GetValue();
} else {
}
}
- ConsumeFuel();
if (Cutoff) phase = tpOff;
if (Starved) phase = tpOff;
double FGTurbine::Start(void)
{
- double qbar = Auxiliary->Getqbar();
if ((N2 > 15.0) && !Starved) { // minimum 15% N2 needed for start
Cranking = true; // provided for sound effects signal
if (N2 < IdleN2) {
EGT_degC = Seek(&EGT_degC, TAT + 363.1, 21.3, 7.3);
FuelFlow_pph = IdleFF * N2 / IdleN2;
OilPressure_psi = N2 * 0.62;
- ConsumeFuel();
- if ((Starter == false) && (qbar < 30.0)) phase = tpOff; // aborted start
+ if ((Starter == false) && (in.qbar < 30.0)) phase = tpOff; // aborted start
}
else {
phase = tpRun;
double FGTurbine::Stall(void)
{
- double qbar = Auxiliary->Getqbar();
EGT_degC = TAT + 903.14;
FuelFlow_pph = IdleFF;
- N1 = Seek(&N1, qbar/10.0, 0, N1/10.0);
- N2 = Seek(&N2, qbar/15.0, 0, N2/10.0);
- ConsumeFuel();
+ N1 = Seek(&N1, in.qbar/10.0, 0, N1/10.0);
+ N2 = Seek(&N2, in.qbar/15.0, 0, N2/10.0);
if (ThrottlePos < 0.01) {
phase = tpRun; // clear the stall with throttle to idle
Stalled = false;
double FGTurbine::Seize(void)
{
- double qbar = Auxiliary->Getqbar();
N2 = 0.0;
- N1 = Seek(&N1, qbar/20.0, 0, N1/15.0);
+ N1 = Seek(&N1, in.qbar/20.0, 0, N1/15.0);
FuelFlow_pph = Cutoff ? 0.0 : IdleFF;
- ConsumeFuel();
OilPressure_psi = 0.0;
OilTemp_degK = Seek(&OilTemp_degK, TAT + 273.0, 0, 0.2);
Running = false;
double FGTurbine::CalcFuelNeed(void)
{
- double dT = FDMExec->GetDeltaT() * Propulsion->GetRate();
FuelFlowRate = FuelFlow_pph / 3600.0; // Calculates flow in lbs/sec from lbs/hr
- FuelExpended = FuelFlowRate * dT; // Calculates fuel expended in this time step
+ FuelExpended = FuelFlowRate * in.TotalDeltaT; // Calculates fuel expended in this time step
+ if (!Starved) FuelUsedLbs += FuelExpended;
return FuelExpended;
}
double FGTurbine::Seek(double *var, double target, double accel, double decel) {
double v = *var;
if (v > target) {
- v -= dt * decel;
+ v -= in.TotalDeltaT * decel;
if (v < target) v = target;
} else if (v < target) {
- v += dt * accel;
+ v += in.TotalDeltaT * accel;
if (v > target) v = target;
}
return v;
delay = 90.0 / (BypassRatio + 3.0);
N1_factor = MaxN1 - IdleN1;
N2_factor = MaxN2 - IdleN2;
- OilTemp_degK = (Auxiliary->GetTotalTemperature() - 491.69) * 0.5555556 + 273.0;
+ OilTemp_degK = (in.TotalTempearture - 491.69) * 0.5555556 + 273.0;
IdleFF = pow(MilThrust, 0.2) * 107.0; // just an estimate
bindmodel();
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-int FGTurbine::InitRunning(void) {
+int FGTurbine::InitRunning(void)
+{
FDMExec->SuspendIntegration();
Cutoff=false;
Running=true;