26 template <
class T, 
class U>
    63   std::vector<MaterialProperty<T> *> 
_dM;
    64   std::vector<std::vector<MaterialProperty<T> *>> 
_d2M;
    68   std::vector<const MaterialProperty<T> *> 
_tensors;
    69   std::vector<std::vector<const MaterialProperty<T> *>> 
_dtensors;
    70   std::vector<std::vector<std::vector<const MaterialProperty<T> *>>> 
_d2tensors;
    74   std::vector<const MaterialProperty<Real> *> 
_weights;
    75   std::vector<std::vector<const MaterialProperty<Real> *>> 
_dweights;
    76   std::vector<std::vector<std::vector<const MaterialProperty<Real> *>>> 
_d2weights;
    80 template <
class T, 
class U>
    83     _tensor_names(this->template getParam<
std::vector<MaterialPropertyName>>(
"tensors")),
    84     _weight_names(this->template getParam<
std::vector<MaterialPropertyName>>(
"weights")),
    86     _num_comp(_tensor_names.size()),
    91     _d2tensors(_num_comp),
    97     mooseError(
"The number of supplied 'tensors' and 'weights' must match.");
   100 template <
class T, 
class U>
   105   params.
addRequiredParam<std::vector<MaterialPropertyName>>(
"tensors", 
"Component tensors");
   106   params.
addRequiredParam<std::vector<MaterialPropertyName>>(
"weights", 
"Component weights");
   111 template <
class T, 
class U>
   116   for (
unsigned int j = 0; j < _num_args; ++j)
   118     const VariableName & jname =
   120     _dM[j] = &this->
template declarePropertyDerivative<T>(
name, jname);
   121     _d2M[j].resize(j + 1);
   123     for (
unsigned int k = 0; k <= j; ++k)
   125       const VariableName & kname =
   128       _d2M[j][k] = &this->
template declarePropertyDerivative<T>(
name, jname, kname);
   133   for (
unsigned int i = 0; i < _num_comp; ++i)
   135     _tensors[i] = &this->
template getMaterialPropertyByName<T>(_tensor_names[i]);
   136     _weights[i] = &this->
template getMaterialPropertyByName<Real>(_weight_names[i]);
   138     _dtensors[i].resize(_num_args);
   139     _dweights[i].resize(_num_args);
   140     _d2tensors[i].resize(_num_args);
   141     _d2weights[i].resize(_num_args);
   143     for (
unsigned int j = 0; j < _num_args; ++j)
   145       const VariableName & jname =
   149           &this->
template getMaterialPropertyDerivativeByName<T>(_tensor_names[i], jname);
   151           &this->
template getMaterialPropertyDerivativeByName<Real>(_weight_names[i], jname);
   153       _d2tensors[i][j].resize(j + 1);
   154       _d2weights[i][j].resize(j + 1);
   156       for (
unsigned int k = 0; k <= j; ++k)
   158         const VariableName & kname =
   161         _d2tensors[i][j][k] =
   162             &this->
template getMaterialPropertyDerivativeByName<T>(_tensor_names[i], jname, kname);
   163         _d2weights[i][j][k] = &this->
template getMaterialPropertyDerivativeByName<Real>(
   164             _weight_names[i], jname, kname);
   170 template <
class T, 
class U>
   173                                                      Real derivative_prefactor)
   178   for (
unsigned int i = 0; i < _num_comp; ++i)
   180     M[qp] += (*_tensors[i])[qp] * (*_weights[i])[qp];
   182     for (
unsigned int j = 0; j < _num_args; ++j)
   185         (*_dM[j])[qp].
zero();
   187       (*_dM[j])[qp] += derivative_prefactor * ((*_tensors[i])[qp] * (*_dweights[i][j])[qp] +
   188                                                (*_dtensors[i][j])[qp] * (*_weights[i])[qp]);
   190       for (
unsigned int k = 0; k <= j; ++k)
   193           (*_d2M[j][k])[qp].
zero();
   196             derivative_prefactor * (2.0 * (*_dtensors[i][j])[qp] * (*_dweights[i][j])[qp] +
   197                                     (*_tensors[i])[qp] * (*_d2weights[i][j][k])[qp] +
   198                                     (*_d2tensors[i][j][k])[qp] * (*_weights[i])[qp]);
 std::string name(const ElemQuality q)
CompositeTensorBase computes a simple T type MaterialProperty  that is summed up from a list of other...
std::vector< const MaterialProperty< Real > * > _weights
component weights and their derivatives w.r.t. the args 
std::vector< MaterialProperty< T > * > _dM
Composed tensor and its derivatives. 
static InputParameters validParams()
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
std::vector< MaterialPropertyName > _weight_names
component weight names 
virtual void computeQpTensorProperties(MaterialProperty< T > &M, Real derivative_prefactor=1.0)
Fill in the. 
std::vector< std::vector< std::vector< const MaterialProperty< Real > * > > > _d2weights
InputParameters validParams()
void initializeDerivativeProperties(const std::string name)
Output material properties are initialized here so that derived classes can modify the name...
std::vector< const MaterialProperty< T > * > _tensors
component tensors and their derivatives w.r.t. the args 
CompositeTensorBase(const InputParameters ¶meters)
std::vector< std::vector< const MaterialProperty< T > * > > _dtensors
unsigned int _num_comp
number of compomemt tensors and weights 
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Interface class ("Veneer") to provide generator methods for derivative material property names...
std::vector< std::vector< const MaterialProperty< Real > * > > _dweights
unsigned int _num_args
number of dependent variables 
std::vector< std::vector< MaterialProperty< T > * > > _d2M
std::vector< MaterialPropertyName > _tensor_names
component tensor names 
std::vector< std::vector< std::vector< const MaterialProperty< T > * > > > _d2tensors