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"))
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;
175 for (
unsigned int j = i;
j < LIBMESH_DIM; ++
j)
182 _ee(i,
j) += ee_pert;
210 usingTensorIndices(i_, j_, k_, l_);
This class solves the viscoplastic flow rate equations in the total form Involves 4 different types o...
virtual void computeElasticStrain()
Computes elastic Lagrangian strain.
virtual void computePK2StressAndDerivative()
This function computes PK2 stress.
RankTwoTensorTempl< T > innerProductTranspose(const RankTwoTensorTempl< T > &) const
const MaterialProperty< Real > & _hist_old
Old value of history variable.
static InputParameters validParams()
RankFourTensor _df_dstretch_inc
bool _use_current_hist
Use current value of history variable.
virtual void computeDamageStress()
This function computes PK2 stress modified to account for damage Computes numerical stiffness if flag...
static constexpr std::size_t dim
HyperElasticPhaseFieldIsoDamage(const InputParameters ¶meters)
virtual void computeQpJacobian()
This function computes the Jacobian.
Real _zero_pert
Perturbation value for near zero or zero strain components.
MaterialProperty< Real > & _d2Fdc2
MaterialProperty< Real > & _dFdc
MaterialProperty< RankTwoTensor > & _pk2
static RankTwoTensorTempl< Real > selfOuterProduct(const libMesh::TypeVector< Real > &)
virtual void computeNumStiffness()
This function computes numerical stiffness.
static const std::string mu
libMesh::VectorValue< Real > column(const unsigned int i) const
bool _save_state
Flag to save couple material properties.
const VariableValue & _c
Compupled damage variable.
Real _pert_val
Perturbation value for strain components.
Real _zero_tol
Used in numerical stiffness calculation to check near zero values.
const MaterialProperty< Real > & _l
Material property defining crack width, declared elsewhere.
static InputParameters validParams()
This class solves visco plastic model based on isotropically damaged stress The damage parameter is o...
std::vector< RankTwoTensor > _etens
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
MaterialProperty< RankTwoTensor > & _dstress_dc
void symmetricEigenvaluesEigenvectors(std::vector< Real > &eigvals, RankTwoTensorTempl< Real > &eigvecs) const
RankFourTensorTempl< Real > times(const RankTwoTensorTempl< Real > &b) const
registerMooseObject("SolidMechanicsApp", HyperElasticPhaseFieldIsoDamage)
MaterialProperty< RankTwoTensor > & _d2Fdcdstrain
IntRange< T > make_range(T beg, T end)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
bool _num_stiffness
Flag to compute numerical stiffness.
MaterialProperty< Real > & _F
Elastic energy and derivatives, declared in this material.
virtual void computeQpJacobian()
This function computes tensors used to construct diagonal and off-diagonal Jacobian.
Real _kdamage
Small stiffness of completely damaged material point.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
static const std::string k
MaterialProperty< Real > & _hist
History variable that prevents crack healing, declared in this material.
const MaterialProperty< Real > & _gc
Material property defining gc parameter, declared elsewhere.