1#[doc(no_inline)]
3use num::Float;
4
5pub fn der_mach_to_t0_t<F: Float>(mach: F, gamma: F) -> F {
8 (gamma - F::one()) * mach
9}
10
11pub fn der_mach_to_p0_p<F: Float>(mach: F, gamma: F) -> F {
12 let half = F::from(0.5).unwrap();
13 gamma
14 * mach
15 * (F::one() + half * (gamma - F::one()) * mach.powi(2)).powf(F::one() / (gamma - F::one()))
16}
17
18pub fn der_mach_to_rho0_rho<F: Float>(mach: F, gamma: F) -> F {
19 let half = F::from(0.5).unwrap();
20 mach * (F::one() + half * (gamma - F::one()) * mach.powi(2)).powf(F::one() / (F::one() - gamma))
21}
22
23pub fn der_mach_to_a_ac<F: Float>(mach: F, gamma: F) -> F {
24 if mach.is_zero() {
25 return F::neg_infinity();
26 }
27 let half = F::from(0.5).unwrap();
28 let t0_t = F::one() + half * (gamma - F::one()) * mach.powi(2);
29 (F::from(2.0).unwrap() / (gamma + F::one()) * t0_t)
30 .powf(half * (gamma + F::one()) / (gamma - F::one()))
31 * (-mach.powi(-2) + half * (gamma + F::one()) * t0_t.powi(-1))
32}
33
34pub fn der_mach_to_v_cpt0<F: Float>(mach: F, gamma: F) -> F {
35 let half = F::from(0.5).unwrap();
36 (gamma - F::one()).sqrt()
37 * (F::one() + half * (gamma - F::one()) * mach.powi(2))
38 .sqrt()
39 .powi(-3)
40}
41
42pub fn der_mach_to_mcpt0_ap0<F: Float>(mach: F, gamma: F) -> F {
43 let half = F::from(0.5).unwrap();
44 gamma / (gamma - F::one()).sqrt()
45 * (F::one()
46 - (half * (gamma + F::one()) * mach.powi(2))
47 / (F::one() + half * (gamma - F::one()) * mach.powi(2)))
48 * (F::one() + half * (gamma - F::one()) * mach.powi(2))
49 .powf(-half * (gamma + F::one()) / (gamma - F::one()))
50}
51
52pub fn der_mach_to_mcpt0_ap<F: Float>(mach: F, gamma: F) -> F {
53 let half = F::from(0.5).unwrap();
54 gamma / (gamma - F::one()).sqrt() * (F::one() + (gamma - F::one()) * mach.powi(2))
55 / (F::one() + half * (gamma - F::one()) * mach.powi(2)).sqrt()
56}
57
58pub fn der_mach_to_f_mcpt0<F: Float>(mach: F, gamma: F) -> F {
59 let half = F::from(0.5).unwrap();
60 (gamma - F::one()).sqrt() / gamma * (F::one() + gamma * mach.powi(2)) / mach.powi(2)
61 * (F::one() + half * (gamma - F::one()) * mach.powi(2))
62 .sqrt()
63 .powi(-3)
64}