11 #include "RankTwoTensor.h"
21 params.addClassDescription(
"Computes an eigenstrain that is defined by a set of scalar material "
22 "properties that summed together define the volumetric change. This "
23 "also computes the derivatives of that eigenstrain with respect to a "
24 "supplied set of variable dependencies.");
25 params.addRequiredParam<std::vector<MaterialPropertyName>>(
26 "volumetric_materials",
"List of scalar materials defining the volumetric change");
27 params.addRequiredCoupledVar(
"args",
"variable dependencies for the volumetric_expansion");
33 _num_args(coupledComponents(
"args")),
34 _volumetric_material_names(getParam<std::vector<MaterialPropertyName>>(
"volumetric_materials")),
35 _volumetric_materials(_volumetric_material_names.size()),
36 _dvolumetric_materials(_volumetric_material_names.size()),
37 _d2volumetric_materials(_volumetric_material_names.size()),
38 _delastic_strain(_num_args),
39 _d2elastic_strain(_num_args)
50 for (
unsigned int j = 0; j <
_num_args; ++j)
52 const VariableName & jname = getVar(
"args", j)->name();
56 for (
unsigned int k = j; k <
_num_args; ++k)
58 const VariableName & kname = getVar(
"args", k)->name();
60 &getMaterialPropertyDerivative<Real>(
"prefactor", jname, kname);
65 for (
unsigned int j = 0; j <
_num_args; ++j)
67 const VariableName & jname = getVar(
"args", j)->name();
69 &declarePropertyDerivative<RankTwoTensor>(_base_name +
"elastic_strain", jname);
72 for (
unsigned int k = j; k <
_num_args; ++k)
74 const VariableName & kname = getVar(
"args", k)->name();
76 &declarePropertyDerivative<RankTwoTensor>(_base_name +
"elastic_strain", jname, kname);
85 validateCoupling<Real>(vmn);
87 for (
unsigned int i = 0; i <
_num_args; ++i)
89 const VariableName & iname = getVar(
"args", i)->name();
90 if (_fe_problem.isMatPropRequested(
91 derivativePropertyNameFirst(_base_name +
"elastic_strain", iname)))
92 mooseError(
"Derivative of elastic_strain requested, but not yet implemented");
95 for (
unsigned int j = 0; j <
_num_args; ++j)
97 const VariableName & jname = getVar(
"args", j)->name();
98 if (_fe_problem.isMatPropRequested(
99 derivativePropertyNameSecond(_base_name +
"elastic_strain", iname, jname)))
100 mooseError(
"Second Derivative of elastic_strain requested, but not yet implemented");
110 Real volumetric_strain = 0;
114 const Real eigenstrain_comp = computeVolumetricStrainComponent(volumetric_strain);
115 _eigenstrain[_qp].zero();
116 _eigenstrain[_qp].addIa(eigenstrain_comp);