pub struct BoneModel {
pub density: f64,
pub mineral_fraction: f64,
pub e_axial: f64,
pub e_transverse: f64,
pub shear_modulus: f64,
pub trabecular_thickness: f64,
pub trabecular_length: f64,
}Expand description
Bone tissue constitutive model (cortical + cancellous).
Implements:
- Transversely isotropic elasticity for cortical bone.
- Gibson-Ashby cellular foam model for trabecular bone.
- Kopperdahl-Keaveny mineral-density to modulus correlation.
- Simplified Wolff’s law density adaptation.
Fields§
§density: f64Apparent density ρ [g/cm³] (0.1–2.0 for cancellous, ~1.9 for cortical).
mineral_fraction: f64Mineral volume fraction (ash fraction) [0..1].
e_axial: f64Axial Young’s modulus E_axial [GPa] (cortical, along osteons).
e_transverse: f64Transverse Young’s modulus E_transverse [GPa] (cortical).
shear_modulus: f64Shear modulus G [GPa] (cortical).
trabecular_thickness: f64Trabecular thickness t_b [mm].
trabecular_length: f64Trabecular length l_b [mm].
Implementations§
Source§impl BoneModel
impl BoneModel
Sourcepub fn new(
density: f64,
mineral_fraction: f64,
e_axial: f64,
e_transverse: f64,
shear_modulus: f64,
) -> Self
pub fn new( density: f64, mineral_fraction: f64, e_axial: f64, e_transverse: f64, shear_modulus: f64, ) -> Self
Construct a BoneModel with explicit mechanical properties.
Sourcepub fn density_to_modulus_kk(density: f64) -> f64
pub fn density_to_modulus_kk(density: f64) -> f64
Kopperdahl-Keaveny correlation: density [g/cm³] → Young’s modulus [MPa].
E = 6850 * ρ^1.49 for apparent density in g/cm³ (trabecular bone).
Sourcepub fn gibson_ashby_modulus(&self, solid_modulus_gpa: f64) -> f64
pub fn gibson_ashby_modulus(&self, solid_modulus_gpa: f64) -> f64
Gibson-Ashby foam model: relative density → relative Young’s modulus.
E/E_s = C * (ρ/ρ_s)^2 where C ≈ 1.0, ρ_s = solid bone density (~1.9 g/cm³).
Sourcepub fn trabecular_modulus(&self) -> f64
pub fn trabecular_modulus(&self) -> f64
Compute trabecular bone apparent modulus using Gibson-Ashby.
Returns modulus in GPa.
Sourcepub fn wolff_adapt(
&mut self,
sigma_actual: f64,
sigma_ref: f64,
k: f64,
s: f64,
dt: f64,
)
pub fn wolff_adapt( &mut self, sigma_actual: f64, sigma_ref: f64, k: f64, s: f64, dt: f64, )
Apply Wolff’s law density adaptation.
Updates the apparent density based on the daily stress stimulus σ_ref
compared to the homeostatic stimulus σ_ref.
dρ/dt = k * (σ_actual - σ_ref) with lazy zone ±s.
Sourcepub fn yield_strength(&self) -> f64
pub fn yield_strength(&self) -> f64
Compute bone yield strength [MPa] from mineral fraction (Currey).
σ_y = 94.0 * mineral_fraction^3.84