Skip to main content

GursonDamage

Struct GursonDamage 

Source
pub struct GursonDamage {
    pub f: f64,
    pub f0: f64,
    pub fc: f64,
    pub f_f: f64,
    pub q1: f64,
    pub q2: f64,
    pub q3: f64,
    pub a_n: f64,
    pub eps_n: f64,
    pub s_n: f64,
}
Expand description

Gurson-Tvergaard-Needleman (GTN) porous plasticity model.

Yield function: Φ = (σ_eq/σ_y)² + 2q₁f* cosh(3q₂σ_H/(2σ_y)) - 1 - (q₁f*)² = 0

where f* is the effective void volume fraction.

Fields§

§f: f64

Current void volume fraction f ∈ [0, 1].

§f0: f64

Initial void volume fraction f_0.

§fc: f64

Critical void volume fraction f_c for coalescence.

§f_f: f64

Failure void volume fraction f_F.

§q1: f64

Tvergaard parameter q₁ (typically 1.5).

§q2: f64

Tvergaard parameter q₂ (typically 1.0).

§q3: f64

Tvergaard parameter q₃ (typically q₁²).

§a_n: f64

Nucleation amplitude A_n.

§eps_n: f64

Mean nucleation strain ε_N.

§s_n: f64

Standard deviation of nucleation s_N.

Implementations§

Source§

impl GursonDamage

Source

pub fn new(f0: f64, fc: f64, f_f: f64, a_n: f64, eps_n: f64, s_n: f64) -> Self

Create a new GTN model with default Tvergaard parameters.

Source

pub fn effective_void_fraction(&self) -> f64

Effective void volume fraction f* accounting for coalescence.

f* = f if f <= f_c f* = f_c + (f̄_F - f_c)/(f_F - f_c) * (f - f_c) if f > f_c

where f̄_F = (q₁ + sqrt(q₁² - q₃))/q₃ ≈ 1/q₁

Source

pub fn yield_function(&self, sigma_eq: f64, sigma_h: f64, sigma_y: f64) -> f64

Evaluate the GTN yield function.

Φ = (σ_eq/σ_y)² + 2q₁f* cosh(3q₂σ_H/(2σ_y)) - 1 - q₃f*²

Source

pub fn nucleation_rate(&self, eps_p: f64, eps_p_dot: f64) -> f64

Void nucleation rate from strain-controlled nucleation (Chu & Needleman).

ḟ_nucleation = A_n / (s_N * sqrt(2π)) * exp(-0.5*((ε_p - ε_N)/s_N)²) * ε̇_p

Source

pub fn growth_rate(&self, plastic_volumetric_strain_rate: f64) -> f64

Void growth rate from plastic dilatation.

ḟ_growth = (1 - f) * ε̇_kk^p

Source

pub fn update( &mut self, eps_p: f64, eps_p_dot: f64, plastic_volumetric_strain_rate: f64, dt: f64, )

Update void volume fraction given plastic strain increment.

Source

pub fn is_failed(&self) -> bool

Check if material has failed (f >= f_F).

Source

pub fn compute_void_growth_rate( &self, sigma_h: f64, sigma_eq: f64, sigma_y: f64, deps_p: f64, ) -> f64

Compute the total void growth rate including nucleation and growth.

The Rice-Tracey void growth model extended for GTN:

ḟ_total = ḟ_growth + ḟ_nucleation

where:

  • ḟ_growth = (1 - f) * A * sinh(B * η) * ε̇_p
  • ḟ_nucleation = Gaussian nucleation from Chu-Needleman model
  • η = σ_H / σ_eq (stress triaxiality)
  • A = 0.283 (Rice-Tracey coefficient), B = 1.5 (triaxiality amplifier)
§Arguments
  • sigma_h - Hydrostatic (mean) stress [Pa]
  • sigma_eq - Von Mises equivalent stress [Pa]
  • sigma_y - Current yield stress [Pa]
  • deps_p - Equivalent plastic strain increment (dimensionless)
§Returns

Total void volume fraction rate df/dε (per unit plastic strain)

Trait Implementations§

Source§

impl Clone for GursonDamage

Source§

fn clone(&self) -> GursonDamage

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GursonDamage

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.