NEMLModel_sd

Overview

The NEMLModel_sd object natively implements the small strain stress update interface.

It accommodates the large strain incremental stress update interface using the Treusdell objective stress rate of the form:

\dot{\bm{\sigma}}=\hat{\dot{\bm{\sigma}}}-\bm{\sigma}\cdot\bm{L}^{T}-\bm{L}\cdot\bm{\sigma}+\operatorname{tr}\left(\bm{L}\right)\bm{\sigma}

where \bm{\sigma} is the Cauchy stress and \hat{\dot{\bm{\sigma}}} is the small strain stress rate implied by the small strain kinematics update interface. The update calculates the consistent tangents \mathbf{\mathfrak{A}} \mathbf{\mathfrak{B}} exactly and provides a helper routine to recombine these symmetric and skew parts into the full derivative with respect to the spatial velocity gradient.

Caution

The current Treusdell objective integration does not advect the material history variables. This means the integration of material models with vector or tensor history variables, such as backstresses, will be inaccurate for situations requiring large rotations. This limitation will be removed in future version of NEML.

The following sections describe the basic material model implemented from this generic interfaces. Another section of the manual details continuum damage models, which also use this same interface.

The descriptions here are given in the rate form. Details of the integration algorithm for most of the small strain models are described here.

Implementations

Class description

class NEMLModel_sd : public neml::NEMLModel

Small deformation stress update.

Subclassed by neml::KMRegimeModel, neml::NEMLDamagedModel_sd, neml::SmallStrainCreepPlasticity, neml::SmallStrainElasticity, neml::SubstepModel_sd

Public Functions

NEMLModel_sd(ParameterSet &params)

All small strain models use small strain elasticity and CTE.

virtual void update_sd(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)

Vector interface can go here.

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 small strain stress update interface.

virtual void update_ld_inc(const double *const d_np1, const double *const d_n, const double *const w_np1, const double *const w_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 *const B_np1, double &u_np1, double u_n, double &p_np1, double p_n)

Large strain incremental update.

virtual void populate_static(History &history) const

Setup any static state.

virtual void init_static(History &history) const

Initialize any static state.

virtual double alpha(double T) const

Provide the instantaneous CTE.

const std::shared_ptr<const LinearElasticModel> elastic() const

Returns the elasticity model, for sub-objects that want to use it.

virtual void elastic_strains(const double *const s_np1, double T_np1, const double *const h_np1, double *const e_np1) const

Return the elastic strains.

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

Used to override the linear elastic model to match another object’s.