]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/FGInertial.h
Removed useless divisions - As a side effect, it removes the risk of divisions by...
[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.16 2011/05/20 03:18:36 jberndt 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   double GetEarthPositionAngle(void) const { return earthPosAngle; }
90   double GetEarthPositionAngleDeg(void) const { return earthPosAngle*radtodeg;}
91   double GetGAccel(double r) const;
92   FGColumnVector3 GetGravityJ2(FGColumnVector3 position) const;
93   double GetRefRadius(void) const {return RadiusReference;}
94   double GetSemimajor(void) const {return a;}
95   double GetSemiminor(void) const {return b;}
96
97   void SetEarthPositionAngle(double epa) {earthPosAngle = epa;}
98
99 private:
100   double gAccel;
101   double gAccelReference;
102   double RadiusReference;
103   double RotationRate;
104   double earthPosAngle;
105   double GM;
106   double C2_0; // WGS84 value for the C2,0 coefficient
107   double J2;   // WGS84 value for J2
108   double a;    // WGS84 semimajor axis length in feet 
109   double b;    // WGS84 semiminor axis length in feet
110
111   void bind(void);
112   void Debug(int from);
113 };
114 }
115 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
116 #endif