X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FYASim%2FJet.cpp;h=afbb669cde95956af65c2865aa9757791abaad16;hb=5a9c5d80c89f738ba1f94de765905b35f0d61409;hp=e3448a91966a63915558b9e0707a6f0a3e2b71fd;hpb=56473dc28d960524ccdf83b33f477adcade1fcd4;p=flightgear.git diff --git a/src/FDM/YASim/Jet.cpp b/src/FDM/YASim/Jet.cpp index e3448a919..afbb669cd 100644 --- a/src/FDM/YASim/Jet.cpp +++ b/src/FDM/YASim/Jet.cpp @@ -10,6 +10,7 @@ Jet::Jet() _reheat = 0; _rotControl = 0; _maxRot = 0; + _reverseThrust = false; // Initialize parameters for an early-ish subsonic turbojet. More // recent turbofans will typically have a lower vMax, epr0, and @@ -31,6 +32,7 @@ Jet::Jet() // And sanify the remaining junk, just in case. _running = true; _cranking = false; + _fuel = true; _epr = 1; _fuelFlow = 0; _egt = 273; @@ -148,16 +150,22 @@ void Jet::integrate(float dt) _pressureCorrect = statP/P0; _tempCorrect = Math::sqrt(statT/T0); + // Handle running out of fuel. This is a hack. What should + // really happen is a simulation of ram air torque on the + // turbine. This just forces the engine into ground idle. + if(_fuel == false) + _throttle = 0; + // Linearly taper maxThrust to zero at vMax float vCorr = 1 - (speed/_vMax); float maxThrust = _maxThrust * vCorr * (statD/D0); - _thrust = maxThrust * _throttle; + float setThrust = maxThrust * _throttle; // Now get a "beta" (i.e. EPR - 1) value. The output values are // expressed as functions of beta. float ibeta0 = 1/(_epr0 - 1); - float betaTarget = (_epr0 - 1) * (_thrust/_maxThrust) * (P0/_pressure) + float betaTarget = (_epr0 - 1) * (setThrust/_maxThrust) * (P0/_pressure) * (_temp/statT); float n2Target = _n2Min + (betaTarget*ibeta0) * (_n2Max - _n2Min); @@ -173,7 +181,7 @@ void Jet::integrate(float dt) // The actual thrust produced is keyed to the N1 speed. Add the // afterburners in at the end. float betaN1 = (_epr0-1) * (_n1 - _n1Min) / (_n1Max - _n1Min); - _thrust *= betaN1/(betaTarget+0.00001f); // blowup protection + _thrust = _maxThrust * betaN1/((_epr0-1)*(P0/_pressure)*(_temp/statT)); _thrust *= 1 + _reheat*(_abFactor-1); // Finally, calculate the output variables. Use a 80/20 mix of @@ -186,6 +194,9 @@ void Jet::integrate(float dt) // 3.5 times as much // fuel per thrust unit _egt = T0 + beta*ibeta0 * (_egt0 - T0); + + // Thrust reverse handling: + if(_reverseThrust) _thrust *= -_reverseEff; } bool Jet::isRunning()