mirror of
https://github.com/nasa/trick.git
synced 2025-01-22 12:28:15 +00:00
67 lines
1.8 KiB
C++
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
|