11 #include "RankTwoTensor.h"
12 #include "RankFourTensor.h"
20 InputParameters params = validParams<DerivativeFunctionMaterialBase>();
21 params.addClassDescription(
"Free energy material for the elastic energy contributions.");
22 params.addParam<std::string>(
"base_name",
"Material property base name");
23 params.addRequiredCoupledVar(
"args",
"Arguments of F() - use vector coupling");
24 params.addCoupledVar(
"displacement_gradients",
25 "Vector of displacement gradient variables (see "
26 "Modules/PhaseField/DisplacementGradients "
32 : DerivativeFunctionMaterialBase(parameters),
33 _base_name(isParamValid(
"base_name") ? getParam<std::string>(
"base_name") +
"_" :
""),
34 _stress(getMaterialPropertyByName<
RankTwoTensor>(_base_name +
"stress")),
35 _elasticity_tensor(getMaterialPropertyByName<
RankFourTensor>(_base_name +
"elasticity_tensor")),
36 _strain(getMaterialPropertyByName<
RankTwoTensor>(_base_name +
"elastic_strain"))
45 for (
unsigned int i = 0; i < _nargs; ++i)
47 _dstrain[i] = &getMaterialPropertyDerivativeByName<RankTwoTensor>(
_base_name +
"elastic_strain",
50 _base_name +
"elasticity_tensor", _arg_names[i]);
55 for (
unsigned int j = 0; j < _nargs; ++j)
57 _d2strain[i][j] = &getMaterialPropertyDerivativeByName<RankTwoTensor>(
58 _base_name +
"elastic_strain", _arg_names[i], _arg_names[j]);
60 _base_name +
"elasticity_tensor", _arg_names[i], _arg_names[j]);
68 validateCoupling<RankTwoTensor>(
_base_name +
"elastic_strain");
69 validateCoupling<RankFourTensor>(
_base_name +
"elasticity_tensor");
81 unsigned int i = argIndex(i_var);
91 unsigned int i = argIndex(i_var);
92 unsigned int j = argIndex(j_var);
100 .doubleContraction(
_strain[_qp]) +
103 .doubleContraction((*
_dstrain[j])[_qp])
109 .doubleContraction((*
_dstrain[i])[_qp]) +