20 params.addClassDescription(
"Compute an isotropic elasticity tensor for elastic constants that "
21 "change as a function of material properties");
22 params.addRequiredParam<MaterialPropertyName>(
"youngs_modulus",
23 "Name of material defining the Young's Modulus");
24 params.addRequiredParam<MaterialPropertyName>(
"poissons_ratio",
25 "Name of material defining the Poisson's Ratio");
26 params.addRequiredCoupledVar(
27 "args",
"Variable dependence for the Young's Modulus and Poisson's Ratio materials");
32 const InputParameters & parameters)
34 _youngs_modulus(getMaterialProperty<Real>(
"youngs_modulus")),
35 _poissons_ratio(getMaterialProperty<Real>(
"poissons_ratio")),
36 _num_args(coupledComponents(
"args")),
37 _dyoungs_modulus(_num_args),
38 _d2youngs_modulus(_num_args),
39 _dpoissons_ratio(_num_args),
40 _d2poissons_ratio(_num_args),
41 _delasticity_tensor(_num_args),
42 _d2elasticity_tensor(_num_args),
43 _isotropic_elastic_constants(2)
49 for (
unsigned int i = 0; i <
_num_args; ++i)
51 const VariableName & iname = getVar(
"args", i)->name();
52 _dyoungs_modulus[i] = &getMaterialPropertyDerivative<Real>(
"youngs_modulus", iname);
53 _dpoissons_ratio[i] = &getMaterialPropertyDerivative<Real>(
"poissons_ratio", iname);
62 for (
unsigned int j = i; j <
_num_args; ++j)
64 const VariableName & jname = getVar(
"args", j)->name();
66 &getMaterialPropertyDerivative<Real>(
"youngs_modulus", iname, jname);
68 &getMaterialPropertyDerivative<Real>(
"poissons_ratio", iname, jname);
78 validateCoupling<Real>(
"youngs_modulus");
79 validateCoupling<Real>(
"poissons_ratio");
80 for (
unsigned int i = 0; i <
_num_args; ++i)
82 const VariableName & iname = getVar(
"args", i)->name();
84 if (!_fe_problem.isMatPropRequested(
88 for (
unsigned int j = 0; j <
_num_args; ++j)
90 const VariableName & jname = getVar(
"args", j)->name();
91 if (!_fe_problem.isMatPropRequested(
112 for (
unsigned int i = 0; i <
_num_args; ++i)
119 const Real dlambda = (E * dnu + dE * nu) / ((1.0 + nu) * (1.0 - 2.0 * nu)) -
120 E * nu * dnu / ((1.0 + nu) * (1.0 + nu) * (1.0 - 2.0 * nu)) +
121 2.0 * E * nu * dnu / ((1.0 + nu) * (1.0 - 2.0 * nu) * (1.0 - 2.0 * nu));
122 const Real dG = dE / (2.0 * (1.0 + nu)) - 2.0 * E * dnu / (4.0 * (1.0 + nu) * (1.0 + nu));
127 for (
unsigned int j = i; j <
_num_args; ++j)
139 const Real d2lambda =
140 1.0 / ((1.0 + nu) * (2.0 * nu - 1.0)) *
141 (-E * d2nu - nu * d2E - dEi * dnuj - dEj * dnui +
142 (2.0 * E * d2nu * nu + 4.0 * dnui * dnuj * E + 2.0 * dEi * dnuj * nu +
143 2.0 * dEj * dnui * nu) /
145 8.0 * dnui * dnuj * E * nu / ((2.0 * nu - 1.0) * (2.0 * nu - 1.0)) +
146 (E * d2nu * nu + 2.0 * E * dnui * dnuj + dEi * dnuj * nu + dEj * dnui * nu) /
148 4.0 * E * nu * dnui * dnuj / ((1.0 + nu) * (2.0 * nu - 1.0)) -
149 2.0 * E * dnui * dnuj * nu / ((nu + 1.0) * (nu + 1.0)));
150 const Real d2G = 1.0 / (nu + 1.0) *
151 (0.5 * d2E - (E * d2nu + dEi * dnuj + dEj * dnui) / (2.0 * nu + 2.0) +
152 dnui * dnuj * E / ((nu + 1.0) * (nu + 1.0)));