12 #include "libmesh/quadrature.h" 23 params.
addParam<std::vector<std::string>>(
"sum_materials",
24 "Base name of the parsed sum material property");
31 "Vector of displacement gradient variables (see " 32 "Modules/PhaseField/DisplacementGradients " 36 params.
addParam<std::vector<Real>>(
"prefactor", {},
"Prefactor to multiply the sum term with.");
37 params.
addParam<
Real>(
"constant", 0.0,
"Constant to be added to the prefactor multiplied sum.");
39 params.
addParam<
bool>(
"validate_coupling",
41 "Check if all variables the specified materials depend on are listed in " 42 "the `coupled_variables` parameter.");
51 _sum_materials(this->template getParam<
std::vector<
std::string>>(
"sum_materials")),
52 _num_materials(_sum_materials.size()),
53 _prefactor(_num_materials, 1.0),
54 _constant(this->template getParam<
Real>(
"constant")),
55 _validate_coupling(this->template getParam<bool>(
"validate_coupling"))
59 mooseError(
"Please supply at least one material to sum in DerivativeSumMaterial ",
name());
62 std::vector<Real> p = this->
template getParam<std::vector<Real>>(
"prefactor");
67 else if (p.size() != 0)
68 mooseError(
"Supply the same number of sum materials and prefactors.");
83 for (
unsigned int i = 0; i <
_nargs; ++i)
85 _summand_dF[n][i] = &this->
template getMaterialPropertyDerivative<Real, is_ad>(
92 for (
unsigned int j = 0; j <
_nargs; ++j)
94 _summand_d2F[n][i][j] = &this->
template getMaterialPropertyDerivative<Real, is_ad>(
101 for (
unsigned int k = 0; k <
_nargs; ++k)
102 _summand_d3F[n][i][j][k] = &this->
template getMaterialPropertyDerivative<Real, is_ad>(
110 template <
bool is_ad>
114 if (_validate_coupling)
115 for (
unsigned int n = 0; n < _num_materials; ++n)
116 this->
template validateCoupling<Real>(_sum_materials[n]);
119 template <
bool is_ad>
123 unsigned int i, j, k;
125 for (_qp = 0; _qp < _qrule->n_points(); _qp++)
130 (*_prop_F)[_qp] = (*_summand_F[0])[_qp] * _prefactor[0];
131 for (
unsigned int n = 1; n < _num_materials; ++n)
132 (*_prop_F)[_qp] += (*_summand_F[n])[_qp] * _prefactor[n];
135 for (i = 0; i < _nargs; ++i)
140 (*_prop_dF[i])[_qp] = (*_summand_dF[0][i])[_qp] * _prefactor[0];
141 for (
unsigned int n = 1; n < _num_materials; ++n)
142 (*_prop_dF[i])[_qp] += (*_summand_dF[n][i])[_qp] * _prefactor[n];
146 for (j = i; j < _nargs; ++j)
150 (*_prop_d2F[i][j])[_qp] = (*_summand_d2F[0][i][j])[_qp] * _prefactor[0];
151 for (
unsigned int n = 1; n < _num_materials; ++n)
152 (*_prop_d2F[i][j])[_qp] += (*_summand_d2F[n][i][j])[_qp] * _prefactor[n];
156 if (_third_derivatives)
158 for (k = j; k < _nargs; ++k)
159 if (_prop_d3F[i][j][k])
161 (*_prop_d3F[i][j][k])[_qp] = (*_summand_d3F[0][i][j][k])[_qp] * _prefactor[0];
162 for (
unsigned int n = 1; n < _num_materials; ++n)
163 (*_prop_d3F[i][j][k])[_qp] += (*_summand_d3F[n][i][j][k])[_qp] * _prefactor[n];
DerivativeSumMaterialTempl(const InputParameters ¶meters)
std::vector< std::string > _sum_materials
std::vector< std::vector< std::vector< const GenericMaterialProperty< Real, is_ad > * > > > _summand_d2F
Second derivatives of the summands.
std::vector< std::vector< std::vector< std::vector< const GenericMaterialProperty< Real, is_ad > * > > > > _summand_d3F
Third derivatives of the summands.
std::vector< Real > _prefactor
arguments to construct a sum of the form
virtual const std::string & name() const
Get the name of the class.
virtual void initialSetup()
Check if we got the right number of components in the 'coupled_variables' vector. ...
std::vector< std::string > _arg_names
String vector of all argument names.
std::vector< std::vector< const GenericMaterialProperty< Real, is_ad > * > > _summand_dF
Derivatives of the summands with respect to arg[i].
virtual void computeProperties()
Performs the quadrature point loop, calling computeQpProperties.
registerMooseObject("MooseApp", DerivativeSumMaterial)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool _third_derivatives
Calculate (and allocate memory for) the third derivatives of the free energy.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
Material base class to compute a function and its derivatives.
unsigned int _nargs
Number of coupled arguments.
std::vector< const GenericMaterialProperty< Real, is_ad > * > _summand_F
Function values of the summands.
unsigned int _num_materials
static InputParameters validParams()
static InputParameters validParams()