Model damaged by a scalar variable

Overview

This object implements a damage model that uses a single damage variable to degrade the stress of a base material model. It implements the stress update function

\bm{\sigma}_{n+1}^\prime = (1 - \omega_{n+1})
   \bm{\sigma}\left(
   \bm{\varepsilon}_{n+1}, \bm{\varepsilon}_{n},
   T_{n+1}, T_{n},
   t_{n+1}, t_{n},
   \bm{\sigma}_{n} / (1 - \omega_{n}),
   \bm{\alpha}_{n+1},
   \bm{\alpha}_{n},
   u_n, p_n
   \right)

where \omega is the damage variable and \bm{\sigma} is the base material stress update. A neml::ScalarDamage model provides the definition of \omega as well as the associated derivatives to form the Jacobian.

The damage model maintains the set of history variables from the base material plus one additional history variable for the damage.

This class has the option for element extinction, useful in FEA simulations of damage. If the ekill option is set to true once the material point reaches a damage threshold of dkill the constitutive response will be replaced by a linear elastic response with an elastic stiffness of \mathbf{\mathfrak{C}}/f where the factor f is given by the parameter sfact.

Note

The scalar damage model passes in the modified stress \bm{\sigma} / (1 - \omega) to the base stress update model in addition to modifying the stress update formula as shown in the above equation.

Warning

The model also passes the modified stress \bm{\sigma} / (1-\omega) to the damage update equation. That is, the stress passed into these functions is the modified effective stress, not the actual external stress. This means that the damage equations implemented in NEML vary slightly from the correpsonding literature equations working with the unmodified stress directly.

Parameters

Parameter

Object type

Description

Default

elastic

neml::LinearElasticModel

Elasticity model

No

base

neml::NEMLModel_sd

Base material model

No

damage

neml::ScalarDamage

Damage model

No

alpha

neml::Interpolate

Thermal expansion coefficient

0.0

tol

double

Solver tolerance

1.0e-8

miter

int

Maximum solver iterations

50

verbose

bool

Verbosity flag

false

ekill

bool

Trigger element death

false

dkill

double

Critical damage threshold

0.5

sfact

double

Stiffness factor for dead element

100000

Scalar damage models

Class description

class NEMLScalarDamagedModel_sd : public neml::NEMLDamagedModel_sd, public neml::Solvable

Special case where the damage variable is a scalar.

Public Functions

NEMLScalarDamagedModel_sd(ParameterSet &params)

Parameters are an elastic model, a base model, the CTE, a solver tolerance, the maximum number of solver iterations, and a verbosity flag

virtual void update_sd_actual(const double *const e_np1, const double *const e_n, double T_np1, double T_n, double t_np1, double t_n, double *const s_np1, const double *const s_n, double *const h_np1, const double *const h_n, double *const A_np1, double &u_np1, double u_n, double &p_np1, double p_n)

Stress update using the scalar damage model.

virtual size_t ndamage() const

Equal to 1.

virtual void populate_damage(History &hist) const

Populate damage.

virtual void init_damage(History &hist) const

Initialize to zero.

virtual size_t nparams() const

Number of parameters for the solver.

virtual void init_x(double *const x, TrialState *ts)

Initialize the solver vector.

virtual void RJ(const double *const x, TrialState *ts, double *const R, double *const J)

The actual nonlinear residual and Jacobian to solve.

void make_trial_state(const double *const e_np1, const double *const e_n, double T_np1, double T_n, double t_np1, double t_n, const double *const s_n, const double *const h_n, double u_n, double p_n, SDTrialState &tss)

Setup a trial state from known information.

virtual double get_damage(const double *const h_np1)

Used to find the damage value from the history.

virtual bool should_del_element(const double *const h_np1)

Used to determine if element should be deleted.

virtual bool is_damage_model() const

Used to determine if this is a damage model.

Public Static Functions

static std::string type()

String type for the object system.

static ParameterSet parameters()

Return the default parameters.

static std::unique_ptr<NEMLObject> initialize(ParameterSet &params)

Initialize from a parameter set.