]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/FGInertial.h
sync with JSB JSBSim CVS
[flightgear.git] / src / FDM / JSBSim / models / FGInertial.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Header:       FGInertial.h
4  Author:       Jon S. Berndt
5  Date started: 09/13/00
6
7  ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
8
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13
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 Lesser General Public License for more
17  details.
18
19  You should have received a copy of the GNU Lesser 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.
22
23  Further information about the GNU Lesser General Public License can also be found on
24  the world wide web at http://www.gnu.org.
25
26 HISTORY
27 --------------------------------------------------------------------------------
28 09/13/00   JSB   Created
29
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 SENTRY
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
33
34 #ifndef FGINERTIAL_H
35 #define FGINERTIAL_H
36
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 INCLUDES
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
40
41 #include <vector>
42
43 #include "FGModel.h"
44 #include "math/FGColumnVector3.h"
45
46 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 DEFINITIONS
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
49
50 #define ID_INERTIAL "$Id: FGInertial.h,v 1.20 2011/10/31 14:54:41 bcoconni Exp $"
51
52 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
53 FORWARD DECLARATIONS
54 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
55
56 namespace JSBSim {
57
58 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59 CLASS DOCUMENTATION
60 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
61
62 /** Models inertial forces (e.g. centripetal and coriolis accelerations). Starting
63     conversion to WGS84.
64   */
65
66 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67 CLASS DECLARATION
68 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
69
70 class FGInertial : public FGModel {
71
72 public:
73   FGInertial(FGFDMExec*);
74   ~FGInertial(void);
75
76   bool InitModel(void);
77
78   /** Runs the Inertial model; called by the Executive
79       Can pass in a value indicating if the executive is directing the simulation to Hold.
80       @param Holding if true, the executive has been directed to hold the sim from 
81                      advancing time. Some models may ignore this flag, such as the Input
82                      model, which may need to be active to listen on a socket for the
83                      "Resume" command to be given.
84       @return false if no error */
85   bool Run(bool Holding);
86   double SLgravity(void) const {return gAccelReference;}
87   double gravity(void) const {return gAccel;}
88   double omega(void) const {return RotationRate;}
89   const FGColumnVector3& GetOmegaPlanet() const {return vOmegaPlanet;}
90   double GetGAccel(double r) const;
91   FGColumnVector3 GetGravityJ2(const FGColumnVector3& position) const;
92   double GetRefRadius(void) const {return RadiusReference;}
93   double GetSemimajor(void) const {return a;}
94   double GetSemiminor(void) const {return b;}
95
96   struct Inputs {
97     double Radius;
98     double Latitude;
99   } in;
100
101 private:
102   FGColumnVector3 vOmegaPlanet;
103   double gAccel;
104   double gAccelReference;
105   double RadiusReference;
106   double RotationRate;
107   double earthPosAngle;
108   double GM;
109   double C2_0; // WGS84 value for the C2,0 coefficient
110   double J2;   // WGS84 value for J2
111   double a;    // WGS84 semimajor axis length in feet 
112   double b;    // WGS84 semiminor axis length in feet
113
114   void bind(void);
115   void Debug(int from);
116 };
117 }
118 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
119 #endif