Yield surfaces

Overview

NEML YieldSurfaces provide the interface

f,
   \frac{\partial f}{\partial \bm{\sigma}},
   \frac{\partial f}{\partial \mathbf{q}},
   \frac{\partial^2 f}{\partial \bm{\sigma}^2},
   \frac{\partial^2 f}{\partial \mathbf{q}^2},
   \frac{\partial^2 f}{\partial \bm{\sigma} \partial \mathbf{q}},
   \frac{\partial^2 f}{\partial \mathbf{q} \partial \bm{\sigma}},
\leftarrow \mathcal{F}\left( \bm{\sigma}, \mathbf{q}\left( \bm{\alpha} \right), T \right).

A hardening interface provides the map between the “strain-like” history variables \bm{\alpha} and the “stress-like” history variables \mathbf{q}. NEML uses this interface both as a yield surface in rate independent models and as a flow surface for rate dependent plasticity.

While not required, the existing yield surfaces including kinematic hardening expect to receive a \mathbf{q} vector unrolling the isotropic hardening stress followed by a Mandel vector describing the total backstress (i.e. \mathbf{q} has length 1 + 6 = 7). For pure isotropic hardening \mathbf{q} consists of only the isotropic hardening stress (i.e. \mathbf{q} has length 1).

Warning

YieldSurfaces have no knowledge of the hardening model. They expect to recieve an unrolled vector of the appropriate length. The only check the implementation can do is to make sure that HardeningRule provides the correct length of the \mathbf{q} vector. It currently cannot check on the order of the provided “stress-like” history variables.

For convenience NEML provides a template class that automatically converts a yield surface with isotropic and kinematic hardening to a corresponding yield surface that only has isotropic hardening. Supposing ExampleSurfaceIsoKin correctly implements combined isotropic and kinematic hardening then defining a class ExampleSurfaceIso that inherits from IsoFunction with template arguments <ExampleSurfaceIsoKin, Arg A, Arg B, ...> where the arguments are the arguments required to initialize ExampleSurfaceIsoKin will automatically provide the isotropic-only version of the surface.

Implementations

Class description

class YieldSurface : public neml::NEMLObject

Base class for generic yield surfaces.

Subclassed by neml::IsoFunction< IsoKinJ2I1 >, neml::IsoFunction< IsoKinJ2 >, neml::IsoFunction< BT >, neml::IsoKinJ2, neml::IsoKinJ2I1

Public Functions

YieldSurface(ParameterSet &params)
virtual size_t nhist() const = 0

Indicates how many history variables the model expects to get.

virtual void f(const double *const s, const double *const q, double T, double &fv) const = 0

Yield function.

virtual void df_ds(const double *const s, const double *const q, double T, double *const df) const = 0

Gradient wrt stress.

virtual void df_dq(const double *const s, const double *const q, double T, double *const df) const = 0

Gradient wrt history.

virtual void df_dsds(const double *const s, const double *const q, double T, double *const ddf) const = 0

Hessian dsds.

virtual void df_dqdq(const double *const s, const double *const q, double T, double *const ddf) const = 0

Hessian dqdq.

virtual void df_dsdq(const double *const s, const double *const q, double T, double *const ddf) const = 0

Hessian dsdq.

virtual void df_dqds(const double *const s, const double *const q, double T, double *const ddf) const = 0

Hessian dqds.