11#include "libmesh/utility.h"
19 params.
addParam<
bool>(
"numerical_stiffness",
false,
"Flag for numerical stiffness");
20 params.
addParam<Real>(
"damage_stiffness", 1e-8,
"Avoid zero after complete damage");
21 params.
addParam<Real>(
"zero_tol", 1e-12,
"Tolerance for numerical zero");
23 "zero_perturb", 1e-8,
"Perturbation value when strain value less than numerical zero");
24 params.
addParam<Real>(
"perturbation_scale_factor", 1e-5,
"Perturbation scale factor");
27 "use_current_history_variable",
false,
"Use the current value of the history variable.");
28 params.
addParam<MaterialPropertyName>(
29 "F_name",
"E_el",
"Name of material property storing the elastic energy");
31 "Computes damaged stress and energy in the intermediate configuration assuming isotropy");
38 _num_stiffness(getParam<bool>(
"numerical_stiffness")),
39 _kdamage(getParam<Real>(
"damage_stiffness")),
40 _use_current_hist(getParam<bool>(
"use_current_history_variable")),
41 _l(getMaterialProperty<Real>(
"l")),
42 _gc(getMaterialProperty<Real>(
"gc_prop")),
43 _zero_tol(getParam<Real>(
"zero_tol")),
44 _zero_pert(getParam<Real>(
"zero_perturb")),
45 _pert_val(getParam<Real>(
"perturbation_scale_factor")),
46 _c(coupledValue(
"c")),
49 declarePropertyDerivative<
RankTwoTensor>(_base_name +
"stress", coupledName(
"c", 0))),
51 _F(declareProperty<Real>(getParam<MaterialPropertyName>(
"F_name"))),
52 _dFdc(declarePropertyDerivative<Real>(getParam<MaterialPropertyName>(
"F_name"),
53 coupledName(
"c", 0))),
54 _d2Fdc2(declarePropertyDerivative<Real>(
55 getParam<MaterialPropertyName>(
"F_name"), coupledName(
"c", 0), coupledName(
"c", 0))),
56 _d2Fdcdstrain(declareProperty<
RankTwoTensor>(
"d2Fdcdstrain")),
57 _hist(declareProperty<Real>(
"hist")),
58 _hist_old(getMaterialPropertyOld<Real>(
"hist"))
97 Real xfac = Utility::pow<2>(1.0 -
c) +
_kdamage;
99 std::vector<Real> eigval;
110 Real etrpos = (std::abs(etr) + etr) / 2.0;
111 Real etrneg = (std::abs(etr) - etr) / 2.0;
117 pk2pos +=
_etens[i] * (lambda * etrpos + 2.0 *
mu * (std::abs(eigval[i]) + eigval[i]) / 2.0);
118 pk2neg +=
_etens[i] * (lambda * etrneg + 2.0 *
mu * (std::abs(eigval[i]) - eigval[i]) / 2.0);
125 std::vector<Real> epos(LIBMESH_DIM), eneg(LIBMESH_DIM);
128 epos[i] = (std::abs(eigval[i]) + eigval[i]) / 2.0;
129 eneg[i] = (std::abs(eigval[i]) - eigval[i]) / 2.0;
133 Real pval(0.0), nval(0.0);
136 pval += epos[i] * epos[i];
137 nval += eneg[i] * eneg[i];
141 const Real G0_pos = lambda * etrpos * etrpos / 2.0 +
mu * pval;
142 const Real G0_neg = lambda * etrneg * etrneg / 2.0 +
mu * nval;
152 hist_variable =
_hist[_qp];
155 _F[_qp] = hist_variable * xfac - G0_neg +
_gc[_qp] / (2 *
_l[_qp]) *
c *
c;
175 for (
unsigned int j = i; j < LIBMESH_DIM; ++j)
182 _ee(i, j) += ee_pert;
210 usingTensorIndices(i_, j_, k_, l_);
registerMooseObject("SolidMechanicsApp", HyperElasticPhaseFieldIsoDamage)
This class solves the viscoplastic flow rate equations in the total form Involves 4 different types o...
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
virtual void computeElasticStrain()
Computes elastic Lagrangian strain.
static InputParameters validParams()
virtual void computeQpJacobian()
This function computes the Jacobian.
MaterialProperty< RankTwoTensor > & _pk2
RankFourTensor _df_dstretch_inc
This class solves visco plastic model based on isotropically damaged stress The damage parameter is o...
bool _use_current_hist
Use current value of history variable.
MaterialProperty< Real > & _d2Fdc2
const MaterialProperty< Real > & _l
Material property defining crack width, declared elsewhere.
std::vector< RankTwoTensor > _etens
Real _pert_val
Perturbation value for strain components.
Real _zero_pert
Perturbation value for near zero or zero strain components.
Real _zero_tol
Used in numerical stiffness calculation to check near zero values.
virtual void computeNumStiffness()
This function computes numerical stiffness.
bool _save_state
Flag to save couple material properties.
virtual void computeDamageStress()
This function computes PK2 stress modified to account for damage Computes numerical stiffness if flag...
MaterialProperty< RankTwoTensor > & _d2Fdcdstrain
Real _kdamage
Small stiffness of completely damaged material point.
const MaterialProperty< Real > & _hist_old
Old value of history variable.
MaterialProperty< Real > & _F
Elastic energy and derivatives, declared in this material.
MaterialProperty< RankTwoTensor > & _dstress_dc
static InputParameters validParams()
const MaterialProperty< Real > & _gc
Material property defining gc parameter, declared elsewhere.
const VariableValue & _c
Compupled damage variable.
HyperElasticPhaseFieldIsoDamage(const InputParameters ¶meters)
bool _num_stiffness
Flag to compute numerical stiffness.
virtual void computePK2StressAndDerivative()
This function computes PK2 stress.
MaterialProperty< Real > & _hist
History variable that prevents crack healing, declared in this material.
MaterialProperty< Real > & _dFdc
virtual void computeQpJacobian()
This function computes tensors used to construct diagonal and off-diagonal Jacobian.
RankTwoTensorTempl< T > innerProductTranspose(const RankTwoTensorTempl< T > &) const
static RankTwoTensorTempl< T > selfOuterProduct(const libMesh::TypeVector< T > &)
RankFourTensorTempl< T > times(const RankTwoTensorTempl< T > &b) const
libMesh::VectorValue< T > column(const unsigned int i) const
void symmetricEigenvaluesEigenvectors(std::vector< T > &eigvals, RankTwoTensorTempl< T > &eigvecs) const
static constexpr std::size_t dim