]> git.mxchange.org Git - flightgear.git/blobdiff - JSBsim/FGAircraft.h
Added initial support for native SGI compilers.
[flightgear.git] / JSBsim / FGAircraft.h
index 0cdc81cd414150fcef73acecb474d253348abb15..9d403177d17c246f7f407850fa11489a33bbe1e1 100644 (file)
@@ -26,9 +26,8 @@
 HISTORY
 --------------------------------------------------------------------------------
 12/12/98   JSB   Created
-*******************************************************************************/
 
-/*******************************************************************************
+********************************************************************************
 SENTRY
 *******************************************************************************/
 
@@ -37,22 +36,11 @@ SENTRY
 
 /*******************************************************************************
 COMMENTS, REFERENCES,  and NOTES
-********************************************************************************
-[1] Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
-        Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420  Naval Postgraduate
-        School, January 1994
-[2] D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
-        JSC 12960, July 1977
-[3] Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
-        NASA-Ames", NASA CR-2497, January 1975
-[4] Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
-        Wiley & Sons, 1979 ISBN 0-471-03032-5
-[5] Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
-        1982 ISBN 0-471-08936-2
-
-The aerodynamic coefficients used in this model are:
-
-Longitudinal
+*******************************************************************************/
+/**
+The aerodynamic coefficients used in this model typically are:
+<PRE>
+<b>Longitudinal</b>
   CL0 - Reference lift at zero alpha
   CD0 - Reference drag at zero alpha
   CDM - Drag due to Mach
@@ -62,13 +50,13 @@ Longitudinal
   CLM - Lift due to Mach
   CLadt - Lift due to alpha rate
 
-  Cmadt - Moment due to alpha rate
-  Cm0 - Reference moment at zero alpha
+  Cmadt - Pitching Moment due to alpha rate
+  Cm0 - Reference Pitching moment at zero alpha
   Cma - Pitching moment slope (w.r.t. alpha)
   Cmq - Pitch damping (pitch moment due to pitch rate)
-  CmM - Moment due to Mach
+  CmM - Pitch Moment due to Mach
 
-Lateral
+<b>Lateral</b>
   Cyb - Side force due to sideslip
   Cyr - Side force due to yaw rate
 
@@ -79,9 +67,9 @@ Lateral
   Cnp - Rudder adverse yaw (yaw moment due to roll rate)
   Cnr - Yaw damping (yaw moment due to yaw rate)
 
-Control
-  ClDe - Lift due to elevator
-  CdDe - Drag due to elevator
+<b>Control</b>
+  CLDe - Lift due to elevator
+  CDDe - Drag due to elevator
   CyDr - Side force due to rudder
   CyDa - Side force due to aileron
 
@@ -90,19 +78,80 @@ Control
   ClDr - Roll moment due to rudder
   CnDr - Yaw moment due to rudder
   CnDa - Yaw moment due to aileron
+</PRE>
+This class expects to be run in a directory which contains the subdirectory
+structure shown below (where example aircraft X-15 is shown):
+
+<PRE>
+aircraft/
+  X-15/
+    X-15.dat reset00 reset01 reset02 ...
+      CDRAG/
+        a0 a M De
+      CSIDE/
+        b r Dr Da
+      CLIFT/
+        a0 a M adt De
+      CROLL/
+        b p r Da Dr
+      CPITCH/
+        a0 a adt q M De
+      CYAW/
+        b p r Dr Da
+  F-16/
+    F-16.dat reset00 reset01 ...
+      CDRAG/
+        a0 a M De
+      ...
+</PRE>
+
+The General Idea
+
+The file structure is arranged so that various modeled aircraft are stored in
+their own subdirectory. Each aircraft subdirectory is named after the aircraft.
+There should be a file present in the specific aircraft subdirectory (e.g.
+aircraft/X-15) with the same name as the directory with a .dat appended. This
+file contains mass properties information, name of aircraft, etc. for the
+aircraft. In that same directory are reset files numbered starting from 0 (two
+digit numbers), e.g. reset03. Within each reset file are values for important
+state variables for specific flight conditions (altitude, airspeed, etc.). Also
+within this directory are the directories containing lookup tables for the
+stability derivatives for the aircraft.
+@author Jon S. Berndt
+@memo  Encompasses all aircraft functionality and objects
+@see <ll>
+<li>[1] Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
+        Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420  Naval Postgraduate
+        School, January 1994</li>
+<li>[2] D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
+        JSC 12960, July 1977</li>
+<li>[3] Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
+        NASA-Ames", NASA CR-2497, January 1975</li>
+<li>[4] Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
+        Wiley & Sons, 1979 ISBN 0-471-03032-5</li>
+<li>[5] Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
+        1982 ISBN 0-471-08936-2</li>
+</ll>
+*/
 
-********************************************************************************
+/*******************************************************************************
 INCLUDES
 *******************************************************************************/
-
-#include <stdio.h>
-#include <fstream.h>
+#ifdef FGFS
+#  include <Include/compiler.h>
+#  ifdef FG_HAVE_STD_INCLUDES
+#    include <fstream>
+#  else
+#    include <fstream.h>
+#  endif
+#else
+#  include <fstream>
+#endif
 
 #include "FGModel.h"
 #include "FGCoefficient.h"
 #include "FGEngine.h"
 #include "FGTank.h"
-//#include "FGMatrix.h"
 
 /*******************************************************************************
 DEFINITIONS
@@ -112,64 +161,318 @@ DEFINITIONS
 CLASS DECLARATION
 *******************************************************************************/
 
-
 class FGAircraft : public FGModel
 {
 public:
-  FGAircraft(void);
+  // ***************************************************************************
+  /** @memo Constructor
+      @param FGFDMExec* - a pointer to the "owning" FDM Executive
+  */
+  FGAircraft(FGFDMExec*);
+  
+  // ***************************************************************************
+  /** Destructor */
   ~FGAircraft(void);
 
+  // ***************************************************************************
+  /** This must be called for each dt to execute the model algorithm */
   bool Run(void);
-  bool LoadAircraft(char*);
-  char* GetAircraftName(void) {return AircraftName;}
+
+  // ***************************************************************************
+  /** This function must be called with the name of an aircraft which
+      has an associated .dat file in the appropriate subdirectory. The
+      appropriate subdirectory is underneath the main fgfs binary directory
+      called "aircraft/{<i>aircraft</i>}/, where {<i>aircraft</i>} is the name of
+      specific aircraft you want to simulate.
+      @memo Loads the given aircraft.
+      @param string Path to the Aircraft files
+      @param string Path to the Engine files
+      @param string The name of the aircraft to be loaded, e.g. "X15".
+      @return True - if successful
+  */
+  bool LoadAircraft(string, string, string);
+
+  // ***************************************************************************
+  /** @memo Gets the aircraft name as defined in the aircraft config file.
+      @param
+      @return string Aircraft name.
+  */
+  inline string GetAircraftName(void) {return AircraftName;}
+
+  // ***************************************************************************
+  /** @memo Sets the GearUp flag
+      @param boolean true or false
+      @return
+  */
   inline void SetGearUp(bool tt) {GearUp = tt;}
+
+  // ***************************************************************************
+  /** @memo Returns the state of the GearUp flag
+      @param
+      @return boolean true or false
+  */
   inline bool GetGearUp(void) {return GearUp;}
+
+  // ***************************************************************************
+  /** @memo Returns the area of the wing
+      @param
+      @return float wing area S, in square feet
+  */
   inline float GetWingArea(void) {return WingArea;}
+
+  // ***************************************************************************
+  /** @memo Returns the wing span
+      @param
+      @return float wing span in feet
+  */
   inline float GetWingSpan(void) {return WingSpan;}
+
+  // ***************************************************************************
+  /** @memo Returns the average wing chord
+      @param
+      @return float wing chord in feet
+  */
   inline float Getcbar(void) {return cbar;}
+
+  // ***************************************************************************
+  /** @memo Returns an engine object
+      @param int The engine number
+      @return FGEengine* The pointer to the requested engine object.
+  */
   inline FGEngine* GetEngine(int tt) {return Engine[tt];}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   inline FGTank* GetTank(int tt) {return Tank[tt];}
 
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetWeight(void) {return Weight;}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetMass(void) {return Mass;}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetL(void) {return Moments[0];}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetM(void) {return Moments[1];}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetN(void) {return Moments[2];}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetFx(void) {return Forces[0];}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetFy(void) {return Forces[1];}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetFz(void) {return Forces[2];}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetIxx(void) {return Ixx;}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetIyy(void) {return Iyy;}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetIzz(void) {return Izz;}
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  inline float GetIxz(void) {return Ixz;}
+
 private:
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void GetState(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void PutState(void);
 
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void FAero(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void FGear(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void FMass(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void FProp(void);
 
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void MAero(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void MGear(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void MMass(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   void MProp(void);
 
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  void MassChange(void);
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   float Moments[3];
+
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
   float Forces[3];
 
-  char AircraftName[50];
-  float Ixx, Iyy, Izz, Ixz, m;
+  // ***************************************************************************
+  /** @memo
+      @param
+      @return
+  */
+  string AircraftName;
+
+  // ***************************************************************************
+  ///
+  float Ixx, Iyy, Izz, Ixz, EmptyMass, Mass;
+  ///
   float Xcg, Ycg, Zcg;
+  ///
   float Xep, Yep, Zep;
+  ///
   float rho, qbar, Vt;
+  ///
   float alpha, beta;
+  ///
   float WingArea, WingSpan, cbar;
-  float g, phi, tht, psi;
-  float Weight;
+  ///
+  float phi, tht, psi;
+  ///
+  float Weight, EmptyWeight;
+  ///
   float dt;
 
+  ///
   int numTanks;
+  ///
   int numEngines;
+  ///
   int numSelectedOxiTanks;
+  ///
   int numSelectedFuelTanks;
-  FGTank* Tank[30];
-  FGEngine *Engine[10];
+  ///
+  FGTank* Tank[MAX_TANKS];
+  ///
+  FGEngine *Engine[MAX_ENGINES];
 
+  ///
   FGCoefficient *Coeff[6][10];
+  ///
   int coeff_ctr[6];
 
+  ///
   bool GearUp;
 
+  ///
   enum Param {LiftCoeff,
               DragCoeff,
               SideCoeff,
@@ -178,17 +481,12 @@ private:
               YawCoeff,
               numCoeffs};
 
-  char* Axis[6];
+  ///
+  string Axis[6];
 
 protected:
 
 };
 
-#ifndef FDM_MAIN
-extern FGAircraft* Aircraft;
-#else
-FGAircraft* Aircraft;
-#endif
-
 /******************************************************************************/
 #endif