1use num::Float;
2
3pub fn der_normal_mach2<F: Float>(mach: F, gamma: F) -> F {
4 let half = F::from(0.5).unwrap();
5 let t0_t = F::one() + half * (gamma - F::one()) * mach.powi(2);
6 let a = (gamma + F::one()).powi(2) * mach * half.sqrt();
7 let c = gamma * (F::from(2.0).unwrap() * mach.powi(2) - F::one()) + F::one();
8 -a * t0_t.sqrt().powi(-1) * c.sqrt().powi(-3)
9}
10
11pub fn der_normal_p02_p01<F: Float>(mach: F, gamma: F) -> F {
12 let half = F::from(0.5).unwrap();
13 let t0_t = F::one() + half * (gamma - F::one()) * mach.powi(2);
14 let a = gamma * mach * (mach.powi(2) - F::one()).powi(2) / t0_t.powi(2);
15 let b = (gamma + F::one()) * mach.powi(2) / t0_t * half;
16 let c = F::from(2.0).unwrap() * gamma / (gamma + F::one()) * mach.powi(2)
17 - (gamma - F::one()) / (gamma + F::one());
18 -a * b.powf(F::one() / (gamma - F::one())) * c.powf(-gamma / (gamma - F::one()))
19}