mod euler_1d;
mod fitting;
mod forcing;
mod imex;
mod marcher_2d;
mod marcher_3d;
mod marcher_3d_fitted;
pub use euler_1d::{CompressibleEuler1d, EulerState, ideal_gas_pressure};
pub use fitting::{
FittedNormalShock, Park2tClosure, PostShockState, REDUCED_MASS_AMU, StagnationOutcome,
reduced_mass_amu,
};
pub use forcing::ForcingRegion;
pub use imex::{AcousticImex1d, conservation_round, positivity_floor};
pub use marcher_2d::{CompressibleMarcher2d, EulerState2d, EulerStateTt2d, ideal_gas_pressure_2d};
pub use marcher_3d::{CompressibleMarcher3d, EulerState3d, EulerStateTt3d};
pub use marcher_3d_fitted::CompressibleMarcher3dFitted;
use crate::CfdScalar;
use deep_causality_physics::PhysicsError;
pub(crate) fn require_positive_pressure<R: CfdScalar>(
p: R,
cell: usize,
) -> Result<(), PhysicsError> {
if p <= R::zero() || !p.is_finite() {
return Err(PhysicsError::PhysicalInvariantBroken(alloc::format!(
"compressible flux: pressure must stay positive (ideal-gas EOS is not hyperbolic at \
p <= 0), got p = {p:?} at cell {cell}"
)));
}
Ok(())
}