Compute Linear Elastic Phase Field Fracture Stress

Description

This material implements the unified phase-field model for mechanics of damage and quasi-brittle failure from Jian-Ying Wu Wu (2017). The pressure on the fracture surface can be optionally applied as described in Chukwudozie et al. (2019) and Mikelić et al. (2019).

Crack Surface Energy

The regularized functional AdA_d is given as

Ad(d):=Bγ(d,d)dVA_d(d):= \int_{\mathcal{B}}\gamma(d,\nabla d) dV

The crack surface density function γ(d,d)\gamma(d,\nabla d) is expressed in terms of the crack phase-field dd and its spatial gradient d\nabla d as γ(d,d)=1c0(1lα(d)+ld2)       with       c0=401α(β)dβ\gamma(d,\nabla d) = \frac{1}{c_0}(\frac{1}{l}\alpha(d) + l|\nabla d|^2)~~~~~~~\text{with}~~~~~~~c_0 = 4\int_0^1\sqrt{\alpha(\beta)}d\beta where the geometric function α(d)\alpha(d) characterizes homogeneous evolution of the crack phase-field. ll is an internal length scale regularizing the sharp crack. c0c_0 is a scaling parameter such that the regularized functional Ad(d)A_d(d) represents the crack surface.

The crack geometric function α(d)\alpha(d) generally satisfies the following properties, α(0)=0        ,        α(1)=1\alpha(0) = 0~~~~~~~~,~~~~~~~~\alpha(1) = 1

In the classical phase-field models the modeling crack geometric function have been widely adopted for brittle fracture_energy α(d)={d    Linear functiond2   Quadratic function\alpha(d) = \begin{cases} d~~~~\text{Linear function} \\ d^2~~~\text{Quadratic function}\end{cases}

Elastic Energy

The elastic energy is defined as Ψ(ε,d)=ω(d)Ψ0(ε)\Psi(\varepsilon,d) = \omega(d)\Psi_0(\varepsilon)

The monotonically decreasing energetic function w(d)[0,1]w(d)\in[0,1] describes degradation of the initial strain energy Ψ0(ε)\Psi_0(\varepsilon) as the crack phase-field evolves, satisfying the following properties Miehe et al. (2015) ω(d)<0     and     ω(0)=1,     ω(1)=0,     ω(1)=0\omega'(d) < 0~~~~~\text{and}~~~~~\omega(0)=1,~~~~~\omega(1) = 0,~~~~~\omega'(1)=0

The variation of the elastic energy gives constitutive relations σ=ω(d)Ψ0ε,        Y=Ψd=ω(d)Y\boldsymbol{\sigma} = \omega(d)\frac{\partial{\Psi_0}}{\partial{\varepsilon}},~~~~~~~~Y=-\frac{\partial\Psi}{\partial d} = -\omega'(d)\mathcal{Y} where the thermodynamic force YY drives evolution of the crack phase-field with the reference energy Y\mathcal{Y} related to the strain field ε\varepsilon.

Energetic Degradation Function

A genetic expression for degradation function ω(d)\omega(d) is given as ω(d)=11+ϕ(d)=(1d)p(1d)p+Q(d),      ϕ(d)=Q(d)(1d)p\omega(d) = \frac{1}{1+\phi(d)} = \frac{(1-d)^p}{(1-d)^p + Q(d)},~~~~~~\phi(d) = \frac{Q(d)}{(1-d)^p} for p>0p>0 and continuous function Q(d) > 0. Jian-Ying Wu considers following polynomials Q(d)=a1d+a1a2d2+a1a2a3d3+...Q(d) = a_1d + a_1a_2d^2 + a_1a_2a_3d^3 + ... where the coefficients aia_i are calibrated from standard material properties.

The energetic function recovers some particular examples used in the literature, such as ω(d)=(1d)2\omega(d) = (1-d)^2 when p=2p=2 and Q(d)=1(1d)pQ(d) = 1 - (1-d)^p.

Decomposition Approaches

The elastic energy is usually decomposed additively to distinguish between tensile and compressive contributions. Three decomposition approaches are implemented.

Strain Spectral Decomposition

The total strain energy density is defined as Ψ=ω(d)Ψ++Ψ,\Psi = \omega(d) \Psi^{+} +\Psi^{-}, where ψ+\psi^{+} is the strain energy due to tensile stress, ψ\psi^{-} is the strain energy due to compressive stress. Ψ±=λ<ε1+ε2+ε3>±2/2+μ(<ε1>±2+<ε1>±2+<ε1>±2),\Psi^{\pm} = \lambda \left< \varepsilon_1 + \varepsilon_2 + \varepsilon_3 \right>^2_{\pm}/2 + \mu \left(\left< \varepsilon_1 \right>_{\pm}^2 + \left< \varepsilon_1 \right>_{\pm}^2 + \left< \varepsilon_1 \right>_{\pm}^2 \right), where ϵi\epsilon_i is the iith eigenvalue of the strain tensor and <>±\left< \right>_{\pm} is an operator that provides the positive or negative part.

To be thermodynamically consistent, the stress is related to the deformation energy density according to σ=Ψε.\boldsymbol{\sigma} = \frac{\partial \Psi}{\partial \boldsymbol{\varepsilon}}. Thus, σ±=Ψ±ε=a=13(λ<ε1+ε2+ε3>±+2μ<εa>±)nana,\boldsymbol{\sigma}^{\pm} = \frac{\partial \Psi^{\pm}}{\partial \boldsymbol{\varepsilon}} = \sum_{a=1}^3 \left( \lambda \left< \varepsilon_1 + \varepsilon_2 + \varepsilon_3 \right>_{\pm} + 2 \mu \left< \varepsilon_a \right>_{\pm} \right) \boldsymbol{n}_a \otimes \boldsymbol{n}_a, where na\boldsymbol{n}_a is the aath eigenvector. The stress becomes σ=[(1c)2(1k)+k]σ+σ.\boldsymbol{\sigma} = \left[(1-c)^2(1-k) + k \right] \boldsymbol{\sigma}^{+} - \boldsymbol{\sigma}^{-}.

Strain Volumetric and Deviatoric Decomposition

The approach is based on the orthogonal decomposition of the linearized strain tensor in its spherical and deviatoric components: ε=εS+εD,    εD=1ntr(ε)I,    εD=ε1ntr(ε)I\varepsilon = \varepsilon_S + \varepsilon_D,~~~~\varepsilon_D = \frac{1}{n}tr(\varepsilon)I,~~~~\varepsilon_D = \varepsilon - \frac{1}{n}tr(\varepsilon)I where II denotes the n-dimensional identity tensor.

ψ+\psi^{+} and ψ\psi^{-} is defined as ψ+=12κ<tr(ε)2>++μεDεD\psi^{+} = \frac{1}{2}\kappa\left<tr(\varepsilon)^2\right>_{+} + \mu\varepsilon_{D}\cdot\varepsilon_{D} ψ=12κ<tr(ε)2>\psi^{-} = \frac{1}{2}\kappa\left<tr(\varepsilon)^2\right>_{-}

The stress is defined as σ=κ<tr(ε)>\boldsymbol{\sigma}^- = \kappa \left<tr(\varepsilon) \right> and σ+=Cεσ\boldsymbol{\sigma}^+ = \boldsymbol{\mathcal{C}}\varepsilon -\boldsymbol{\sigma}^-

Stress Spectral Decomposition

ψ+\psi^{+} and ψ\psi^{-} is defined as ψ+=12σ+:ε\psi^{+} = \frac{1}{2} \boldsymbol{\sigma}^{+} : \boldsymbol{\varepsilon} ψ=12σ:ε.\psi^{-} = \frac{1}{2} \boldsymbol{\sigma}^{-} : \boldsymbol{\varepsilon}.

The compressive and tensile parts of the stress are computed from positive and negative projection tensors (computed from the spectral decomposition) according to σ+=P+σ0 \boldsymbol{\sigma}^+ = \mathbf{P}^+ \boldsymbol{\sigma}_0 σ=Pσ0, \boldsymbol{\sigma}^- = \mathbf{P}^- \boldsymbol{\sigma}_0,

To be thermodynamically consistent, the stress is related to the deformation energy density according to σ=ψeε=ωdψ+ε+ψε. \boldsymbol{\sigma} = \frac{\partial \psi_e}{\partial \boldsymbol{\varepsilon}} = \omega{d}\frac{\partial \psi^+}{\partial \boldsymbol{\varepsilon}} + \frac{\partial \psi^-}{\partial \boldsymbol{\varepsilon}}. Since ψ+ε=σ+ \frac{\partial \psi^+}{\partial \boldsymbol{\varepsilon}} = \boldsymbol{\sigma}^+ ψε=σ, \frac{\partial \psi^-}{\partial \boldsymbol{\varepsilon}} = \boldsymbol{\sigma}^-, then, σ=ω(d)σ++σ \boldsymbol{\sigma} = \omega(d)\boldsymbol{\sigma}^+ + \boldsymbol{\sigma}^-

The Jacobian matrix for the stress is J=σε=((ω(d)P++P)C, \boldsymbol{\mathcal{J}} = \frac{\partial \boldsymbol{\sigma}}{\partial \boldsymbol{\varepsilon}} = \left((\omega(d) \boldsymbol{\mathcal{P}}^+ + \boldsymbol{\mathcal{P}}^- \right) \boldsymbol{\mathcal{C}}, where C\boldsymbol{\mathcal{C}} is the elasticity tensor.

Note that stress spectral decomposition approach can be used for anisotropic elasticity tensor.

Evolution Equation (Allen-Cahn)

To avoid crack healing, a history variable HH is defined that is the maximum energy density over the time interval t=[0,t0]t=[0,t_0], where t0t_0 is the current time step, i.e. H=maxt(Ψ+)H = \max_t (\Psi^{+})

Now, the total free energy is redefined as: F=ω(d)H+Ψ+1c0(gclα(d)+ld2)=felastic+ffracture+gclc0d2\begin{aligned} F =& \omega(d) H +\Psi^{-} + \frac{1}{c_0}(\frac{g_c}{l}\alpha(d) + l|\nabla d|^2) \\ =& f_{elastic} + f_{fracture} + \frac{g_c l}{c_0} {|{\nabla d}|}^2 \end{aligned} with floc=felastic+ffracturef_{loc} = f_{elastic} + f_{fracture} and ffracture=1c0gclα(d),     felastic=ω(d)H+Ψ.f_{fracture} = \frac{1}{c_0}\frac{g_c}{l}\alpha(d),~~~~~f_{elastic} = \omega(d)H +\Psi^{-}.

Its derivatives are felasticd=ω(d)H2felasticd2=ω(d)Hffractured=1c0gclα(d)2ffractured2=1c0gclα(d).\begin{aligned} \frac{\partial f_{elastic}}{\partial d} =& \omega'(d)H\\ \frac{\partial^2 f_{elastic}}{\partial d^2} =& \omega''(d)H \\ \frac{\partial f_{fracture}}{\partial d} =& \frac{1}{c_0}\frac{g_c}{l} \alpha'(d) \\ \frac{\partial^2 f_{fracture}}{\partial d^2} =& \frac{1}{c_0}\frac{g_c}{l} \alpha''(d). \end{aligned}

To further avoid crack phase-field going to negative, HH should overcome a barrier energy. The barrier energy fbarrierf_{barrier} is determined by fbarrier=ffractureω(d) /textat d=0f_{barrier} = -\frac{f_{fracture}}{\omega(d)}~/text{at}~d=0 and the HH is modified as H=maxt(Ψ+,fbarrier)H = \max_t (\Psi^{+}, f_{barrier})

The evolution equation for the damage parameter follows the Allen-Cahn equation d˙=LδFδd=L(flocdκd),\dot{d} = -L \frac{\delta F}{\delta d} = -L \left( \frac{\partial f_{loc}}{\partial d} - \nabla \cdot \kappa \nabla d \right), where L=(gcη~)1L = (g_c \tilde\eta)^{-1} and κ=2gcl/c0\kappa = 2g_cl/c_0.The η~=η/gc\tilde\eta = \eta/g_c is scaled by the gcg_c which is consistent with the definition given by Miehe at.al Miehe et al. (2015).

This equation follows the standard Allen-Cahn and thus can be implemented in MOOSE using the standard Allen-Cahn kernels, TimeDerivative, AllenCahn, and ACInterface. There is now an action that automatically generates these kernels: NonconservedAction. See the PhaseField module documentation for more information.

Pressure on the fracture surface

As suggested by Chukwudozie et al. (2019), the work of pressure forces acting along each side of the cracks that is added to the total free energy can be approximated by Γp(un)dsΩp(ud)\int_{\Gamma}p(\mathbf{u}\cdot \mathbf{n})ds \approx \int_{\Omega}p(\mathbf{u}\cdot\nabla d)

Integration by parts yields Ωp(ud)=ΩpduΩpd(un)-\int_{\Omega}p(\mathbf{u}\cdot\nabla d) = \int_{\Omega}pd\nabla\cdot\mathbf{u}-\int_{\partial{\Omega}}pd(\mathbf{u}\cdot\mathbf{n})

The boundary integral term can be neglected as in most applications d=0d=0 on Ω\partial\Omega. Some authors Mikelić et al. (2019) have proposed to replace the indicator function dd with d2d^2 in the first term in order to make the functional convex. The indicator function is implemented as a generic material object that can be easily provided and modified in an input file. The stress equilibrium and damage evolution equations are also modified to account for the pressure contribution.

PETSc SNES variational inequalities solver option

Alternatively, the damage irreversibility condition can be enforced by using PETSc's SNES variational inequalities (VI) solver. In order to use PETSc's VI solver, upper and lower bounds for damage variable should be provided. Specifically, ConstantBounds can be used to set the upper bound to be 1. VariableOldValueBounds can be used to set the lower bound to be the old value. Note that in order for these bounds to have an effect, the user has to specify the PETSc options -snes_type vinewtonssls or -snes_type vinewtonrsls.

Example Input File

[./damage_stress]
  type = ComputeLinearElasticPFFractureStress
  c = c
  E_name = 'elastic_energy'
  D_name = 'degradation'
  F_name = 'local_fracture_energy'
  decomposition_type = strain_spectral
[../]
(contrib/moose/modules/combined/test/tests/phase_field_fracture/crack2d_iso.i)

Example Input File with pressure

[./damage_stress]
  type = ComputeLinearElasticPFFractureStress
  c = c
  E_name = 'elastic_energy'
  D_name = 'degradation'
  I_name = 'indicator_function'
  F_name = 'local_fracture_energy'
  decomposition_type = strain_spectral
[../]
(contrib/moose/modules/combined/test/tests/phase_field_fracture/crack2d_iso_with_pressure.i)
[./pfbulkmat]
  type = GenericConstantMaterial
  prop_names = 'gc_prop l visco fracture_pressure'
  prop_values = '1e-3 0.04 1e-4 1e-3'
[../]
(contrib/moose/modules/combined/test/tests/phase_field_fracture/crack2d_iso_with_pressure.i)

Input Parameters

  • cName of damage variable

    C++ Type:std::vector<VariableName>

    Unit:(no unit assumed)

    Controllable:No

    Description:Name of damage variable

Required Parameters

  • D_namedegradationName of material property for energetic degradation function.

    Default:degradation

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:Name of material property for energetic degradation function.

  • E_nameelastic_energyName of material property for elastic energy

    Default:elastic_energy

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:Name of material property for elastic energy

  • F_namelocal_fracture_energyName of material property for local fracture energy function.

    Default:local_fracture_energy

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:Name of material property for local fracture energy function.

  • I_nameindicatorName of material property for damage indicator function.

    Default:indicator

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:Name of material property for damage indicator function.

  • barrier_energyName of material property for fracture energy barrier.

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:Name of material property for fracture energy barrier.

  • base_nameOptional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases

    C++ Type:std::string

    Unit:(no unit assumed)

    Controllable:No

    Description:Optional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases

  • blockThe list of blocks (ids or names) that this object will be applied

    C++ Type:std::vector<SubdomainName>

    Unit:(no unit assumed)

    Controllable:No

    Description:The list of blocks (ids or names) that this object will be applied

  • boundaryThe list of boundaries (ids or names) from the mesh where this object applies

    C++ Type:std::vector<BoundaryName>

    Unit:(no unit assumed)

    Controllable:No

    Description:The list of boundaries (ids or names) from the mesh where this object applies

  • computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.

  • constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped

    Default:NONE

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:NONE, ELEMENT, SUBDOMAIN

    Controllable:No

    Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped

  • declare_suffixAn optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:An optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.

  • decomposition_typenoneDecomposition approaches. Choices are: strain_spectral strain_vol_dev stress_spectral none

    Default:none

    C++ Type:MooseEnum

    Unit:(no unit assumed)

    Options:strain_spectral, strain_vol_dev, stress_spectral, none

    Controllable:No

    Description:Decomposition approaches. Choices are: strain_spectral strain_vol_dev stress_spectral none

  • prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

  • use_current_history_variableFalseUse the current value of the history variable.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Use the current value of the history variable.

  • use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

  • use_snes_vi_solverFalseUse PETSc's SNES variational inequalities solver to enforce damage irreversibility condition and restrict damage value <= 1.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Use PETSc's SNES variational inequalities solver to enforce damage irreversibility condition and restrict damage value <= 1.

Optional Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:Yes

    Description:Set the enabled status of the MooseObject.

  • implicitTrueDetermines whether this object is calculated using an implicit or explicit form

    Default:True

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:Determines whether this object is calculated using an implicit or explicit form

  • seed0The seed for the master random number generator

    Default:0

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:The seed for the master random number generator

Advanced Parameters

  • output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)

    C++ Type:std::vector<std::string>

    Unit:(no unit assumed)

    Controllable:No

    Description:List of material properties, from this material, to output (outputs must also be defined to an output type)

  • outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object

    Default:none

    C++ Type:std::vector<OutputName>

    Unit:(no unit assumed)

    Controllable:No

    Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object

Outputs Parameters

References

  1. Chukwudi Chukwudozie, Blaise Bourdin, and Keita Yoshioka. A variational phase-field model for hydraulic fracturing in porous media. Computer Methods in Applied Mechanics and Engineering, 347:957 – 982, 2019.[BibTeX]
  2. Christian Miehe, Lisa-Marie Schänzel, and Heike Ulmer. Phase field modeling of fracture in multi-physics problems. part i. balance of crack surface and failure criteria for brittle crack propagation in thermo-elastic solids. Computer Methods in Applied Mechanics and Engineering, 294:449 – 485, 2015. URL: http://www.sciencedirect.com/science/article/pii/S0045782514004423, doi:https://doi.org/10.1016/j.cma.2014.11.016.[BibTeX]
  3. A. Mikelić, M. F. Wheeler, and T. Wick. Phase-field modeling through iterative splitting of hydraulic fractures in a poroelastic medium. GEM - International Journal on Geomathematics, 10(1):2, 2019.[BibTeX]
  4. Jian-Ying Wu. A unified phase-field theory for the mechanics of damage and quasi-brittle failure. Journal of the Mechanics and Physics of Solids, 103:72 – 99, 2017. URL: http://www.sciencedirect.com/science/article/pii/S0022509616308341, doi:https://doi.org/10.1016/j.jmps.2017.03.015.[BibTeX]