Skip to content

PorousViscoplasticity

jhure edited this page May 17, 2020 · 15 revisions

Extension of the StandardElastoViscoPlasticity brick to account for porous materials

\newcommand{\tsigma}{\underline{\sigma}} \newcommand{\paren}[1]{{\left(#1\right)}} \newcommand{\trace}[1]{{\mathrm{tr}\paren{#1}}} \newcommand{\tenseur}[1]{\underline{#1}} \newcommand{\tenseurq}[1]{\underline{\underline{\mathbf{#1}}}} \newcommand{\tepsilonto}{\tenseur{\varepsilon}^{\mathrm{to}}} \newcommand{\tdepsilonto}{\tenseur{\dot{\varepsilon}}^{\mathrm{to}}} \newcommand{\tepsilonel}{\tenseur{\varepsilon}^{\mathrm{el}}} \newcommand{\tdepsilonel}{\tenseur{\dot{\varepsilon}}^{\mathrm{el}}} \newcommand{\tepsilonvis}{\tenseur{\varepsilon}^{\mathrm{vis}}} \newcommand{\tdepsilonvis}{\tenseur{\dot{\varepsilon}}^{\mathrm{vis}}} \newcommand{\tepsilonp}{\tenseur{\varepsilon}^{\mathrm{p}}} \newcommand{\tdepsilonp}{\tenseur{\dot{\varepsilon}}^{\mathrm{p}}} \newcommand{\sstar}{\sigma_{\star}} \newcommand{\pr}{\mathrm{\sigma_{m}}} \newcommand{\sigmaeq}{\sigma_{\mathrm{eq}}} \newcommand{\bts}[1]{{\left.#1\right|{t}}} \newcommand{\mts}[1]{{\left.#1\right|{t+\theta,\Delta,t}}} \newcommand{\ets}[1]{{\left.#1\right|_{t+\Delta,t}}} \newcommand{\Frac}[2]{{{\displaystyle \frac{\displaystyle #1}{\displaystyle #2}}}}

General framework

Constitutive equations for porous metallic equations are used to perform ductile fracture simulations, adding the porosity as an internal state variable. Some implementations of these models are available in MFront (Gurson, GTN, ...). This page describes how one may extend the StandardElastoViscoPlasticity brick to this class of behaviours, allowing a declarative syntax similar as:

@Brick "StandardElastoViscoPlasticity" {
   stress_potential : "Hooke" {
      young_modulus : 200e9,
      poisson_ratio : 0.3
   },
   inelastic_flow : "Plastic" {
      criterion : "GursonTvergaardNeedleman" {
         q1 : 1.5,
         q2 : 1.0,
         q3 : 2.2,
         fc : 0.01,
         fr : 0.1
      },
      isotropic_hardening : "Linear" {
         R0 : 150e6
      }
   },
   porosity_evolution : {
      nucleation_model : "Chu_Needleman" {
         An : 0.01,
         pn : 0.1,
         sn : 0.1
      },
      growth_model : "StandardPlasticModel"
};

Note For backward compatibility, effect of the porosity on plastic flows will not be taken into account if no porosity_evolution is declared.

A porous plastic model is generally defined by a stress criterion (\sstar) which depends explicitly on the stress and the porosity: [ \sstar = \phi(\tsigma,f) ]

Concerning the flow rule, two main classes of models are classically found in the literature.

In the first class of model, the porosity does not change the expression of the flow rule.

$$ \tdepsilonp = \dot{p} \frac{\partial \sstar}{\partial \tsigma} $$

This class of models encompasses:

  • the work of Ponte-Castaneda (see @castaneda_effective_1991), which is the theorical basis of several viscoplastic behaviours used in uranium dioxyde fuels [@monerie_overall_2006;@salvo_experimental_2015].
  • the work of Rousselier.

In the second class, the flow rule is affected by a correction factor (1-f) (see @mealor_2004):

$$ \tdepsilonp = (1 - f), \dot{p}, \frac{\partial \sstar}{\partial \tsigma} $$

where $f$ is the porosity, $p$ the equivalent plastic strain in the matrix.

Note

The term $(1-f)$ comes from the definition of $p$ as the equivalent plastic strain in the matrix through the modelling of hardening: $$ \displaystyle{\tsigma:\tdepsilonp = \dot{\lambda} \tsigma, \colon,\frac{\partial \sstar}{\partial \tsigma}} = \dot{\lambda} \sstar = (1 - f)R(p) \dot{p} \Rightarrow \dot{\lambda} = (1 - f) \dot{p} $$

The evolution of porosity is composed of two terms: one due to plastic flow and another one due to nucleation $A_n^i dp$:

$$\dot{f} = (1 - f)\trace{\tdepsilonp} + \sum_i A_n^i \dot{p}$$

The first term describes the incompressibility of the matrix under the assumption that the change of volume associated with the elastic part of the strain is negligible.

Implicit system discrétisation

Assuming a single porous stress criterion, the constitutive equations lead to the following system to be solved for an elastoplastic evolution:

$$ \begin{aligned} \tdepsilonel + \tdepsilonp - \tdepsilonto &= 0 \\ \sstar - R(p) &= 0 \\ \dot{f} - (1 - f)\trace{\tdepsilonp} - \sum_i A_n^i \dot{p} &=0 \end{aligned} $$

A semi-implicit method is used to solve these equations according to the variables ${\Delta \epsilon_{el}, \Delta p, \Delta f }$:

$$ \begin{aligned} \mathcal{R}{\Delta \tepsilonel} = \Delta \tepsilonel + (1 - f \big|{t+\theta \Delta t}) \Delta p , \frac{\partial \sstar}{\partial \tsigma}\big|{t+\theta \Delta t} - \Delta \underline{\epsilon}{to} &= 0 \ \mathcal{R}{\Delta p} = \sstar - R(p\big|{t+\theta \Delta t}) &= 0 \ \mathcal{R}{\Delta f} = \Delta f - (1 - f\big|{t+\theta \Delta t})^2 \Delta p , \trace{\frac{\partial \sstar}{\partial \tsigma}\big|{t+\theta \Delta t}} - \sum_i A_n^i\big|{t+\theta \Delta t} \Delta p &=0 \end{aligned} $$

Solving this system using a Newton-Raphson algorithm requires computing the Jacobian matrix:

$$ \left[ \begin{array}{lll} \displaystyle{ \frac{\partial \mathcal{R}{\Delta \tepsilonel}}{\partial \Delta \tepsilonel}} & \displaystyle{ \frac{\partial \mathcal{R}{\Delta \tepsilonel}}{\partial \Delta f}} & \displaystyle{ \frac{\partial \mathcal{R}{\Delta \tepsilonel}}{\partial \Delta p} } \ \displaystyle{ \frac{\partial \mathcal{R}{\Delta f}}{\partial \Delta \tepsilonel} } & \displaystyle{ \frac{\partial \mathcal{R}{\Delta f}}{\partial \Delta f} } & \displaystyle{ \frac{\partial \mathcal{R}{\Delta f}}{\partial \Delta p}} \ \displaystyle{ \frac{\partial \mathcal{R}{\Delta p}}{\partial \Delta \tepsilonel}} & \displaystyle{ \frac{\partial \mathcal{R}{\Delta p}}{\partial \Delta f} } & \displaystyle{ \frac{\partial \mathcal{R}_{\Delta p}}{\partial \Delta p}} \ \end{array} \right] $$

where the different terms can be written as [@mealor_2004]:

$$ \begin{aligned} \frac{\partial \mathcal{R}{\Delta \tepsilonel}}{\partial \Delta \tepsilonel} &= \underline{\bf{1}} + \theta \Delta p ; \bigg(1 - f \big|{t+\theta \Delta t}\bigg) \frac{\partial^2 \sstar}{\partial \tsigma^2}|{t+\theta \Delta t} : \underline{\bf{D}}|{t+\theta \Delta t} \ \frac{\partial \mathcal{R}{\Delta \tepsilonel}}{\partial \Delta p} &= \bigg(1 - f \big|{t+\theta \Delta t}\bigg) \frac{\partial \sstar}{\partial \tsigma}|{t+\theta \Delta t} \ \frac{\partial \mathcal{R}{\Delta \tepsilonel}}{\partial \Delta f} &= \theta \Delta p ; \bigg( \bigg(1 - f \big|{t+\theta \Delta t}\bigg) \frac{\partial^2 \sstar}{\partial \tsigma \partial f} |{t+\theta \Delta t} - \frac{\partial \sstar}{\partial \tsigma}|{t+\theta \Delta t} \bigg) \ \frac{\partial \mathcal{R}{\Delta p}}{\partial \Delta \tepsilonel} &= \theta ; \frac{\partial \sstar}{\partial \tsigma}|{t+\theta \Delta t} : \underline{\bf{D}}|{t+\theta \Delta t} \ \frac{\partial \mathcal{R}{\Delta p}}{\partial \Delta p} &= - \theta ; \frac{d R(p)}{d p} \ \frac{\partial \mathcal{R}{\Delta p}}{\partial \Delta f} &= \theta ; \frac{\partial \sstar}{\partial f} |{t+\theta \Delta t} \ \frac{\partial \mathcal{R}{\Delta f}}{\partial \Delta \tepsilonel} &= - \theta ; \Delta p ; \bigg(1 - f|{t+\theta \Delta t}\bigg)^2 ; \bigg(\frac{\partial^2 \sstar}{\partial \tsigma^2} |{t+\theta \Delta t} : \underline{\bf{D}}|{t+\theta \Delta t} \bigg) : \underline{1} - \theta \Delta p \sum_i \frac{\partial A_n^i}{\partial \tsigma} |{t+\theta \Delta t} : \underline{\bf{D}}|{t+\theta \Delta t} \ \frac{\partial \mathcal{R}{\Delta f}}{\partial \Delta p} &= - \bigg(1 - f|{t+\theta \Delta t}\bigg)^2 ; \frac{\partial \sstar}{\partial \tsigma}|{t+\theta \Delta t} : \underline{1} - \theta \Delta p \sum_i \frac{\partial A_n^i}{\partial p} |{t+\theta \Delta t} - \sum_i A_n^i |{t+\theta \Delta t} \ \frac{\partial \mathcal{R}{\Delta f}}{\partial \Delta f} &= 1 - \theta ; \Delta p ; \bigg(1 - f|{t+\theta \Delta t}\bigg) \bigg(-2 ; \frac{\partial \sstar}{\partial \tsigma} + \bigg(1 - f|{t+\theta \Delta t}\bigg) ; \frac{\partial^2 \sstar}{\partial \tsigma \partial f} \bigg) \underline{I} - \theta \Delta p \sum_i \frac{\partial A_n^i}{\partial f} |{t+\theta \Delta t} \ \end{aligned} $$

Therefore, the definition of a porous model requires to give the following expressions:

$$\left{\sstar, \frac{\partial \sstar}{\partial \tsigma}, \frac{\partial \sstar}{\partial \partial f}, \frac{\partial^2 \sstar}{\partial \tsigma^2}, \frac{\partial^2 \sstar}{\partial \tsigma \partial f} \right} $$

as well as the following expressions for each nucleation mechanism:

$$\left{A_n^i, \frac{\partial A_n^i}{\partial \tsigma}, \frac{\partial A_n^i}{\partial p} , \frac{\partial A_n^i}{\partial f} \right} $$ In the following, these expressions are detailed for the stress criteria and nucleation formulas currently implemented into the brick.

Stress criteria

Different stress criteria implemented in the brick are described below.

  • Green [@fritzen_computational_2013]

$$\sstar = \sqrt{\sigma_{vM}^{2} + 9 f \sigma_m^2} $$

where $\displaystyle{\sigma_{vM} = \sqrt{\frac{3}{2} \underline{s} : \underline{s}}}$ is the von Mises equivalent stress, and $\displaystyle{\sigma_m = \frac{1}{3}\trace{\tsigma}}$ the mean stress. The first and second order derivatives are:

$$ \begin{aligned} \frac{\partial \sstar}{\partial \tsigma} &= \frac{3 \underline{s} + 6 f \sigma_m \underline{1}}{2\sigma^{\star}} \\ \frac{\partial \sstar}{\partial f} &= \frac{9 \sigma_m^2}{2\sigma^{\star}} \\ \frac{\partial^2 \sstar}{\partial \tsigma^2} &= \frac{1}{\sstar} ; \bigg(\underline{M} + f ; \underline{1} \otimes \underline{1}) - \frac{\partial \sstar}{\partial \tsigma} \otimes \frac{\partial \sstar}{\partial \tsigma} \bigg)\\ \frac{\partial^2 \sstar}{\partial \tsigma \partial f} &= \frac{1}{\sstar} ; ; \bigg( 3 \sigma_m \underline{1} - \frac{\partial \sstar}{\partial \tsigma} \frac{\partial \sstar}{\partial f}\bigg)\\ \end{aligned} $$

Note This model is a particular case of [@fritzen_computational_2013] and is implemented mainly as a simple working example of a porous stress criterion.

  • GursonTvergaardNeedleman [@tvergaardneedleman1984]

$$ S = \paren{\frac{\sigma_{vM}}{\sstar} }^2 + 2 q_1 f_{\star} \cosh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar} }} - 1 - q_3 f_{\star}^2 = 0$$

which defines implicitly $\sigma^{\star}$, where $\sigma_{vM}$ is the von Mises equivalent stress, and $\sigma_m$ the mean stress. $f_{\star}$ is defined such that :

$$ f_{\star} = \left{ \begin{array}{ll} \delta f & \mbox{if } f < f_c \\ f_c + \delta (f - f_c) & \mbox{otherwise} \end{array} \right. $$

and :

$$ \delta = \left{ \begin{array}{ll} 1 & \mbox{si } f < f_c \\ \frac{\frac{1}{q_1} - f_c }{f_r - f_c} & \mbox{otherwise} \end{array} \right. $$

The parameters of the model are:

$$\left{q_1,q_2,q_3,f_c,f_r \right} $$

For $\left{q_1,q_2,q_3,f_c,f_r \right} = \left{1,1,1,+\infty,-\right}$, Gurson-Tvergaard-Needleman model reduces to the Gurson model [@gurson1977] which has no free parameter.

As $\sstar$ is defined implicitly through $S(\tsigma,\sstar,f) =0$, the first and second order derivatives of the function S are required to compute the first and second order derivatives of $\sstar$:

$$ \begin{aligned} \frac{\partial S}{\partial \sstar} &= -2 \frac{\sigma_{vM}^2}{\sstar^3} - \frac{3 q_1 q_2 f_{\star} \sigma_m}{\sstar^2}\sinh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \\ \frac{\partial S}{\partial {\tsigma}} &= 3 \frac{\underline{s}}{\sstar^2} + \frac{q_1 q_2 f_{\star}}{\sstar}\sinh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \underline{1} \\ \frac{\partial S}{\partial f} &= 2 q_1 \delta \cosh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} - 2 q_3 \delta f_{\star}\\ \frac{\partial^2 S}{\partial \tsigma^2} &= \frac{2}{\sstar^2} : \underline{\bf{M}} + \frac{ q_1 : q_2^2 : f_{\star}}{2 \sstar^2} \cosh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \underline{1} \otimes \underline{1}\\ \frac{\partial^2 S}{\partial \tsigma \partial \sstar} &= - \frac{6 \underline{s}}{\sstar^3} - \frac{ q_1 : q_2 : f_{\star}}{\sstar^2} \sinh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \underline{1} - \frac{3 : q_1 : q_2^2 : f_{\star} : \sigma_m}{2 : \sstar^3} \cosh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \underline{1}\\ \frac{\partial^2 S}{\partial \tsigma \partial f} &= \frac{q_1 : q_2 : \delta}{\sstar} \sinh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \underline{1} \\ \frac{\partial^2 S}{\partial \sstar \partial f} &= - \frac{3 : q_1 : q_2 : \delta : \sigma_m}{\sstar^2} \sinh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \\ \frac{\partial^2 S}{\partial \sstar^2} &= 6 \frac{\sigma_{vM}^2}{\sstar^4} + \frac{6 q_1 q_2 f_{\star} \sigma_m}{\sstar^3}\sinh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} + \frac{9 q_1 q_2^2 f_{\star} \sigma_m^2}{2\sstar^4}\cosh{\paren{\frac{3}{2} q_2 \frac{\sigma_m}{\sstar}}} \end{aligned} $$

The first and second order derivatives of $\sstar$ are:

$$\frac{\partial \sstar}{\partial \tsigma} = -\paren{\frac{\partial S}{\partial \sstar} }^{-1} \frac{\partial S}{\partial {\tsigma}}$$

$$\frac{\partial \sstar}{\partial f} = -\paren{\frac{\partial S}{\partial \sstar} }^{-1} \frac{\partial S}{\partial {f}}$$

$$ \frac{\partial^2 \sstar}{\partial \tsigma^2} = - \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-1} \bigg(\frac{\partial^2 S}{\partial \tsigma^2} + \frac{\partial^2 S}{\partial \tsigma \partial \sstar} \otimes \frac{\partial \sstar}{\partial \tsigma} \bigg)

  • \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-2} \bigg(\frac{\partial S}{\partial \tsigma} \bigg) \otimes \bigg(\frac{\partial^2 S}{\partial \tsigma \partial \sstar} + \frac{\partial^2 S}{ \partial \sstar^2} \frac{\partial \sstar}{\partial \tsigma} \bigg) $$

$$\frac{\partial^2 \sstar}{\partial \tsigma \partial f} = - \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-1} \bigg(\frac{\partial^2 S}{\partial \tsigma \partial f} + \frac{\partial^2 S}{\partial f \partial \sstar} \frac{\partial \sstar}{\partial \tsigma} \bigg) + \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-2} \bigg(\frac{\partial^2 S}{\partial \tsigma \partial \sstar} + \frac{\partial^2 S}{ \partial \sstar^2} \frac{\partial \sstar}{\partial \tsigma} \bigg) \bigg(\frac{\partial S}{\partial f} \bigg) $$

  • RousselierTanguyBesson [@tanguybesson2002]

$$ S = \frac{\sigma_{vM}}{(1- f )\sstar} + \frac{2}{3} f D_R \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }} - 1 = 0$$

The effective stress $\sstar$ which is solution of this equation is:

$$\sstar = \frac{q_R \sigma_{vM}}{(1 - f) \paren{q_R - \frac{2}{3T}L\paren{q_R D_R f T \exp{\paren{\frac{3}{2} q_R T}}}}} $$

where $L$ is the Lambert function, and $T = \sigma_m / \sigma_{vM}$ the stress triaxiality. The parameters of the model are:

$$\left{q_R,D_R \right} $$

The first and second order derivatives of $\sstar$ are computed using $S(\tsigma,\sstar,f) =0$, which requires the first and second order derivatives of the function S:

$$ \begin{aligned} \frac{\partial S}{\partial \sstar} &= -\frac{\sigma_{vM}}{(1- f )\sstar^2} - f D_R q_R \frac{\sigma_{m}}{(1- f )\sstar^2} \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }}\\ \frac{\partial S}{\partial {\tsigma}} &= \frac{3}{2}\frac{\underline{s}}{(1- f ) \sigma_{vM} \sstar} + \frac{f D_R q_R}{3} \frac{\underline{1}}{(1- f )\sstar} \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }} \\ \frac{\partial S}{\partial f} &= \frac{\sigma_{vM}}{\sstar (1-f)^2} + \frac{2}{3} D_R \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }} \paren{1 + \frac{3 f q_R \sigma_m}{2 \sstar (1-f)^2} } \\ \frac{\partial^2 S}{\partial \tsigma^2} &= \frac{3}{2(1-f)\sstar \sigma_{vM} } \paren{ \frac{2}{3} \underline{\bf{M}} - \frac{3}{2} \frac{\underline{s}}{\sigma_{vM}} \otimes \frac{\underline{s}}{\sigma_{vM}} } + \frac{f D_R q_R^2 }{6 (1-f)^2 \sstar^2} \underline{1} \otimes \underline{1} \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }}\\ \frac{\partial^2 S}{\partial \tsigma \partial \sstar } &= - \frac{3 \underline{s}}{2 (1-f) \sigma_{vM} \sstar^2 } - \paren{1 + \frac{3 q_R \sigma_m}{2 (1- f) \sstar}} \frac{f D_R q_R}{3 (1-f) \sstar^2} \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }} \underline{1}\\ \frac{\partial^2 S}{\partial \tsigma \partial f} &= \frac{3 \underline{s}}{2 (1-f)^2 \sigma_{vM} \sstar } + \paren{1 + \frac{3 q_R \sigma_m}{2 (1 - f) \sstar} + \frac{1-f}{f}} \frac{f D_R q_R}{3 (1-f)^2 \sstar} \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }} \underline{1} \\ \frac{\partial^2 S}{\partial \sstar \partial f} &= -\frac{\sigma_{vM} }{(1-f)^2 \sstar^2 } - \paren{1 + \frac{3 q_R \sigma_m}{2 (1 - f) \sstar} + \frac{1-f}{f}} \frac{f D_R q_R \sigma_m}{ (1-f)^2 \sstar^2} \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }} \\ \frac{\partial^2 S}{\partial \sstar^2} &= \frac{2\sigma_{vM}}{(1-f)\sstar^3} + \paren{1 + \frac{3 q_R \sigma_m}{4 (1-f) \sstar}} \frac{2fD_Rq_R \sigma_m}{(1-f)\sstar^3} \exp{\paren{\frac{3}{2} q_R \frac{\sigma_m}{(1 - f )\sstar} }} \end{aligned} $$

The first and second order derivatives of $\sstar$ are:

$$\frac{\partial \sstar}{\partial \tsigma} = -\paren{\frac{\partial S}{\partial \sstar} }^{-1} \frac{\partial S}{\partial {\tsigma}}$$

$$\frac{\partial \sstar}{\partial f} = -\paren{\frac{\partial S}{\partial \sstar} }^{-1} \frac{\partial S}{\partial {f}}$$

$$ \frac{\partial^2 \sstar}{\partial \tsigma^2} = - \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-1} \bigg(\frac{\partial^2 S}{\partial \tsigma^2} + \frac{\partial^2 S}{\partial \tsigma \partial \sstar} \otimes \frac{\partial \sstar}{\partial \tsigma} \bigg)

  • \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-2} \bigg(\frac{\partial S}{\partial \tsigma} \bigg) \otimes \bigg(\frac{\partial^2 S}{\partial \tsigma \partial \sstar} + \frac{\partial^2 S}{ \partial \sstar^2} \frac{\partial \sstar}{\partial \tsigma} \bigg) $$

$$\frac{\partial^2 \sstar}{\partial \tsigma \partial f} = - \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-1} \bigg(\frac{\partial^2 S}{\partial \tsigma \partial f} + \frac{\partial^2 S}{\partial f \partial \sstar} \frac{\partial \sstar}{\partial \tsigma} \bigg) + \bigg(\frac{\partial S}{\partial \sstar} \bigg)^{-2} \bigg(\frac{\partial^2 S}{\partial \tsigma \partial \sstar} + \frac{\partial^2 S}{ \partial \sstar^2} \frac{\partial \sstar}{\partial \tsigma} \bigg) \bigg(\frac{\partial S}{\partial f} \bigg) $$

  • GenericThomason

$$ \sstar = A \sigma_I$$

where $\sigma_I$ is the maximal principal stress. The parameter A is a material parameter that can be linked to the porosity through an auxiliary state variable.

The first and second order derivatives of $\sstar$ are [@bertram2012]:

$$ \begin{aligned} \frac{\partial \sstar}{\partial \tsigma} &= A e_I \otimes e_I\\ \frac{\partial \sstar}{\partial f} &= 0\\ \frac{\partial^2 \sstar}{\partial \tsigma^2} &= A \paren{ \paren{ \sigma_{I} - \sigma_{II}}^{-1} e_I \otimes e_{II} \otimes e_I \otimes e_{II} + e_{II} \otimes e_{I} \otimes e_{II} \otimes e_{I}} \\ &+ A \paren{ \paren{ \sigma_{I} - \sigma_{III}}^{-1} e_I \otimes e_{III} \otimes e_I \otimes e_{III} + e_{III} \otimes e_{I} \otimes e_{III} \otimes e_{I}}\\ \frac{\partial^2 \sstar}{\partial \tsigma \partial f} &= \underline{0} \\ \end{aligned} $$

where ${e_I, e_{II}, e_{III} }$ is the eigenvectors associated with the eigenvalues of the stress tensor ${ \sigma_I, \sigma_{II}, \sigma_{III} }$.

The Thomason model corresponds to:

$$A^{-1} = (1 - \chi^2)\left[0.1\left(\frac{\chi^{-1}-1}{W}\right)^2 + 1.2\sqrt{\chi^{-1}} \right]\ \ \ \ \ \mathrm{with}\ \ \ \ \ \chi = \left(\frac{6 f \lambda}{\pi W}\right)^{1/3} $$

The evolutions of the void aspect ratio $W$ and cell aspect ratio $\lambda$ are define by:

$$\dot{W} = \frac{9 \lambda}{4 W} \left(1 - \frac{2}{\pi \chi^2} \right) \dot{\varepsilon}^p_{eq} $$

$$\dot{\lambda} = \lambda \dot{\varepsilon}_{II} $$

Nucleation terms

Different nucleation terms are available and are described below. Multiple nucleation terms can be used simultaneously.

  • Chu-Needleman strain based [@chuneedleman1980]

$$A_n = \frac{f_N}{s_N \sqrt{2\pi}} \exp{\paren{-\frac{1}{2} \paren{\frac{p - \epsilon_N}{s_N} }^2 } }$$

where ${f_N,s_N,\epsilon_N}$ are material parameters, and $p$ is thematrix equivalent plastic strain.

$$ \begin{aligned} \frac{\partial A_n}{\partial \tsigma} &= \underline{0} \\ \frac{\partial A_n}{\partial p} &= -\frac{f_N}{s_N^2 \sqrt{2\pi}} \paren{\frac{p - \epsilon_N}{s_N} } \exp{\paren{-\frac{1}{2} \paren{\frac{p - \epsilon_N}{s_N} }^2 } } \\ \frac{\partial A_n}{\partial f} &= 0 \\ \end{aligned} $$

  • Chu-Needleman stress based [@chuneedleman1980]

$$A_n = \frac{f_N}{s_N \sqrt{2\pi}} \exp{\paren{-\frac{1}{2} \paren{\frac{\sigma_I - \sigma_N}{s_N} }^2 } }$$

where ${f_N,s_N,\sigma_N}$ are material parameters, and $\sigma_I$ is the maximal positive principal stress.

$$\frac{\partial A_n}{\partial \tsigma} = -\frac{f_N}{s_N^2 \sqrt{2\pi}} \paren{\frac{\sigma_I - \sigma_N}{s_N} } \exp{\paren{-\frac{1}{2} \paren{\frac{\sigma_I - \sigma_N}{s_N} }^2 } } e_I \otimes e_I $$

$$\frac{\partial A_n}{\partial p} = 0 $$

$$\frac{\partial A_n}{\partial f} = 0 $$

  • Power-Law strain based

$$A_n = f_N \left<\frac{p}{\epsilon_N} - 1 \right>^m \ \ \ \ \ \mathrm{if}\ \ p \leq p_{max} \ \ \mathrm{and}\ \ \int A_n dp \leq f_{\mathrm{nuc}}^{max} $$

where ${f_N,m,\epsilon_N,p_{max},f_{\mathrm{nuc}}^{max} }$ are material parameters, and $p$ is the matrix equivalent plastic strain.

$$ \begin{aligned} \frac{\partial A_n}{\partial \tsigma} &= \underline{0} \\ \frac{\partial A_n}{\partial p} &= \frac{m f_N}{\epsilon_N} \left<\frac{p}{\epsilon_N} - 1 \right>^{m-1} \\ \frac{\partial A_n}{\partial f} &= 0 \\ \end{aligned} $$

  • Power-Law stress based

$$A_n = f_N \left<\frac{\sigma_I}{\sigma_N} - 1 \right>^m \ \ \ \ \ \mathrm{if}\ \ \sigma_I \leq \sigma_I^{max} \ \ \mathrm{and}\ \ \int A_n dp \leq f_{\mathrm{nuc}}^{max} $$

where ${f_N,m,\sigma_N,\sigma_I^{max},f_{\mathrm{nuc}}^{max}}$ are material parameters, and $\sigma_I$ is the maximal positive principal stress.

$$\frac{\partial A_n}{\partial \tsigma} = \frac{m f_N}{\sigma_N} \left<\frac{\sigma_I}{\sigma_N} - 1 \right>^{m-1} e_I \otimes e_I $$

$$\frac{\partial A_n}{\partial p} = 0 $$

$$\frac{\partial A_n}{\partial f} = 0 $$

\def\doubleunderline#1{\underline{\underline{#1}}}

Improving the robustness of the numerical integration

Newton-Raphson algorithm may fail finding the solution of the non-linear system of equations, especially when the time step leads to strong increase of the porosity. In order to improve the robustness of the numerical integration, two strategies are used:

  • In case of non convergence, the system of equations is solved first assuming a fixed porosity, and upon convergence a second time allowing the porosity to vary.

  • If the previous strategy does not lead to convergence, the system of equations is solved first assuming a fixed porosity, and the equation related to porosity is integrated explicitly.

Material failure

Design choices

Enrichment of the StressCriterion and InelasticFlow interfaces

The InelasticFlow interface is used by the StandardElastoViscoPlasticity brick to handle inelastic flows. It uses the StressCriterion interface to describe it stress criterion and, for non-associated flows, its flow criterion.

For the brick to properly treat inelastic flows coupled with porosity, a new method called isCoupledWithPorosityEvolution has been added to those interface. This method returns a boolean value and does take any argument.

For inelastic flows, the default implementation of the isCoupledWithPorosityEvolution, declared in the InelasticFlowBase class, returns true if its stress criterion or if its flow criterion (if any) declares to be coupled with the porosity evolution.

The isCoupledWithPorosityEvolution of a stress criterion must return true if and only if the expression of the stress criterion explicitly depends on the porosity.

Note

Implicitly, the brick expects that a stress criterion coupled with porosity is not deviatoric, i.e., that this stress criterion contributes to the porosity growth. The isNormalDeviatoric method of such a stress criterion must return true. This is checked in the InelasticFlowBase class.

As discussed in the introduction, a stress criterion can lead to a correction of the flow rule by a factor (1-f). The class StressCriterion now has a method called getPorosityEffectOnFlowRule which return one of the two following values:

  • NO_POROSITY_EFFECT_ON_FLOW_RULE
  • STANDARD_POROSITY_CORRECTION_ON_FLOW_RULE

Evolution of the porosity

Conditions for the brick to contribute to the porosity evolution

The evolution of the porosity is taken into account:

  • if a nucleation model is declared.
  • if one stress inelastic flow declares being coupled with the porosity evolution, i.e. that its stress criterion or its flow criterion is coupled with the porosity evolution.
  • if the porosity_evolution section is explicitly declared, even if empty.

For example, this declaration will automatically lead to a porosity growth:

@Brick StandardElastoViscoPlasticity{
  stress_potential : "Hooke" {
    young_modulus : 150.e3,
    poisson_ratio : 0.3
  },
  inelastic_flow : "Plastic" {
    criterion : "Gurson1975" {},
    isotropic_hardening : "Linear" {R0 : "0"}
  }
};

Note

It is important to note that, by default (if none of the three above conditions are met), no contribution to the porosity growth will be taken into account, even if the flow direction has an hydrostatic component. For example, the following declaration will not lead to any porosity growth:

@Brick StandardElastoViscoPlasticity{
  stress_potential : "Hooke" {
    young_modulus : 150.e3,
    poisson_ratio : 0.3
  },
  inelastic_flow : "Plastic" {
    criterion : "MohrCoulomb" {
      c : 3.e1,      // cohesion
      phi : 0.523598775598299,    // friction angle angle
      lodeT : 0.506145483078356,  // transition angle (Abbo and Sloan)
      a : 1e1       // tension cuff-off parameter
    },
    isotropic_hardening : "Linear" {R0 : "0"}
  }
};

However, this declaration will lead to a porosity growth:

@Brick StandardElastoViscoPlasticity{
  stress_potential : "Hooke" {
    young_modulus : 150.e3,
    poisson_ratio : 0.3
  },
  inelastic_flow : "Plastic" {
    criterion : "MohrCoulomb" {
      c : 3.e1,      // cohesion
      phi : 0.523598775598299,    // friction angle angle
      lodeT : 0.506145483078356,  // transition angle (Abbo and Sloan)
      a : 1e1       // tension cuff-off parameter
    },
    isotropic_hardening : "Linear" {R0 : "0"}
  }
  porosity_evolution: {}
};

Declaration of the porosity as a state variable (if required)

If the evolution of the porosity is taken into account, a state variable called f with the glossary name Porosity is automatically declared if no state variable with this glossary name has been declared. In the latter case, this variable is used (and updated) by the brick.

This choice allows the user to easily add new nucleation model or to add a new inelastic flow coupled with porosity by adding the appropriate state variables and adding the associated implicit equations in the @Integrator code block.

For example, as follows:

@ExternalStateVariable real ss;
ss.setGlossaryName("SolidSwelling");

@Brick StandardElastoViscoPlasticity{
  stress_potential : "Hooke" {
    young_modulus : 150.e3,
    poisson_ratio : 0.3
  },
  inelastic_flow : "Plastic" {
    criterion : "Gurson1975" {},
    isotropic_hardening : "Linear" {R0 : "0"}
  }
};

@Integrator{
  // adding the contribution of the solid swelling
  // the porosity increase
  ff -= ;
}

Effect of the porosity on the flow rule

By default, the value returned by the getPorosityEffectOnFlowRule method of the stress criterion is used to decipher if the porosity affects the flow rule.

However, this may be changed by specifying the porosity_effect_on_flow_rule option in the definition of the inelastic flow. Valid strings are StandardPorosityEffect (or equivalently " standard_porosity_effect) or None (or equivalently none or false).

Saving individual contributions to the porosity evolutions in dedicated auxiliary state variables

The porosity evolves either due to nucleation or growth. For post-processing reasons, it may be worth to distinguish those contributions in dedicated auxiliary state variables. However, for performance reasons (mostly because additional auxiliary state variables implied a memory overhead), this shall not be the default choice.

The brick allows the user to specify if those additional variables shall be defined for all mechanisms in the porosition_evolution section as follows:

  porosity_evolution: {
    save_individual_porosity_increase: true
  }

However, this behaviour can be overloaded in every inelastic flow sections and every nucleation models by setting the save_porosity_increase boolean variable.

For example, one may use the following declaration:

  inelastic_flow : "Plasticity" {
    criterion : "Gurson1975",
    isotropic_hardening : "Voce" {R0 : 200, Rinf : 100, b : 20},
    save_porosity_increase : true
  }

Note

Inelastic flows which declare that the flow is deviatoric discard those options and never declare an auxiliary state variable associated with the porosity growth.

Appendix

Explicit treatment of the porosity evolution

First case

[ \Delta,f = \paren{1-\bts{f}-\theta_{f},\Delta,f},\Delta,p,\trace{n} ]

[ \Delta,f=\Frac{\paren{1-\bts{f}},\Delta,p,\trace{n}}{1+\theta_{f}\Delta,p\trace{n}} ]

Second case

The porosity increment (\Delta,f) satisfies the following second order equation:

[ \begin{aligned} \Delta f &= \paren{1-\bts{f}-\theta_{f},\Delta f}^{2},\Delta p,\trace{n}\ &= \paren{1-\bts{f}}^{2},\Delta p,\trace{n}-2,\theta_{f},\Delta f,\paren{1-\bts{f}},\Delta p,\trace{n}+\theta_{f}^{2},\Delta f^{2},\Delta p,\trace{n} \end{aligned} ]

Equivalently,

[ A_{f},\Delta f^{2}+B_{f},\Delta f+C_{f}=0 ]

with:

  • (A_{f}=-\theta_{f}^{2},\Delta p,\trace{n})
  • (B_{f}=\paren{1+2,\theta_{f},,\paren{1-\bts{f}},\Delta p,\trace{n}},)
  • (C_{f}=-\paren{1-\bts{f}}^{2},\Delta p,\trace{n})
@UpdateAuxiliaryStateVariables {
  // equation associated with the porosity evolution
  if (dp * trace(n) > 1.e-12) {
    const auto theta_f = 1;
    const auto A = -power<2>(theta_f) * dp * trace(n);
    const auto B = (1+ 2 * theta_f * (1 - f) * dp * trace(n));
    const auto C = -power<2>(1 - f) * dp * trace(n);
    const auto Delta = B * B - 4 * A * C;
    if ((Delta < 0) || (A == 0)) {
      // neglecting second order terms
      const auto df = -C / B;
      f += df;
     } else {
       const auto df = (-B + sqrt(Delta)) / (2 * A);
       f += df;
     }
     f = min(max(f, real(0)), real(1));
  }
}

References

Clone this wiki locally