-/*******************************************************************************
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Header: FGAerodynamics.h
Author: Jon S. Berndt
--------------------------------------------------------------------------------
09/13/00 JSB Created
-********************************************************************************
-COMMENTS, REFERENCES, and NOTES
-********************************************************************************
-
-********************************************************************************
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SENTRY
-*******************************************************************************/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#ifndef FGAERODYNAMICS_H
#define FGAERODYNAMICS_H
-/*******************************************************************************
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INCLUDES
-*******************************************************************************/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#ifdef FGFS
# include <simgear/compiler.h>
-# ifdef FG_HAVE_STD_INCLUDES
+# ifdef SG_HAVE_STD_INCLUDES
# include <vector>
+# include <map>
# else
# include <vector.h>
+# include <map.h>
# endif
#else
# include <vector>
+# include <map>
#endif
#include "FGModel.h"
-
-#define ID_AERODYNAMICS "$Header$"
-
-/*******************************************************************************
+#include "FGConfigFile.h"
+#include "FGCoefficient.h"
+#include "FGColumnVector3.h"
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+DEFINITIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#define ID_AERODYNAMICS "$Id$"
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+FORWARD DECLARATIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+namespace JSBSim {
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS DOCUMENTATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/** Encapsulates the aerodynamic calculations.
+ This class owns and contains the list of coefficients that define the
+ aerodynamic properties of this aircraft. Here also, such unique phenomena
+ as ground effect and maximum lift curve tailoff are handled.
+ @config
+ <pre>
+ \<AERODYNAMICS>
+ \<AXIS NAME="{LIFT|DRAG|SIDE|ROLL|PITCH|YAW}">
+ {Coefficient definitions}
+ \</AXIS>
+ {Additional axis definitions}
+ \</AERODYNAMICS> </pre>
+
+ @author Jon S. Berndt, Tony Peden
+ $Id$
+*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CLASS DECLARATION
-*******************************************************************************/
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
class FGAerodynamics : public FGModel {
public:
- FGAerodynamics(FGFDMExec*);
- ~FGAerodynamics(void);
-
+ /** Constructor
+ @param Executive a pointer to the parent executive object */
+ FGAerodynamics(FGFDMExec* Executive);
+ /// Destructor
+ ~FGAerodynamics();
+
+ /** Runs the Aerodynamics model; called by the Executive
+ @return false if no error */
bool Run(void);
- bool LoadAerodynamics(FGConfigFile* AC_cfg);
+
+ /** Loads the Aerodynamics model.
+ The Load function for this class expects the configuration file to
+ have found the AERODYNAMICS keyword in the configution file and to
+ have set that line to the current line.
+ @param AC_cfg pointer to the current configuration file.
+ @return true if successful */
+ bool Load(FGConfigFile* AC_cfg);
+
+ /** Gets the total aerodynamic force vector.
+ @return a force vector reference. */
+ FGColumnVector3& GetForces(void) {return vForces;}
+
+ /** Gets the aerodynamic force for an axis.
+ @param n Axis index. This could be 0, 1, or 2, or one of the
+ axis enums: eX, eY, eZ.
+ @return the force acting on an axis */
+ double GetForces(int n) const {return vForces(n);}
+
+ /** Gets the total aerodynamic moment vector.
+ @return a moment vector reference. */
+ FGColumnVector3& GetMoments(void) {return vMoments;}
+
+ /** Gets the aerodynamic moment for an axis.
+ @return the moment about a single axis (as described also in the
+ similar call to GetForces(int n).*/
+ double GetMoments(int n) const {return vMoments(n);}
+
+ FGColumnVector3& GetvLastFs(void) { return vLastFs; }
+ double GetvLastFs(int axis) const { return vLastFs(axis); }
+ FGColumnVector3& GetvFs(void) { return vFs; }
+ double GetvFs(int axis) const { return vFs(axis); }
+ inline double GetLoD(void) const { return lod; }
+ inline double GetClSquared(void) const { return clsq; }
+ inline double GetAlphaCLMax(void) const { return alphaclmax; }
+ inline double GetAlphaCLMin(void) const { return alphaclmin; }
+
+ inline double GetAlphaHystMax(void) const { return alphahystmax; }
+ inline double GetAlphaHystMin(void) const { return alphahystmin; }
+ inline double GetHysteresisParm(void) const { return stall_hyst; }
+ inline double GetStallWarn(void) const { return impending_stall; }
+ double GetAlphaW(void) const { return alphaw; }
+
+ double GetBI2Vel(void) const { return bi2vel; }
+ double GetCI2Vel(void) const { return ci2vel; }
+
+ inline void SetAlphaCLMax(double tt) { alphaclmax=tt; }
+ inline void SetAlphaCLMin(double tt) { alphaclmin=tt; }
+
+ /** Gets the strings for the current set of coefficients.
+ @param delimeter either a tab or comma string depending on output type
+ @return a string containing the descriptive names for all coefficients */
+ string GetCoefficientStrings(string delimeter);
+
+ /** Gets the coefficient values.
+ @param delimeter either a tab or comma string depending on output type
+ @return a string containing the numeric values for the current set of
+ coefficients */
+ string GetCoefficientValues(string delimeter);
+
+ void bind(void);
+ void bindModel(void);
+ void unbind(void);
+ void convert(void);
+
+private:
+ typedef map<string,int> AxisIndex;
+ AxisIndex AxisIdx;
+ typedef vector<FGCoefficient*> CoeffArray;
+ CoeffArray* Coeff;
+ FGColumnVector3 vFs;
+ FGColumnVector3 vForces;
+ FGColumnVector3 vMoments;
+ FGColumnVector3 vLastFs;
+ FGColumnVector3 vDXYZcg;
+ double alphaclmax, alphaclmin;
+ double alphahystmax, alphahystmin;
+ double impending_stall, stall_hyst;
+ double bi2vel, ci2vel,alphaw;
+ double clsq,lod;
+
+ typedef double (FGAerodynamics::*PMF)(int) const;
+
+ void Debug(int from);
};
-/******************************************************************************/
+} // namespace JSBSim
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#endif