Walker-Krempl rate sensitivity modification

Overview

This class modifies an existing Viscoplastic general flow rule to scale between a rate sensitive response (given by the base model) and a rate insensitive response based on a temperature-dependent parameter \lambda. The approach was developed by Walker and Krempl [WK1978] to modify an underlying viscoplastic model to return a rate insensitive response at lower temperatures.

Given the base model scalar inelastic rate

\dot{\bm{\varepsilon}}_{vp} = \dot{p} \mathbf{g}

the model modifies the scalar part of the flow rate to

\dot{p}_{mod} = \kappa \dot{p}

keeping the flow direction the same. The scaling function is

\kappa = 1 - \lambda + \frac{\lambda \sqrt{\frac{2}{3}} \left\Vert \dot{\boldsymbol{e}}\right\Vert }{\dot{\varepsilon}_{ref}}

where \dot{\varepsilon}_{ref} is a parameter and \left\Vert \dot{\boldsymbol{e}}\right\Vert is the total (not inelastic) deviatoric strain rate.

In the limit \lambda = 0 the model returns the rate sensitive, viscoplastic flow response from the underlying model. In the limit \lambda \rightarrow 1 the model returns an equivalent rate insensitive flow rate, asymptotically approximating an equivalent rate independent model. An interpolation function can change the value of \lambda as a function of temperature, for example to transition from a rate insensitive response at lower temperatures to a rate sensitive response at higher temperatures.

The implementation applies the same scale factor to all time derivatives in the base model’s history evolution equations, maintaining a consistent modified time integration scheme for all internal variables.

The user must determine an appropriate value of \lambda (which cannot be set exactly to \lambda = 1, as this results in numerical instability) and an appropriate reference rate \dot{\varepsilon}_{ref}. A value of \lambda = 0.99 seems to work well and the reference rate should be set to a value much slower than the actual strain rates used by the material model.

Parameters

Parameter

Object type

Description

Default

elastic

neml::LinearElasticModel

Elasticity model

No

flow

neml::ViscoPlasticFlowRule

Viscoplastic flow rule interface

No

lambda

neml::Interpolate

Scaling parameter

No

eps0

double

Reference strain rate

No

Class description

class WalkerKremplSwitchRule : public neml::GeneralFlowRule

WalkerKremplSwitchRule.

Public Functions

WalkerKremplSwitchRule(ParameterSet &params)

Parameters: elastic model and a viscoplastic flow rule.

virtual void populate_hist(History &hist) const

Setup internal state.

virtual void init_hist(History &hist) const

Initialize history.

virtual void s(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const sdot)

Stress rate.

virtual void ds_ds(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const d_sdot)

Partial of stress rate wrt stress.

virtual void ds_da(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const d_sdot)

Partial of stress rate wrt history.

virtual void ds_de(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const d_sdot)

Partial of stress rate wrt strain rate.

virtual void a(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const adot)

History rate.

virtual void da_ds(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const d_adot)

Partial of history rate wrt stress.

virtual void da_da(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const d_adot)

Partial of history rate wrt history.

virtual void da_de(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double *const d_adot)

Partial of history rate wrt strain rate.

virtual void work_rate(const double *const s, const double *const alpha, const double *const edot, double T, double Tdot, double &p_rate)

The implementation needs to define inelastic dissipation.

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

The implementation needs to define elastic strain.

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

Set a new elastic model.

void kappa(const double *const edot, double T, double &kap)

The kappa function controlling rate sensitivity (public for testing)

void dkappa(const double *const edot, double T, double *const dkap)

Derivative of kappa wrt the strain rate (public for testing)

virtual void override_guess(double *const x)

Override initial guess.

Public Static Functions

static std::string type()

String type for the object system.

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

Return default parameters.

static ParameterSet parameters()

Initialize from parameter set.