JSBSim Flight Dynamics Model  1.1.11 (13 Feb 2022)
An Open Source Flight Dynamics and Control Software Library in C++
FGInertial Class Reference

Detailed Description

Models inertial forces (e.g.

centripetal and coriolis accelerations). Starting conversion to WGS84.

Definition at line 65 of file FGInertial.h.

#include <FGInertial.h>

+ Inheritance diagram for FGInertial:
+ Collaboration diagram for FGInertial:

Classes

struct  Inputs
 

Public Types

enum  eGravType { gtStandard, gtWGS84 }
 These define the indices use to select the gravitation models. More...
 
- Public Types inherited from FGJSBBase
enum  { eL = 1, eM, eN }
 Moments L, M, N.
 
enum  { eP = 1, eQ, eR }
 Rates P, Q, R.
 
enum  { eU = 1, eV, eW }
 Velocities U, V, W.
 
enum  { eX = 1, eY, eZ }
 Positions X, Y, Z.
 
enum  { ePhi = 1, eTht, ePsi }
 Euler angles Phi, Theta, Psi.
 
enum  { eDrag = 1, eSide, eLift }
 Stability axis forces, Drag, Side force, Lift.
 
enum  { eRoll = 1, ePitch, eYaw }
 Local frame orientation Roll, Pitch, Yaw.
 
enum  { eNorth = 1, eEast, eDown }
 Local frame position North, East, Down.
 
enum  { eLat = 1, eLong, eRad }
 Locations Radius, Latitude, Longitude.
 
enum  {
  inNone = 0, inDegrees, inRadians, inMeters,
  inFeet
}
 Conversion specifiers.
 

Public Member Functions

 FGInertial (FGFDMExec *)
 
const FGColumnVector3GetGravity (void) const
 
int GetGravityType (void) const
 Get the gravity type.
 
const FGColumnVector3GetOmegaPlanet () const
 
double GetSemimajor (void) const
 
double GetSemiminor (void) const
 
FGMatrix33 GetTec2l (const FGLocation &location) const
 Transform matrix from the earth centered to local horizontal frame. More...
 
FGMatrix33 GetTl2ec (const FGLocation &location) const
 Transform matrix from the local horizontal frame to earth centered. More...
 
bool Load (Element *el) override
 
bool Run (bool Holding) override
 Runs the Inertial model; called by the Executive Can pass in a value indicating if the executive is directing the simulation to Hold. More...
 
void SetGravityType (int gt)
 Set the gravity type.
 
void SetGroundCallback (FGGroundCallback *gc)
 Sets the ground callback pointer. More...
 
void SetOmegaPlanet (double rate)
 
Functions that rely on the ground callback

The following functions allow to set and get the vehicle position above the ground.

The ground level is obtained by interrogating an instance of FGGroundCallback. A ground callback must therefore be set with SetGroundCallback() before calling any of these functions.

double GetContactPoint (const FGLocation &location, FGLocation &contact, FGColumnVector3 &normal, FGColumnVector3 &velocity, FGColumnVector3 &ang_velocity) const
 Get terrain contact point information below the current location. More...
 
double GetAltitudeAGL (const FGLocation &location) const
 Get the altitude above ground level. More...
 
void SetAltitudeAGL (FGLocation &location, double altitudeAGL)
 Set the altitude above ground level. More...
 
void SetTerrainElevation (double h)
 Set the terrain elevation above sea level. More...
 
void SetTime (double time)
 Set the simulation time. More...
 
- Public Member Functions inherited from FGModel
 FGModel (FGFDMExec *)
 Constructor.
 
 ~FGModel () override
 Destructor.
 
virtual SGPath FindFullPathName (const SGPath &path) const
 
FGFDMExecGetExec (void)
 
const std::string & GetName (void)
 
unsigned int GetRate (void)
 Get the output rate for the model in frames.
 
bool InitModel (void) override
 
void SetPropertyManager (FGPropertyManager *fgpm)
 
void SetRate (unsigned int tt)
 Set the ouput rate for the model in frames.
 
- Public Member Functions inherited from FGModelFunctions
std::string GetFunctionStrings (const std::string &delimeter) const
 Gets the strings for the current set of functions. More...
 
std::string GetFunctionValues (const std::string &delimeter) const
 Gets the function values. More...
 
FGFunctionGetPreFunction (const std::string &name)
 Get one of the "pre" function. More...
 
bool Load (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PostLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PreLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void RunPostFunctions (void)
 
void RunPreFunctions (void)
 
- Public Member Functions inherited from FGJSBBase
 FGJSBBase ()
 Constructor for FGJSBBase.
 
virtual ~FGJSBBase ()
 Destructor for FGJSBBase.
 
void PutMessage (const Message &msg)
 Places a Message structure on the Message queue. More...
 
void PutMessage (const std::string &text)
 Creates a message with the given text and places it on the queue. More...
 
void PutMessage (const std::string &text, bool bVal)
 Creates a message with the given text and boolean value and places it on the queue. More...
 
void PutMessage (const std::string &text, int iVal)
 Creates a message with the given text and integer value and places it on the queue. More...
 
void PutMessage (const std::string &text, double dVal)
 Creates a message with the given text and double value and places it on the queue. More...
 
int SomeMessages (void) const
 Reads the message on the queue (but does not delete it). More...
 
void ProcessMessage (void)
 Reads the message on the queue and removes it from the queue. More...
 
MessageProcessNextMessage (void)
 Reads the next message on the queue and removes it from the queue. More...
 
void disableHighLighting (void)
 Disables highlighting in the console output.
 

Static Public Member Functions

static constexpr double GetStandardGravity (void)
 
- Static Public Member Functions inherited from FGJSBBase
static const std::string & GetVersion (void)
 Returns the version number of JSBSim. More...
 
static constexpr double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit. More...
 
static constexpr double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine. More...
 
static constexpr double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius. More...
 
static constexpr double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine. More...
 
static constexpr double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin. More...
 
static constexpr double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius. More...
 
static constexpr double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit. More...
 
static constexpr double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin. More...
 
static constexpr double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius. More...
 
static constexpr double FeetToMeters (double measure)
 Converts from feet to meters. More...
 
static double PitotTotalPressure (double mach, double p)
 Compute the total pressure in front of the Pitot tube. More...
 
static double MachFromImpactPressure (double qc, double p)
 Compute the Mach number from the differential pressure (qc) and the static pressure. More...
 
static double VcalibratedFromMach (double mach, double p)
 Calculate the calibrated airspeed from the Mach number. More...
 
static double MachFromVcalibrated (double vcas, double p)
 Calculate the Mach number from the calibrated airspeed.Based on the formulas in the US Air Force Aircraft Performance Flight Testing Manual (AFFTC-TIH-99-01). More...
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison. More...
 
static constexpr double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static constexpr double sign (double num)
 
static double GaussianRandomNumber (void)
 

Public Attributes

struct JSBSim::FGInertial::Inputs in
 

Additional Inherited Members

- Static Public Attributes inherited from FGJSBBase
static char highint [5] = {27, '[', '1', 'm', '\0' }
 highlights text
 
static char halfint [5] = {27, '[', '2', 'm', '\0' }
 low intensity text
 
static char normint [6] = {27, '[', '2', '2', 'm', '\0' }
 normal intensity text
 
static char reset [5] = {27, '[', '0', 'm', '\0' }
 resets text properties
 
static char underon [5] = {27, '[', '4', 'm', '\0' }
 underlines text
 
static char underoff [6] = {27, '[', '2', '4', 'm', '\0' }
 underline off
 
static char fgblue [6] = {27, '[', '3', '4', 'm', '\0' }
 blue text
 
static char fgcyan [6] = {27, '[', '3', '6', 'm', '\0' }
 cyan text
 
static char fgred [6] = {27, '[', '3', '1', 'm', '\0' }
 red text
 
static char fggreen [6] = {27, '[', '3', '2', 'm', '\0' }
 green text
 
static char fgdef [6] = {27, '[', '3', '9', 'm', '\0' }
 default text
 
static short debug_lvl = 1
 
- Protected Member Functions inherited from FGModel
bool Upload (Element *el, bool preLoad)
 Uploads this model in memory. More...
 
- Static Protected Member Functions inherited from FGJSBBase
static std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
- Protected Attributes inherited from FGModel
unsigned int exe_ctr
 
FGFDMExecFDMExec
 
std::string Name
 
FGPropertyManagerPropertyManager
 
unsigned int rate
 
- Protected Attributes inherited from FGModelFunctions
FGPropertyReader LocalProperties
 
std::vector< FGFunction * > PostFunctions
 
std::vector< FGFunction * > PreFunctions
 
- Static Protected Attributes inherited from FGJSBBase
static Message localMsg
 
static std::queue< MessageMessages
 
static unsigned int messageId = 0
 
static constexpr double radtodeg = 180. / M_PI
 
static constexpr double degtorad = M_PI / 180.
 
static constexpr double hptoftlbssec = 550.0
 
static constexpr double psftoinhg = 0.014138
 
static constexpr double psftopa = 47.88
 
static constexpr double ktstofps = 1.68781
 
static constexpr double fpstokts = 1.0 / ktstofps
 
static constexpr double inchtoft = 1.0/12.0
 
static constexpr double fttom = 0.3048
 
static constexpr double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static constexpr double in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3
 
static constexpr double inhgtopa = 3386.38
 
static constexpr double slugtolb = 32.174049
 Note that definition of lbtoslug by the inverse of slugtolb and not to a different constant you can also get from some tables will make lbtoslug*slugtolb == 1 up to the magnitude of roundoff. More...
 
static constexpr double lbtoslug = 1.0/slugtolb
 
static constexpr double kgtolb = 2.20462
 
static constexpr double kgtoslug = 0.06852168
 
static const std::string needed_cfg_version = "2.0"
 
static const std::string JSBSim_version = JSBSIM_VERSION " " __DATE__ " " __TIME__
 
static int gaussian_random_number_phase = 0
 

Member Enumeration Documentation

◆ eGravType

enum eGravType

These define the indices use to select the gravitation models.

Enumerator
gtStandard 

Evaluate gravity using Newton's classical formula assuming the Earth is spherical.

gtWGS84 

Evaluate gravity using WGS84 formulas that take the Earth oblateness into account.

Definition at line 153 of file FGInertial.h.

153  {
156  gtStandard,
159  gtWGS84
160  };

Member Function Documentation

◆ GetAltitudeAGL()

double GetAltitudeAGL ( const FGLocation location) const
inline

Get the altitude above ground level.

Returns
the altitude AGL in feet.
Parameters
locationLocation at which the AGL is evaluated.
See also
SetGroundCallback

Definition at line 114 of file FGInertial.h.

114  {
115  FGLocation lDummy;
116  FGColumnVector3 vDummy;
117  return GroundCallback->GetAGLevel(location, lDummy, vDummy, vDummy,
118  vDummy);
119  }
+ Here is the caller graph for this function:

◆ GetContactPoint()

double GetContactPoint ( const FGLocation location,
FGLocation contact,
FGColumnVector3 normal,
FGColumnVector3 velocity,
FGColumnVector3 ang_velocity 
) const
inline

Get terrain contact point information below the current location.

Parameters
locationLocation at which the contact point is evaluated.
contactContact point location
normalTerrain normal vector in contact point (ECEF frame)
velocityTerrain linear velocity in contact point (ECEF frame)
ang_velocityTerrain angular velocity in contact point (ECEF frame)
Returns
Location altitude above contact point (AGL) in feet.
See also
SetGroundCallback

Definition at line 103 of file FGInertial.h.

106  {
107  return GroundCallback->GetAGLevel(location, contact, normal, velocity,
108  ang_velocity); }
+ Here is the caller graph for this function:

◆ GetTec2l()

FGMatrix33 GetTec2l ( const FGLocation location) const
inline

Transform matrix from the earth centered to local horizontal frame.

The local frame is the NED (North-East-Down) frame. Since the Down direction depends on the gravity so is the local frame. The East direction is tangent to the spheroid with a null component along the Z axis. The North direction is obtained from the cross product between East and Down.

Parameters
locationThe location at which the transform matrix must be evaluated.
Returns
a rotation matrix of the transform from the earth centered frame to the local horizontal frame.

Definition at line 194 of file FGInertial.h.

195  { return GetTl2ec(location).Transposed(); }
+ Here is the call graph for this function:

◆ GetTl2ec()

FGMatrix33 GetTl2ec ( const FGLocation location) const

Transform matrix from the local horizontal frame to earth centered.

The local frame is the NED (North-East-Down) frame. Since the Down direction depends on the gravity so is the local frame. The East direction is tangent to the spheroid with a null component along the Z axis. The North direction is obtained from the cross product between East and Down.

Parameters
locationThe location at which the transform matrix must be evaluated.
Returns
a rotation matrix of the transform from the earth centered frame to the local horizontal frame.

Definition at line 151 of file FGInertial.cpp.

152 {
153  FGColumnVector3 North, Down, East{-location(eY), location(eX), 0.};
154 
155  switch (gravType) {
156  case gtStandard:
157  {
158  Down = location;
159  Down *= -1.0;
160  }
161  break;
162  case gtWGS84:
163  {
164  FGLocation sea_level = location;
165  sea_level.SetPositionGeodetic(location.GetLongitude(),
166  location.GetGeodLatitudeRad(), 0.0);
167  Down = GetGravityJ2(location);
168  Down -= vOmegaPlanet*(vOmegaPlanet*sea_level);}
169  }
170  Down.Normalize();
171  East.Normalize();
172  North = East*Down;
173 
174  return FGMatrix33{North(eX), East(eX), Down(eX),
175  North(eY), East(eY), Down(eY),
176  North(eZ), 0.0, Down(eZ)};
177 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Run()

bool Run ( bool  Holding)
overridevirtual

Runs the Inertial model; called by the Executive Can pass in a value indicating if the executive is directing the simulation to Hold.

Parameters
Holdingif true, the executive has been directed to hold the sim from advancing time. Some models may ignore this flag, such as the Input model, which may need to be active to listen on a socket for the "Resume" command to be given.
Returns
false if no error

Reimplemented from FGModel.

Definition at line 127 of file FGInertial.cpp.

128 {
129  // Fast return if we have nothing to do ...
130  if (FGModel::Run(Holding)) return true;
131  if (Holding) return false;
132 
133  // Gravitation accel
134  switch (gravType) {
135  case gtStandard:
136  {
137  double radius = in.Position.GetRadius();
138  vGravAccel = -(GetGAccel(radius) / radius) * in.Position;
139  }
140  break;
141  case gtWGS84:
142  vGravAccel = GetGravityJ2(in.Position);
143  break;
144  }
145 
146  return false;
147 }
+ Here is the call graph for this function:

◆ SetAltitudeAGL()

void SetAltitudeAGL ( FGLocation location,
double  altitudeAGL 
)

Set the altitude above ground level.

Parameters
locationLocation at which the AGL is set.
altitudeAGLAltitude above Ground Level in feet.
See also
SetGroundCallback

Definition at line 216 of file FGInertial.cpp.

217 {
218  FGColumnVector3 vDummy;
219  FGLocation contact;
220  contact.SetEllipse(a, b);
221  GroundCallback->GetAGLevel(location, contact, vDummy, vDummy, vDummy);
222  double groundHeight = contact.GetGeodAltitude();
223  double longitude = location.GetLongitude();
224  double geodLat = location.GetGeodLatitudeRad();
225  location.SetPositionGeodetic(longitude, geodLat,
226  groundHeight + altitudeAGL);
227 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SetGroundCallback()

void SetGroundCallback ( FGGroundCallback gc)
inline

Sets the ground callback pointer.

FGInertial will take ownership of the pointer which must therefore be located in the heap.

Parameters
gcA pointer to a ground callback object
See also
FGGroundCallback

Definition at line 150 of file FGInertial.h.

150 { GroundCallback.reset(gc); }

◆ SetTerrainElevation()

void SetTerrainElevation ( double  h)
inline

Set the terrain elevation above sea level.

Parameters
hTerrain elevation in ft.
See also
SetGroundcallback

Definition at line 130 of file FGInertial.h.

130  {
131  GroundCallback->SetTerrainElevation(h);
132  }
+ Here is the caller graph for this function:

◆ SetTime()

void SetTime ( double  time)
inline

Set the simulation time.

The elapsed time can be used by the ground callbck to assess the planet rotation or the movement of objects.

Parameters
timeelapsed time in seconds since the simulation started.

Definition at line 139 of file FGInertial.h.

139  {
140  GroundCallback->SetTime(time);
141  }
+ Here is the caller graph for this function:

The documentation for this class was generated from the following files:
JSBSim::FGInertial::gtWGS84
@ gtWGS84
Evaluate gravity using WGS84 formulas that take the Earth oblateness into account.
Definition: FGInertial.h:159
JSBSim::FGInertial::GetTl2ec
FGMatrix33 GetTl2ec(const FGLocation &location) const
Transform matrix from the local horizontal frame to earth centered.
Definition: FGInertial.cpp:151
JSBSim::FGLocation::GetRadius
double GetRadius() const
Get the distance from the center of the earth in feet.
Definition: FGLocation.h:291
JSBSim::FGMatrix33::Transposed
FGMatrix33 Transposed(void) const
Transposed matrix.
Definition: FGMatrix33.h:221
JSBSim::FGInertial::gtStandard
@ gtStandard
Evaluate gravity using Newton's classical formula assuming the Earth is spherical.
Definition: FGInertial.h:156
JSBSim::FGModel::Run
virtual bool Run(bool Holding)
Runs the model; called by the Executive.
Definition: FGModel.cpp:89
JSBSim::FGColumnVector3::Normalize
FGColumnVector3 & Normalize(void)
Normalize.
Definition: FGColumnVector3.cpp:116