General rate dependent models

Overview

This class is a generic interface for integrating rate-dependent models. It solves the nonlinear equations described by

\bm{\sigma}_{n+1} = \bm{\sigma}_{n}+\dot{\bm{\sigma}}\left(\bm{\sigma}_{n+1},\bm{\alpha}_{n+1},\dot{\bm{\varepsilon}}_{n+1},T_{n+1},\dot{T}_{n+1},t_{n+1}\right)\Delta t_{n+1}

\bm{\alpha}_{n+1} = \bm{\alpha}_{n}+\dot{\bm{\alpha}}\left(\bm{\sigma}_{n+1},\bm{\alpha}_{n+1},\dot{\bm{\varepsilon}}_{n+1},T_{n+1},\dot{T}_{n+1},t_{n+1}\right)\Delta t_{n+1}

In these equations \dot{\bm{\sigma}} is some generic stress rate law and \dot{\bm{\alpha}} is some generic history evolution law. These equations are defined by a GeneralFlowRule interface. The only current purpose of this general integration routine is to integrate viscoplastic material models, but it could be used for other purposes in the future.

The integrator uses fully implicit backward Euler integration for both the stress and the history. It returns the algorithmic tangent, computed using the implicit function theorem. The work and energy are integrated with a trapezoid rule from the final values of stress and inelastic strain.

This model maintains a vector of history variables defined by the model’s GeneralFlowRule interface.

Parameters

Parameter

Object type

Description

Default

elastic

neml::LinearElasticModel

Temperature dependent elastic constants

No

surface

neml::GeneralFlowRule

Flow rule interface

No

alpha

neml::Interpolate

Temperature dependent instantaneous CTE

0.0

tol

double

Integration tolerance

1.0e-8

miter

int

Maximum number of integration iters

50

verbose

bool

Print lots of convergence info

false

max_divide

int

Max adaptive integration divides

8

Class description

class GeneralIntegrator : public neml::SubstepModel_sd

Small strain general integrator.

Public Functions

GeneralIntegrator(ParameterSet &params)

Parameters are an elastic model, a general flow rule, the CTE, the integration tolerance, the maximum nonlinear iterations, a verbosity flag, and the maximum number of subdivisions for adaptive integration

virtual TrialState *setup(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)

Setup the trial state.

virtual bool elastic_step(const TrialState *ts, 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)

Take an elastic step.

virtual void update_internal(const double *const x, 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)

Interpret the x vector.

virtual void strain_partial(const TrialState *ts, 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_np1, const double *const s_n, const double *const h_np1, const double *const h_n, double *de)

Minus the partial derivative of the residual with respect to the strain.

virtual void work_and_energy(const TrialState *ts, 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 &u_np1, double u_n, double &p_np1, double p_n)

Do the work calculation.

virtual void populate_state(History &hist) const

Populate internal variables.

virtual void init_state(History &hist) const

Initialize the history at time zero.

virtual size_t nparams() const

Number of nonlinear equations.

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

Initialize a guess for the nonlinear iterations.

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

The residual and jacobian for the nonlinear 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, GITrialState &ts)

Initialize a trial state.

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

Set a new elastic model.

Public Static Functions

static std::string type()

Type for the object system.

static ParameterSet parameters()

Parameters for the object system.

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

Setup from a ParameterSet.