trick/trick_sims/SIM_submarine/models/submarine/include/Submarine.hh
2023-12-19 15:23:34 -06:00

67 lines
1.8 KiB
C++

/************************************************************************
PURPOSE: (Simulate a submarine.)
LIBRARY DEPENDENCIES:
((submarine/src/Submarine.o))
**************************************************************************/
#ifndef SUBMARINE_HH
#define SUBMARINE_HH
// Density of salt water = 1023.6 kg/m^3
#define DENSITY_SALT_WATER 1023.6
// Acceleration of gravity = 9.80665 m/s^2
#define GRAVITY 9.80665
//
#define CONVERSION_PASCALS_TO_PSI 1.4504e-4
class Submarine {
public:
// Parameters
double outer_hull_outer_radius;
double outer_hull_inner_radius;
double inner_hull_outer_radius;
double inner_hull_inner_radius;
double hull_length;
double ballast_tank_volume;
double hard_ballast_mass;
double hull_mass;
double payload_mass;
double Cd;
// State Variables (Uncalculated Variables)
double pos[2];
double vel[2];
double ballast_energy; // joules
double pump_power; // watts
// Calculated Variables
double acc[2];
// Control Variable
double ballast_air_ratio; // To the GUI.
double water_pressure_pascals;
double water_pressure_PSI; // To the GUI.
int pump_power_command; // From the GUI.
// Methods
int default_data();
int state_init();
int state_deriv();
int state_integ();
int control();
void calc_water_pressure();
double calc_ballast_air_volume();
double calc_pressure_hull_displaced_volume();
double calc_total_displaced_volume();
double calc_gravity_force ();
double calc_total_mass ();
double calc_fixed_mass();
double calc_buoyancy_force( );
double calc_ballast_water_mass();
double calc_ballast_water_volume ();
double calc_drag_force();
double calc_pressure_hull_volume();
int state_post_integ();
};
#endif