|
|
#ifndef __state_h__
|
|
#define __state_h__
|
|
|
|
typedef double real;
|
|
|
|
typedef real scalar_t;
|
|
typedef real vector_t[3];
|
|
typedef real matrix_t[3][3];
|
|
|
|
typedef enum
|
|
{
|
|
_CONSTANT,
|
|
_FUNCTION,
|
|
_TABLE
|
|
} val_t;
|
|
|
|
typedef enum
|
|
{
|
|
ALT,
|
|
MACH,
|
|
AOA,
|
|
TIME
|
|
} parameter_t;
|
|
|
|
typedef struct _function
|
|
{
|
|
char *name;
|
|
val_t type;
|
|
|
|
/* if type is _CONSTANT */
|
|
float constant_value;
|
|
|
|
/* if type is _TABLE */
|
|
int n_point;
|
|
parameter_t independant_var;
|
|
float *x, *y;
|
|
|
|
/* if type is _FUNCTION */
|
|
char *function;
|
|
|
|
} function_t;
|
|
|
|
typedef struct state
|
|
{
|
|
int s; /* active stage */
|
|
|
|
scalar_t m; /* mass of the rocket */
|
|
scalar_t g; /* gravitational acceleration */
|
|
|
|
scalar_t Ix;
|
|
scalar_t Iy;
|
|
scalar_t Iz;
|
|
|
|
/* */
|
|
scalar_t alt;
|
|
scalar_t aoa;
|
|
scalar_t mach;
|
|
|
|
/* aerodynamic coefficients */
|
|
scalar_t Cd;
|
|
scalar_t CL;
|
|
scalar_t CB;
|
|
scalar_t Cspin;
|
|
scalar_t Cmoment;
|
|
scalar_t Cdamping;
|
|
|
|
scalar_t D; /* Diameter of the rocket */
|
|
scalar_t A; /* reference area (m^2) */
|
|
scalar_t C; /* reference distance */
|
|
|
|
/* aerodynamic forces */
|
|
vector_t Faero; /* (X, Y, Z) */
|
|
/* moments */
|
|
vector_t Maero; /* (L, M, N) */
|
|
|
|
/* engine forces and moments */
|
|
vector_t Feng;
|
|
vector_t Meng;
|
|
|
|
/* component of centripetal acceleration in F_B */
|
|
scalar_t Cx;
|
|
scalar_t Cy;
|
|
scalar_t Cz;
|
|
|
|
/* earth angular velocity in F_B */
|
|
scalar_t pE;
|
|
scalar_t qE;
|
|
scalar_t rE;
|
|
|
|
/* relative angular velocity of F_B to F_V */
|
|
scalar_t P;
|
|
scalar_t Q;
|
|
scalar_t R;
|
|
|
|
matrix_t L_BV;
|
|
matrix_t L_VB;
|
|
|
|
} state_t;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct engine
|
|
{
|
|
float propellant_mass;
|
|
float dry_mass;
|
|
|
|
function_t thrust;
|
|
|
|
float c;
|
|
float mass_flow;
|
|
|
|
float start_time;
|
|
float burn_time;
|
|
float drop_time;
|
|
|
|
float position[3];
|
|
float direction[3];
|
|
|
|
} engine_t;
|
|
|
|
typedef struct rocket_properties
|
|
{
|
|
float dry_mass;
|
|
|
|
function_t Ix;
|
|
function_t Iy;
|
|
function_t Iz;
|
|
|
|
function_t Cd;
|
|
function_t CL;
|
|
function_t CB;
|
|
|
|
float Cspin;
|
|
float Cmoment;
|
|
float Cdamping;
|
|
|
|
float Diameter;
|
|
|
|
float active_time;
|
|
|
|
int n_engine;
|
|
engine_t *engines;
|
|
} rocket_properties_t;
|
|
|
|
typedef struct rocket
|
|
{
|
|
int n_stage;
|
|
rocket_properties_t *stage_properties;
|
|
state_t state;
|
|
} rocket_t;
|
|
|
|
typedef struct solution
|
|
{
|
|
float duration;
|
|
float dt;
|
|
float precision;
|
|
} solution_t;
|
|
|
|
#endif /* __state_h__ */
|
|
|
|
|
|
|
|
|
|
|
|
|