19 params.
addClassDescription(
"Computes the stress and free energy derivatives for the phase field " 20 "fracture model, with small strain");
21 MooseEnum Decomposition(
"strain_spectral strain_vol_dev stress_spectral none",
"none");
24 "Decomposition approaches. Choices are: " +
43 mooseError(
"Decomposition approach of strain_vol_dev and strain_spectral can only be used with " 44 "isotropic elasticity tensor materials, use stress_spectral for anistropic " 45 "elasticity tensor materials");
59 std::vector<Real> eigval(LIBMESH_DIM);
65 std::vector<RankTwoTensor> etens(LIBMESH_DIM);
71 std::vector<Real> epos(LIBMESH_DIM), eneg(LIBMESH_DIM);
74 epos[i] = (
std::abs(eigval[i]) + eigval[i]) / 2.0;
75 eneg[i] = -(
std::abs(eigval[i]) - eigval[i]) / 2.0;
90 stress0pos += etens[i] * (lambda * etrpos + 2.0 *
mu * epos[i]);
91 stress0neg += etens[i] * (lambda * etrneg + 2.0 *
mu * eneg[i]);
95 Real pval(0.0), nval(0.0);
98 pval += epos[i] * epos[i];
99 nval += eneg[i] * eneg[i];
105 F_pos = lambda * etrpos * etrpos / 2.0 +
mu * pval;
106 F_neg = -lambda * etrneg * etrneg / 2.0 +
mu * nval;
128 std::vector<Real> eigval;
158 const Real k = lambda + 2.0 *
mu / LIBMESH_DIM;
166 Real strain0tr, strain0tr_neg, strain0tr_pos;
171 strain0tr_neg = std::min(strain0tr, 0.0);
172 strain0tr_pos = strain0tr - strain0tr_neg;
173 stress0neg =
k * strain0tr_neg * I2;
177 F_pos = 0.5 *
k * strain0tr_pos * strain0tr_pos +
mu * strain0dev2.
trace();
178 F_neg = 0.5 *
k * strain0tr_neg * strain0tr_neg;
190 Jacobian_neg =
k * I2I2;
233 hist_variable =
_H[
_qp];
243 hist_variable =
_H[
_qp];
RankFourTensorTempl< Real > outerProduct(const RankTwoTensorTempl< Real > &b) const
MaterialProperty< Real > & _H
History variable that prevents crack healing, declared in this material.
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
const MaterialProperty< Real > & _d2Dd2c
Second-order derivative of degradation w.r.t damage variable.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
MaterialProperty< Real > & _E
Material property for elastic energy.
RankFourTensorTempl< Real > positiveProjectionEigenDecomposition(std::vector< Real > &, RankTwoTensorTempl< Real > &) const
MaterialProperty< Real > & _d2Ed2c
Second-order derivative of elastic energy w.r.t damage variable.
initIdentitySymmetricFour
virtual void computeQpStress() override
Compute the stress and store it in the _stress material property for the current quadrature point...
const MaterialProperty< RankTwoTensor > & _mechanical_strain
Mechanical strain material property.
ComputePFFractureStressBase is the base class for stress in phase field fracture model.
MaterialProperty< RankTwoTensor > & _dstress_dc
Derivative of stress w.r.t damage variable.
const MaterialProperty< Real > & _d2Id2c
Second-order derivative of damage indicator function w.r.t damage variable.
VectorValue< Real > column(const unsigned int i) const
MaterialProperty< RankTwoTensor > & _d2Fdcdstrain
Second-order derivative of elastic energy w.r.t damage variable and strain.
static constexpr std::size_t dim
Decomposition_type
Decomposittion type.
void computeStrainSpectral(Real &F_pos, Real &F_neg)
Method to split elastic energy based on strain spectral decomposition.
std::string getRawNames() const
const MaterialProperty< Real > & _barrier
material property for fracture energy barrier
static InputParameters validParams()
void computeStressSpectral(Real &F_pos, Real &F_neg)
Method to split elastic energy based on stress spectral decomposition.
ADRealEigenVector< T, D, asd > abs(const ADRealEigenVector< T, D, asd > &)
static RankTwoTensorTempl< Real > selfOuterProduct(const libMesh::TypeVector< Real > &)
enum ComputeLinearElasticPFFractureStress::Decomposition_type _decomposition_type
const MaterialProperty< Real > & _dDdc
Derivative of degradation function w.r.t damage variable.
MaterialProperty< Real > & _dEdc
Derivative of elastic energy w.r.t damage variable.
Phase-field fracture This class computes the stress and energy contribution for the small strain Line...
static const std::string mu
ComputeLinearElasticPFFractureStress(const InputParameters ¶meters)
bool _use_current_hist
Use current value of history variable.
Real doubleContraction(const RankTwoTensorTempl< Real > &a) const
const MaterialProperty< Real > & _H_old
Old value of history variable.
const std::string _elasticity_tensor_name
Name of the elasticity tensor material property.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void initialSetup() override
IntRange< T > make_range(T beg, T end)
void mooseError(Args &&... args) const
const MaterialProperty< Real > & _I
Material property for damage indicator function.
MaterialProperty< RankTwoTensor > & _stress
Stress material property.
const MaterialProperty< Real > & _pressure
Material property defining pressure, declared elsewhere.
bool hasGuaranteedMaterialProperty(const MaterialPropertyName &prop, Guarantee guarantee)
const MaterialProperty< Real > & _D
Material property for energetic degradation function.
void computeStrainVolDev(Real &F_pos, Real &F_neg)
Method to split elastic energy based on strain volumetric/deviatoric decomposition.
Add-on class that provides the functionality to check if guarantees for material properties are provi...
static InputParameters validParams()
static const std::string k
const MaterialProperty< Real > & _dIdc
Derivative of damage indicator function w.r.t damage variable.
registerMooseObject("SolidMechanicsApp", ComputeLinearElasticPFFractureStress)
bool _use_snes_vi_solver
Use PETSc's VI (Reduced space active set solvers for variational inequalities based on Newton's metho...