/***************************************************************************

        TITLE:        ls_generic.h
        
----------------------------------------------------------------------------

        FUNCTION:        LaRCSim generic parameters header file

----------------------------------------------------------------------------

        MODULE STATUS:        developmental

----------------------------------------------------------------------------

        GENEALOGY:        Created 15 DEC 1993 by Bruce Jackson;
                        was part of old ls_eom.h header

----------------------------------------------------------------------------

        DESIGNED BY:        B. Jackson
        
        CODED BY:        B. Jackson
        
        MAINTAINED BY:        guess who

----------------------------------------------------------------------------

        MODIFICATION HISTORY:
        
        DATE        PURPOSE                                                BY
        
                
----------------------------------------------------------------------------

        REFERENCES:
        
                [ 1]        McFarland, Richard E.: "A Standard Kinematic Model
                        for Flight Simulation at NASA-Ames", NASA CR-2497,
                        January 1975
                        
                [ 2]        ANSI/AIAA R-004-1992 "Recommended Practice: Atmos-
                        pheric and Space Flight Vehicle Coordinate Systems",
                        February 1992
                        
                [ 3]        Beyer, William H., editor: "CRC Standard Mathematical
                        Tables, 28th edition", CRC Press, Boca Raton, FL, 1987,
                        ISBN 0-8493-0628-0
                        
                [ 4]        Dowdy, M. C.; Jackson, E. B.; and Nichols, J. H.:
                        "Controls Analysis and Simulation Test Loop Environ-
                        ment (CASTLE) Programmer's Guide, Version 1.3", 
                        NATC TM 89-11, 30 March 1989.
                        
                [ 5]        Halliday, David; and Resnick, Robert: "Fundamentals
                        of Physics, Revised Printing", Wiley and Sons, 1974.
                        ISBN 0-471-34431-1

                [ 6]        Anon: "U. S. Standard Atmosphere, 1962"
                
                [ 7]        Anon: "Aeronautical Vest Pocket Handbook, 17th edition",
                        Pratt & Whitney Aircraft Group, Dec. 1977
                        
                [ 8]        Stevens, Brian L.; and Lewis, Frank L.: "Aircraft 
                        Control and Simulation", Wiley and Sons, 1992.
                        ISBN 0-471-61397-5                        

--------------------------------------------------------------------------*/


#ifndef _LS_GENERIC_H
#define _LS_GENERIC_H


#ifdef __cplusplus                                                          
extern "C" {                            
#endif                                   


#include "ls_types.h"


typedef struct {

/*================== Mass properties and geometry values ==================*/
        
    DATA    mass, i_xx, i_yy, i_zz, i_xz;        /* Inertias */
#define Mass                            generic_.mass
#define I_xx                            generic_.i_xx
#define I_yy                            generic_.i_yy
#define I_zz                            generic_.i_zz
#define I_xz                            generic_.i_xz
        
    VECTOR_3    d_pilot_rp_body_v;        /* Pilot location rel to ref pt        */
#define D_pilot_rp_body_v           generic_.d_pilot_rp_body_v
#define Dx_pilot                    generic_.d_pilot_rp_body_v[0]
#define        Dy_pilot                    generic_.d_pilot_rp_body_v[1]
#define        Dz_pilot                    generic_.d_pilot_rp_body_v[2]

    VECTOR_3    d_cg_rp_body_v;        /* CG position w.r.t. ref. point */
#define D_cg_rp_body_v                    generic_.d_cg_rp_body_v
#define Dx_cg                            generic_.d_cg_rp_body_v[0]
#define Dy_cg                            generic_.d_cg_rp_body_v[1]
#define Dz_cg                            generic_.d_cg_rp_body_v[2]
        
/*================================ Forces =================================*/

    VECTOR_3    f_body_total_v;
#define F_body_total_v                    generic_.f_body_total_v
#define        F_X                            generic_.f_body_total_v[0]
#define F_Y                            generic_.f_body_total_v[1]
#define F_Z                            generic_.f_body_total_v[2]

    VECTOR_3    f_local_total_v;
#define F_local_total_v                generic_.f_local_total_v
#define        F_north                        generic_.f_local_total_v[0]
#define F_east                        generic_.f_local_total_v[1]
#define F_down                        generic_.f_local_total_v[2]

    VECTOR_3    f_aero_v;
#define F_aero_v                generic_.f_aero_v
#define        F_X_aero                generic_.f_aero_v[0]
#define        F_Y_aero                generic_.f_aero_v[1]
#define        F_Z_aero                generic_.f_aero_v[2]

    VECTOR_3    f_engine_v;
#define F_engine_v                generic_.f_engine_v
#define        F_X_engine                generic_.f_engine_v[0]
#define        F_Y_engine                generic_.f_engine_v[1]
#define        F_Z_engine                generic_.f_engine_v[2]

    int         use_external_engine;
#define Use_External_Engine     generic_.use_external_engine

    VECTOR_3    f_gear_v;
#define F_gear_v                generic_.f_gear_v
#define        F_X_gear                generic_.f_gear_v[0]
#define        F_Y_gear                generic_.f_gear_v[1]
#define        F_Z_gear                generic_.f_gear_v[2]

/*================================ Moments ================================*/

    VECTOR_3    m_total_rp_v;
#define M_total_rp_v                generic_.m_total_rp_v
#define        M_l_rp                        generic_.m_total_rp_v[0]
#define M_m_rp                        generic_.m_total_rp_v[1]
#define M_n_rp                        generic_.m_total_rp_v[2]

    VECTOR_3    m_total_cg_v;
#define M_total_cg_v                generic_.m_total_cg_v
#define        M_l_cg                        generic_.m_total_cg_v[0]
#define M_m_cg                        generic_.m_total_cg_v[1]
#define M_n_cg                        generic_.m_total_cg_v[2]

    VECTOR_3    m_aero_v;
#define M_aero_v                generic_.m_aero_v
#define        M_l_aero                generic_.m_aero_v[0]
#define        M_m_aero                generic_.m_aero_v[1]
#define        M_n_aero                generic_.m_aero_v[2]

    VECTOR_3    m_engine_v;
#define M_engine_v                generic_.m_engine_v
#define        M_l_engine                generic_.m_engine_v[0]
#define        M_m_engine                generic_.m_engine_v[1]
#define        M_n_engine                generic_.m_engine_v[2]

    VECTOR_3    m_gear_v;
#define M_gear_v                generic_.m_gear_v
#define        M_l_gear                generic_.m_gear_v[0]
#define        M_m_gear                generic_.m_gear_v[1]
#define        M_n_gear                generic_.m_gear_v[2]

/*============================== Accelerations ============================*/

    VECTOR_3    v_dot_local_v;
#define V_dot_local_v                generic_.v_dot_local_v
#define        V_dot_north                generic_.v_dot_local_v[0]
#define        V_dot_east                generic_.v_dot_local_v[1]
#define        V_dot_down                generic_.v_dot_local_v[2]

    VECTOR_3    v_dot_body_v;
#define V_dot_body_v                generic_.v_dot_body_v
#define        U_dot_body                generic_.v_dot_body_v[0]
#define        V_dot_body                generic_.v_dot_body_v[1]
#define        W_dot_body                generic_.v_dot_body_v[2]

    VECTOR_3    a_cg_body_v;
#define A_cg_body_v                generic_.a_cg_body_v
#define        A_X_cg                        generic_.a_cg_body_v[0]
#define A_Y_cg                        generic_.a_cg_body_v[1]
#define        A_Z_cg                        generic_.a_cg_body_v[2]

    VECTOR_3    a_pilot_body_v;
#define A_pilot_body_v                generic_.a_pilot_body_v
#define        A_X_pilot                generic_.a_pilot_body_v[0]
#define        A_Y_pilot                generic_.a_pilot_body_v[1]
#define        A_Z_pilot                generic_.a_pilot_body_v[2]

    VECTOR_3    n_cg_body_v;
#define N_cg_body_v                generic_.n_cg_body_v
#define        N_X_cg                        generic_.n_cg_body_v[0]
#define N_Y_cg                        generic_.n_cg_body_v[1]
#define        N_Z_cg                        generic_.n_cg_body_v[2]

    VECTOR_3    n_pilot_body_v;
#define N_pilot_body_v                generic_.n_pilot_body_v
#define        N_X_pilot                generic_.n_pilot_body_v[0]
#define        N_Y_pilot                generic_.n_pilot_body_v[1]
#define        N_Z_pilot                generic_.n_pilot_body_v[2]

    VECTOR_3    omega_dot_body_v;
#define Omega_dot_body_v        generic_.omega_dot_body_v
#define P_dot_body                generic_.omega_dot_body_v[0]
#define Q_dot_body                generic_.omega_dot_body_v[1]
#define        R_dot_body                generic_.omega_dot_body_v[2]


/*============================== Velocities ===============================*/

    VECTOR_3    v_local_v;
#define V_local_v                generic_.v_local_v
#define        V_north                        generic_.v_local_v[0]
#define        V_east                        generic_.v_local_v[1]
#define        V_down                        generic_.v_local_v[2]

    VECTOR_3    v_local_rel_ground_v;        /* V rel w.r.t. earth surface        */
#define V_local_rel_ground_v        generic_.v_local_rel_ground_v
#define        V_north_rel_ground        generic_.v_local_rel_ground_v[0]
#define V_east_rel_ground        generic_.v_local_rel_ground_v[1]
#define        V_down_rel_ground        generic_.v_local_rel_ground_v[2]

    VECTOR_3    v_local_airmass_v;        /* velocity of airmass (steady winds)        */
#define V_local_airmass_v        generic_.v_local_airmass_v
#define V_north_airmass                generic_.v_local_airmass_v[0]
#define        V_east_airmass                generic_.v_local_airmass_v[1]
#define        V_down_airmass                generic_.v_local_airmass_v[2]

    VECTOR_3    v_local_rel_airmass_v;        /* velocity of veh. relative to airmass        */
#define V_local_rel_airmass_v        generic_.v_local_rel_airmass_v
#define        V_north_rel_airmass        generic_.v_local_rel_airmass_v[0]
#define        V_east_rel_airmass        generic_.v_local_rel_airmass_v[1]
#define        V_down_rel_airmass        generic_.v_local_rel_airmass_v[2]

    VECTOR_3    v_local_gust_v; /* linear turbulence components, L frame */
#define V_local_gust_v                generic_.v_local_gust_v
#define        U_gust                        generic_.v_local_gust_v[0]
#define        V_gust                        generic_.v_local_gust_v[1]
#define        W_gust                        generic_.v_local_gust_v[2]

    VECTOR_3    v_wind_body_v;        /* Wind-relative velocities in body axis        */
#define V_wind_body_v                generic_.v_wind_body_v
#define        U_body                        generic_.v_wind_body_v[0]
#define V_body                        generic_.v_wind_body_v[1]
#define        W_body                        generic_.v_wind_body_v[2]

    DATA    v_rel_wind, v_true_kts, v_rel_ground, v_inertial;
    DATA    v_ground_speed, v_equiv, v_equiv_kts;
    DATA    v_calibrated, v_calibrated_kts;
#define V_rel_wind                generic_.v_rel_wind
#define V_true_kts                generic_.v_true_kts
#define V_rel_ground                generic_.v_rel_ground
#define V_inertial                generic_.v_inertial
#define V_ground_speed                generic_.v_ground_speed
#define V_equiv                        generic_.v_equiv
#define V_equiv_kts                generic_.v_equiv_kts
#define V_calibrated                generic_.v_calibrated
#define V_calibrated_kts        generic_.v_calibrated_kts

    VECTOR_3    omega_body_v;        /* Angular B rates        */
#define Omega_body_v                generic_.omega_body_v
#define        P_body                        generic_.omega_body_v[0]
#define        Q_body                        generic_.omega_body_v[1]
#define        R_body                        generic_.omega_body_v[2]
                        
    VECTOR_3    omega_local_v;        /* Angular L rates        */
#define Omega_local_v                generic_.omega_local_v
#define        P_local                        generic_.omega_local_v[0]
#define        Q_local                        generic_.omega_local_v[1]
#define        R_local                        generic_.omega_local_v[2]

    VECTOR_3    omega_total_v;        /* Diff btw B & L        */        
#define Omega_total_v                generic_.omega_total_v
#define        P_total                        generic_.omega_total_v[0]
#define        Q_total                        generic_.omega_total_v[1]
#define        R_total                        generic_.omega_total_v[2]

    VECTOR_3    euler_rates_v;
#define Euler_rates_v                generic_.euler_rates_v
#define        Phi_dot                        generic_.euler_rates_v[0]
#define        Theta_dot                generic_.euler_rates_v[1]
#define        Psi_dot                        generic_.euler_rates_v[2]

    VECTOR_3    geocentric_rates_v;        /* Geocentric linear velocities */
#define Geocentric_rates_v        generic_.geocentric_rates_v
#define        Latitude_dot                generic_.geocentric_rates_v[0]
#define        Longitude_dot                generic_.geocentric_rates_v[1]
#define        Radius_dot                generic_.geocentric_rates_v[2]

/*=============================== Positions ===============================*/

    VECTOR_3    geocentric_position_v;
#define Geocentric_position_v        generic_.geocentric_position_v
#define Lat_geocentric                 generic_.geocentric_position_v[0]
#define        Lon_geocentric                 generic_.geocentric_position_v[1]
#define        Radius_to_vehicle        generic_.geocentric_position_v[2]

    VECTOR_3    geodetic_position_v;
#define Geodetic_position_v        generic_.geodetic_position_v
#define Latitude                generic_.geodetic_position_v[0]
#define        Longitude                generic_.geodetic_position_v[1]
#define Altitude                       generic_.geodetic_position_v[2]

    VECTOR_3    euler_angles_v;
#define Euler_angles_v                generic_.euler_angles_v
#define        Phi                        generic_.euler_angles_v[0]
#define        Theta                        generic_.euler_angles_v[1]
#define        Psi                        generic_.euler_angles_v[2]

/*======================= Miscellaneous quantities ========================*/
        
    DATA    t_local_to_body_m[3][3];        /* Transformation matrix L to B */
#define T_local_to_body_m        generic_.t_local_to_body_m
#define        T_local_to_body_11        generic_.t_local_to_body_m[0][0]
#define        T_local_to_body_12        generic_.t_local_to_body_m[0][1]
#define        T_local_to_body_13        generic_.t_local_to_body_m[0][2]
#define        T_local_to_body_21        generic_.t_local_to_body_m[1][0]
#define        T_local_to_body_22        generic_.t_local_to_body_m[1][1]
#define        T_local_to_body_23        generic_.t_local_to_body_m[1][2]
#define        T_local_to_body_31        generic_.t_local_to_body_m[2][0]
#define        T_local_to_body_32        generic_.t_local_to_body_m[2][1]
#define        T_local_to_body_33        generic_.t_local_to_body_m[2][2]

    DATA    gravity;                /* Local acceleration due to G        */
#define Gravity                        generic_.gravity

    DATA    centrifugal_relief;        /* load factor reduction due to speed */
#define Centrifugal_relief        generic_.centrifugal_relief

    DATA    alpha, beta, alpha_dot, beta_dot;        /* in radians        */
#define Std_Alpha                generic_.alpha
#define Std_Beta                generic_.beta
#define Std_Alpha_dot                generic_.alpha_dot
#define Std_Beta_dot                generic_.beta_dot

    DATA    cos_alpha, sin_alpha, cos_beta, sin_beta;
#define Cos_alpha                generic_.cos_alpha
#define Sin_alpha                generic_.sin_alpha
#define Cos_beta                generic_.cos_beta
#define Sin_beta                generic_.sin_beta

    DATA    cos_phi, sin_phi, cos_theta, sin_theta, cos_psi, sin_psi;
#define Cos_phi                        generic_.cos_phi
#define Sin_phi                        generic_.sin_phi
#define Cos_theta                generic_.cos_theta
#define Sin_theta                generic_.sin_theta
#define Cos_psi                        generic_.cos_psi
#define Sin_psi                        generic_.sin_psi
        
    DATA    gamma_vert_rad, gamma_horiz_rad;        /* Flight path angles        */
#define Gamma_vert_rad                generic_.gamma_vert_rad
#define Gamma_horiz_rad                generic_.gamma_horiz_rad
        
    DATA    sigma, density, v_sound, mach_number;
#define Sigma                        generic_.sigma
#define Density                        generic_.density
#define V_sound                        generic_.v_sound
#define Mach_number                generic_.mach_number
        
    DATA    static_pressure, total_pressure, impact_pressure, dynamic_pressure;
#define Static_pressure                generic_.static_pressure
#define Total_pressure                generic_.total_pressure
#define Impact_pressure                generic_.impact_pressure
#define Dynamic_pressure        generic_.dynamic_pressure

    DATA    static_temperature, total_temperature;
#define Static_temperature        generic_.static_temperature
#define Total_temperature        generic_.total_temperature
        
    DATA    sea_level_radius, earth_position_angle;
#define Sea_level_radius        generic_.sea_level_radius
#define Earth_position_angle        generic_.earth_position_angle
        
    DATA    runway_altitude, runway_latitude, runway_longitude, runway_heading;
#define Runway_altitude                generic_.runway_altitude
#define Runway_latitude                generic_.runway_latitude
#define Runway_longitude        generic_.runway_longitude
#define Runway_heading                generic_.runway_heading

    DATA    radius_to_rwy;
#define Radius_to_rwy                generic_.radius_to_rwy
        
    VECTOR_3    d_cg_rwy_local_v;       /* CG rel. to rwy in local coords */
#define D_cg_rwy_local_v        generic_.d_cg_rwy_local_v
#define        D_cg_north_of_rwy        generic_.d_cg_rwy_local_v[0]
#define        D_cg_east_of_rwy        generic_.d_cg_rwy_local_v[1]
#define        D_cg_above_rwy                generic_.d_cg_rwy_local_v[2]

    VECTOR_3    d_cg_rwy_rwy_v;        /* CG relative to runway, in rwy coordinates */
#define D_cg_rwy_rwy_v                generic_.d_cg_rwy_rwy_v
#define X_cg_rwy                generic_.d_cg_rwy_rwy_v[0]
#define Y_cg_rwy                generic_.d_cg_rwy_rwy_v[1]
#define H_cg_rwy                generic_.d_cg_rwy_rwy_v[2]

    VECTOR_3    d_pilot_rwy_local_v;        /* pilot rel. to rwy in local coords */
#define D_pilot_rwy_local_v        generic_.d_pilot_rwy_local_v
#define        D_pilot_north_of_rwy        generic_.d_pilot_rwy_local_v[0]
#define        D_pilot_east_of_rwy        generic_.d_pilot_rwy_local_v[1]
#define        D_pilot_above_rwy        generic_.d_pilot_rwy_local_v[2]

    VECTOR_3   d_pilot_rwy_rwy_v;        /* pilot rel. to rwy, in rwy coords. */
#define D_pilot_rwy_rwy_v        generic_.d_pilot_rwy_rwy_v
#define X_pilot_rwy                generic_.d_pilot_rwy_rwy_v[0]
#define Y_pilot_rwy                generic_.d_pilot_rwy_rwy_v[1]
#define H_pilot_rwy                generic_.d_pilot_rwy_rwy_v[2]


} GENERIC;

extern GENERIC generic_;        /* usually defined in ls_main.c */


#ifdef __cplusplus
}
#endif


#endif /* _LS_GENERIC_H */


/*---------------------------  end of ls_generic.h  ------------------------*/
