LCOV - code coverage report
Current view: top level - models/propulsion - FGEngine.h (source / functions) Hit Total Coverage
Test: JSBSim-Coverage-Statistics Lines: 2 24 8.3 %
Date: 2010-08-24 Functions: 2 22 9.1 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       2                 :            : 
       3                 :            :  Header:       FGEngine.h
       4                 :            :  Author:       Jon S. Berndt
       5                 :            :  Date started: 01/21/99
       6                 :            : 
       7                 :            :  ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
       8                 :            : 
       9                 :            :  This program is free software; you can redistribute it and/or modify it under
      10                 :            :  the terms of the GNU Lesser General Public License as published by the Free Software
      11                 :            :  Foundation; either version 2 of the License, or (at your option) any later
      12                 :            :  version.
      13                 :            : 
      14                 :            :  This program is distributed in the hope that it will be useful, but WITHOUT
      15                 :            :  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      16                 :            :  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
      17                 :            : 
      18                 :            :  You should have received a copy of the GNU Lesser General Public License along with
      19                 :            :  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
      20                 :            :  Place - Suite 330, Boston, MA  02111-1307, USA.
      21                 :            : 
      22                 :            :  Further information about the GNU Lesser General Public License can also be found on
      23                 :            :  the world wide web at http://www.gnu.org.
      24                 :            : 
      25                 :            : FUNCTIONAL DESCRIPTION
      26                 :            : --------------------------------------------------------------------------------
      27                 :            : 
      28                 :            : Based on Flightgear code, which is based on LaRCSim. This class simulates
      29                 :            : a generic engine.
      30                 :            : 
      31                 :            : HISTORY
      32                 :            : --------------------------------------------------------------------------------
      33                 :            : 01/21/99   JSB   Created
      34                 :            : 
      35                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      36                 :            : SENTRY
      37                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      38                 :            : 
      39                 :            : #ifndef FGENGINE_H
      40                 :            : #define FGENGINE_H
      41                 :            : 
      42                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      43                 :            : INCLUDES
      44                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      45                 :            : 
      46                 :            : #include "math/FGModelFunctions.h"
      47                 :            : #include "input_output/FGXMLFileRead.h"
      48                 :            : #include "input_output/FGXMLElement.h"
      49                 :            : #include "models/FGFCS.h"
      50                 :            : #include "math/FGColumnVector3.h"
      51                 :            : #include <vector>
      52                 :            : #include <string>
      53                 :            : 
      54                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      55                 :            : DEFINITIONS
      56                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      57                 :            : 
      58                 :            : #define ID_ENGINE "$Id: FGEngine.h,v 1.21 2010/08/21 17:13:48 jberndt Exp $"
      59                 :            : 
      60                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      61                 :            : FORWARD DECLARATIONS
      62                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      63                 :            : 
      64                 :            : namespace JSBSim {
      65                 :            : 
      66                 :            : class FGFDMExec;
      67                 :            : class FGAtmosphere;
      68                 :            : class FGAircraft;
      69                 :            : class FGPropagate;
      70                 :            : class FGPropulsion;
      71                 :            : class FGAuxiliary;
      72                 :            : class FGThruster;
      73                 :            : class Element;
      74                 :            : class FGPropertyManager;
      75                 :            : 
      76                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      77                 :            : CLASS DOCUMENTATION
      78                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      79                 :            : 
      80                 :            : /** Base class for all engines.
      81                 :            :     This base class contains methods and members common to all engines, such as
      82                 :            :     logic to drain fuel from the appropriate tank, etc. 
      83                 :            :     <br>
      84                 :            :     <h3>Configuration File Format:</h3>
      85                 :            : @code
      86                 :            :         <engine file="{string}">
      87                 :            :             <location unit="{IN | M}">
      88                 :            :                 <x> {number} </x>
      89                 :            :                 <y> {number} </y>
      90                 :            :                 <z> {number} </z>
      91                 :            :             </location>
      92                 :            :             <!-- optional orientation definition -->
      93                 :            :             <orient unit="{RAD | DEG}">
      94                 :            :                 <roll>  {number} </roll>
      95                 :            :                 <pitch> {number} </pitch>
      96                 :            :                 <yaw> {number} </yaw>
      97                 :            :             </orient>
      98                 :            :             <feed> {integer} </feed>
      99                 :            :             ... optional more feed tank index numbers ... 
     100                 :            :             <thruster file="{string}">
     101                 :            :                 <location unit="{IN | M}">
     102                 :            :                     <x> {number} </x>
     103                 :            :                     <y> {number} </y>
     104                 :            :                     <z> {number} </z>
     105                 :            :                 </location>
     106                 :            :                 <orient unit="{RAD | DEG}">
     107                 :            :                     <roll> {number} </roll>
     108                 :            :                     <pitch> {number} </pitch>
     109                 :            :                     <yaw> {number} </yaw>
     110                 :            :                 </orient>
     111                 :            :             </thruster>
     112                 :            :         </engine>
     113                 :            : @endcode
     114                 :            : <pre>
     115                 :            :     NOTES:
     116                 :            :         
     117                 :            :         Not all thruster types can be matched with a given engine type.  See the class
     118                 :            :         documentation for engine and thruster classes.
     119                 :            : </pre>     
     120                 :            :     @author Jon S. Berndt
     121                 :            :     @version $Id: FGEngine.h,v 1.21 2010/08/21 17:13:48 jberndt Exp $
     122                 :            : */
     123                 :            : 
     124                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     125                 :            : CLASS DECLARATION
     126                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
     127                 :            : 
     128                 :            : class FGEngine : public FGModelFunctions, public FGXMLFileRead
     129                 :            : {
     130                 :            : public:
     131                 :            :   FGEngine(FGFDMExec* exec, Element* el, int engine_number);
     132                 :            :   virtual ~FGEngine();
     133                 :            : 
     134                 :            :   enum EngineType {etUnknown, etRocket, etPiston, etTurbine, etTurboprop, etElectric};
     135                 :            : 
     136                 :          0 :   EngineType      GetType(void) { return Type; }
     137                 :          0 :   virtual string  GetName(void) { return Name; }
     138                 :            : 
     139                 :            :   // Engine controls
     140                 :          0 :   virtual double  GetThrottleMin(void) { return MinThrottle; }
     141                 :          0 :   virtual double  GetThrottleMax(void) { return MaxThrottle; }
     142                 :          0 :   virtual double  GetThrottle(void) { return Throttle; }
     143                 :          0 :   virtual double  GetMixture(void) { return Mixture; }
     144                 :          0 :   virtual bool    GetStarter(void) { return Starter; }
     145                 :            : 
     146                 :          0 :   virtual double getFuelFlow_gph () const {return FuelFlow_gph;}
     147                 :          0 :   virtual double getFuelFlow_pph () const {return FuelFlow_pph;}
     148                 :         12 :   virtual double GetFuelFlowRate(void) const {return FuelFlowRate;}
     149                 :          0 :   virtual bool   GetStarved(void) { return Starved; }
     150                 :         12 :   virtual bool   GetRunning(void) const { return Running; }
     151                 :          0 :   virtual bool   GetCranking(void) { return Cranking; }
     152                 :            : 
     153                 :          0 :   virtual void SetStarved(bool tt) { Starved = tt; }
     154                 :          0 :   virtual void SetStarved(void)    { Starved = true; }
     155                 :            : 
     156                 :          0 :   virtual void SetRunning(bool bb) { Running=bb; }
     157                 :          0 :   virtual void SetName(string name) { Name = name; }
     158                 :            :   virtual void AddFeedTank(int tkID, int priority);
     159                 :          0 :   virtual void SetFuelFreeze(bool f) { FuelFreeze = f; }
     160                 :            : 
     161                 :          0 :   virtual void SetStarter(bool s) { Starter = s; }
     162                 :            : 
     163                 :          0 :   virtual int InitRunning(void){ return 1; }
     164                 :            : 
     165                 :            :   /** Resets the Engine parameters to the initial conditions */
     166                 :            :   void ResetToIC(void);
     167                 :            : 
     168                 :            :   /** Calculates the thrust of the engine, and other engine functions. */
     169                 :            :   virtual void Calculate(void) = 0;
     170                 :            : 
     171                 :            :   /// Sets engine placement information
     172                 :            :   virtual void SetPlacement(FGColumnVector3& location, FGColumnVector3& orientation);
     173                 :            : 
     174                 :          0 :   virtual double GetPowerAvailable(void) {return 0.0;};
     175                 :            : 
     176                 :          0 :   virtual bool GetTrimMode(void) {return TrimMode;}
     177                 :          0 :   virtual void SetTrimMode(bool state) {TrimMode = state;}
     178                 :            : 
     179                 :            :   virtual FGColumnVector3& GetBodyForces(void);
     180                 :            :   virtual FGColumnVector3& GetMoments(void);
     181                 :            : 
     182                 :            :   bool LoadThruster(Element *el);
     183                 :          0 :   FGThruster* GetThruster(void) {return Thruster;}
     184                 :            : 
     185                 :            :   virtual std::string GetEngineLabels(const std::string& delimiter) = 0;
     186                 :            :   virtual std::string GetEngineValues(const std::string& delimiter) = 0;
     187                 :            : 
     188                 :            : protected:
     189                 :            :   /** Reduces the fuel in the active tanks by the amount required.
     190                 :            :       This function should be called from within the
     191                 :            :       derived class' Calculate() function before any other calculations are
     192                 :            :       done. This base class method removes fuel from the fuel tanks as
     193                 :            :       appropriate, and sets the starved flag if necessary. */
     194                 :            :   virtual void ConsumeFuel(void);
     195                 :            : 
     196                 :            :   /** The fuel need is calculated based on power levels and flow rate for that
     197                 :            :       power level. It is also turned from a rate into an actual amount (pounds)
     198                 :            :       by multiplying it by the delta T and the rate.
     199                 :            :       @return Total fuel requirement for this engine in pounds. */
     200                 :            :   virtual double CalcFuelNeed(void);
     201                 :            : 
     202                 :            :   FGPropertyManager* PropertyManager;
     203                 :            :   std::string Name;
     204                 :            :   const int   EngineNumber;
     205                 :            :   EngineType Type;
     206                 :            :   double X, Y, Z;
     207                 :            :   double EnginePitch;
     208                 :            :   double EngineYaw;
     209                 :            :   double SLFuelFlowMax;
     210                 :            :   double MaxThrottle;
     211                 :            :   double MinThrottle;
     212                 :            : 
     213                 :            :   double Throttle;
     214                 :            :   double Mixture;
     215                 :            :   double FuelExpended;
     216                 :            :   double FuelFlowRate;
     217                 :            :   double PctPower;
     218                 :            :   bool  Starter;
     219                 :            :   bool  Starved;
     220                 :            :   bool  Running;
     221                 :            :   bool  Cranking;
     222                 :            :   bool  TrimMode;
     223                 :            :   bool  FuelFreeze;
     224                 :            : 
     225                 :            :   double FuelFlow_gph;
     226                 :            :   double FuelFlow_pph;
     227                 :            :   double FuelDensity;
     228                 :            : 
     229                 :            :   FGFDMExec*      FDMExec;
     230                 :            :   FGAtmosphere*   Atmosphere;
     231                 :            :   FGFCS*          FCS;
     232                 :            :   FGPropulsion*   Propulsion;
     233                 :            :   FGAircraft*     Aircraft;
     234                 :            :   FGPropagate*    Propagate;
     235                 :            :   FGAuxiliary*    Auxiliary;
     236                 :            :   FGThruster*     Thruster;
     237                 :            : 
     238                 :            :   std::vector <int> SourceTanks;
     239                 :            : 
     240                 :            :   void Debug(int from);
     241                 :            : };
     242                 :            : }
     243                 :            : 
     244                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     245                 :            : #endif
     246                 :            : 

Generated by: LCOV version 1.9