1 /***************************************************************************
2 
3         TITLE:        ls_generic.h
4 
5 ----------------------------------------------------------------------------
6 
7         FUNCTION:        LaRCSim generic parameters header file
8 
9 ----------------------------------------------------------------------------
10 
11         MODULE STATUS:        developmental
12 
13 ----------------------------------------------------------------------------
14 
15         GENEALOGY:        Created 15 DEC 1993 by Bruce Jackson;
16                         was part of old ls_eom.h header
17 
18 ----------------------------------------------------------------------------
19 
20         DESIGNED BY:        B. Jackson
21 
22         CODED BY:        B. Jackson
23 
24         MAINTAINED BY:        guess who
25 
26 ----------------------------------------------------------------------------
27 
28         MODIFICATION HISTORY:
29 
30         DATE        PURPOSE                                                BY
31 
32 
33 ----------------------------------------------------------------------------
34 
35         REFERENCES:
36 
37                 [ 1]        McFarland, Richard E.: "A Standard Kinematic Model
38                         for Flight Simulation at NASA-Ames", NASA CR-2497,
39                         January 1975
40 
41                 [ 2]        ANSI/AIAA R-004-1992 "Recommended Practice: Atmos-
42                         pheric and Space Flight Vehicle Coordinate Systems",
43                         February 1992
44 
45                 [ 3]        Beyer, William H., editor: "CRC Standard Mathematical
46                         Tables, 28th edition", CRC Press, Boca Raton, FL, 1987,
47                         ISBN 0-8493-0628-0
48 
49                 [ 4]        Dowdy, M. C.; Jackson, E. B.; and Nichols, J. H.:
50                         "Controls Analysis and Simulation Test Loop Environ-
51                         ment (CASTLE) Programmer's Guide, Version 1.3",
52                         NATC TM 89-11, 30 March 1989.
53 
54                 [ 5]        Halliday, David; and Resnick, Robert: "Fundamentals
55                         of Physics, Revised Printing", Wiley and Sons, 1974.
56                         ISBN 0-471-34431-1
57 
58                 [ 6]        Anon: "U. S. Standard Atmosphere, 1962"
59 
60                 [ 7]        Anon: "Aeronautical Vest Pocket Handbook, 17th edition",
61                         Pratt & Whitney Aircraft Group, Dec. 1977
62 
63                 [ 8]        Stevens, Brian L.; and Lewis, Frank L.: "Aircraft
64                         Control and Simulation", Wiley and Sons, 1992.
65                         ISBN 0-471-61397-5
66 
67 --------------------------------------------------------------------------*/
68 
69 
70 #ifndef _LS_GENERIC_H
71 #define _LS_GENERIC_H
72 
73 
74 #ifdef __cplusplus
75 extern "C" {
76 #endif
77 
78 
79 #include "ls_types.h"
80 
81 
82 typedef struct {
83 
84 /*================== Mass properties and geometry values ==================*/
85 
86     DATA    mass, i_xx, i_yy, i_zz, i_xz;        /* Inertias */
87 #define Mass                            generic_.mass
88 #define I_xx                            generic_.i_xx
89 #define I_yy                            generic_.i_yy
90 #define I_zz                            generic_.i_zz
91 #define I_xz                            generic_.i_xz
92 
93     VECTOR_3    d_pilot_rp_body_v;        /* Pilot location rel to ref pt        */
94 #define D_pilot_rp_body_v           generic_.d_pilot_rp_body_v
95 #define Dx_pilot                    generic_.d_pilot_rp_body_v[0]
96 #define        Dy_pilot                    generic_.d_pilot_rp_body_v[1]
97 #define        Dz_pilot                    generic_.d_pilot_rp_body_v[2]
98 
99     VECTOR_3    d_cg_rp_body_v;        /* CG position w.r.t. ref. point */
100 #define D_cg_rp_body_v                    generic_.d_cg_rp_body_v
101 #define Dx_cg                            generic_.d_cg_rp_body_v[0]
102 #define Dy_cg                            generic_.d_cg_rp_body_v[1]
103 #define Dz_cg                            generic_.d_cg_rp_body_v[2]
104 
105 /*================================ Forces =================================*/
106 
107     VECTOR_3    f_body_total_v;
108 #define F_body_total_v                    generic_.f_body_total_v
109 #define        F_X                            generic_.f_body_total_v[0]
110 #define F_Y                            generic_.f_body_total_v[1]
111 #define F_Z                            generic_.f_body_total_v[2]
112 
113     VECTOR_3    f_local_total_v;
114 #define F_local_total_v                generic_.f_local_total_v
115 #define        F_north                        generic_.f_local_total_v[0]
116 #define F_east                        generic_.f_local_total_v[1]
117 #define F_down                        generic_.f_local_total_v[2]
118 
119     VECTOR_3    f_aero_v;
120 #define F_aero_v                generic_.f_aero_v
121 #define        F_X_aero                generic_.f_aero_v[0]
122 #define        F_Y_aero                generic_.f_aero_v[1]
123 #define        F_Z_aero                generic_.f_aero_v[2]
124 
125     VECTOR_3    f_engine_v;
126 #define F_engine_v                generic_.f_engine_v
127 #define        F_X_engine                generic_.f_engine_v[0]
128 #define        F_Y_engine                generic_.f_engine_v[1]
129 #define        F_Z_engine                generic_.f_engine_v[2]
130 
131     int         use_external_engine;
132 #define Use_External_Engine     generic_.use_external_engine
133 
134     VECTOR_3    f_gear_v;
135 #define F_gear_v                generic_.f_gear_v
136 #define        F_X_gear                generic_.f_gear_v[0]
137 #define        F_Y_gear                generic_.f_gear_v[1]
138 #define        F_Z_gear                generic_.f_gear_v[2]
139 
140 /*================================ Moments ================================*/
141 
142     VECTOR_3    m_total_rp_v;
143 #define M_total_rp_v                generic_.m_total_rp_v
144 #define        M_l_rp                        generic_.m_total_rp_v[0]
145 #define M_m_rp                        generic_.m_total_rp_v[1]
146 #define M_n_rp                        generic_.m_total_rp_v[2]
147 
148     VECTOR_3    m_total_cg_v;
149 #define M_total_cg_v                generic_.m_total_cg_v
150 #define        M_l_cg                        generic_.m_total_cg_v[0]
151 #define M_m_cg                        generic_.m_total_cg_v[1]
152 #define M_n_cg                        generic_.m_total_cg_v[2]
153 
154     VECTOR_3    m_aero_v;
155 #define M_aero_v                generic_.m_aero_v
156 #define        M_l_aero                generic_.m_aero_v[0]
157 #define        M_m_aero                generic_.m_aero_v[1]
158 #define        M_n_aero                generic_.m_aero_v[2]
159 
160     VECTOR_3    m_engine_v;
161 #define M_engine_v                generic_.m_engine_v
162 #define        M_l_engine                generic_.m_engine_v[0]
163 #define        M_m_engine                generic_.m_engine_v[1]
164 #define        M_n_engine                generic_.m_engine_v[2]
165 
166     VECTOR_3    m_gear_v;
167 #define M_gear_v                generic_.m_gear_v
168 #define        M_l_gear                generic_.m_gear_v[0]
169 #define        M_m_gear                generic_.m_gear_v[1]
170 #define        M_n_gear                generic_.m_gear_v[2]
171 
172 /*============================== Accelerations ============================*/
173 
174     VECTOR_3    v_dot_local_v;
175 #define V_dot_local_v                generic_.v_dot_local_v
176 #define        V_dot_north                generic_.v_dot_local_v[0]
177 #define        V_dot_east                generic_.v_dot_local_v[1]
178 #define        V_dot_down                generic_.v_dot_local_v[2]
179 
180     VECTOR_3    v_dot_body_v;
181 #define V_dot_body_v                generic_.v_dot_body_v
182 #define        U_dot_body                generic_.v_dot_body_v[0]
183 #define        V_dot_body                generic_.v_dot_body_v[1]
184 #define        W_dot_body                generic_.v_dot_body_v[2]
185 
186     VECTOR_3    a_cg_body_v;
187 #define A_cg_body_v                generic_.a_cg_body_v
188 #define        A_X_cg                        generic_.a_cg_body_v[0]
189 #define A_Y_cg                        generic_.a_cg_body_v[1]
190 #define        A_Z_cg                        generic_.a_cg_body_v[2]
191 
192     VECTOR_3    a_pilot_body_v;
193 #define A_pilot_body_v                generic_.a_pilot_body_v
194 #define        A_X_pilot                generic_.a_pilot_body_v[0]
195 #define        A_Y_pilot                generic_.a_pilot_body_v[1]
196 #define        A_Z_pilot                generic_.a_pilot_body_v[2]
197 
198     VECTOR_3    n_cg_body_v;
199 #define N_cg_body_v                generic_.n_cg_body_v
200 #define        N_X_cg                        generic_.n_cg_body_v[0]
201 #define N_Y_cg                        generic_.n_cg_body_v[1]
202 #define        N_Z_cg                        generic_.n_cg_body_v[2]
203 
204     VECTOR_3    n_pilot_body_v;
205 #define N_pilot_body_v                generic_.n_pilot_body_v
206 #define        N_X_pilot                generic_.n_pilot_body_v[0]
207 #define        N_Y_pilot                generic_.n_pilot_body_v[1]
208 #define        N_Z_pilot                generic_.n_pilot_body_v[2]
209 
210     VECTOR_3    omega_dot_body_v;
211 #define Omega_dot_body_v        generic_.omega_dot_body_v
212 #define P_dot_body                generic_.omega_dot_body_v[0]
213 #define Q_dot_body                generic_.omega_dot_body_v[1]
214 #define        R_dot_body                generic_.omega_dot_body_v[2]
215 
216 
217 /*============================== Velocities ===============================*/
218 
219     VECTOR_3    v_local_v;
220 #define V_local_v                generic_.v_local_v
221 #define        V_north                        generic_.v_local_v[0]
222 #define        V_east                        generic_.v_local_v[1]
223 #define        V_down                        generic_.v_local_v[2]
224 
225     VECTOR_3    v_local_rel_ground_v;        /* V rel w.r.t. earth surface        */
226 #define V_local_rel_ground_v        generic_.v_local_rel_ground_v
227 #define        V_north_rel_ground        generic_.v_local_rel_ground_v[0]
228 #define V_east_rel_ground        generic_.v_local_rel_ground_v[1]
229 #define        V_down_rel_ground        generic_.v_local_rel_ground_v[2]
230 
231     VECTOR_3    v_local_airmass_v;        /* velocity of airmass (steady winds)        */
232 #define V_local_airmass_v        generic_.v_local_airmass_v
233 #define V_north_airmass                generic_.v_local_airmass_v[0]
234 #define        V_east_airmass                generic_.v_local_airmass_v[1]
235 #define        V_down_airmass                generic_.v_local_airmass_v[2]
236 
237     VECTOR_3    v_local_rel_airmass_v;        /* velocity of veh. relative to airmass        */
238 #define V_local_rel_airmass_v        generic_.v_local_rel_airmass_v
239 #define        V_north_rel_airmass        generic_.v_local_rel_airmass_v[0]
240 #define        V_east_rel_airmass        generic_.v_local_rel_airmass_v[1]
241 #define        V_down_rel_airmass        generic_.v_local_rel_airmass_v[2]
242 
243     VECTOR_3    v_local_gust_v; /* linear turbulence components, L frame */
244 #define V_local_gust_v                generic_.v_local_gust_v
245 #define        U_gust                        generic_.v_local_gust_v[0]
246 #define        V_gust                        generic_.v_local_gust_v[1]
247 #define        W_gust                        generic_.v_local_gust_v[2]
248 
249     VECTOR_3    v_wind_body_v;        /* Wind-relative velocities in body axis        */
250 #define V_wind_body_v                generic_.v_wind_body_v
251 #define        U_body                        generic_.v_wind_body_v[0]
252 #define V_body                        generic_.v_wind_body_v[1]
253 #define        W_body                        generic_.v_wind_body_v[2]
254 
255     DATA    v_rel_wind, v_true_kts, v_rel_ground, v_inertial;
256     DATA    v_ground_speed, v_equiv, v_equiv_kts;
257     DATA    v_calibrated, v_calibrated_kts;
258 #define V_rel_wind                generic_.v_rel_wind
259 #define V_true_kts                generic_.v_true_kts
260 #define V_rel_ground                generic_.v_rel_ground
261 #define V_inertial                generic_.v_inertial
262 #define V_ground_speed                generic_.v_ground_speed
263 #define V_equiv                        generic_.v_equiv
264 #define V_equiv_kts                generic_.v_equiv_kts
265 #define V_calibrated                generic_.v_calibrated
266 #define V_calibrated_kts        generic_.v_calibrated_kts
267 
268     VECTOR_3    omega_body_v;        /* Angular B rates        */
269 #define Omega_body_v                generic_.omega_body_v
270 #define        P_body                        generic_.omega_body_v[0]
271 #define        Q_body                        generic_.omega_body_v[1]
272 #define        R_body                        generic_.omega_body_v[2]
273 
274     VECTOR_3    omega_local_v;        /* Angular L rates        */
275 #define Omega_local_v                generic_.omega_local_v
276 #define        P_local                        generic_.omega_local_v[0]
277 #define        Q_local                        generic_.omega_local_v[1]
278 #define        R_local                        generic_.omega_local_v[2]
279 
280     VECTOR_3    omega_total_v;        /* Diff btw B & L        */
281 #define Omega_total_v                generic_.omega_total_v
282 #define        P_total                        generic_.omega_total_v[0]
283 #define        Q_total                        generic_.omega_total_v[1]
284 #define        R_total                        generic_.omega_total_v[2]
285 
286     VECTOR_3    euler_rates_v;
287 #define Euler_rates_v                generic_.euler_rates_v
288 #define        Phi_dot                        generic_.euler_rates_v[0]
289 #define        Theta_dot                generic_.euler_rates_v[1]
290 #define        Psi_dot                        generic_.euler_rates_v[2]
291 
292     VECTOR_3    geocentric_rates_v;        /* Geocentric linear velocities */
293 #define Geocentric_rates_v        generic_.geocentric_rates_v
294 #define        Latitude_dot                generic_.geocentric_rates_v[0]
295 #define        Longitude_dot                generic_.geocentric_rates_v[1]
296 #define        Radius_dot                generic_.geocentric_rates_v[2]
297 
298 /*=============================== Positions ===============================*/
299 
300     VECTOR_3    geocentric_position_v;
301 #define Geocentric_position_v        generic_.geocentric_position_v
302 #define Lat_geocentric                 generic_.geocentric_position_v[0]
303 #define        Lon_geocentric                 generic_.geocentric_position_v[1]
304 #define        Radius_to_vehicle        generic_.geocentric_position_v[2]
305 
306     VECTOR_3    geodetic_position_v;
307 #define Geodetic_position_v        generic_.geodetic_position_v
308 #define Latitude                generic_.geodetic_position_v[0]
309 #define        Longitude                generic_.geodetic_position_v[1]
310 #define Altitude                       generic_.geodetic_position_v[2]
311 
312     VECTOR_3    euler_angles_v;
313 #define Euler_angles_v                generic_.euler_angles_v
314 #define        Phi                        generic_.euler_angles_v[0]
315 #define        Theta                        generic_.euler_angles_v[1]
316 #define        Psi                        generic_.euler_angles_v[2]
317 
318 /*======================= Miscellaneous quantities ========================*/
319 
320     DATA    t_local_to_body_m[3][3];        /* Transformation matrix L to B */
321 #define T_local_to_body_m        generic_.t_local_to_body_m
322 #define        T_local_to_body_11        generic_.t_local_to_body_m[0][0]
323 #define        T_local_to_body_12        generic_.t_local_to_body_m[0][1]
324 #define        T_local_to_body_13        generic_.t_local_to_body_m[0][2]
325 #define        T_local_to_body_21        generic_.t_local_to_body_m[1][0]
326 #define        T_local_to_body_22        generic_.t_local_to_body_m[1][1]
327 #define        T_local_to_body_23        generic_.t_local_to_body_m[1][2]
328 #define        T_local_to_body_31        generic_.t_local_to_body_m[2][0]
329 #define        T_local_to_body_32        generic_.t_local_to_body_m[2][1]
330 #define        T_local_to_body_33        generic_.t_local_to_body_m[2][2]
331 
332     DATA    gravity;                /* Local acceleration due to G        */
333 #define Gravity                        generic_.gravity
334 
335     DATA    centrifugal_relief;        /* load factor reduction due to speed */
336 #define Centrifugal_relief        generic_.centrifugal_relief
337 
338     DATA    alpha, beta, alpha_dot, beta_dot;        /* in radians        */
339 #define Std_Alpha                generic_.alpha
340 #define Std_Beta                generic_.beta
341 #define Std_Alpha_dot                generic_.alpha_dot
342 #define Std_Beta_dot                generic_.beta_dot
343 
344     DATA    cos_alpha, sin_alpha, cos_beta, sin_beta;
345 #define Cos_alpha                generic_.cos_alpha
346 #define Sin_alpha                generic_.sin_alpha
347 #define Cos_beta                generic_.cos_beta
348 #define Sin_beta                generic_.sin_beta
349 
350     DATA    cos_phi, sin_phi, cos_theta, sin_theta, cos_psi, sin_psi;
351 #define Cos_phi                        generic_.cos_phi
352 #define Sin_phi                        generic_.sin_phi
353 #define Cos_theta                generic_.cos_theta
354 #define Sin_theta                generic_.sin_theta
355 #define Cos_psi                        generic_.cos_psi
356 #define Sin_psi                        generic_.sin_psi
357 
358     DATA    gamma_vert_rad, gamma_horiz_rad;        /* Flight path angles        */
359 #define Gamma_vert_rad                generic_.gamma_vert_rad
360 #define Gamma_horiz_rad                generic_.gamma_horiz_rad
361 
362     DATA    sigma, density, v_sound, mach_number;
363 #define Sigma                        generic_.sigma
364 #define Density                        generic_.density
365 #define V_sound                        generic_.v_sound
366 #define Mach_number                generic_.mach_number
367 
368     DATA    static_pressure, total_pressure, impact_pressure, dynamic_pressure;
369 #define Static_pressure                generic_.static_pressure
370 #define Total_pressure                generic_.total_pressure
371 #define Impact_pressure                generic_.impact_pressure
372 #define Dynamic_pressure        generic_.dynamic_pressure
373 
374     DATA    static_temperature, total_temperature;
375 #define Static_temperature        generic_.static_temperature
376 #define Total_temperature        generic_.total_temperature
377 
378     DATA    sea_level_radius, earth_position_angle;
379 #define Sea_level_radius        generic_.sea_level_radius
380 #define Earth_position_angle        generic_.earth_position_angle
381 
382     DATA    runway_altitude, runway_latitude, runway_longitude, runway_heading;
383 #define Runway_altitude                generic_.runway_altitude
384 #define Runway_latitude                generic_.runway_latitude
385 #define Runway_longitude        generic_.runway_longitude
386 #define Runway_heading                generic_.runway_heading
387 
388     DATA    radius_to_rwy;
389 #define Radius_to_rwy                generic_.radius_to_rwy
390 
391     VECTOR_3    d_cg_rwy_local_v;       /* CG rel. to rwy in local coords */
392 #define D_cg_rwy_local_v        generic_.d_cg_rwy_local_v
393 #define        D_cg_north_of_rwy        generic_.d_cg_rwy_local_v[0]
394 #define        D_cg_east_of_rwy        generic_.d_cg_rwy_local_v[1]
395 #define        D_cg_above_rwy                generic_.d_cg_rwy_local_v[2]
396 
397     VECTOR_3    d_cg_rwy_rwy_v;        /* CG relative to runway, in rwy coordinates */
398 #define D_cg_rwy_rwy_v                generic_.d_cg_rwy_rwy_v
399 #define X_cg_rwy                generic_.d_cg_rwy_rwy_v[0]
400 #define Y_cg_rwy                generic_.d_cg_rwy_rwy_v[1]
401 #define H_cg_rwy                generic_.d_cg_rwy_rwy_v[2]
402 
403     VECTOR_3    d_pilot_rwy_local_v;        /* pilot rel. to rwy in local coords */
404 #define D_pilot_rwy_local_v        generic_.d_pilot_rwy_local_v
405 #define        D_pilot_north_of_rwy        generic_.d_pilot_rwy_local_v[0]
406 #define        D_pilot_east_of_rwy        generic_.d_pilot_rwy_local_v[1]
407 #define        D_pilot_above_rwy        generic_.d_pilot_rwy_local_v[2]
408 
409     VECTOR_3   d_pilot_rwy_rwy_v;        /* pilot rel. to rwy, in rwy coords. */
410 #define D_pilot_rwy_rwy_v        generic_.d_pilot_rwy_rwy_v
411 #define X_pilot_rwy                generic_.d_pilot_rwy_rwy_v[0]
412 #define Y_pilot_rwy                generic_.d_pilot_rwy_rwy_v[1]
413 #define H_pilot_rwy                generic_.d_pilot_rwy_rwy_v[2]
414 
415 
416 } GENERIC;
417 
418 extern GENERIC generic_;        /* usually defined in ls_main.c */
419 
420 
421 #ifdef __cplusplus
422 }
423 #endif
424 
425 
426 #endif /* _LS_GENERIC_H */
427 
428 
429 /*---------------------------  end of ls_generic.h  ------------------------*/
430