]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/FGAerodynamics.h
Syn.c w. JSBSim.
[flightgear.git] / src / FDM / JSBSim / models / FGAerodynamics.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Header:       FGAerodynamics.h
4  Author:       Jon S. Berndt
5  Date started: 09/13/00
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 09/13/00   JSB   Created
29
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 SENTRY
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
33
34 #ifndef FGAERODYNAMICS_H
35 #define FGAERODYNAMICS_H
36
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 INCLUDES
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
40
41 #ifdef FGFS
42 #  include <simgear/compiler.h>
43 #  ifdef SG_HAVE_STD_INCLUDES
44 #    include <vector>
45 #    include <map>
46 #  else
47 #    include <vector.h>
48 #    include <map.h>
49 #  endif
50 #else
51 #  include <vector>
52 #  include <map>
53 #endif
54
55 #include "FGModel.h"
56 #include <math/FGFunction.h>
57 #include <math/FGColumnVector3.h>
58
59 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
60 DEFINITIONS
61 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
62
63 #define ID_AERODYNAMICS "$Id$"
64
65 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66 FORWARD DECLARATIONS
67 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
68
69 namespace JSBSim {
70
71 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
72 CLASS DOCUMENTATION
73 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
74
75 /** Encapsulates the aerodynamic calculations.
76     This class owns and contains the list of force/coefficients that define the
77     aerodynamic properties of an aircraft. Here also, such unique phenomena
78     as ground effect and maximum lift curve tailoff are handled.
79
80     @code
81     <aerodynamics>
82        <axis name="{LIFT|DRAG|SIDE|ROLL|PITCH|YAW}">
83          {force coefficient definitions}
84        </axis>
85        {additional axis definitions}
86     </aerodynamics>
87     @endcode
88
89     @author Jon S. Berndt, Tony Peden
90     @Id $Revision$
91 */
92
93 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
94 CLASS DECLARATION
95 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
96
97 class FGAerodynamics : public FGModel {
98
99 public:
100   /** Constructor
101       @param Executive a pointer to the parent executive object */
102   FGAerodynamics(FGFDMExec* Executive);
103   /// Destructor
104   ~FGAerodynamics();
105
106   /** Runs the Aerodynamics model; called by the Executive
107       @return false if no error */
108   bool Run(void);
109
110   /** Loads the Aerodynamics model.
111       The Load function for this class expects the XML parser to
112       have found the aerodynamics keyword in the configuration file.
113       @param element pointer to the current XML element for aerodynamics parameters.
114       @return true if successful */
115   bool Load(Element* element);
116
117   /** Gets the total aerodynamic force vector.
118       @return a force vector reference. */
119   FGColumnVector3& GetForces(void) {return vForces;}
120
121   /** Gets the aerodynamic force for an axis.
122       @param n Axis index. This could be 0, 1, or 2, or one of the
123                axis enums: eX, eY, eZ.
124       @return the force acting on an axis */
125   double GetForces(int n) const {return vForces(n);}
126
127   /** Gets the total aerodynamic moment vector.
128       @return a moment vector reference. */
129   FGColumnVector3& GetMoments(void) {return vMoments;}
130
131   /** Gets the aerodynamic moment for an axis.
132       @return the moment about a single axis (as described also in the
133               similar call to GetForces(int n).*/
134   double GetMoments(int n) const {return vMoments(n);}
135
136   FGColumnVector3& GetvLastFs(void) { return vLastFs; }
137   double GetvLastFs(int axis) const { return vLastFs(axis); }
138   FGColumnVector3& GetvFs(void) { return vFs; }
139   double GetvFs(int axis) const { return vFs(axis); }
140   inline double GetLoD(void) const { return lod; }
141   inline double GetClSquared(void) const { return clsq; }
142   inline double GetAlphaCLMax(void) const { return alphaclmax; }
143   inline double GetAlphaCLMin(void) const { return alphaclmin; }
144
145   inline double GetAlphaHystMax(void) const { return alphahystmax; }
146   inline double GetAlphaHystMin(void) const { return alphahystmin; }
147   inline double GetHysteresisParm(void) const { return stall_hyst; }
148   inline double GetStallWarn(void) const { return impending_stall; }
149   double GetAlphaW(void) const { return alphaw; }
150
151   double GetBI2Vel(void) const { return bi2vel; }
152   double GetCI2Vel(void) const { return ci2vel; }
153
154   inline void SetAlphaCLMax(double tt) { alphaclmax=tt; }
155   inline void SetAlphaCLMin(double tt) { alphaclmin=tt; }
156
157   /** Gets the strings for the current set of coefficients.
158       @param delimeter either a tab or comma string depending on output type
159       @return a string containing the descriptive names for all coefficients */
160   string GetCoefficientStrings(string delimeter);
161
162   /** Gets the coefficient values.
163       @param delimeter either a tab or comma string depending on output type
164       @return a string containing the numeric values for the current set of
165       coefficients */
166   string GetCoefficientValues(string delimeter);
167
168 private:
169   typedef map<string,int> AxisIndex;
170   AxisIndex AxisIdx;
171   vector <FGFunction*> variables;
172   typedef vector <FGFunction*> CoeffArray;
173   CoeffArray* Coeff;
174   FGColumnVector3 vFs;
175   FGColumnVector3 vForces;
176   FGColumnVector3 vMoments;
177   FGColumnVector3 vLastFs;
178   FGColumnVector3 vDXYZcg;
179   double alphaclmax, alphaclmin;
180   double alphahystmax, alphahystmin;
181   double impending_stall, stall_hyst;
182   double bi2vel, ci2vel,alphaw;
183   double clsq, lod, qbar_area;
184
185   typedef double (FGAerodynamics::*PMF)(int) const;
186   void bind(void);
187   void unbind(void);
188
189   void Debug(int from);
190 };
191
192 } // namespace JSBSim
193
194 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
195 #endif
196