]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/FGAerodynamics.h
Make yasim accept the launchbar and hook properties. They are not tied to anything...
[flightgear.git] / src / FDM / JSBSim / FGAerodynamics.h
index 9bf17e08effbf5106ce67ecc24c9241a6dbef657..3947101de9519bb60ae42ecbd5ef6c62913220b5 100644 (file)
@@ -1,4 +1,4 @@
-/*******************************************************************************
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
  Header:       FGAerodynamics.h
  Author:       Jon S. Berndt
@@ -27,48 +27,172 @@ HISTORY
 --------------------------------------------------------------------------------
 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"
-
-/*******************************************************************************
+#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);
+  
+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