Based on the original Rocket Workbench on SourceForge in CVS at: https://sourceforge.net/projects/rocketworkbench
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

169 lines
2.3 KiB

#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__ */