]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGAerodynamics.h
8119a2f089a5e331077e2de8e88de8b6a6fc8e80
[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
98 class FGAerodynamics : public FGModel {
99
100 public:
101   /** Constructor
102       @param Executive a pointer to the parent executive object */
103   FGAerodynamics(FGFDMExec*);
104   /// Destructor
105   ~FGAerodynamics();
106
107   /** Runs the Aerodynamics model; called by the Executive
108       @return false if no error */
109   bool Run(void);
110
111   /** Loads the Aerodynamics model
112       @return true if successful */
113   bool Load(FGConfigFile* AC_cfg);
114
115   /** Gets the total aerodynamic force vector.
116       @return a force vector reference. */
117   FGColumnVector3& GetForces(void) {return vForces;}
118   double GetForces(int n) const {return vForces(n);}
119
120   /** Gets the total aerodynamic moment vector.
121       @return a moment vector reference. */
122   FGColumnVector3& GetMoments(void) {return vMoments;}
123   double GetMoments(int n) const {return vMoments(n);}
124
125   FGColumnVector3& GetvLastFs(void) { return vLastFs; }
126   double GetvLastFs(int axis) const { return vLastFs(axis); }
127   FGColumnVector3& GetvFs(void) { return vFs; }
128   double GetvFs(int axis) const { return vFs(axis); }
129   inline double GetLoD(void) const { return lod; }
130   inline double GetClSquared(void) const { return clsq; } 
131
132     /** Gets the strings for the current set of coefficients.
133       @return a string containing the descriptive names for all coefficients */
134   string GetCoefficientStrings(void);
135
136   /** Gets the coefficient values.
137       @return a string containing the numeric values for the current set of
138       coefficients */
139   string GetCoefficientValues(void);
140   
141   void bind(void);
142   void bindModel(void);
143   void unbind(void);
144   
145 private:
146   typedef map<string,int> AxisIndex;
147   AxisIndex AxisIdx;
148   typedef vector<FGCoefficient*> CoeffArray;
149   CoeffArray* Coeff;
150   FGColumnVector3 vFs;
151   FGColumnVector3 vForces;
152   FGColumnVector3 vMoments;
153   FGColumnVector3 vLastFs;
154   FGColumnVector3 vDXYZcg;
155   double clsq,lod;
156   
157   typedef double (FGAerodynamics::*PMF)(int) const;
158
159   void Debug(int from);
160 };
161
162 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
163 #endif
164