Chaboche nonassociative hardening¶
Overview¶
The Chaboche model has been developed over a long period by Chaboche and coworkers [C2008] [C1989a] [C1989b]. It is one of a few canonical high temperature constitutive models for metals that accounts for the interaction of creep and kinematic hardening.
The Chaboche model includes an extension of the combined isotropic/kinematic
hardening model originally proposed by Frederick and Armstrong [FA2007].
The hardening variables are a standard isotropic hardening variable defined by
a strain-like equivalent inelastic strain
mapped to a
stress-like isotropic hardening variable describing the expansion of the
flow surface (
).
Supplementing this associative isotropic hardening is nonassociative
kinematic hardening describing the shift in the flow surface in stress space.
This kinematic hardening is often called the Chaboche model.
It consists of a total backstress summed from several individual backstress
contributions.
The total history vector
is
![\bm{\alpha}=\left[\begin{array}{ccccc} \alpha & \boldsymbol{X}_{1} & \boldsymbol{X}_{2} & \ldots & \boldsymbol{X}_{n}\end{array}\right]](_images/math/49949faf0e814ab9c55f8efd02b21e1aad7b08aa.png)
where each
is one of
individual backstresses.
The model converts this vector of history variables into the stress-like
quantities needed by the yield surface with the map
![\mathbf{q}=\left[\begin{array}{cc} Q\left(\alpha\right) & \sum_{i=1}^{n}\mathbf{X}_{i}\end{array}\right]](_images/math/a8c2975ff3ab92e49b2d3bf4173cc01449df3d47.png)
The map for the isotropic hardening is provided by another object implementing the isotropic hardening interface.
The history evolution equation for the isotropic part of the model is associative and proportional only to the scalar inelastic strain rate

The evolution equations for each individual backstress are:

The model parameters for each backstress are then
,
,
, and
as a function of the equivalent inelastic strain.
Various options for gamma are described below.
The model maintains
history variables, where
is the number of
backstresses.
The implementation has an option to turn on or off the part of the backstress evolution proportional to the temperature rate. Note this contribution is in any event zero for isothermal loading.
For one backstress (
),
,
, and the
non-isothermal term turned off the model degenerates to the classical Frederick-Armstrong model [FA2007].
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.
Parameters¶
Parameter |
Object type |
Description |
Default |
|---|---|---|---|
|
Isotropic hardening |
No |
|
|
|
Values of constant C for each backstress |
No |
|
|
The gamma functions for each backstress |
No |
|
|
The value of A for each backstress |
No |
|
|
The value of a for each backstress |
No |
|
|
Include the nonisothermal term? |
|
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 Chaboche : public neml::NonAssociativeHardening¶
Chaboche model: generalized Frederick-Armstrong.
Public Functions
-
Chaboche(ParameterSet ¶ms)¶
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 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 Zero for the isotropic part, -A sqrt(3/2) pow(norm(X), a-1) * X for each backstress
-
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 Zero for the isotropic part Zero for each backstress if noniso = False -sqrt(2/3) * dC/dT / C * X for each backstress if noniso = True
-
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.
-
std::vector<double> c(double T) const¶
Getter for the C constants.
Public Static Functions
-
static std::string type()¶
String type for the object system.
-
static std::unique_ptr<NEMLObject> initialize(ParameterSet ¶ms)¶
Initialize from a parameter set.
-
static ParameterSet parameters()¶
Default parameters.
-
Chaboche(ParameterSet ¶ms)¶
Gamma models¶
The
parameter describes dynamic backstress recovery in the Chaboche model.
This tends to send the backstress to some saturated shift of the yield surface with
increasing inelastic strain.
The Chaboche model allows this dynamic recovery coefficient to vary with the accumulated
inelastic strain.
These objects then define the dynamic recovery parameter with the interface

Class description¶
-
class GammaModel : public neml::NEMLObject¶
Model for the gamma constant used in Chaboche hardening.
Subclassed by neml::ConstantGamma, neml::SatGamma
Public Functions
-
GammaModel(ParameterSet ¶ms)¶
-
virtual double gamma(double ep, double T) const = 0¶
Gamma as a function of equivalent inelastic strain.
-
virtual double dgamma(double ep, double T) const = 0¶
Derivative of the gamma function wrt inelastic strain.
-
GammaModel(ParameterSet ¶ms)¶
Constant gamma¶
This function returns a value of
that is independent of inelastic strain.
It still might depend on temperature. The implementation is

Parameters¶
Parameter |
Object type |
Description |
Default |
|---|---|---|---|
|
Value of gamma as a function of T |
No |
Class description¶
-
class ConstantGamma : public neml::GammaModel¶
Gamma is constant with respect to strain.
Public Functions
-
ConstantGamma(ParameterSet ¶ms)¶
Parameter is just the constant value.
-
virtual double gamma(double ep, double T) const¶
gamma = C
-
virtual double dgamma(double ep, double T) const¶
derivative of the gamma function
-
double g(double T) const¶
Getter for the constant value.
Public Static Functions
-
static std::string type()¶
String type for the object system.
-
static std::unique_ptr<NEMLObject> initialize(ParameterSet ¶ms)¶
Initialize from a parameter set.
-
static ParameterSet parameters()¶
Default parameters.
-
ConstantGamma(ParameterSet ¶ms)¶
Saturating gamma¶
This gamma function begins a given value and transitions towards a second, saturated value as a function of accumulated inelastic strain. It implements the function

Parameters¶
Parameter |
Object type |
Description |
Default |
|---|---|---|---|
|
Initial value of gamma |
No |
|
|
Final value of gamma |
No |
|
|
Controls the saturation rate |
No |
Class description¶
-
class SatGamma : public neml::GammaModel¶
Gamma evolves with a saturating Voce form.
Public Functions
-
SatGamma(ParameterSet ¶ms)¶
Parameters are the initial value of gamma, the saturated value of gamma and the saturation speed constant
-
virtual double gamma(double ep, double T) const¶
gamma = gs + (g0 - gs) * exp(-beta * ep)
-
virtual double dgamma(double ep, double T) const¶
Derivative of the gamma function.
-
double gs(double T) const¶
Parameter getter.
-
double g0(double T) const¶
Parameter getter.
-
double beta(double T) const¶
Parameter getter.
Public Static Functions
-
static std::string type()¶
String type for the object system.
-
static std::unique_ptr<NEMLObject> initialize(ParameterSet ¶ms)¶
Initialize from a parameter set.
-
static ParameterSet parameters()¶
Default parameters.
-
SatGamma(ParameterSet ¶ms)¶