Damage mechanics

Overview

NEML implements damage mechanics with metamodel place on top of an existing (small strain) base material model. The metamodel supplements the base material history variables with a vector of damage variables \bm{\omega}. In the most generic case, these damage variables somehow modify the base material’s stress update. The damage model must also provide the history evolution equations describing the evolution of damage. The interface is then

\bm{\sigma}_{n+1}, \bm{\alpha}_{n+1}, \bm{\omega}_{n+1}, \bm{\mathfrak{A}}_{n+1}, u_{n+1}, p_{n+1} \leftarrow
\mathcal{D}\left(
\bm{\varepsilon}_{n+1}, \bm{\varepsilon}_{n},
T_{n+1}, T_{n},
t_{n+1}, t_{n},
\bm{\sigma}_{n},
\bm{\alpha}_{n},
\bm{\alpha}_{n},
u_n, p_n
\right)

which is identical to the interface for the base small strain material models, except now with the addition of some dependence on the damage variables \bm{\omega}.

Implementations

The generic interface described here could have any number of damage variables and could modify the stress with those variables in any way. The more standard damage model, depending on a single scalar damage variable is implemented as a neml::NEMLScalarDamagedModel_sd.

Class description

class NEMLDamagedModel_sd : public neml::NEMLModel_sd

Small strain damage model.

Subclassed by neml::NEMLScalarDamagedModel_sd

Public Functions

NEMLDamagedModel_sd(ParameterSet &params)

Input is an elastic model, an undamaged base material, and the CTE.

virtual void populate_state(History &hist) const

Populate the internal variables.

virtual void init_state(History &hist) const

Initialize base according to the base model and damage according to.

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) = 0

The damaged stress update.

virtual size_t ndamage() const = 0

Number of damage variables.

virtual void populate_damage(History &hist) const = 0

Populate the damage variables.

virtual void init_damage(History &hist) const = 0

Setup the damage variables.

virtual void set_elastic_model(std::shared_ptr<LinearElasticModel> emodel)

Override the elastic model.