X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2FFGCoefficient.h;h=01c6abb806337bc84401ecb1efc53a833606ca82;hb=95440173caef3ce92ee7308fd58a24dabe4c5f8a;hp=e279f6b17f155bb10d106bd811f2aa55343e6b84;hpb=97067e62a2f47d2265e8bd648a49295de4da54c9;p=flightgear.git diff --git a/src/FDM/JSBSim/FGCoefficient.h b/src/FDM/JSBSim/FGCoefficient.h index e279f6b17..01c6abb80 100644 --- a/src/FDM/JSBSim/FGCoefficient.h +++ b/src/FDM/JSBSim/FGCoefficient.h @@ -45,8 +45,9 @@ INCLUDES #include #include #include "FGConfigFile.h" -#include "FGDefs.h" #include "FGTable.h" +#include "FGJSBBase.h" +#include "FGPropertyManager.h" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFINITIONS @@ -60,6 +61,8 @@ using std::vector; FORWARD DECLARATIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ +namespace JSBSim { + class FGFDMExec; class FGState; class FGAtmosphere; @@ -72,71 +75,112 @@ class FGAuxiliary; class FGOutput; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs] -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Note that the coefficients need not be calculated each delta-t. This is -something that may be fixed someday. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS DOCUMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -/** This class models the stability derivative coefficient lookup tables. +/** This class models the aero coefficient and stability derivative coefficient + lookup table, value, vector, or equation (equation not modeled, yet). Each coefficient for an axis is stored in that axes' vector of coefficients. - Each FDM execution frame the Run() method of the [currently] FGAircraft model - is called and the coefficient value is calculated. + Each FDM execution frame the Run() method of the FGAerodynamics model + is called and the coefficient values are calculated. @author Jon S. Berndt @version $Id$ - @see - */ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -class FGCoefficient +class FGCoefficient : public FGJSBBase { public: - FGCoefficient(FGFDMExec*); - ~FGCoefficient(); + /** Constructor. + @param exec a pointer to the FGFDMExec instance. */ + FGCoefficient(FGFDMExec* exec); + /// Destructor. + virtual ~FGCoefficient(); + /** Loads the stability derivative/aero coefficient data from the config file + as directed by the FGAerodynamics instance. + @param AC_cfg a pointer to the current config file instance. */ virtual bool Load(FGConfigFile* AC_cfg); - typedef vector MultVec; - virtual float TotalValue(void); - virtual inline string Getname(void) {return name;} - virtual inline float GetSD(void) { return SD;} - inline MultVec Getmultipliers(void) {return multipliers;} - void DumpSD(void); - + typedef vector MultVec; + + enum Type {UNKNOWN, VALUE, VECTOR, TABLE, EQUATION}; + + /** Returns the value for this coefficient. + Each instance of FGCoefficient stores a value for the "type" of coefficient + it is, one of: VALUE, VECTOR, TABLE, or EQUATION. This TotalValue function + is called when the value for a coefficient needs to be known. When it is called, + depending on what type of coefficient is represented by the FGCoefficient + instance, TotalValue() directs the appropriate Value() function to be called. + The type of coefficient represented is determined when the config file is read. + The coefficient definition includes the "type" specifier. + @return the current value of the coefficient represented by this instance of + FGCoefficient. */ + virtual double TotalValue(void); + + /** Returns the value for this coefficient. + TotalValue is stored each time TotalValue() is called. This function returns + the stored value but does not calculate it anew. This is valuable for merely + printing out the value. + @return the most recently calculated and stored value of the coefficient + represented by this instance of FGCoefficient. */ + virtual inline double GetValue(void) const { return totalValue; } + + /// Returns the name of this coefficient. + virtual inline string Getname(void) const {return name;} + + /// Returns the value of the coefficient only - before it is re-dimensionalized. + virtual inline double GetSD(void) const { return SD;} + /** Outputs coefficient information. Non-dimensionalizing parameter descriptions are output - for each aero coefficient defined. - @param multipliers the list of multipliers for this coefficient.*/ + for each aero coefficient defined. */ virtual void DisplayCoeffFactors(void); - virtual inline string GetCoefficientStrings(void) { return name; } - virtual string GetCoefficientValues(void); -private: - enum Type {UNKNOWN, VALUE, VECTOR, TABLE, EQUATION}; + /// Returns the name of the coefficient. + virtual inline string GetCoefficientName(void) { return name; } + /// Returns the stability derivative or coefficient value as a string. + virtual string GetSDstring(void); + + inline void setBias(double b) { bias=b; } + inline void setGain(double g) { gain=g; }; + inline double getBias(void) const { return bias; } + inline double getGain(void) const { return gain; } + + virtual void bind(FGPropertyManager *parent); + virtual void unbind(void); + +protected: + FGFDMExec* FDMExec; + +private: int numInstances; - string filename; string description; string name; + string filename; string method; - float Value(float, float); - float Value(float); - float Value(void); - float StaticValue; - eParam LookupR, LookupC; + string multparms; + string multparmsRow; + string multparmsCol; + double Value(double, double); + double Value(double); + double Value(void); + double StaticValue; + double totalValue; + double bias,gain; + FGPropertyManager *LookupR, *LookupC; + + FGPropertyManager *node; // must be private!! + MultVec multipliers; int rows, columns; Type type; - float SD; // Actual stability derivative (or other coefficient) value + double SD; // Actual stability derivative (or other coefficient) value FGTable *Table; - FGFDMExec* FDMExec; FGState* State; FGAtmosphere* Atmosphere; FGFCS* FCS; @@ -146,10 +190,15 @@ private: FGPosition* Position; FGAuxiliary* Auxiliary; FGOutput* Output; + FGPropertyManager* PropertyManager; + + FGPropertyManager* resolveSymbol(string name); - void Debug(void); + virtual void Debug(int from); }; +} // using namespace JSBSim + //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #endif