.. _failure-modular:

Modular Failure
===============

The "modular failure" model extends the multiplicative framework set out by the Johnson-Cook and Wilkins models to create a more customizable failure model. This model includes five individual terms that capture effects due to pressure, Lode angle, stress triaxiality, strain rate, and temperature. The "modular failure" model is implemented as,

.. math::
   :label: mat:eq:modularfailure_modfail

   d = \frac{1}{d_{\text{crit}}}  \int_0^{\bar{\varepsilon}^p}  w_1(p) w_2(\theta) w_3(\eta) w_4(\dot{\bar{\varepsilon}}^p) w_5(T) d\bar{\varepsilon}^{p},

where :math:`p` is the mean hydrostatic stress, :math:`\theta` is the Lode angle, :math:`\eta` is the stress triaxiality, and :math:`T` is temperature. Mean hydrostatic stress :math:`p` is defined as,

.. math::

   p = \frac13 \sigma_{kk}.

Lode angle :math:`\theta` is defined in terms of deviatoric stress invariants tensor :math:`\{J_2, J_3\}` as,

.. math::

   \cos 3\theta = \sqrt{ \frac{27}{4} \frac{ {J_3}^2 }{ {J_2}^3 } }.

Stress triaxiality :math:`\eta` is defined as the ratio of mean hydrostatic stress to von-Mises stress,

.. math::

   \eta = \frac{p}{\sigma_{vm}}

Each of the multiplicative terms :math:`w_i` can be independently specified; user-defined functions can be provided, and several presets are provided. Implemented possibilities are,

.. math::

   w_1(p) & = 1, w_1^{\text{w}}, w_1^{\text{ud}},  \\
   w_2(\theta) & = 1, w_2^{\text{w}},  \\
   w_3(\eta) & = 1, w_3^{\text{jc}}, w_3^{\text{ud}},  \\
   w_4(\dot{\bar{\varepsilon}}^p) & = 1, w_4^{\text{jc}}, w_4^{\text{ud}},  \\
   w_5(T) & = 1, w_5^{\text{jc}}, w_5^{\text{ud}} ,

where superscripts :math:`\{\text{jc}, \text{w}, \text{ud}\}` represent Johnson-Cook model terms, Wilkins model terms, or user-defined functions, respectively. Refer to :numref:`failure-jc` and :numref:`failure-wilkins` for these function definitions. Leaving a function unspecified defines the function as :math:`1`, indicating independence with respect to that variable. The failure process initiates once the integral term reaches the critical failure parameter, such that :math:`d = 1`.

User Guide
----------

.. code-block:: sierrainput

   #
   #  MODULAR_FAILURE Failure model definitions
   #
   PRESSURE MULTIPLIER         = PRESSURE_INDEPENDENT | WILKINS
                                 | USER_DEFINED (PRESSURE_INDEPENDENT)
   LODE ANGLE MULTIPLIER       = LODE_ANGLE_INDEPENDENT |
                                 WILKINS (LODE_ANGLE_INDEPENDENT)
   TRIAXIALITY MULTIPLIER      = TRIAXIALITY_INDEPENDENT | JOHNSON_COOK
                                 | USER_DEFINED (TRIAXIALITY_INDEPENDENT)
   RATE FAIL MULTIPLIER        = RATE_INDEPENDENT | JOHNSON_COOK
                                 | USER_DEFINED (RATE_INDEPENDENT)
   TEMPERATURE FAIL MULTIPLIER = TEMPERATURE_INDEPENDENT | JOHNSON_COOK
                                 | USER_DEFINED (TEMPERATURE_INDEPENDENT)
   #
   # Individual multiplier definitions
   #
   PRESSURE MULTIPLIER = WILKINS
   WILKINS ALPHA       = <real>
   WILKINS PRESSURE    = <real>
   #
   PRESSURE MULTIPLIER = USER_DEFINED
   PRESSURE MULTIPLIER FUNCTION = <string> pressure_multiplier_fun_name
   #
   LODE ANGLE MULTIPLIER = WILKINS
   WILKINS BETA           = <real>
   #
   TRIAXIALITY MULTIPLIER = JOHNSON_COOK
   JOHNSON COOK D1        = <real>
   JOHNSON COOK D2        = <real>
   JOHNSON COOK D3        = <real>
   #
   TRIAXIALITY MULTIPLIER = USER_DEFINED
   TRIAXIALITY MULTIPLIER FUNCTION = <string> triaxiality_multiplier_fun_name
   #
   RATE FAIL MULTIPLIER = JOHNSON_COOK
   JOHNSON COOK D4      = <real>
   # REFERENCE RATE should only be added if not previously defined
   REFERENCE RATE       = <real>
   #
   RATE FAIL MULTIPLIER = USER_DEFINED
   RATE FAIL MULTIPLIER FUNCTION = <string> rate_fail_multiplier_fun_name
   #
   TEMPERATURE FAIL MULTIPLIER = JOHNSON_COOK
   JOHNSON COOK D5             = <real>
   # JC Temperatures should only be defined if not previously given
   REFERENCE TEMPERATURE       = <real>
   MELTING TEMPERATURE         = <real>
   #
   TEMPERATURE FAIL MULTIPLIER          = USER_DEFINED
   TEMPERATURE FAIL MULTIPLIER FUNCTION = <string> temp_multiplier_fun_name
