use num::Float;
pub fn normal_mach2<F: Float>(mach: F, gamma: F) -> F {
let two = F::from(2.).unwrap();
((F::one() + (gamma - F::one()) / two * mach.powi(2))
/ (gamma * mach.powi(2) - (gamma - F::one()) / two))
.sqrt()
}
pub fn normal_p02_p01<F: Float>(mach: F, gamma: F) -> F {
let two = F::from(2.).unwrap();
F::one()
/ ((two * gamma / (gamma + F::one()) * mach.powi(2)
- (gamma - F::one()) / (gamma + F::one()))
.powf(F::one() / (gamma - F::one()))
* (two / (gamma + F::one()) / mach.powi(2) + (gamma - F::one()) / (gamma + F::one()))
.powf(gamma / (gamma - F::one())))
}
pub fn normal_p2_p1<F: Float>(mach: F, gamma: F) -> F {
F::from(2.).unwrap() * gamma / (gamma + F::one()) * (mach.powi(2) - F::one()) + F::one()
}
pub fn normal_rho2_rho1<F: Float>(mach: F, gamma: F) -> F {
(gamma + F::one()) * mach.powi(2) / ((gamma - F::one()) * mach.powi(2) + F::from(2.).unwrap())
}
pub fn normal_t2_t1<F: Float>(mach: F, gamma: F) -> F {
let two = F::from(2.).unwrap();
(two + (gamma - F::one()) * mach.powi(2)) * (two * gamma * mach.powi(2) - (gamma - F::one()))
/ ((gamma + F::one()).powi(2) * mach.powi(2))
}
pub fn normal_a2_a1<F: Float>(mach: F, gamma: F) -> F {
let two = F::from(2.).unwrap();
((two + (gamma - F::one()) * mach.powi(2)) * (two * gamma * mach.powi(2) - (gamma - F::one()))
/ ((gamma + F::one()).powi(2) * mach.powi(2)))
.sqrt()
}