20 params.addClassDescription(
"Computes energy and modifies the stress for phase field fracture");
21 params.addRequiredCoupledVar(
"c",
"Order parameter for damage");
22 params.addParam<Real>(
"kdamage", 1e-9,
"Stiffness of damaged matrix");
23 params.addParam<
bool>(
"finite_strain_model",
false,
"The model is using finite strain");
24 params.addParam<
bool>(
25 "use_current_history_variable",
false,
"Use the current value of the history variable.");
26 params.addParam<MaterialPropertyName>(
27 "F_name",
"E_el",
"Name of material property storing the elastic energy");
28 params.addParam<MaterialPropertyName>(
31 "Name of material property being created to store the interfacial parameter kappa");
32 params.addParam<MaterialPropertyName>(
33 "mobility_name",
"L",
"Name of material property being created to store the mobility L");
34 params.addParam<std::string>(
"base_name",
"The base name used to save the cracked stress");
35 params.addRequiredParam<std::string>(
"uncracked_base_name",
36 "The base name used to calculate the original stress");
41 : DerivativeMaterialInterface<Material>(parameters),
42 _base_name(isParamValid(
"base_name") ? getParam<std::string>(
"base_name") +
"_" :
""),
43 _uncracked_base_name(getParam<std::string>(
"uncracked_base_name") +
"_"),
44 _finite_strain_model(getParam<bool>(
"finite_strain_model")),
45 _use_current_hist(getParam<bool>(
"use_current_history_variable")),
48 ? getMaterialPropertyByName<
RankTwoTensor>(_uncracked_base_name +
"elastic_strain")
49 : getMaterialPropertyByName<
RankTwoTensor>(_uncracked_base_name +
"mechanical_strain")),
50 _uncracked_stress(getMaterialPropertyByName<
RankTwoTensor>(_uncracked_base_name +
"stress")),
51 _uncracked_Jacobian_mult(
52 getMaterialPropertyByName<
RankFourTensor>(_uncracked_base_name +
"Jacobian_mult")),
53 _c(coupledValue(
"c")),
54 _gc_prop(getMaterialProperty<Real>(
"gc_prop")),
55 _l(getMaterialProperty<Real>(
"l")),
56 _visco(getMaterialProperty<Real>(
"visco")),
57 _kdamage(getParam<Real>(
"kdamage")),
58 _stress(declareProperty<
RankTwoTensor>(_base_name +
"stress")),
59 _F(declareProperty<Real>(getParam<MaterialPropertyName>(
"F_name"))),
60 _dFdc(declarePropertyDerivative<Real>(getParam<MaterialPropertyName>(
"F_name"),
61 getVar(
"c", 0)->
name())),
62 _d2Fdc2(declarePropertyDerivative<Real>(
63 getParam<MaterialPropertyName>(
"F_name"), getVar(
"c", 0)->
name(), getVar(
"c", 0)->
name())),
64 _d2Fdcdstrain(declareProperty<
RankTwoTensor>(
"d2Fdcdstrain")),
65 _dstress_dc(declarePropertyDerivative<
RankTwoTensor>(
"stress", getVar(
"c", 0)->
name())),
66 _hist(declareProperty<Real>(
"hist")),
67 _hist_old(getMaterialPropertyOld<Real>(
"hist")),
68 _Jacobian_mult(declareProperty<
RankFourTensor>(_base_name +
"Jacobian_mult")),
69 _kappa(declareProperty<Real>(getParam<MaterialPropertyName>(
"kappa_name"))),
70 _L(declareProperty<Real>(getParam<MaterialPropertyName>(
"mobility_name")))
84 const Real c =
_c[_qp];
93 std::vector<Real> eigval;
103 Real G0_pos = (stress0pos).doubleContraction(
_strain[_qp]) / 2.0;
104 Real G0_neg = (stress0neg).doubleContraction(
_strain[_qp]) / 2.0;
114 hist_variable =
_hist[_qp];
118 Real dhdc = -2.0 * cfactor * (1.0 - c) * (1.0 -
_kdamage);
119 Real d2hdc2 = 2.0 * cfactor * (1.0 -
_kdamage);
127 _F[_qp] = hist_variable * h - G0_neg +
_gc_prop[_qp] * c * c / (2 *
_l[_qp]);