X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FYASim%2FPistonEngine.hpp;h=40d6bac52e5dcbbca5cf98e7d012b74548eb5b8a;hb=6afe252440140c1e1fadcfe9aea2c1e31e1607f2;hp=acfc01baa3b60a3ab09c57d1d7667ba9670e36b8;hpb=4c422bbe6d3160d4a46058da87942c6317ce3dca;p=flightgear.git diff --git a/src/FDM/YASim/PistonEngine.hpp b/src/FDM/YASim/PistonEngine.hpp index acfc01baa..40d6bac52 100644 --- a/src/FDM/YASim/PistonEngine.hpp +++ b/src/FDM/YASim/PistonEngine.hpp @@ -1,40 +1,62 @@ #ifndef _PISTONENGINE_HPP #define _PISTONENGINE_HPP +#include "Engine.hpp" + namespace yasim { -class PistonEngine { +class PistonEngine : public Engine { public: + virtual PistonEngine* isPistonEngine() { return this; } + // Initializes an engine from known "takeoff" parameters. PistonEngine(float power, float spd); void setTurboParams(float mul, float maxMP); - - void setThrottle(float throttle); - void setMixture(float mixture); - - float getPower(); - - // Calculates power output and fuel flow, based on a given - // throttle setting (0-1 corresponding to the fraction of - // "available" manifold pressure), mixture (fuel flux per rpm, - // 0-1, where 1 is "max rich", or a little bit more than needed - // for rated power at sea level) - void calc(float pressure, float temp, float speed, - float* powerOut, float* fuelFlowOut); + void setDisplacement(float d); + void setCompression(float c); + void setWastegate(float norm) { _wastegate = norm; } + void setSupercharger(bool hasSuper) { _hasSuper = hasSuper; } + void setTurboLag(float lag) { _turboLag = lag; } + + bool isCranking(); + float getMP(); + float getEGT(); + float getMaxPower(); // max sea-level power + float getBoost() { return _boostPressure; } + float getOilTemp() { return _oilTemp; } + + virtual void calc(float pressure, float temp, float speed); + virtual void stabilize(); + virtual void integrate(float dt); + virtual float getTorque(); + virtual float getFuelFlow(); private: - float _P0; // reference power setting + // Static configuration: + float _power0; // reference power setting float _omega0; // " engine speed float _rho0; // " manifold air density float _f0; // "ideal" fuel flow at P0/omega0 float _mixCoeff; // fuel flow per omega at full mixture - - // Runtime settables: - float _throttle; - float _mixture; - - float _turbo; - float _maxMP; + float _turbo; // (or super-)charger pressure multiplier + bool _hasSuper; // true indicates gear-driven (not turbo) + float _turboLag; // turbo lag time in seconds + float _charge; // current {turbo|super}charge multiplier + float _chargeTarget; // eventual charge value + float _maxMP; // static maximum pressure + float _wastegate; // wastegate setting, [0:1] + float _displacement; // piston stroke volume + float _compression; // compression ratio (>1) + + // Runtime state/output: + float _mp; + float _torque; + float _fuelFlow; + float _egt; + float _boostPressure; + float _oilTemp; + float _oilTempTarget; + float _dOilTempdt; }; }; // namespace yasim