Skip to main content

oxiphysics_materials/eos/
polynomialeos_traits.rs

1//! # PolynomialEos - Trait Implementations
2//!
3//! This module contains trait implementations for `PolynomialEos`.
4//!
5//! ## Implemented Traits
6//!
7//! - `EquationOfState`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::functions::EquationOfState;
12#[allow(unused_imports)]
13use super::functions::*;
14use super::types::PolynomialEos;
15
16impl EquationOfState for PolynomialEos {
17    fn pressure(&self, density: f64) -> f64 {
18        self.pressure_energy(density, 0.0)
19    }
20    fn sound_speed(&self, density: f64) -> f64 {
21        let h = density * 1e-6;
22        let dp = self.pressure(density + h) - self.pressure(density - h);
23        (dp / (2.0 * h)).max(0.0).sqrt()
24    }
25    fn density_from_pressure(&self, pressure: f64) -> f64 {
26        let mut lo = self.rho0 * 0.1;
27        let mut hi = self.rho0 * 10.0;
28        for _ in 0..60 {
29            let mid = 0.5 * (lo + hi);
30            if self.pressure(mid) < pressure {
31                lo = mid;
32            } else {
33                hi = mid;
34            }
35        }
36        0.5 * (lo + hi)
37    }
38}