1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) -------------
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
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
19 You should have received a copy of the GNU Lesser 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.
23 Further information about the GNU Lesser General Public License can also be found on
24 the world wide web at http://www.gnu.org.
27 --------------------------------------------------------------------------------
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
45 #include "input_output/FGXMLElement.h"
46 #include "math/FGColumnVector3.h"
48 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
52 #define ID_AIRCRAFT "$Id: FGAircraft.h,v 1.17 2011/05/20 03:18:36 jberndt Exp $"
54 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
60 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
62 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
64 /** Encapsulates an Aircraft and its systems.
65 <p> Owns all the parts (other classes) which make up this aircraft. This includes
66 the Engines, Tanks, Propellers, Nozzles, Aerodynamic and Mass properties,
67 landing gear, etc. These constituent parts may actually run as separate
68 JSBSim models themselves, but the responsibility for initializing them and
69 for retrieving their force and moment contributions falls to FGAircraft.
70 <p> The \<metrics> section of the aircraft configuration file is read here, and
71 the metrical information is held by this class.
72 <h3>Configuration File Format for \<metrics> Section:</h3>
75 <wingarea unit="{FT2 | M2}"> {number} </wingarea>
76 <wingspan unit="{FT | M}"> {number} </wingspan>
77 <chord unit="{FT | M}"> {number} </chord>
78 <htailarea unit="{FT2 | M2}"> {number} </htailarea>
79 <htailarm unit="{FT | M}"> {number} </htailarm>
80 <vtailarea unit="{FT2 | M}"> {number} </vtailarea>
81 <vtailarm unit="{FT | M}"> {number} </vtailarm>
82 <wing_incidence unit="{RAD | DEG}"> {number} </wing_incidence>
83 <location name="{AERORP | EYEPOINT | VRP}" unit="{IN | M}">
88 {other location blocks}
93 @version $Id: FGAircraft.h,v 1.17 2011/05/20 03:18:36 jberndt Exp $
94 @see Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
95 Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420 Naval Postgraduate
97 @see D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
99 @see Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
100 NASA-Ames", NASA CR-2497, January 1975
101 @see Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
102 Wiley & Sons, 1979 ISBN 0-471-03032-5
103 @see Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
104 1982 ISBN 0-471-08936-2
107 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
109 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
111 class FGAircraft : public FGModel {
114 @param Executive a pointer to the parent executive object */
115 FGAircraft(FGFDMExec *Executive);
120 /** Runs the Aircraft model; called by the Executive
121 Can pass in a value indicating if the executive is directing the simulation to Hold.
122 @param Holding if true, the executive has been directed to hold the sim from
123 advancing time. Some models may ignore this flag, such as the Input
124 model, which may need to be active to listen on a socket for the
125 "Resume" command to be given.
126 @see JSBSim.cpp documentation
127 @return false if no error */
128 bool Run(bool Holding);
130 bool InitModel(void);
132 /** Loads the aircraft.
133 The executive calls this method to load the aircraft into JSBSim.
134 @param el a pointer to the element tree
135 @return true if successful */
136 bool Load(Element* el);
138 /** Gets the aircraft name
139 @return the name of the aircraft as a string type */
140 const std::string& GetAircraftName(void) const { return AircraftName; }
142 /// Gets the wing area
143 double GetWingArea(void) const { return WingArea; }
144 /// Gets the wing span
145 double GetWingSpan(void) const { return WingSpan; }
146 /// Gets the average wing chord
147 double Getcbar(void) const { return cbar; }
148 double GetWingIncidence(void) const { return WingIncidence; }
149 double GetWingIncidenceDeg(void) const { return WingIncidence*radtodeg; }
150 double GetHTailArea(void) const { return HTailArea; }
151 double GetHTailArm(void) const { return HTailArm; }
152 double GetVTailArea(void) const { return VTailArea; }
153 double GetVTailArm(void) const { return VTailArm; }
154 double Getlbarh(void) const { return lbarh; } // HTailArm / cbar
155 double Getlbarv(void) const { return lbarv; } // VTailArm / cbar
156 double Getvbarh(void) const { return vbarh; } // H. Tail Volume
157 double Getvbarv(void) const { return vbarv; } // V. Tail Volume
158 const FGColumnVector3& GetMoments(void) const { return vMoments; }
159 double GetMoments(int idx) const { return vMoments(idx); }
160 const FGColumnVector3& GetForces(void) const { return vForces; }
161 double GetForces(int idx) const { return vForces(idx); }
162 FGColumnVector3& GetBodyAccel(void) { return vBodyAccel; }
163 double GetBodyAccel(int idx) const { return vBodyAccel(idx); }
164 const FGColumnVector3& GetNcg(void) const { return vNcg; }
165 double GetNcg(int idx) const { return vNcg(idx); }
166 const FGColumnVector3& GetXYZrp(void) const { return vXYZrp; }
167 const FGColumnVector3& GetXYZvrp(void) const { return vXYZvrp; }
168 const FGColumnVector3& GetXYZep(void) const { return vXYZep; }
169 double GetXYZrp(int idx) const { return vXYZrp(idx); }
170 double GetXYZvrp(int idx) const { return vXYZvrp(idx); }
171 double GetXYZep(int idx) const { return vXYZep(idx); }
172 void SetAircraftName(const std::string& name) {AircraftName = name;}
173 void SetHoldDown(int hd) {HoldDown = hd;}
174 int GetHoldDown(void) const {return HoldDown;}
176 void SetXYZrp(int idx, double value) {vXYZrp(idx) = value;}
178 void SetWingArea(double S) {WingArea = S;}
180 double GetNlf(void) const;
182 FGColumnVector3& GetNwcg(void) { return vNwcg; }
188 FGColumnVector3 vMoments;
189 FGColumnVector3 vForces;
190 FGColumnVector3 vXYZrp;
191 FGColumnVector3 vXYZvrp;
192 FGColumnVector3 vXYZep;
193 FGColumnVector3 vDXYZcg;
194 FGColumnVector3 vBodyAccel;
195 FGColumnVector3 vNcg;
196 FGColumnVector3 vNwcg;
198 double WingArea, WingSpan, cbar, WingIncidence;
199 double HTailArea, VTailArea, HTailArm, VTailArm;
200 double lbarh,lbarv,vbarh,vbarv;
202 std::string AircraftName;
204 void Debug(int from);
207 } // namespace JSBSim
208 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%