pub use crate::mpm_shaders::models::drucker_prager::{
DruckerPragerPlasticState, DruckerPragerPlasticity,
};
pub use crate::mpm_shaders::models::fluid::FluidModel;
pub use crate::mpm_shaders::models::linear_elasticity::LinearElasticModel;
pub use crate::mpm_shaders::models::snow::{SnowPlasticState, SnowPlasticity};
pub use drucker_prager::DruckerPrager;
mod drucker_prager;
pub(crate) fn lame_lambda_mu(young_modulus: f32, poisson_ratio: f32) -> (f32, f32) {
(
young_modulus * poisson_ratio / ((1.0 + poisson_ratio) * (1.0 - 2.0 * poisson_ratio)),
shear_modulus(young_modulus, poisson_ratio),
)
}
fn shear_modulus(young_modulus: f32, poisson_ratio: f32) -> f32 {
young_modulus / (2.0 * (1.0 + poisson_ratio))
}
pub type ElasticCoefficients = LinearElasticModel;
pub trait ElasticCoefficientsExt {
fn from_young_modulus(young_modulus: f32, poisson_ratio: f32) -> Self;
}
impl ElasticCoefficientsExt for LinearElasticModel {
fn from_young_modulus(young_modulus: f32, poisson_ratio: f32) -> Self {
let (lambda, mu) = lame_lambda_mu(young_modulus, poisson_ratio);
Self {
lambda,
mu,
cfl_coeff: 0.5,
}
}
}