#[doc(no_inline)]
use num::Float;
pub fn mach_to_pm_angle<F: Float>(mach: F, gamma: F) -> F {
((gamma + F::one()) / (gamma - F::one())).sqrt()
* ((gamma - F::one()) / (gamma + F::one()) * (mach.powi(2) - F::one()))
.sqrt()
.atan()
- (mach.powi(2) - F::one()).sqrt().atan()
}
pub fn mach_to_mach_angle<F: Float>(mach: F) -> F {
(F::one() / mach).asin()
}
pub fn mach_to_t_t0<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
(F::one() + half * (gamma - F::one()) * mach.powi(2)).powi(-1)
}
pub fn mach_to_t0_t<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
F::one() + half * (gamma - F::one()) * mach.powi(2)
}
pub fn mach_to_p_p0<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
(F::one() + half * (gamma - F::one()) * mach.powi(2)).powf((gamma) / (F::one() - gamma))
}
pub fn mach_to_p0_p<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
(F::one() + half * (gamma - F::one()) * mach.powi(2)).powf((gamma) / (gamma - F::one()))
}
pub fn mach_to_rho_rho0<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
(F::one() + half * (gamma - F::one()) * mach.powi(2)).powf(F::one() / (F::one() - gamma))
}
pub fn mach_to_rho0_rho<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
(F::one() + half * (gamma - F::one()) * mach.powi(2)).powf(F::one() / (gamma - F::one()))
}
pub fn mach_to_a_ac<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
F::one() / mach
* ((F::one() + half * (gamma - F::one()) * mach.powi(2)) / (half * (gamma + F::one())))
.powf(half * (gamma + F::one()) / (gamma - F::one()))
}
pub fn mach_to_v_cpt0<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
(gamma - F::one()).sqrt()
* mach
* (F::one() + half * (gamma - F::one()) * mach.powi(2))
.sqrt()
.powi(-1)
}
pub fn mach_to_mcpt0_ap0<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
gamma / (gamma - F::one()).sqrt()
* mach
* (F::one() + half * (gamma - F::one()) * mach.powi(2))
.powf(-half * (gamma + F::one()) / (gamma - F::one()))
}
pub fn mach_to_mcpt0_ap<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
gamma / (gamma - F::one()).sqrt()
* mach
* (F::one() + half * (gamma - F::one()) * mach.powi(2)).sqrt()
}
pub fn mach_to_f_mcpt<F: Float>(mach: F, gamma: F) -> F {
let half = F::from(0.5).unwrap();
(gamma - F::one()).sqrt() / gamma * (F::one() + gamma * mach.powi(2)) / mach
* (F::one() + half * (gamma - F::one()) * mach.powi(2))
.sqrt()
.powi(-1)
}