NEMLModel

Stress update interfaces

NEMLModel is the common interface to the constitutive models contained in NEML. It currently requires models to provide two types of stress updates. The first type of update is a small strain kinematics incremental update based on the interface

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

Here n indicates values at the previous time step and n+1 values at the next time step. The quantities are stress (\bm{\sigma}), strain (\bm{\varepsilon}), the vector of history variables (\bm{\alpha}), strain energy (u) dissipated work (p), temperature (T), time (t), and the algorithmic tangent (\mathbf{\mathfrak{A}})

\mathbf{\mathfrak{A}}_{n+1} = \frac{d \bm{\sigma}_{n+1}}{d \bm{\varepsilon}_{n+1}}.

The second update is a large strain kinematics update based on the interface

\bm{\sigma}_{n+1},\bm{\alpha}_{n+1},\bm{\mathfrak{A}}_{n+1},\bm{\mathfrak{B}}_{n+1},u_{n+1},p_{n+1}\leftarrow\mathcal{M}\left(\bm{d}_{n+1},\bm{d}_{n},\bm{w}_{n+1},\bm{w}_{n},T_{n+1},T_{n},t_{n+1},t_{n},\bm{\sigma}_{n},\bm{\alpha}_{n},u_{n},p_{n}\right).

Here \bm{d} is the deformation rate tensor (the symmetric part of the spatial velocity gradient), \bm{w} is the vorticity (the skew part of the spatial velocity gradient), \mathbf{\mathfrak{A}} is

\mathbf{\mathfrak{A}}_{n+1} = \frac{d \bm{\sigma}_{n+1}}{d \bm{d}_{n+1}}

and \mathbf{\mathfrak{B}} is

\mathbf{\mathfrak{B}}_{n+1} = \frac{d \bm{\sigma}_{n+1}}{d \bm{w}_{n+1}}

while the other quantities are defined identically to the small strain interface.

Implementations

Parameters

None

Class description

class NEMLModel : public neml::HistoryNEMLObject

NEML material model interface definitions.

Subclassed by neml::NEMLModel_ldi, neml::NEMLModel_sd

Public Functions

NEMLModel(ParameterSet &params)
inline virtual ~NEMLModel()
virtual void save(std::string file_name, std::string model_name)

Store model to an XML file.

virtual void populate_hist(History &history) const

Setup the history.

virtual void init_hist(History &history) const

Initialize the history.

virtual void populate_state(History &history) const = 0

Setup the actual evolving state.

virtual void init_state(History &history) const = 0

Initialize the actual evolving state.

virtual void populate_static(History &history) const

Setup any static state.

virtual void init_static(History &history) const

Initialize any static state.

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

Raw data small strain 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) = 0

Raw data large strain incremental update.

virtual double alpha(double T) const = 0

Instantaneous thermal expansion coefficient as a function of temperature.

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

Elastic strain for a given stress, temperature, and history state.

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.

size_t nstate() const

Number of actual internal variables.

size_t nstatic() const

Number of static variables.

virtual std::vector<std::string> report_internal_variable_names() const

Report nice names for the internal variables.