Perfect plasticity

Overview

This class implements rate independent perfect plasticity described by:

The elastic trial state:

\bm{\varepsilon}^{p}_{tr} = \bm{\varepsilon}^{p}_n

\bm{\sigma}_{tr} = \mathbf{\mathfrak{C}}_{n+1} :
   \left( \bm{\varepsilon}_{n+1} - \bm{\varepsilon}_{tr}^p  \right)

The plastic correction:

\bm{\sigma}_{n+1} = \mathbf{\mathfrak{C}}_{n+1} :
   \left( \bm{\varepsilon}_{n+1} - \bm{\varepsilon}_{n+1}^p \right)

\bm{\varepsilon}_{n+1}^p =
   \begin{cases}
      \bm{\varepsilon}^{p}_{tr} & f\left(\bm{\sigma}_{tr}\right)\le0\\
      \bm{\varepsilon}^{p}_{tr}+\frac{\partial f_{n+1}}{\partial\bm{\sigma}_{n+1}}\Delta\gamma_{n+1} & f\left(\bm{\sigma}_{tr}\right)>0
   \end{cases}

Solving for \Delta \gamma_{n+1} such that

f\left(\bm{\sigma}_{n+1} \right) = 0

In these equations f is a yield function, parameterized by the yield stress \sigma_0.

If the step is plastic the stress update is solved through fully-implicit backward Euler integration. The algorithmic tangent is then computed using an implicit function scheme. The work and energy are integrated with a trapezoid rule from the final values of stress and plastic strain.

This model does not maintain any history variables.

Parameters

Parameter

Object type

Description

Default

elastic

neml::LinearElasticModel

Temperature dependent elastic constants

No

surface

neml::YieldSurface

The yield surface

No

ys

neml::Interpolate

The yield stress as a function of T

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

Maximum number of adaptive subdivisions

8

Class description

class SmallStrainPerfectPlasticity : public neml::SubstepModel_sd

Small strain, associative, perfect plasticity.

Public Functions

SmallStrainPerfectPlasticity(ParameterSet &params)

Parameters: elastic model, yield surface, yield stress, CTE, integration tolerance, maximum number of iterations, verbosity flag, and the maximum number of adaptive subdivisions

virtual void populate_state(History &h) const

Populate the internal variables (nothing)

virtual void init_state(History &h) const

Initialize history (nothing to do)

virtual size_t nparams() const

Number of nonlinear equations to solve in the integration.

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

Setup an initial guess for the nonlinear solution.

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

Integration residual and jacobian equations.

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.

double ys(double T) const

Helper to return the yield stress.

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, SSPPTrialState &ts)

Setup a trial state for the solver from the input information.

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.