]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGEngine.h
Syncing with the very latest JSBSim development code.
[flightgear.git] / src / FDM / JSBSim / FGEngine.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
2 \r
3  Header:       FGEngine.h\r
4  Author:       Jon S. Berndt\r
5  Date started: 01/21/99\r
6 \r
7  ------------- Copyright (C) 1999  Jon S. Berndt (jsb@hal-pc.org) -------------\r
8 \r
9  This program is free software; you can redistribute it and/or modify it under\r
10  the terms of the GNU General Public License as published by the Free Software\r
11  Foundation; either version 2 of the License, or (at your option) any later\r
12  version.\r
13 \r
14  This program is distributed in the hope that it will be useful, but WITHOUT\r
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
16  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\r
17  details.\r
18 \r
19  You should have received a copy of the GNU General Public License along with\r
20  this program; if not, write to the Free Software Foundation, Inc., 59 Temple\r
21  Place - Suite 330, Boston, MA  02111-1307, USA.\r
22 \r
23  Further information about the GNU General Public License can also be found on\r
24  the world wide web at http://www.gnu.org.\r
25 \r
26 FUNCTIONAL DESCRIPTION\r
27 --------------------------------------------------------------------------------\r
28 \r
29 Based on Flightgear code, which is based on LaRCSim. This class simulates\r
30 a generic engine.\r
31 \r
32 HISTORY\r
33 --------------------------------------------------------------------------------\r
34 01/21/99   JSB   Created\r
35 \r
36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
37 SENTRY\r
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
39 \r
40 #ifndef FGENGINE_H\r
41 #define FGENGINE_H\r
42 \r
43 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
44 INCLUDES\r
45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
46 \r
47 #ifdef FGFS\r
48 #  include <simgear/compiler.h>\r
49 #  include STL_STRING\r
50    SG_USING_STD(string);\r
51 #  ifdef SG_HAVE_STD_INCLUDES\r
52 #    include <vector>\r
53 #  else\r
54 #    include <vector.h>\r
55 #  endif\r
56 #else\r
57 #  include <vector>\r
58 #  include <string>\r
59 #endif\r
60 \r
61 #include "FGJSBBase.h"\r
62 \r
63 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
64 DEFINITIONS\r
65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
66 \r
67 #define ID_ENGINE "$Id$"\r
68 \r
69 using std::string;\r
70 \r
71 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
72 FORWARD DECLARATIONS\r
73 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
74 \r
75 class FGFDMExec;\r
76 class FGState;\r
77 class FGAtmosphere;\r
78 class FGFCS;\r
79 class FGAircraft;\r
80 class FGTranslation;\r
81 class FGRotation;\r
82 class FGPropulsion;\r
83 class FGPosition;\r
84 class FGAuxiliary;\r
85 class FGOutput;\r
86 \r
87 using std::vector;\r
88 \r
89 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
90 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]\r
91 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
92 \r
93 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
94 CLASS DOCUMENTATION\r
95 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
96 \r
97 /** Base class for all engines.\r
98     This base class contains methods and members common to all engines, such as\r
99     logic to drain fuel from the appropriate tank, etc.\r
100     @author Jon S. Berndt\r
101     @version $Id$ \r
102 */\r
103 \r
104 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
105 CLASS DECLARATION\r
106 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
107 \r
108 class FGEngine : public FGJSBBase\r
109 {\r
110 public:\r
111   FGEngine(FGFDMExec* exec);\r
112   virtual ~FGEngine();\r
113 \r
114   enum EngineType {etUnknown, etRocket, etPiston, etTurboProp, etTurboJet, etTurboShaft};\r
115 \r
116   virtual float  GetThrottleMin(void) { return MinThrottle; }\r
117   virtual float  GetThrottleMax(void) { return MaxThrottle; }\r
118   float  GetThrottle(void) { return Throttle; }\r
119   float  GetMixture(void) { return Mixture; }\r
120   float  GetThrust(void) { return Thrust; }\r
121   bool   GetStarved(void) { return Starved; }\r
122   bool   GetFlameout(void) { return Flameout; }\r
123   bool   GetRunning(void) { return Running; }\r
124   int    GetType(void) { return Type; }\r
125   string GetName(void) { return Name; }\r
126 \r
127   virtual float getManifoldPressure_inHg () const {\r
128     return ManifoldPressure_inHg;\r
129   }\r
130   virtual float getExhaustGasTemp_degF () const {\r
131     return (ExhaustGasTemp_degK - 273) * (9.0 / 5.0) + 32.0;\r
132   }\r
133   virtual float getCylinderHeadTemp_degF () const {\r
134     return (CylinderHeadTemp_degK - 273) * (9.0 / 5.0) + 32.0;\r
135   }\r
136   virtual float getOilPressure_psi () const {\r
137     return OilPressure_psi;\r
138   }\r
139   virtual float getOilTemp_degF () const {\r
140     return (OilTemp_degK - 273.0) * (9.0 / 5.0) + 32.0;\r
141   }\r
142 \r
143   void SetStarved(bool tt) {Starved = tt;}\r
144   void SetStarved(void)    {Starved = true;}\r
145 \r
146   void SetRunning(bool bb) { Running=bb; }\r
147   void SetName(string name) {Name = name;}\r
148   void AddFeedTank(int tkID);\r
149 \r
150   /** Calculates the thrust of the engine, and other engine functions.\r
151       @param PowerRequired this is the power required to run the thrusting device\r
152              such as a propeller. This resisting effect must be provided to the \r
153              engine model.\r
154       @return Thrust in pounds */\r
155   virtual float Calculate(float PowerRequired) {return 0.0;};\r
156 \r
157   /** Reduces the fuel in the active tanks by the amount required.\r
158       This function should be called from within the\r
159       derived class' Calculate() function before any other calculations are\r
160       done. This base class method removes fuel from the fuel tanks as\r
161       appropriate, and sets the starved flag if necessary. */\r
162   void ConsumeFuel(void);\r
163 \r
164   /** The fuel need is calculated based on power levels and flow rate for that\r
165       power level. It is also turned from a rate into an actual amount (pounds)\r
166       by multiplying it by the delta T and the rate.\r
167       @return Total fuel requirement for this engine in pounds. */\r
168   float CalcFuelNeed(void);\r
169 \r
170   /** The oxidizer need is calculated based on power levels and flow rate for that\r
171       power level. It is also turned from a rate into an actual amount (pounds)\r
172       by multiplying it by the delta T and the rate.\r
173       @return Total oxidizer requirement for this engine in pounds. */\r
174   float CalcOxidizerNeed(void);\r
175 \r
176   /// Sets engine placement information\r
177   void SetPlacement(float x, float y, float z, float pitch, float yaw);\r
178 \r
179   virtual float GetPowerAvailable(void) {return 0.0;};\r
180 \r
181   bool GetTrimMode(void) {return TrimMode;}\r
182   void SetTrimMode(bool state) {TrimMode = state;}\r
183 \r
184 protected:\r
185   string Name;\r
186   EngineType Type;\r
187   float X, Y, Z;\r
188   float EnginePitch;\r
189   float EngineYaw;\r
190   float SLFuelFlowMax;\r
191   float SLOxiFlowMax;\r
192   float MaxThrottle;\r
193   float MinThrottle;\r
194 \r
195   float Thrust;\r
196   float Throttle;\r
197   float Mixture;\r
198   float FuelNeed, OxidizerNeed;\r
199   bool  Starved;\r
200   bool  Flameout;\r
201   bool  Running;\r
202   float PctPower;\r
203   int   EngineNumber;\r
204   bool  TrimMode;\r
205 \r
206   float ManifoldPressure_inHg;\r
207   float ExhaustGasTemp_degK;\r
208   float CylinderHeadTemp_degK;\r
209   float OilPressure_psi;\r
210   float OilTemp_degK;\r
211 \r
212   FGFDMExec*      FDMExec;\r
213   FGState*        State;\r
214   FGAtmosphere*   Atmosphere;\r
215   FGFCS*          FCS;\r
216   FGPropulsion*   Propulsion;\r
217   FGAircraft*     Aircraft;\r
218   FGTranslation*  Translation;\r
219   FGRotation*     Rotation;\r
220   FGPosition*     Position;\r
221   FGAuxiliary*    Auxiliary;\r
222   FGOutput*       Output;\r
223 \r
224   vector <int> SourceTanks;\r
225   void Debug(void);\r
226 };\r
227 \r
228 #include "FGState.h"\r
229 #include "FGFDMExec.h"\r
230 #include "FGAtmosphere.h"\r
231 #include "FGFCS.h"\r
232 #include "FGAircraft.h"\r
233 #include "FGTranslation.h"\r
234 #include "FGRotation.h"\r
235 #include "FGPropulsion.h"\r
236 #include "FGPosition.h"\r
237 #include "FGAuxiliary.h"\r
238 #include "FGOutput.h"\r
239 #include "FGDefs.h"\r
240 \r
241 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
242 #endif\r
243 \r