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 : :
|