- cName of damage variable
C++ Type:std::vector<VariableName>
Controllable:No
Description:Name of damage variable
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 is given as
The crack surface density function is expressed in terms of the crack phase-field and its spatial gradient as where the geometric function characterizes homogeneous evolution of the crack phase-field. is an internal length scale regularizing the sharp crack. is a scaling parameter such that the regularized functional represents the crack surface.
The crack geometric function generally satisfies the following properties,
In the classical phase-field models the modeling crack geometric function have been widely adopted for brittle fracture_energy
Elastic Energy
The elastic energy is defined as
The monotonically decreasing energetic function describes degradation of the initial strain energy as the crack phase-field evolves, satisfying the following properties Miehe et al. (2015)
The variation of the elastic energy gives constitutive relations where the thermodynamic force drives evolution of the crack phase-field with the reference energy related to the strain field .
Energetic Degradation Function
A genetic expression for degradation function is given as for and continuous function Q(d) > 0. Jian-Ying Wu considers following polynomials where the coefficients are calibrated from standard material properties.
The energetic function recovers some particular examples used in the literature, such as when and .
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 where is the strain energy due to tensile stress, is the strain energy due to compressive stress. where is the th eigenvalue of the strain tensor and 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 Thus, where is the th eigenvector. The stress becomes
Strain Volumetric and Deviatoric Decomposition
The approach is based on the orthogonal decomposition of the linearized strain tensor in its spherical and deviatoric components: werhe deontes the n-dimensional identity tensor.
and is defined as
The stress is defined as and
Stress Spectral Decomposition
and is defined as
The compressive and tensile parts of the stress are computed from postive and negative projection tensors (computed from the spectral decomposition) according to
To be thermodynamically consistent, the stress is related to the deformation energy density according to Since then,
The Jacobian matrix for the stress is where 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 is defined that is the maximum energy density over the time interval , where is the current time step, i.e.
Now, the total free energy is redefined as: with and
Its derivatives are
To further avoid crack phase-field going to negative, should overcome a barrier energy. The barrier energy is determined by and the is modified as
The evolution equation for the damage parameter follows the Allen-Cahn equation where and .The is scaled by the 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
Integration by parts yields
The boundary integral term can be neglected as in most applications on . Some authors Mikelić et al. (2019) have proposed to replace the indicator function with 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, ConstantBoundsAux
can be used to set the upper bound to be 1. VariableOldValueBoundsAux
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
[../]
(../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
[../]
(../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'
[../]
(../moose/modules/combined/test/tests/phase_field_fracture/crack2d_iso_with_pressure.i)Input Parameters
- D_namedegradationName of material property for energetic degradation function.
Default:degradation
C++ Type:MaterialPropertyName
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
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
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
Controllable:No
Description:Name of material property for damage indicator function.
- barrier_energyName of material property for fracture energy barrier.
C++ Type:MaterialPropertyName
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
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>
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>
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
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
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
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
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
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
Controllable:No
Description:Use the current value of the history variable.
- 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
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>
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
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
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
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>
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>
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
- 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]
- 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]
- 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]
- 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]