]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGCoefficient.h
Sync. with JSBSim CVS.
[flightgear.git] / src / FDM / JSBSim / FGCoefficient.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Header:       FGCoefficient.h
4  Author:       Jon Berndt
5  Date started: 12/28/98
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 12/28/98   JSB   Created
29
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 SENTRY
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
33
34 #ifndef FGCOEFFICIENT_H
35 #define FGCOEFFICIENT_H
36
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 INCLUDES
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
40
41 #ifdef FGFS
42 #  include <simgear/compiler.h>
43 #endif
44
45 #include <vector>
46 #include <string>
47 #include "FGConfigFile.h"
48 #include "FGTable.h"
49 #include "FGJSBBase.h"
50 #include "FGPropertyManager.h"
51
52 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53 DEFINITIONS
54 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
55
56 #define ID_COEFFICIENT "$Id$"
57
58 using std::vector;
59
60 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61 FORWARD DECLARATIONS
62 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
63
64 namespace JSBSim {
65
66 class FGFDMExec;
67 class FGState;
68 class FGAtmosphere;
69 class FGFCS;
70 class FGAircraft;
71 class FGTranslation;
72 class FGRotation;
73 class FGPosition;
74 class FGAuxiliary;
75 class FGOutput;
76
77 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
78 CLASS DOCUMENTATION
79 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
80
81 /** This class models the aero coefficient and stability derivative coefficient
82     lookup table, value, vector, or equation (equation not modeled, yet).
83     Each coefficient for an axis is stored in that axes' vector of coefficients.
84     Each FDM execution frame the Run() method of the FGAerodynamics model
85     is called and the coefficient values are calculated.
86     @author Jon S. Berndt
87     @version $Id$
88 */
89
90 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
91 CLASS DECLARATION
92 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
93
94 class FGCoefficient : public FGJSBBase
95 {
96 public:
97   /** Constructor.
98       @param exec a pointer to the FGFDMExec instance. */
99   FGCoefficient(FGFDMExec* exec);
100   /// Destructor.
101   virtual ~FGCoefficient();
102   
103   /** Loads the stability derivative/aero coefficient data from the config file
104       as directed by the FGAerodynamics instance.
105       @param AC_cfg a pointer to the current config file instance. */
106   virtual bool Load(FGConfigFile* AC_cfg);
107   
108   typedef vector <FGPropertyManager*> MultVec;
109
110   enum Type {UNKNOWN, VALUE, VECTOR, TABLE, EQUATION};
111
112   /** Returns the value for this coefficient.
113       Each instance of FGCoefficient stores a value for the "type" of coefficient
114       it is, one of: VALUE, VECTOR, TABLE, or EQUATION. This TotalValue function 
115       is called when the value for a coefficient needs to be known. When it is called,
116       depending on what type of coefficient is represented by the FGCoefficient
117       instance, TotalValue() directs the appropriate Value() function to be called.
118       The type of coefficient represented is determined when the config file is read.
119       The coefficient definition includes the "type" specifier.
120       @return the current value of the coefficient represented by this instance of
121       FGCoefficient. */
122   virtual double TotalValue(void);
123
124   /** Returns the value for this coefficient.
125       TotalValue is stored each time TotalValue() is called. This function returns
126       the stored value but does not calculate it anew. This is valuable for merely
127       printing out the value.
128       @return the most recently calculated and stored value of the coefficient
129       represented by this instance of FGCoefficient. */
130   virtual inline double GetValue(void) const { return totalValue; }
131
132   /// Returns the name of this coefficient.
133   virtual inline string Getname(void) const {return name;}
134
135   /// Returns the value of the coefficient only - before it is re-dimensionalized.
136   virtual inline double GetSD(void) const { return SD;}
137
138   /** Outputs coefficient information.
139       Non-dimensionalizing parameter descriptions are output
140       for each aero coefficient defined. */
141   virtual void DisplayCoeffFactors(void);
142
143   /// Returns the name of the coefficient.
144   virtual inline string GetCoefficientName(void) { return name; }
145   /// Returns the stability derivative or coefficient value as a string.
146   virtual string GetSDstring(void);
147
148   inline void setBias(double b) { bias=b; }
149   inline void setGain(double g) { gain=g; };
150   inline double getBias(void) const { return bias; }
151   inline double getGain(void) const { return gain; }
152   
153   virtual void bind(FGPropertyManager *parent);
154   virtual void unbind(void);
155
156 protected:
157   FGFDMExec* FDMExec;
158
159 private:
160   int numInstances;
161   string description;
162   string name;
163   string filename;
164   string method;
165   string multparms;
166   string multparmsRow;
167   string multparmsCol;
168   double Value(double, double);
169   double Value(double);
170   double Value(void);
171   double StaticValue;
172   double totalValue;
173   double bias,gain;
174   FGPropertyManager *LookupR, *LookupC;
175   
176   FGPropertyManager *node; // must be private!!
177   
178   MultVec multipliers;
179   int rows, columns;
180   Type type;
181   double SD; // Actual stability derivative (or other coefficient) value
182   FGTable *Table;
183
184   FGState*        State;
185   FGAtmosphere*   Atmosphere;
186   FGFCS*          FCS;
187   FGAircraft*     Aircraft;
188   FGTranslation*  Translation;
189   FGRotation*     Rotation;
190   FGPosition*     Position;
191   FGAuxiliary*    Auxiliary;
192   FGOutput*       Output;
193   FGPropertyManager* PropertyManager;
194   
195   FGPropertyManager* resolveSymbol(string name);
196
197   virtual void Debug(int from);
198 };
199
200 } // using namespace JSBSim
201
202 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
203 #endif
204