1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::core::prelude::{ActiveTimestepBounds, CoreConstitutiveModel};
use crate::dynamics::Particle;
use crate::math::{Matrix, Real};

pub trait ConstitutiveModel: Send + Sync {
    fn is_fluid(&self) -> bool;
    fn pos_energy(&self, _particle: &Particle) -> Real {
        0.0
    }
    fn update_particle_stress(&self, particle: &Particle) -> Matrix<Real>;
    fn update_internal_energy_and_pressure(
        &self,
        _particle: &mut Particle,
        _dt: Real,
        _cell_width: Real,
    ) {
    }
    fn active_timestep_bounds(&self) -> ActiveTimestepBounds;
    fn timestep_bound(&self, particle: &Particle, cell_width: Real) -> Real;
    fn to_core_model(&self) -> Option<CoreConstitutiveModel>;
}