Skip to main content

comp_flow/
der_mach_to.rs

1//! Derivatives of relations as a function of Mach number
2#[doc(no_inline)]
3use num::Float;
4
5/// Total temperature ratio for given mach number and specific heat ratio
6///
7pub 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}