1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
9 This program is free software; you can redistribute it and/or modify it under
10 the terms of the GNU 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 General Public License for more
19 You should have received a copy of the GNU 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 General Public License can also be found on
24 the world wide web at http://www.gnu.org.
26 FUNCTIONAL DESCRIPTION
27 --------------------------------------------------------------------------------
29 Based on Flightgear code, which is based on LaRCSim. This class wraps all
30 global state variables (such as velocity, position, orientation, etc.).
33 --------------------------------------------------------------------------------
36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
43 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
48 # include <simgear/compiler.h>
49 # ifdef SG_HAVE_STD_INCLUDES
61 #include "FGInitialCondition.h"
64 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
68 #define ID_STATE "$Id$"
70 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
81 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
85 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
87 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
89 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
91 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
100 enum {ePhi=1, eTht, ePsi};
103 enum {eDrag=1, eSide, eLift};
105 bool Reset(string, string, string);
106 void Initialize(float, float, float, float, float, float, float, float, float);
107 void Initialize(FGInitialCondition *FGIC);
108 bool StoreData(string);
110 inline float Geta(void) { return a; }
112 inline float Getsim_time(void) { return sim_time; }
113 inline float Getdt(void) { return dt; }
115 inline void Suspend(void) {saved_dt = dt; dt = 0.0;}
116 inline void Resume(void) {dt = saved_dt;}
118 float GetParameter(eParam val_idx);
119 float GetParameter(string val_string);
120 eParam GetParameterIndex(string val_string);
122 inline void Seta(float tt) { a = tt; }
124 inline float Setsim_time(float tt) {
128 inline void Setdt(float tt) { dt = tt; }
130 void SetParameter(eParam, float);
132 inline float IncrTime(void) {
136 void InitMatrices(float phi, float tht, float psi);
137 void CalcMatrices(void);
138 void IntegrateQuat(FGColumnVector vPQR, int rate);
139 FGColumnVector CalcEuler(void);
140 FGMatrix GetTs2b(float alpha, float beta);
141 FGMatrix GetTl2b(void) { return mTl2b; }
142 float GetTl2b(int i, int j) { return mTl2b(i,j);}
143 FGMatrix GetTb2l(void) { return mTb2l; }
144 float GetTb2l(int i, int j) { return mTb2l(i,j);}
145 typedef map<eParam, string> ParamMap;
150 float a; // speed of sound
158 FGColumnVector vQtrn;
159 FGColumnVector vlastQdot;
161 FGAircraft* Aircraft;
162 FGPosition* Position;
163 FGTranslation* Translation;
164 FGRotation* Rotation;
166 FGAtmosphere* Atmosphere;
168 FGAerodynamics* Aerodynamics;
170 typedef map<string, eParam> CoeffMap;
175 FGColumnVector vQdot;
177 FGColumnVector vEuler;
180 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
182 #include "FGFDMExec.h"
183 #include "FGAtmosphere.h"
185 #include "FGTranslation.h"
186 #include "FGRotation.h"
187 #include "FGPosition.h"
188 #include "FGAerodynamics.h"
189 #include "FGOutput.h"
190 #include "FGAircraft.h"