Regime switching model

Overview

This model selects a stress and history update function from a input list of NEMLModel_sd objects based on a normalized activation energy. This activation energy is a function of strain rate and temperature and the form of the normalized energy comes from the work of Kocks and Mecking [KM2003].

The input to the metamodel is a list of material models and a corresponding list of activation energy cutoffs \left[g_1, g_2, \dots, g_n \right]. When the caller requests a stress and history update this metamodel first calculates the normalized activation energy

g = \frac{k T}{\mu b^3} \ln\frac{\dot{\varepsilon}_0}{\dot{\varepsilon}}.

Here k is the Boltzmann constant, T the current value of temperature, \mu the current, temperature-dependent shear modulus, b a Burgers vector, \dot{\varepsilon}_0 a reference strain rate, and \dot{\varepsilon} the current equivalent strain rate, computed as

\dot{\varepsilon} = \frac{\varepsilon_{n+1} - \varepsilon_{n}}{t_{n+1} - t_{n}}

with

\varepsilon_{n+1} = \sqrt{\frac{2}{3}\bm{\varepsilon}_{n+1}:\bm{\varepsilon}_{n+1}}

and similarly for state n.

If g<g_1 the metamodel selects the first model in the input list, if g \ge g_n the metamodel selects the last model in the input, and for values in between the model selects model i such that g_{i-1} < g \ge g_{i}.

The metamodel dispatches calls for the history evolution, algorithmic tangent, and energy likewise.

The Kocks-Mecking metamodel requires each model in the input list to use compatible history variables. That is, all the possible base model options must use the same history variables. This means the metamodel maintains only one copy of the history variables, which are common for all the base models. The history evolution is therefore consistent no matter which base model is selected for a particular stress update.

Warning

The KMRegimeModel metamodel does not check for consitency of history for the base models, beyond checking to make sure that each model uses the same number of history variables.

Parameters

Parameter

Object type

Description

Default

elastic

neml::LinearElasticModel

Temperature dependent elastic constants

No

models

std::vector<neml::NEMLModel_sd>

Vector of base models

No

gs

std::vector<double>

Corresponding vector of energies

No

kboltz

double

Boltzmann’s constant

No

b

double

Burger’s vector length

No

eps0

double

Reference strain rate

No

alpha

neml::Interpolate

Temperature dependent instantaneous CTE

0.0

Class description

class KMRegimeModel : public neml::NEMLModel_sd

Combines multiple small strain integrators based on regimes of rate-dependent behavior.

Public Functions

KMRegimeModel(ParameterSet &params)

Parameters are an elastic model, a vector of valid NEMLModel_sd objects, the transition activation energies, the Boltzmann constant in appropriate units, a Burgers vector for normalization, a reference strain rate, and the CTE.

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)

The small strain stress update.

virtual void populate_state(History &hist) const

Populate internal variables.

virtual void init_state(History &hist) const

Initialize history at time zero.

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.