1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 Header: FGCoefficient.h
7 ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
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
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
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.
23 Further information about the GNU General Public License can also be found on
24 the world wide web at http://www.gnu.org.
27 --------------------------------------------------------------------------------
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
34 #ifndef FGCOEFFICIENT_H
35 #define FGCOEFFICIENT_H
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
42 # include <simgear/compiler.h>
47 #include "FGConfigFile.h"
49 #include "FGJSBBase.h"
50 #include "FGPropertyManager.h"
52 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
56 #define ID_COEFFICIENT "$Id$"
60 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
62 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
75 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
77 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
79 Note that the coefficients need not be calculated each delta-t. This is
80 something that may be fixed someday.
82 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
86 /** This class models the stability derivative coefficient lookup tables.
87 Each coefficient for an axis is stored in that axes' vector of coefficients.
88 Each FDM execution frame the Run() method of the [currently] FGAircraft model
89 is called and the coefficient value is calculated.
92 @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGCoefficient.h?rev=HEAD&content-type=text/vnd.viewcvs-markup">
94 @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGCoefficient.cpp?rev=HEAD&content-type=text/vnd.viewcvs-markup">
98 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
100 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
102 class FGCoefficient : public FGJSBBase
105 FGCoefficient(FGFDMExec*);
106 virtual ~FGCoefficient();
108 virtual bool Load(FGConfigFile* AC_cfg);
110 typedef vector <FGPropertyManager*> MultVec;
111 virtual double TotalValue(void);
112 virtual inline double GetValue(void) const { return totalValue; }
113 virtual inline string Getname(void) const {return name;}
114 virtual inline double GetSD(void) const { return SD;}
115 inline MultVec Getmultipliers(void) {return multipliers;}
118 /** Outputs coefficient information.
119 Non-dimensionalizing parameter descriptions are output
120 for each aero coefficient defined.
121 @param multipliers the list of multipliers for this coefficient.*/
122 virtual void DisplayCoeffFactors(void);
123 virtual inline string GetCoefficientStrings(void) { return name; }
124 virtual string GetCoefficientValues(void);
126 inline void setBias(double b) { bias=b; }
127 inline void setGain(double g) { gain=g; };
128 inline double getBias(void) const { return bias; }
129 inline double getGain(void) const { return gain; }
131 virtual void bind(FGPropertyManager *parent);
132 virtual void unbind(void);
139 enum Type {UNKNOWN, VALUE, VECTOR, TABLE, EQUATION};
149 double Value(double, double);
150 double Value(double);
155 FGPropertyManager *LookupR, *LookupC;
157 FGPropertyManager *node; // must be private!!
162 double SD; // Actual stability derivative (or other coefficient) value
166 FGAtmosphere* Atmosphere;
168 FGAircraft* Aircraft;
169 FGTranslation* Translation;
170 FGRotation* Rotation;
171 FGPosition* Position;
172 FGAuxiliary* Auxiliary;
174 FGPropertyManager* PropertyManager;
176 virtual void Debug(int from);
179 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%