ChabocheVoceRecovery: a special variant of the Chaboche model

Overview

This model describes a variant of the Chaboche kinematic hardening with Voce isotropic hardening. The only differences compared to using the standard Chaboche model with Voce isotropic hardening are:

  1. The Voce model is reparameterized as described below

  2. The Voce model includes static recovery

  3. There is a subtle difference in the definition of the static recovery on the Chaboche backstress terms.

Voce reparameterization and recovery

The Voce model for this hardening option is reparameterized so that the strength is given as

Q = -\sigma_0 - R

Warning

All of the NEML yield surfaces assume the opposite of the standard sign convention for isotropic and kinematic hardening. The hardening model is expected to return a negative value of the isotropic hardening stress and a negative value of the backstress.

\dot{R} = \sqrt{\frac{2}{3}} \theta_0 \left(1 - \frac{R}{R_{max}} \right) \dot{p} + r_1 \left| R_{min} - R \right|^{r_2} \operatorname{sign} \left( R_{min} - R \right)

where \dot{p} is the scalar plastic strain rate and the remaining undefined terms are parameters.

The first term, proportional to the scalar plastic strain rate, is identical to the standard Voce model in NEML, just reparameterized. The second term provides power law static recovery, which can reduce the value of the isotropic strength down to the threshold strength R_{min}.

Slight change to Chaboche static recovery

The standard Chaboche kinematic hardening in NEML uses a static recovery term of

\dot{\mathbf{X}}_i = - \sqrt{\frac{3}{2}} A_i \left\Vert \mathbf{X}_i \right\Vert^{a_i-1} \mathbf{X}_i

This model instead uses

\dot{\mathbf{X}}_i = - A_i \left(  \sqrt{\frac{3}{2}} \left\Vert \mathbf{X}_i \right\Vert \right)^{a_i-1} \mathbf{X}_i

The only change is the location of the \sqrt{\frac{3}{2}} term. This change makes the current model directly compatible with a 1D formulation.

Parameters

Parameter

Object type

Description

Default

s0

neml::Interpolate

Threshold stress

No

theta0

neml::Interpolate

Initial isotropic hardening slope

No

Rmax

neml::Interpolate

Maximum (saturated) isotropic hardening strength

No

Rmin

neml::Interpolate

Minimum (threshold) isotropic strength for static recovery

No

r1

neml::Interpolate

Prefactor for isotropic recovery

No

r2

neml::Interpolate

Exponent for isotropic recovery

No

c

std::vector<neml::Interpolate>

Values of constant C for each backstress

No

gmodels

std::vector<neml::GammaModel>

The gamma functions for each backstress

No

A

std::vector<neml::Interpolate>

The value of A for each backstress

No

a

std::vector<neml::Interpolate>

The value of a for each backstress

No

noniso

bool

Include the nonisothermal term?

true

The number of backstresses is set implicitly from the lengths of these vectors. The model will return an error if they have different lengths.

Class description

class ChabocheVoceRecovery : public neml::NonAssociativeHardening

Chaboche model with hard-coded, recoverable Voce isotropic hardening.

Public Functions

ChabocheVoceRecovery(ParameterSet &params)

Parameters: isotropic hardening model, vector of backstress constants C, vector of gamma functions, vector of static recovery constants A, vector static recovery constants a, flag trigger the nonisothermal terms

virtual size_t ninter() const

1 (isotropic) + 6 (backstress) = 7

virtual void populate_hist(History &h) const

Setup the internal state.

virtual void init_hist(History &h) const

Initialize the history.

virtual void q(const double *const alpha, double T, double *const qv) const

Map the isotropic variable, map the backstresses.

virtual void dq_da(const double *const alpha, double T, double *const qv) const

Derivative of map.

virtual void h(const double *const s, const double *const alpha, double T, double *const hv) const

Hardening proportional to inelastic strain rate Assume associated isotropic hardening, each backstress is -2/3 * C * X/norm(X) - sqrt(2/3) gamma(ep) * X

virtual void dh_ds(const double *const s, const double *const alpha, double T, double *const dhv) const

Derivative of h wrt stress.

virtual void dh_da(const double *const s, const double *const alpha, double T, double *const dhv) const

Derivative of h wrt history.

virtual void h_time(const double *const s, const double *const alpha, double T, double *const hv) const

Hardening proportional to time.

virtual void dh_ds_time(const double *const s, const double *const alpha, double T, double *const dhv) const

Derivative of h_time wrt stress.

virtual void dh_da_time(const double *const s, const double *const alpha, double T, double *const dhv) const

Derivative of h_time wrt history.

virtual void h_temp(const double *const s, const double *const alpha, double T, double *const hv) const

Hardening proportional to the temperature rate.

virtual void dh_ds_temp(const double *const s, const double *const alpha, double T, double *const dhv) const

Derivative of h_temp wrt stress.

virtual void dh_da_temp(const double *const s, const double *const alpha, double T, double *const dhv) const

Derivative of h_temp wrt history.

int n() const

Getter for the number of backstresses.

Public Static Functions

static std::string type()

String type for the object system.

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

Initialize from a parameter set.

static ParameterSet parameters()

Default parameters.