pub use sciforge::hub::prelude::constants::{C, G, H, HBAR, K_B, SIGMA_SB, SOLAR_MASS};
pub const SPEED_OF_LIGHT: f64 = C;
pub const GRAVITATIONAL_CONSTANT: f64 = G;
pub const PLANCK: f64 = H;
pub const HBAR_CONST: f64 = HBAR;
pub const BOLTZMANN: f64 = K_B;
pub const STEFAN_BOLTZMANN: f64 = SIGMA_SB;
pub const AU: f64 = 1.495_978_707e11;
pub const YEAR: f64 = 365.25 * 86400.0;
pub const DEG: f64 = std::f64::consts::PI / 180.0;
pub const SOLAR_MASS_KG: f64 = SOLAR_MASS;
pub const M_SUN: f64 = SOLAR_MASS;
pub const R_SUN: f64 = 6.957e8;
pub const L_SUN: f64 = 3.828e26;
pub const EARTH_MASS: f64 = 5.972_17e24;
pub const JUPITER_MASS: f64 = 1.898_13e27;
pub const SATURN_MASS: f64 = 5.683_4e26;
pub const URANUS_MASS: f64 = 8.681_0e25;
pub const NEPTUNE_MASS: f64 = 1.024_1e26;
pub const MARS_MASS: f64 = 6.417_1e23;
pub const EARTH_RADIUS: f64 = 6.371_0e6;
pub const JUPITER_RADIUS: f64 = 6.991_1e7;
pub const SATURN_RADIUS: f64 = 5.823_2e7;
pub const URANUS_RADIUS: f64 = 2.536_2e7;
pub const NEPTUNE_RADIUS: f64 = 2.462_2e7;
pub const MARS_RADIUS: f64 = 3.389_5e6;
pub const MOON_MASS: f64 = 7.342e22;
pub const MOON_RADIUS: f64 = 1.737_4e6;
pub const IO_MASS: f64 = 8.932e22;
pub const IO_RADIUS: f64 = 1.821_6e6;
pub const EUROPA_MASS: f64 = 4.800e22;
pub const EUROPA_RADIUS: f64 = 1.560_8e6;
pub const GANYMEDE_MASS: f64 = 1.482e23;
pub const GANYMEDE_RADIUS: f64 = 2.634_1e6;
pub const CALLISTO_MASS: f64 = 1.076e23;
pub const CALLISTO_RADIUS: f64 = 2.410_3e6;
pub const TITAN_MASS: f64 = 1.345e23;
pub const TITAN_RADIUS: f64 = 2.574_7e6;
pub const TRITON_MASS: f64 = 2.140e22;
pub const TRITON_RADIUS: f64 = 1.353_4e6;
pub const ENCELADUS_MASS: f64 = 1.080e20;
pub const ENCELADUS_RADIUS: f64 = 2.521e5;
pub const TITANIA_MASS: f64 = 3.527e21;
pub const TITANIA_RADIUS: f64 = 7.884e5;
pub const OBERON_MASS: f64 = 3.014e21;
pub const OBERON_RADIUS: f64 = 7.614e5;
pub const PHOBOS_MASS: f64 = 1.066e16;
pub const PHOBOS_RADIUS: f64 = 1.126_7e4;
pub const DEIMOS_MASS: f64 = 1.476e15;
pub const DEIMOS_RADIUS: f64 = 6.2e3;
pub const TETHYS_MASS: f64 = 6.174e20;
pub const TETHYS_RADIUS: f64 = 5.311e5;
pub const DIONE_MASS: f64 = 1.095e21;
pub const DIONE_RADIUS: f64 = 5.613e5;
pub const RHEA_MASS: f64 = 2.307e21;
pub const RHEA_RADIUS: f64 = 7.638e5;
pub const IAPETUS_MASS: f64 = 1.806e21;
pub const IAPETUS_RADIUS: f64 = 7.346e5;
pub const HYPERION_MASS: f64 = 5.62e18;
pub const HYPERION_RADIUS: f64 = 1.35e5;
pub const MIMAS_MASS: f64 = 3.749e19;
pub const MIMAS_RADIUS: f64 = 1.982e5;
pub const PROMETHEUS_MASS: f64 = 1.595e17;
pub const PROMETHEUS_RADIUS: f64 = 4.31e4;
pub const PANDORA_MASS: f64 = 1.371e17;
pub const PANDORA_RADIUS: f64 = 4.07e4;
pub const ATLAS_MASS: f64 = 6.6e15;
pub const ATLAS_RADIUS: f64 = 1.53e4;
pub const PAN_MASS: f64 = 4.95e15;
pub const PAN_RADIUS: f64 = 1.41e4;
pub const EPIMETHEUS_MASS: f64 = 5.266e17;
pub const EPIMETHEUS_RADIUS: f64 = 5.83e4;
pub const JANUS_MASS: f64 = 1.898e18;
pub const JANUS_RADIUS: f64 = 8.95e4;
pub const AMALTHEA_MASS: f64 = 2.08e18;
pub const AMALTHEA_RADIUS: f64 = 8.35e4;
pub const THEBE_MASS: f64 = 4.3e17;
pub const THEBE_RADIUS: f64 = 4.93e4;
pub const HIMALIA_MASS: f64 = 6.7e18;
pub const HIMALIA_RADIUS: f64 = 8.5e4;
pub const METIS_MASS: f64 = 3.6e16;
pub const METIS_RADIUS: f64 = 2.15e4;
pub const ADRASTEA_MASS: f64 = 2.0e15;
pub const ADRASTEA_RADIUS: f64 = 8.2e3;
pub const ARIEL_MASS: f64 = 1.353e21;
pub const ARIEL_RADIUS: f64 = 5.789e5;
pub const UMBRIEL_MASS: f64 = 1.172e21;
pub const UMBRIEL_RADIUS: f64 = 5.847e5;
pub const MIRANDA_MASS: f64 = 6.59e19;
pub const MIRANDA_RADIUS: f64 = 2.358e5;
pub const NEREID_MASS: f64 = 3.1e19;
pub const NEREID_RADIUS: f64 = 1.7e5;
pub const PROTEUS_MASS: f64 = 4.4e19;
pub const PROTEUS_RADIUS: f64 = 2.1e5;
pub const WATER_ICE_DENSITY: f64 = 917.0;
pub const ROCK_DENSITY: f64 = 3300.0;
pub const IRON_DENSITY: f64 = 7874.0;
pub fn surface_gravity(mass: f64, radius: f64) -> f64 {
G * mass / (radius * radius)
}
pub fn escape_velocity(mass: f64, radius: f64) -> f64 {
(2.0 * G * mass / radius).sqrt()
}
pub fn orbital_velocity(parent_mass: f64, distance: f64) -> f64 {
(G * parent_mass / distance).sqrt()
}
pub fn orbital_period(parent_mass: f64, a: f64) -> f64 {
2.0 * std::f64::consts::PI * (a.powi(3) / (G * parent_mass)).sqrt()
}
pub fn hill_radius(a: f64, m_body: f64, m_parent: f64) -> f64 {
a * (m_body / (3.0 * m_parent)).cbrt()
}
pub fn roche_limit(r_primary: f64, rho_primary: f64, rho_secondary: f64) -> f64 {
2.456 * r_primary * (rho_primary / rho_secondary).cbrt()
}
pub fn mean_density(mass: f64, radius: f64) -> f64 {
mass / (4.0 / 3.0 * std::f64::consts::PI * radius.powi(3))
}
pub fn synchronous_orbit_radius(parent_mass: f64, rotation_period: f64) -> f64 {
(G * parent_mass * rotation_period * rotation_period
/ (4.0 * std::f64::consts::PI * std::f64::consts::PI))
.cbrt()
}
pub fn tidal_force_ratio(m_primary: f64, d: f64, r_body: f64) -> f64 {
2.0 * G * m_primary * r_body / (d * d * d)
}