Crystal plasticity damage models

NEML views crystal plasticity continuum damage as an alternative kinematic model to the one described in the main documentation. The model takes a projection operator \mathbf{P}, defined below, which is a function of some set of internal variables describing damage evolution, \mathbf{d}, the current stress state \bm{\sigma}, and uses the projection to project damage onto the elasticity tensor used in the crystal plasticity stress update formulation.

In the most general case, consider the base stress updated provided by a model as a function of time \bm{\sigma}^\prime. The damage projection will alter this stress history as:

\bm{\sigma}=\boldsymbol{P}:\bm{\sigma}^{\prime}

so that the new, modified stress rate accounting for damage becomes

\dot{\bm{\sigma}}=\dot{\boldsymbol{P}}:\bm{\sigma}^{\prime}+\boldsymbol{P}:\dot{\bm{\sigma}}^{\prime}

\dot{\bm{\sigma}}=\dot{\boldsymbol{P}}:\boldsymbol{P}^{-1}:\bm{\sigma}+\boldsymbol{P}:\dot{\bm{\sigma}}^{\prime}

in the case where the damage evolves slowly compared to the evolution of the stress we can approximate this as

\dot{\bm{\sigma}}=\boldsymbol{P}:\dot{\bm{\sigma}}^{\prime}

which is the form currently implemented in NEML.

Starting then from the basic stress update kinematics defined in the main documentation, the modified stress rate equation becomes

\dot{\sigma}_{ij}=P_{ijkl}C_{klmn}\left(D_{mn}-D_{mn}^{p}\right)-\sigma_{ik}\Omega_{kj}^{\star}+\Omega_{ik}^{\star}\sigma_{kj}

NEML implements this modified stress update as a new KinematicModel. A CrystalDamageModel provides the definition of the projection operator, including the history evolution rate equations for any internal variables used in defining the projection.

DamagedStandardKinematicModel

Parameters

Parameter

Object type

Description

Default

emodel

neml::LinearElasticModel

Elasticity tensor

No

imodel

neml::InelasticModel

Definition of the plastic deformation rate

No

dmodel

neml::CrystalDamageModel

Definition of the damage projection and associated internal variables

No

Class description

class DamagedStandardKinematicModel : public neml::StandardKinematicModel

My standard kinematic assumptions with damage.

Public Functions

DamagedStandardKinematicModel(ParameterSet &params)

Initialize with elastic and inelastic models.

virtual void populate_hist(History &history) const

Populate a history object with the correct variables.

virtual void init_hist(History &history) const

Initialize the history object with the starting values.

virtual Symmetric stress_rate(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

Stress rate.

virtual SymSymR4 d_stress_rate_d_stress(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

Derivative of stress rate with respect to stress.

virtual SymSymR4 d_stress_rate_d_d(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

Derivative of the stress rate with respect to the deformation rate.

virtual History d_stress_rate_d_history(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

Derivative of the stress rate with respect to the history.

virtual History history_rate(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

History rate.

virtual History d_history_rate_d_stress(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

Derivative of the history rate with respect to the stress.

virtual History d_history_rate_d_history(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

Derivative of the history rate with respect to the history.

virtual SymSkewR4 d_stress_rate_d_w_decouple(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed)

Derivative of the stress rate with respect to the vorticity keeping fixed variables fixed

virtual Skew spin(const Symmetric &stress, const Symmetric &d, const Skew &w, const Orientation &Q, const History &history, Lattice &lattice, double T, const History &fixed) const

The spin rate.

virtual Symmetric elastic_strains(const Symmetric &stress, Lattice &lattice, const Orientation &Q, const History &history, double T)

Helper to calculate elastic strains.

virtual Symmetric stress_increment(const Symmetric &stress, const Symmetric &D, const Skew &W, double dt, Lattice &lattice, const Orientation &Q, const History &history, double T)

Helper to predict an elastic stress increment.

Public Static Functions

static std::string type()

String type for the object system.

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

Initialize from parameter set.

static ParameterSet parameters()

Default parameters.