Skip to main content

comp_flow/
der_normal.rs

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}