]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/YASim/TurbineEngine.cpp
FGPUIDialog: fix reading from already free'd memory.
[flightgear.git] / src / FDM / YASim / TurbineEngine.cpp
index ee79fcdb1a8f8c73d17fbefd6f7133b3353877bf..9d3af66091b1a586f462dcee2d22b584af6122aa 100644 (file)
@@ -7,18 +7,19 @@ namespace yasim {
 TurbineEngine::TurbineEngine(float power, float omega, float alt,
                              float flatRating)
 {
-    // _cond_lever = 1.0;
+    _cond_lever = 1.0;
 
     _rho0 = Atmosphere::getStdDensity(0);
     _maxTorque = (power/omega) * _rho0 / Atmosphere::getStdDensity(alt);
     _flatRating = flatRating;
-    _bsfc = 0.047; // == 0.5 lb/hr per hp
-    _n2Min = 65;
+    _bsfc = 8.47e-08; // in kg/s per watt == 0.5 lb/hr per hp
+    _n2LowIdle = 50;
+    _n2HighIdle = 70;
     _n2Max = 100;
 
     _rho = _rho0;
     _omega = 0;
-    _n2 = _n2Target = _n2Min;
+    _n2 = _n2Target = _n2Min = _n2LowIdle;
     _torque = 0;
     _fuelFlow = 0;
 
@@ -29,11 +30,12 @@ void TurbineEngine::setOutputFromN2()
 {
     float frac = (_n2 - _n2Min) / (_n2Max - _n2Min);
     _torque = frac * _maxTorque * (_rho / _rho0);
-    _fuelFlow = _bsfc * _torque * _omega;
+    _fuelFlow = _running ? _bsfc * _torque * _omega : 0;
 }
 
 void TurbineEngine::stabilize()
 {
+    _fuel = true;
     _n2 = _n2Target;
     setOutputFromN2();
 }
@@ -50,12 +52,9 @@ void TurbineEngine::integrate(float dt)
 
 void TurbineEngine::calc(float pressure, float temp, float omega)
 {
-    if ( _cond_lever < 0.001 ) {
-        _running = false;
-    } else {
-        _running = true;
-    }
+    _running = _fuel && _cond_lever > 0.001;
 
+    _n2Min = _n2LowIdle + (_n2HighIdle - _n2LowIdle) * _cond_lever;
     _omega = omega;
     _rho = Atmosphere::calcStdDensity(pressure, temp);
 
@@ -66,11 +65,7 @@ void TurbineEngine::calc(float pressure, float temp, float omega)
 
     float frac = torque / (_maxTorque * (_rho / _rho0));
 
-    if ( _running ) {
-        _n2Target = _n2Min + (_n2Max - _n2Min) * frac;
-    } else {
-        _n2Target = 0;
-    }
+    _n2Target = _running ? _n2Min + (_n2Max - _n2Min) * frac : 0;
 }
 
 }; // namespace yasim