]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGAerodynamics.h
Updates from JSBSim, including new turbine engine model from David Culp
[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 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71 FORWARD DECLARATIONS
72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
73
74 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
76 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
77
78 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79 CLASS DOCUMENTATION
80 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
81
82 /** Encapsulates the aerodynamic calculations.
83     This class owns and contains the list of coefficients that define the
84     aerodynamic properties of this aircraft. Here also, such unique phenomena
85     as ground effect and maximum lift curve tailoff are handled.
86     @author Jon S. Berndt
87     @version $Id$
88     @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGAerodynamics.h?rev=HEAD&content-type=text/vnd.viewcvs-markup">
89          Header File </a>
90     @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGAerodynamics.cpp?rev=HEAD&content-type=text/vnd.viewcvs-markup">
91          Source File </a>
92 */
93
94 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
95 CLASS DECLARATION
96 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
97 namespace JSBSim {
98
99 class FGAerodynamics : public FGModel {
100
101 public:
102   /** Constructor
103       @param Executive a pointer to the parent executive object */
104   FGAerodynamics(FGFDMExec*);
105   /// Destructor
106   ~FGAerodynamics();
107
108   /** Runs the Aerodynamics model; called by the Executive
109       @return false if no error */
110   bool Run(void);
111
112   /** Loads the Aerodynamics model
113       @return true if successful */
114   bool Load(FGConfigFile* AC_cfg);
115
116   /** Gets the total aerodynamic force vector.
117       @return a force vector reference. */
118   FGColumnVector3& GetForces(void) {return vForces;}
119   double GetForces(int n) const {return vForces(n);}
120
121   /** Gets the total aerodynamic moment vector.
122       @return a moment vector reference. */
123   FGColumnVector3& GetMoments(void) {return vMoments;}
124   double GetMoments(int n) const {return vMoments(n);}
125
126   FGColumnVector3& GetvLastFs(void) { return vLastFs; }
127   double GetvLastFs(int axis) const { return vLastFs(axis); }
128   FGColumnVector3& GetvFs(void) { return vFs; }
129   double GetvFs(int axis) const { return vFs(axis); }
130   inline double GetLoD(void) const { return lod; }
131   inline double GetClSquared(void) const { return clsq; } 
132   inline double GetAlphaCLMax(void) const { return alphaclmax; }
133   inline double GetAlphaCLMin(void) const { return alphaclmin; }
134   
135   inline double GetAlphaHystMax(void) const { return alphahystmax; }
136   inline double GetAlphaHystMin(void) const { return alphahystmin; }
137   inline double GetHysteresisParm(void) const { return stall_hyst; }
138   inline double GetStallWarn(void) const { return impending_stall; }
139   double GetAlphaW(void) const { return alphaw; }
140
141   double GetBI2Vel(void) const { return bi2vel; }
142   double GetCI2Vel(void) const { return ci2vel; }
143   
144   inline void SetAlphaCLMax(double tt) { alphaclmax=tt; }
145   inline void SetAlphaCLMin(double tt) { alphaclmin=tt; }
146
147     /** Gets the strings for the current set of coefficients.
148       @return a string containing the descriptive names for all coefficients */
149   string GetCoefficientStrings(void);
150
151   /** Gets the coefficient values.
152       @return a string containing the numeric values for the current set of
153       coefficients */
154   string GetCoefficientValues(void);
155   
156   void bind(void);
157   void bindModel(void);
158   void unbind(void);
159   
160 private:
161   typedef map<string,int> AxisIndex;
162   AxisIndex AxisIdx;
163   typedef vector<FGCoefficient*> CoeffArray;
164   CoeffArray* Coeff;
165   FGColumnVector3 vFs;
166   FGColumnVector3 vForces;
167   FGColumnVector3 vMoments;
168   FGColumnVector3 vLastFs;
169   FGColumnVector3 vDXYZcg;
170   double alphaclmax, alphaclmin;
171   double alphahystmax, alphahystmin;
172   double impending_stall, stall_hyst;
173   double bi2vel, ci2vel,alphaw;
174   double clsq,lod;
175   
176   typedef double (FGAerodynamics::*PMF)(int) const;
177
178   void Debug(int from);
179 };
180
181 } // namespace JSBSim
182
183 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
184 #endif
185