]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGAerodynamics.h
Encapsulate the interpolstion version of FGEnvironment and fix some bugs
[flightgear.git] / src / FDM / JSBSim / 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 "FGConfigFile.h"
57 #include "FGState.h"
58 #include "FGMassBalance.h"
59 #include "FGTranslation.h"
60 #include "FGCoefficient.h"
61 #include "FGFactorGroup.h"
62
63 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64 DEFINITIONS
65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
66
67 #define ID_AERODYNAMICS "$Id$"
68
69 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
70 FORWARD DECLARATIONS
71 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
72
73 namespace JSBSim {
74
75 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76 CLASS DOCUMENTATION
77 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
78
79 /** Encapsulates the aerodynamic calculations.
80     This class owns and contains the list of coefficients that define the
81     aerodynamic properties of this aircraft. Here also, such unique phenomena
82     as ground effect and maximum lift curve tailoff are handled.
83     @config
84     <pre>
85     \<AERODYNAMICS>
86        \<AXIS NAME="{LIFT|DRAG|SIDE|ROLL|PITCH|YAW}">
87          {Coefficient definitions}
88        \</AXIS>
89        {Additional axis definitions}
90     \</AERODYNAMICS> </pre>
91     
92     @author Jon S. Berndt, Tony Peden
93     $Id$
94 */
95
96 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
97 CLASS DECLARATION
98 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
99
100 class FGAerodynamics : public FGModel {
101
102 public:
103   /** Constructor
104       @param Executive a pointer to the parent executive object */
105   FGAerodynamics(FGFDMExec* Executive);
106   /// Destructor
107   ~FGAerodynamics();
108
109   /** Runs the Aerodynamics model; called by the Executive
110       @return false if no error */
111   bool Run(void);
112
113   /** Loads the Aerodynamics model.
114       The Load function for this class expects the configuration file to
115       have found the AERODYNAMICS keyword in the configution file and to
116       have set that line to the current line.
117       @param AC_cfg pointer to the current configuration file.
118       @return true if successful */
119   bool Load(FGConfigFile* AC_cfg);
120
121   /** Gets the total aerodynamic force vector.
122       @return a force vector reference. */
123   FGColumnVector3& GetForces(void) {return vForces;}
124
125   /** Gets the aerodynamic force for an axis.
126       @param n Axis index. This could be 0, 1, or 2, or one of the 
127                axis enums: eX, eY, eZ.
128       @return the force acting on an axis */
129   double GetForces(int n) const {return vForces(n);}
130
131   /** Gets the total aerodynamic moment vector.
132       @return a moment vector reference. */
133   FGColumnVector3& GetMoments(void) {return vMoments;}
134
135   /** Gets the aerodynamic moment for an axis.
136       @return the moment about a single axis (as described also in the
137               similar call to GetForces(int n).*/
138   double GetMoments(int n) const {return vMoments(n);}
139
140   FGColumnVector3& GetvLastFs(void) { return vLastFs; }
141   double GetvLastFs(int axis) const { return vLastFs(axis); }
142   FGColumnVector3& GetvFs(void) { return vFs; }
143   double GetvFs(int axis) const { return vFs(axis); }
144   inline double GetLoD(void) const { return lod; }
145   inline double GetClSquared(void) const { return clsq; } 
146   inline double GetAlphaCLMax(void) const { return alphaclmax; }
147   inline double GetAlphaCLMin(void) const { return alphaclmin; }
148   
149   inline double GetAlphaHystMax(void) const { return alphahystmax; }
150   inline double GetAlphaHystMin(void) const { return alphahystmin; }
151   inline double GetHysteresisParm(void) const { return stall_hyst; }
152   inline double GetStallWarn(void) const { return impending_stall; }
153   double GetAlphaW(void) const { return alphaw; }
154
155   double GetBI2Vel(void) const { return bi2vel; }
156   double GetCI2Vel(void) const { return ci2vel; }
157   
158   inline void SetAlphaCLMax(double tt) { alphaclmax=tt; }
159   inline void SetAlphaCLMin(double tt) { alphaclmin=tt; }
160
161   /** Gets the strings for the current set of coefficients.
162       @return a string containing the descriptive names for all coefficients */
163   string GetCoefficientStrings(void);
164
165   /** Gets the coefficient values.
166       @return a string containing the numeric values for the current set of
167       coefficients */
168   string GetCoefficientValues(void);
169   
170   void bind(void);
171   void bindModel(void);
172   void unbind(void);
173   
174 private:
175   typedef map<string,int> AxisIndex;
176   AxisIndex AxisIdx;
177   typedef vector<FGCoefficient*> CoeffArray;
178   CoeffArray* Coeff;
179   FGColumnVector3 vFs;
180   FGColumnVector3 vForces;
181   FGColumnVector3 vMoments;
182   FGColumnVector3 vLastFs;
183   FGColumnVector3 vDXYZcg;
184   double alphaclmax, alphaclmin;
185   double alphahystmax, alphahystmin;
186   double impending_stall, stall_hyst;
187   double bi2vel, ci2vel,alphaw;
188   double clsq,lod;
189   
190   typedef double (FGAerodynamics::*PMF)(int) const;
191
192   void Debug(int from);
193 };
194
195 } // namespace JSBSim
196
197 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
198 #endif
199