]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGEngine.h
Update JSBSim files to latest JSBSim CVS.
[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   bool   GetCranking(void) { return Cranking; }\r
125   int    GetType(void) { return Type; }\r
126   string GetName(void) { return Name; }\r
127 \r
128   virtual float getManifoldPressure_inHg () const {\r
129     return ManifoldPressure_inHg;\r
130   }\r
131   virtual float getExhaustGasTemp_degF () const {\r
132     return (ExhaustGasTemp_degK - 273) * (9.0 / 5.0) + 32.0;\r
133   }\r
134   virtual float getCylinderHeadTemp_degF () const {\r
135     return (CylinderHeadTemp_degK - 273) * (9.0 / 5.0) + 32.0;\r
136   }\r
137   virtual float getOilPressure_psi () const {\r
138     return OilPressure_psi;\r
139   }\r
140   virtual float getOilTemp_degF () const {\r
141     return (OilTemp_degK - 273.0) * (9.0 / 5.0) + 32.0;\r
142   }\r
143 \r
144   void SetStarved(bool tt) {Starved = tt;}\r
145   void SetStarved(void)    {Starved = true;}\r
146 \r
147   void SetRunning(bool bb) { Running=bb; }\r
148   void SetName(string name) {Name = name;}\r
149   void AddFeedTank(int tkID);\r
150 \r
151   void SetMagnetos(int m) { Magnetos = m; }\r
152   void SetStarter(bool s) { Starter = s;}\r
153 \r
154   /** Calculates the thrust of the engine, and other engine functions.\r
155       @param PowerRequired this is the power required to run the thrusting device\r
156              such as a propeller. This resisting effect must be provided to the \r
157              engine model.\r
158       @return Thrust in pounds */\r
159   virtual float Calculate(float PowerRequired) {return 0.0;};\r
160 \r
161   /** Reduces the fuel in the active tanks by the amount required.\r
162       This function should be called from within the\r
163       derived class' Calculate() function before any other calculations are\r
164       done. This base class method removes fuel from the fuel tanks as\r
165       appropriate, and sets the starved flag if necessary. */\r
166   void ConsumeFuel(void);\r
167 \r
168   /** The fuel need is calculated based on power levels and flow rate for that\r
169       power level. It is also turned from a rate into an actual amount (pounds)\r
170       by multiplying it by the delta T and the rate.\r
171       @return Total fuel requirement for this engine in pounds. */\r
172   float CalcFuelNeed(void);\r
173 \r
174   /** The oxidizer need is calculated based on power levels and flow rate for that\r
175       power level. It is also turned from a rate into an actual amount (pounds)\r
176       by multiplying it by the delta T and the rate.\r
177       @return Total oxidizer requirement for this engine in pounds. */\r
178   float CalcOxidizerNeed(void);\r
179 \r
180   /// Sets engine placement information\r
181   void SetPlacement(float x, float y, float z, float pitch, float yaw);\r
182 \r
183   virtual float GetPowerAvailable(void) {return 0.0;};\r
184 \r
185   bool GetTrimMode(void) {return TrimMode;}\r
186   void SetTrimMode(bool state) {TrimMode = state;}\r
187 \r
188 protected:\r
189   string Name;\r
190   EngineType Type;\r
191   float X, Y, Z;\r
192   float EnginePitch;\r
193   float EngineYaw;\r
194   float SLFuelFlowMax;\r
195   float SLOxiFlowMax;\r
196   float MaxThrottle;\r
197   float MinThrottle;\r
198 \r
199   float Thrust;\r
200   float Throttle;\r
201   float Mixture;\r
202   int   Magnetos;\r
203   bool  Starter;\r
204   float FuelNeed, OxidizerNeed;\r
205   bool  Starved;\r
206   bool  Flameout;\r
207   bool  Running;\r
208   bool  Cranking;\r
209   float PctPower;\r
210   int   EngineNumber;\r
211   bool  TrimMode;\r
212 \r
213   float ManifoldPressure_inHg;\r
214   float ExhaustGasTemp_degK;\r
215   float CylinderHeadTemp_degK;\r
216   float OilPressure_psi;\r
217   float OilTemp_degK;\r
218 \r
219   FGFDMExec*      FDMExec;\r
220   FGState*        State;\r
221   FGAtmosphere*   Atmosphere;\r
222   FGFCS*          FCS;\r
223   FGPropulsion*   Propulsion;\r
224   FGAircraft*     Aircraft;\r
225   FGTranslation*  Translation;\r
226   FGRotation*     Rotation;\r
227   FGPosition*     Position;\r
228   FGAuxiliary*    Auxiliary;\r
229   FGOutput*       Output;\r
230 \r
231   vector <int> SourceTanks;\r
232   void Debug(void);\r
233 };\r
234 \r
235 #include "FGState.h"\r
236 #include "FGFDMExec.h"\r
237 #include "FGAtmosphere.h"\r
238 #include "FGFCS.h"\r
239 #include "FGAircraft.h"\r
240 #include "FGTranslation.h"\r
241 #include "FGRotation.h"\r
242 #include "FGPropulsion.h"\r
243 #include "FGPosition.h"\r
244 #include "FGAuxiliary.h"\r
245 #include "FGOutput.h"\r
246 #include "FGDefs.h"\r
247 \r
248 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
249 #endif\r
250 \r