1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) -------------
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
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
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.
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.
27 --------------------------------------------------------------------------------
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41 #include "models/FGModel.h"
42 #include "math/FGColumnVector3.h"
43 #include "math/FGLocation.h"
44 #include "math/FGQuaternion.h"
45 #include "math/FGMatrix33.h"
48 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
52 #define ID_PROPAGATE "$Id: FGPropagate.h,v 1.64 2011/10/14 22:46:49 bcoconni Exp $"
54 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
56 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
61 class FGInitialCondition;
63 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
67 /** Models the EOM and integration/propagation of state.
68 The Equations of Motion (EOM) for JSBSim are integrated to propagate the
69 state of the vehicle given the forces and moments that act on it. The
70 integration accounts for a rotating Earth.
72 Integration of rotational and translation position and rate can be
73 customized as needed or frozen by the selection of no integrator. The
74 selection of which integrator to use is done through the setting of
75 the associated property. There are four properties which can be set:
78 simulation/integrator/rate/rotational
79 simulation/integrator/rate/translational
80 simulation/integrator/position/rotational
81 simulation/integrator/position/translational
84 Each of the integrators listed above can be set to one of the following values:
87 0: No integrator (Freeze)
95 @author Jon S. Berndt, Mathias Froehlich, Bertrand Coconnier
96 @version $Id: FGPropagate.h,v 1.64 2011/10/14 22:46:49 bcoconni Exp $
99 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
101 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
103 class FGPropagate : public FGModel {
106 /** The current vehicle state vector structure contains the translational and
107 angular position, and the translational and angular velocity. */
108 struct VehicleState {
109 /** Represents the current location of the vehicle in Earth centered Earth
112 FGLocation vLocation;
114 /** The velocity vector of the vehicle with respect to the ECEF frame,
115 expressed in the body system.
117 FGColumnVector3 vUVW;
119 /** The angular velocity vector for the vehicle relative to the ECEF frame,
120 expressed in the body frame.
122 FGColumnVector3 vPQR;
124 /** The angular velocity vector for the vehicle body frame relative to the
125 ECI frame, expressed in the body frame.
127 FGColumnVector3 vPQRi;
129 /** The current orientation of the vehicle, that is, the orientation of the
130 body frame relative to the local, NED frame. */
131 FGQuaternion qAttitudeLocal;
133 /** The current orientation of the vehicle, that is, the orientation of the
134 body frame relative to the inertial (ECI) frame. */
135 FGQuaternion qAttitudeECI;
137 FGColumnVector3 vInertialVelocity;
139 FGColumnVector3 vInertialPosition;
141 deque <FGColumnVector3> dqPQRidot;
142 deque <FGColumnVector3> dqUVWidot;
143 deque <FGColumnVector3> dqInertialVelocity;
144 deque <FGQuaternion> dqQtrndot;
148 The constructor initializes several variables, and sets the initial set
149 of integrators to use as follows:
150 - integrator, rotational rate = Adams Bashforth 2
151 - integrator, translational rate = Adams Bashforth 2
152 - integrator, rotational position = Trapezoidal
153 - integrator, translational position = Trapezoidal
154 @param Executive a pointer to the parent executive object */
155 FGPropagate(FGFDMExec* Executive);
160 /// These define the indices use to select the various integrators.
161 enum eIntegrateType {eNone = 0, eRectEuler, eTrapezoidal, eAdamsBashforth2, eAdamsBashforth3, eAdamsBashforth4};
163 /** Initializes the FGPropagate class after instantiation and prior to first execution.
164 The base class FGModel::InitModel is called first, initializing pointers to the
165 other FGModel objects (and others). */
166 bool InitModel(void);
168 void InitializeDerivatives();
170 /** Runs the state propagation model; called by the Executive
171 Can pass in a value indicating if the executive is directing the simulation to Hold.
172 @param Holding if true, the executive has been directed to hold the sim from
173 advancing time. Some models may ignore this flag, such as the Input
174 model, which may need to be active to listen on a socket for the
175 "Resume" command to be given.
176 @return false if no error */
177 bool Run(bool Holding);
179 /** Retrieves the velocity vector.
180 The vector returned is represented by an FGColumnVector reference. The vector
181 for the velocity in Local frame is organized (Vnorth, Veast, Vdown). The vector
182 is 1-based, so that the first element can be retrieved using the "()" operator.
183 In other words, vVel(1) is Vnorth. Various convenience enumerators are defined
184 in FGJSBBase. The relevant enumerators for the vector returned by this call are,
185 eNorth=1, eEast=2, eDown=3.
187 @return The vehicle velocity vector with respect to the Earth centered frame,
188 expressed in Local horizontal frame.
190 const FGColumnVector3& GetVel(void) const { return vVel; }
192 /** Retrieves the body frame vehicle velocity vector.
193 The vector returned is represented by an FGColumnVector reference. The vector
194 for the velocity in Body frame is organized (Vx, Vy, Vz). The vector
195 is 1-based, so that the first element can be retrieved using the "()" operator.
196 In other words, vUVW(1) is Vx. Various convenience enumerators are defined
197 in FGJSBBase. The relevant enumerators for the vector returned by this call are,
200 @return The body frame vehicle velocity vector in ft/sec.
202 const FGColumnVector3& GetUVW(void) const { return VState.vUVW; }
204 /** Retrieves the body angular rates vector, relative to the ECEF frame.
205 Retrieves the body angular rates (p, q, r), which are calculated by integration
206 of the angular acceleration.
207 The vector returned is represented by an FGColumnVector reference. The vector
208 for the angular velocity in Body frame is organized (P, Q, R). The vector
209 is 1-based, so that the first element can be retrieved using the "()" operator.
210 In other words, vPQR(1) is P. Various convenience enumerators are defined
211 in FGJSBBase. The relevant enumerators for the vector returned by this call are,
214 @return The body frame angular rates in rad/sec.
216 const FGColumnVector3& GetPQR(void) const {return VState.vPQR;}
218 /** Retrieves the body angular rates vector, relative to the ECI (inertial) frame.
219 Retrieves the body angular rates (p, q, r), which are calculated by integration
220 of the angular acceleration.
221 The vector returned is represented by an FGColumnVector reference. The vector
222 for the angular velocity in Body frame is organized (P, Q, R). The vector
223 is 1-based, so that the first element can be retrieved using the "()" operator.
224 In other words, vPQR(1) is P. Various convenience enumerators are defined
225 in FGJSBBase. The relevant enumerators for the vector returned by this call are,
228 @return The body frame inertial angular rates in rad/sec.
230 const FGColumnVector3& GetPQRi(void) const {return VState.vPQRi;}
232 /** Retrieves the Euler angles that define the vehicle orientation.
233 Extracts the Euler angles from the quaternion that stores the orientation
234 in the Local frame. The order of rotation used is Yaw-Pitch-Roll. The
235 vector returned is represented by an FGColumnVector reference. The vector
236 for the Euler angles is organized (Phi, Theta, Psi). The vector
237 is 1-based, so that the first element can be retrieved using the "()" operator.
238 In other words, the returned vector item with subscript (1) is Phi.
239 Various convenience enumerators are defined in FGJSBBase. The relevant
240 enumerators for the vector returned by this call are, ePhi=1, eTht=2, ePsi=3.
242 @return The Euler angle vector, where the first item in the
243 vector is the angle about the X axis, the second is the
244 angle about the Y axis, and the third item is the angle
245 about the Z axis (Phi, Theta, Psi).
247 const FGColumnVector3& GetEuler(void) const { return VState.qAttitudeLocal.GetEuler(); }
249 /** Retrieves a body frame velocity component.
250 Retrieves a body frame velocity component. The velocity returned is
251 extracted from the vUVW vector (an FGColumnVector). The vector for the
252 velocity in Body frame is organized (Vx, Vy, Vz). The vector is 1-based.
253 In other words, GetUVW(1) returns Vx. Various convenience enumerators
254 are defined in FGJSBBase. The relevant enumerators for the velocity
255 returned by this call are, eX=1, eY=2, eZ=3.
257 @param idx the index of the velocity component desired (1-based).
258 @return The body frame velocity component.
260 double GetUVW (int idx) const { return VState.vUVW(idx); }
262 /** Retrieves a Local frame velocity component.
263 Retrieves a Local frame velocity component. The velocity returned is
264 extracted from the vVel vector (an FGColumnVector). The vector for the
265 velocity in Local frame is organized (Vnorth, Veast, Vdown). The vector
266 is 1-based. In other words, GetVel(1) returns Vnorth. Various convenience
267 enumerators are defined in FGJSBBase. The relevant enumerators for the
268 velocity returned by this call are, eNorth=1, eEast=2, eDown=3.
270 @param idx the index of the velocity component desired (1-based).
271 @return The body frame velocity component.
273 double GetVel(int idx) const { return vVel(idx); }
275 /** Retrieves the total inertial velocity in ft/sec.
277 double GetInertialVelocityMagnitude(void) const { return VState.vInertialVelocity.Magnitude(); }
279 /** Retrieves the inertial velocity vector in ft/sec.
281 const FGColumnVector3& GetInertialVelocity(void) const { return VState.vInertialVelocity; }
283 /** Retrieves the inertial position vector.
285 const FGColumnVector3& GetInertialPosition(void) const { return VState.vInertialPosition; }
287 /** Calculates and retrieves the velocity vector relative to the earth centered earth fixed (ECEF) frame.
289 const FGColumnVector3 GetECEFVelocity(void) const {return Tb2ec * VState.vUVW; }
291 /** Returns the current altitude above sea level.
292 This function returns the altitude above sea level.
294 @return The current altitude above sea level in feet.
296 double GetAltitudeASL(void) const;
298 /** Returns the current altitude above sea level.
299 This function returns the altitude above sea level.
301 @return The current altitude above sea level in meters.
303 double GetAltitudeASLmeters(void) const { return GetAltitudeASL()*fttom;}
305 /** Retrieves a body frame angular velocity component relative to the ECEF frame.
306 Retrieves a body frame angular velocity component. The angular velocity
307 returned is extracted from the vPQR vector (an FGColumnVector). The vector
308 for the angular velocity in Body frame is organized (P, Q, R). The vector
309 is 1-based. In other words, GetPQR(1) returns P (roll rate). Various
310 convenience enumerators are defined in FGJSBBase. The relevant enumerators
311 for the angular velocity returned by this call are, eP=1, eQ=2, eR=3.
313 @param axis the index of the angular velocity component desired (1-based).
314 @return The body frame angular velocity component.
316 double GetPQR(int axis) const {return VState.vPQR(axis);}
318 /** Retrieves a body frame angular velocity component relative to the ECI (inertial) frame.
319 Retrieves a body frame angular velocity component. The angular velocity
320 returned is extracted from the vPQR vector (an FGColumnVector). The vector
321 for the angular velocity in Body frame is organized (P, Q, R). The vector
322 is 1-based. In other words, GetPQR(1) returns P (roll rate). Various
323 convenience enumerators are defined in FGJSBBase. The relevant enumerators
324 for the angular velocity returned by this call are, eP=1, eQ=2, eR=3.
326 @param axis the index of the angular velocity component desired (1-based).
327 @return The body frame angular velocity component.
329 double GetPQRi(int axis) const {return VState.vPQRi(axis);}
331 /** Retrieves a vehicle Euler angle component.
332 Retrieves an Euler angle (Phi, Theta, or Psi) from the quaternion that
333 stores the vehicle orientation relative to the Local frame. The order of
334 rotations used is Yaw-Pitch-Roll. The Euler angle with subscript (1) is
335 Phi. Various convenience enumerators are defined in FGJSBBase. The
336 relevant enumerators for the Euler angle returned by this call are,
337 ePhi=1, eTht=2, ePsi=3 (e.g. GetEuler(eTht) returns Theta).
339 @return An Euler angle.
341 double GetEuler(int axis) const { return VState.qAttitudeLocal.GetEuler(axis); }
343 /** Retrieves the cosine of a vehicle Euler angle component.
344 Retrieves the cosine of an Euler angle (Phi, Theta, or Psi) from the
345 quaternion that stores the vehicle orientation relative to the Local frame.
346 The order of rotations used is Yaw-Pitch-Roll. The Euler angle
347 with subscript (1) is Phi. Various convenience enumerators are defined in
348 FGJSBBase. The relevant enumerators for the Euler angle referred to in this
349 call are, ePhi=1, eTht=2, ePsi=3 (e.g. GetCosEuler(eTht) returns cos(theta)).
351 @return The cosine of an Euler angle.
353 double GetCosEuler(int idx) const { return VState.qAttitudeLocal.GetCosEuler(idx); }
355 /** Retrieves the sine of a vehicle Euler angle component.
356 Retrieves the sine of an Euler angle (Phi, Theta, or Psi) from the
357 quaternion that stores the vehicle orientation relative to the Local frame.
358 The order of rotations used is Yaw-Pitch-Roll. The Euler angle
359 with subscript (1) is Phi. Various convenience enumerators are defined in
360 FGJSBBase. The relevant enumerators for the Euler angle referred to in this
361 call are, ePhi=1, eTht=2, ePsi=3 (e.g. GetSinEuler(eTht) returns sin(theta)).
363 @return The sine of an Euler angle.
365 double GetSinEuler(int idx) const { return VState.qAttitudeLocal.GetSinEuler(idx); }
367 /** Returns the current altitude rate.
368 Returns the current altitude rate (rate of climb).
370 @return The current rate of change in altitude.
372 double Gethdot(void) const { return -vVel(eDown); }
374 /** Returns the "constant" LocalTerrainRadius.
375 The LocalTerrainRadius parameter is set by the calling application or set to
376 sea level + terrain elevation if JSBSim is running in standalone mode.
378 @return distance of the local terrain from the center of the earth.
380 double GetLocalTerrainRadius(void) const;
382 double GetEarthPositionAngle(void) const { return VState.vLocation.GetEPA(); }
384 double GetEarthPositionAngleDeg(void) const { return GetEarthPositionAngle()*radtodeg;}
386 const FGColumnVector3& GetTerrainVelocity(void) const { return LocalTerrainVelocity; }
387 const FGColumnVector3& GetTerrainAngularVelocity(void) const { return LocalTerrainAngularVelocity; }
388 void RecomputeLocalTerrainVelocity();
390 double GetTerrainElevation(void) const;
391 double GetDistanceAGL(void) const;
392 double GetRadius(void) const {
393 if (VState.vLocation.GetRadius() == 0) return 1.0;
394 else return VState.vLocation.GetRadius();
396 double GetLongitude(void) const { return VState.vLocation.GetLongitude(); }
397 double GetLatitude(void) const { return VState.vLocation.GetLatitude(); }
399 double GetGeodLatitudeRad(void) const { return VState.vLocation.GetGeodLatitudeRad(); }
400 double GetGeodLatitudeDeg(void) const { return VState.vLocation.GetGeodLatitudeDeg(); }
402 double GetGeodeticAltitude(void) const { return VState.vLocation.GetGeodAltitude(); }
404 double GetLongitudeDeg(void) const { return VState.vLocation.GetLongitudeDeg(); }
405 double GetLatitudeDeg(void) const { return VState.vLocation.GetLatitudeDeg(); }
406 const FGLocation& GetLocation(void) const { return VState.vLocation; }
408 /** Retrieves the local-to-body transformation matrix.
409 The quaternion class, being the means by which the orientation of the
410 vehicle is stored, manages the local-to-body transformation matrix.
411 @return a reference to the local-to-body transformation matrix. */
412 const FGMatrix33& GetTl2b(void) const { return Tl2b; }
414 /** Retrieves the body-to-local transformation matrix.
415 The quaternion class, being the means by which the orientation of the
416 vehicle is stored, manages the body-to-local transformation matrix.
417 @return a reference to the body-to-local matrix. */
418 const FGMatrix33& GetTb2l(void) const { return Tb2l; }
420 /** Retrieves the ECEF-to-body transformation matrix.
421 @return a reference to the ECEF-to-body transformation matrix. */
422 const FGMatrix33& GetTec2b(void) const { return Tec2b; }
424 /** Retrieves the body-to-ECEF transformation matrix.
425 @return a reference to the body-to-ECEF matrix. */
426 const FGMatrix33& GetTb2ec(void) const { return Tb2ec; }
428 /** Retrieves the ECI-to-body transformation matrix.
429 @return a reference to the ECI-to-body transformation matrix. */
430 const FGMatrix33& GetTi2b(void) const { return Ti2b; }
432 /** Retrieves the body-to-ECI transformation matrix.
433 @return a reference to the body-to-ECI matrix. */
434 const FGMatrix33& GetTb2i(void) const { return Tb2i; }
436 /** Retrieves the ECEF-to-ECI transformation matrix.
437 @return a reference to the ECEF-to-ECI transformation matrix. */
438 const FGMatrix33& GetTec2i(void) const { return Tec2i; }
440 /** Retrieves the ECI-to-ECEF transformation matrix.
441 @return a reference to the ECI-to-ECEF matrix. */
442 const FGMatrix33& GetTi2ec(void) const { return Ti2ec; }
444 /** Retrieves the ECEF-to-local transformation matrix.
445 Retrieves the ECEF-to-local transformation matrix. Note that the so-called
446 local from is also know as the NED frame (for North, East, Down).
447 @return a reference to the ECEF-to-local matrix. */
448 const FGMatrix33& GetTec2l(void) const { return Tec2l; }
450 /** Retrieves the local-to-ECEF transformation matrix.
451 Retrieves the local-to-ECEF transformation matrix. Note that the so-called
452 local from is also know as the NED frame (for North, East, Down).
453 @return a reference to the local-to-ECEF matrix. */
454 const FGMatrix33& GetTl2ec(void) const { return Tl2ec; }
456 /** Retrieves the local-to-inertial transformation matrix.
457 @return a reference to the local-to-inertial transformation matrix. */
458 const FGMatrix33& GetTl2i(void) const { return Tl2i; }
460 /** Retrieves the inertial-to-local transformation matrix.
461 @return a reference to the inertial-to-local matrix. */
462 const FGMatrix33& GetTi2l(void) const { return Ti2l; }
464 const VehicleState& GetVState(void) const { return VState; }
466 void SetVState(const VehicleState& vstate);
468 void SetEarthPositionAngle(double epa) {VState.vLocation.SetEarthPositionAngle(epa);}
470 void SetInertialOrientation(FGQuaternion Qi);
471 void SetInertialVelocity(FGColumnVector3 Vi);
472 void SetInertialRates(FGColumnVector3 vRates);
474 const FGQuaternion GetQuaternion(void) const { return VState.qAttitudeLocal; }
475 const FGQuaternion GetQuaternionECI(void) const { return VState.qAttitudeECI; }
477 void SetPQR(unsigned int i, double val) {
478 if ((i>=1) && (i<=3) )
479 VState.vPQR(i) = val;
482 void SetUVW(unsigned int i, double val) {
483 if ((i>=1) && (i<=3) )
484 VState.vUVW(i) = val;
489 void SetLongitude(double lon)
491 VState.vLocation.SetLongitude(lon);
492 UpdateVehicleState();
494 void SetLongitudeDeg(double lon) { SetLongitude(lon*degtorad); }
495 void SetLatitude(double lat)
497 VState.vLocation.SetLatitude(lat);
498 UpdateVehicleState();
500 void SetLatitudeDeg(double lat) { SetLatitude(lat*degtorad); }
501 void SetRadius(double r)
503 VState.vLocation.SetRadius(r);
505 VState.vInertialPosition = Tec2i * VState.vLocation;
508 void SetAltitudeASL(double altASL);
509 void SetAltitudeASLmeters(double altASL) { SetAltitudeASL(altASL/fttom); }
511 void SetSeaLevelRadius(double tt);
512 void SetTerrainElevation(double tt);
513 void SetDistanceAGL(double tt);
515 void SetInitialState(const FGInitialCondition *);
516 void SetLocation(const FGLocation& l);
517 void SetLocation(const FGColumnVector3& lv)
519 FGLocation l = FGLocation(lv);
522 void SetPosition(const double Lon, const double Lat, const double Radius)
524 FGLocation l = FGLocation(Lon, Lat, Radius);
528 void NudgeBodyLocation(FGColumnVector3 deltaLoc) {
529 VState.vInertialPosition -= Tb2i*deltaLoc;
530 VState.vLocation -= Tb2ec*deltaLoc;
533 void DumpState(void);
536 FGColumnVector3 vPQRidot;
537 FGQuaternion vQtrndot;
538 FGColumnVector3 vUVWidot;
539 FGColumnVector3 vOmegaPlanet;
550 struct VehicleState VState;
552 FGColumnVector3 vVel;
553 FGColumnVector3 vInertialVelocity;
554 FGColumnVector3 vLocation;
555 FGColumnVector3 vDeltaXYZEC;
558 FGMatrix33 Tl2b; // local to body frame matrix copy for immediate local use
559 FGMatrix33 Tb2l; // body to local frame matrix copy for immediate local use
560 FGMatrix33 Tl2ec; // local to ECEF matrix copy for immediate local use
561 FGMatrix33 Tec2l; // ECEF to local frame matrix copy for immediate local use
562 FGMatrix33 Tec2i; // ECEF to ECI frame matrix copy for immediate local use
563 FGMatrix33 Ti2ec; // ECI to ECEF frame matrix copy for immediate local use
564 FGMatrix33 Ti2b; // ECI to body frame rotation matrix
565 FGMatrix33 Tb2i; // body to ECI frame rotation matrix
569 double VehicleRadius;
570 FGColumnVector3 LocalTerrainVelocity, LocalTerrainAngularVelocity;
572 eIntegrateType integrator_rotational_rate;
573 eIntegrateType integrator_translational_rate;
574 eIntegrateType integrator_rotational_position;
575 eIntegrateType integrator_translational_position;
577 void CalculateInertialVelocity(void);
578 void CalculateUVW(void);
580 void Integrate( FGColumnVector3& Integrand,
581 FGColumnVector3& Val,
582 deque <FGColumnVector3>& ValDot,
584 eIntegrateType integration_type);
586 void Integrate( FGQuaternion& Integrand,
588 deque <FGQuaternion>& ValDot,
590 eIntegrateType integration_type);
592 void UpdateLocationMatrices(void);
593 void UpdateBodyMatrices(void);
594 void UpdateVehicleState(void);
597 void Debug(int from);
600 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%