]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGAircraft.h
Check return value of FDM::init().
[flightgear.git] / src / FDM / JSBSim / FGAircraft.h
1 /*******************************************************************************
2  
3  Header:       FGAircraft.h
4  Author:       Jon S. Berndt
5  Date started: 12/12/98
6  
7  ------------- Copyright (C) 1999  Jon S. Berndt (jsb@hal-pc.org) -------------
8  
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU 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 General Public License for more
17  details.
18  
19  You should have received a copy of the GNU General Public License along with
20  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21  Place - Suite 330, Boston, MA  02111-1307, USA.
22  
23  Further information about the GNU General Public License can also be found on
24  the world wide web at http://www.gnu.org.
25  
26 HISTORY
27 --------------------------------------------------------------------------------
28 12/12/98   JSB   Created
29  
30 ********************************************************************************
31 SENTRY
32 *******************************************************************************/
33
34 #ifndef FGAIRCRAFT_H
35 #define FGAIRCRAFT_H
36
37 /*******************************************************************************
38 COMMENTS, REFERENCES,  and NOTES
39 *******************************************************************************/
40 /*
41 The aerodynamic coefficients used in this model typically are:
42  
43 Longitudinal
44   CL0 - Reference lift at zero alpha
45   CD0 - Reference drag at zero alpha
46   CDM - Drag due to Mach
47   CLa - Lift curve slope (w.r.t. alpha)
48   CDa - Drag curve slope (w.r.t. alpha)
49   CLq - Lift due to pitch rate
50   CLM - Lift due to Mach
51   CLadt - Lift due to alpha rate
52  
53   Cmadt - Pitching Moment due to alpha rate
54   Cm0 - Reference Pitching moment at zero alpha
55   Cma - Pitching moment slope (w.r.t. alpha)
56   Cmq - Pitch damping (pitch moment due to pitch rate)
57   CmM - Pitch Moment due to Mach
58  
59 Lateral
60   Cyb - Side force due to sideslip
61   Cyr - Side force due to yaw rate
62  
63   Clb - Dihedral effect (roll moment due to sideslip)
64   Clp - Roll damping (roll moment due to roll rate)
65   Clr - Roll moment due to yaw rate
66   Cnb - Weathercocking stability (yaw moment due to sideslip)
67   Cnp - Rudder adverse yaw (yaw moment due to roll rate)
68   Cnr - Yaw damping (yaw moment due to yaw rate)
69  
70 Control
71   CLDe - Lift due to elevator
72   CDDe - Drag due to elevator
73   CyDr - Side force due to rudder
74   CyDa - Side force due to aileron
75  
76   CmDe - Pitch moment due to elevator
77   ClDa - Roll moment due to aileron
78   ClDr - Roll moment due to rudder
79   CnDr - Yaw moment due to rudder
80   CnDa - Yaw moment due to aileron
81  
82 [1] Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
83          Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420  Naval Postgraduate
84          School, January 1994
85 [2] D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
86          JSC 12960, July 1977
87 [3] Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
88          NASA-Ames", NASA CR-2497, January 1975
89 [4] Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
90          Wiley & Sons, 1979 ISBN 0-471-03032-5
91 [5] Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
92          1982 ISBN 0-471-08936-2
93 */
94
95 /*******************************************************************************
96 INCLUDES
97 *******************************************************************************/
98
99 #ifdef FGFS
100 #  include <simgear/compiler.h>
101 #  ifdef FG_HAVE_STD_INCLUDES
102 #    include <vector>
103 #    include <iterator>
104 #    include <map>
105 #  else
106 #    include <vector.h>
107 #    include <iterator.h>
108 #    include <map.h>
109 #  endif
110 #else
111 #  include <vector>
112 #  include <iterator>
113 #  include <map>
114 #endif
115
116 #include "FGModel.h"
117 #include "FGCoefficient.h"
118 #include "FGEngine.h"
119 #include "FGTank.h"
120 #include "FGLGear.h"
121 #include "FGConfigFile.h"
122 #include "FGMatrix.h"
123
124 #define ID_AIRCRAFT "$Header$"
125
126 /*******************************************************************************
127 DEFINITIONS
128 *******************************************************************************/
129
130 /** Encapsulates an Aircraft and its systems.
131     Owns all the parts (other classes) which make
132     up this aircraft. This includes the Engines, Tanks, Propellers, Nozzles,
133     aerodynamic and mass properties, landing gear, etc.
134     @author Jon S. Berndt
135     @version $Id$
136     @see
137      [1] Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
138            Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420  Naval Postgraduate
139            School, January 1994
140      [2] D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
141      JSC 12960, July 1977
142      [3] Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
143      NASA-Ames", NASA CR-2497, January 1975
144      [4] Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
145      Wiley & Sons, 1979 ISBN 0-471-03032-5
146      [5] Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
147      1982 ISBN 0-471-08936-2
148   */
149
150 /*******************************************************************************
151 CLASS DECLARATION
152 *******************************************************************************/
153
154 class FGAircraft : public FGModel {
155   enum {eL=1, eM, eN};
156   enum {eX=1, eY, eZ};
157   enum {eP=1, eQ, eR};
158   enum {ePhi=1, eTht, ePsi};
159
160 public:
161   /** Constructor
162       @param Executive a pointer to the parent executive object
163     */
164   FGAircraft(FGFDMExec *Executive);
165   
166   /// Destructor
167   ~FGAircraft(void);
168
169   /** Runs the model; called by the Executive
170       @see JSBSim.cpp documentation
171       @return bool returns false if no error
172     */
173   bool Run(void);
174   
175   /** Loads the aircraft.
176       The executive calls this method to load the aircraft into JSBSim.
177       @param apath path to the aircraft files (e.g. "aircraft/X15/")
178       @param epath path to engine files (e.g. "engine/")
179       @param acname name of aircraft (e.g. "X15")
180       @return true if succesful
181     */
182   bool LoadAircraft(string apath, string epath, string acname);
183   
184   /** Retrieves the aircraft name
185       @return the name of the aircraft as a string type
186     */
187   inline string GetAircraftName(void) { return AircraftName; }
188   
189   inline void SetGearUp(bool tt) { GearUp = tt; }
190   inline bool GetGearUp(void) { return GearUp; }
191   inline int GetNumGearUnits(void) { return lGear.size(); }
192   inline FGLGear* GetGearUnit(int ii) { return &(lGear[ii]); }
193   inline float GetWingArea(void) { return WingArea; }
194   inline float GetWingSpan(void) { return WingSpan; }
195   inline float Getcbar(void) { return cbar; }
196   inline FGEngine* GetEngine(int tt) { return Engine[tt]; }
197   inline FGTank* GetTank(int tt) { return Tank[tt]; }
198   inline float GetWeight(void) { return Weight; }
199   inline float GetMass(void) { return Mass; }
200   inline FGColumnVector GetMoments(void) { return vMoments; }
201   inline FGColumnVector GetForces(void) { return vForces; }
202   inline FGColumnVector GetvFs(void) { return vFs; }
203   inline float GetIxx(void) { return Ixx; }
204   inline float GetIyy(void) { return Iyy; }
205   inline float GetIzz(void) { return Izz; }
206   inline float GetIxz(void) { return Ixz; }
207   inline unsigned int GetNumEngines(void) { return numEngines; }
208   inline FGColumnVector GetXYZcg(void) { return vXYZcg; }
209   inline FGColumnVector GetXYZrp(void) { return vXYZrp; }
210   inline FGColumnVector GetXYZep(void) { return vXYZep; }
211   inline float GetNlf(void) { return nlf; }
212   inline float GetAlphaCLMax(void) { return alphaclmax; }
213   inline float GetAlphaCLMin(void) { return alphaclmin; }
214
215   inline void SetAlphaCLMax(float tt) { alphaclmax=tt; }
216   inline void SetAlphaCLMin(float tt) { alphaclmin=tt; }
217
218   inline FGCoefficient* GetCoeff(int axis, int idx) { return Coeff[axis][idx]; }
219   string GetCoefficientStrings(void);
220   string GetCoefficientValues(void);
221   string GetGroundReactionStrings(void);
222   string GetGroundReactionValues(void);
223
224   enum { ssSimulation      = 1,
225          ssAerosurfaces    = 2,
226          ssRates           = 4,
227          ssVelocities      = 8,
228          ssForces          = 16,
229          ssMoments         = 32,
230          ssAtmosphere      = 64,
231          ssMassProps       = 128,
232          ssCoefficients    = 256,
233          ssPosition        = 512,
234          ssGroundReactions = 1024 } subsystems;
235
236 private:
237   void GetState(void);
238   void FMAero(void);
239   void FMGear(void);
240   void FMMass(void);
241   void FMProp(void);
242   void MassChange(void);
243   FGColumnVector vMoments;
244   FGColumnVector vForces;
245   FGColumnVector vFs;
246   FGColumnVector vXYZrp;
247   FGColumnVector vbaseXYZcg;
248   FGColumnVector vXYZcg;
249   FGColumnVector vXYZep;
250   FGColumnVector vEuler;
251   float baseIxx, baseIyy, baseIzz, baseIxz, EmptyMass, Mass;
252   float Ixx, Iyy, Izz, Ixz;
253   float alpha, beta;
254   float WingArea, WingSpan, cbar;
255   float Weight, EmptyWeight;
256   float nlf,alphaclmax,alphaclmin;
257   float dt;
258   string CFGVersion;
259   string AircraftName;
260
261   unsigned int numTanks;
262   unsigned int numEngines;
263   unsigned int numSelectedOxiTanks;
264   unsigned int numSelectedFuelTanks;
265   FGTank* Tank[MAX_TANKS];           // need to make a vector
266   FGEngine *Engine[MAX_ENGINES];     // need to make a vector
267
268   typedef map<string,int> AxisIndex;
269   AxisIndex AxisIdx;
270
271   typedef vector<FGCoefficient*> CoeffArray;
272   
273   CoeffArray* Coeff;
274
275   void DisplayCoeffFactors(vector <eParam> multipliers);
276
277   bool GearUp;
278
279   string Axis[6];
280   vector <FGLGear> lGear;
281
282   string AircraftPath;
283   string EnginePath;
284   void ReadMetrics(FGConfigFile*);
285   void ReadPropulsion(FGConfigFile*);
286   void ReadFlightControls(FGConfigFile*);
287   void ReadAerodynamics(FGConfigFile*);
288   void ReadUndercarriage(FGConfigFile*);
289   void ReadPrologue(FGConfigFile*);
290   void ReadOutput(FGConfigFile*);
291 };
292
293 /******************************************************************************/
294 #endif