https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
CompositeTensorBase< T, U > Class Template Reference

CompositeTensorBase computes a simple T type MaterialProperty \( \bar T\) that is summed up from a list of other T objects (tensors) \( T_i \) with associated weights \( w_i \). More...

#include <CompositeTensorBase.h>

Inheritance diagram for CompositeTensorBase< T, U >:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 CompositeTensorBase (const InputParameters &parameters)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 Fetch a material property if it exists, otherwise return getZeroMaterialProperty.
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 Fetch a material property by name if it exists, otherwise return getZeroMaterialProperty.
 
Moose::Kokkos::MaterialProperty< U, dimension > declareKokkosPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 Declare a derivative Kokkos material property.
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 Check if the material property base exists.
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 Helper functions to generate the material property names for the arbitrary derivatives.
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 Helper functions to generate the material property names for the first derivatives.
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 Helper functions to generate the material property names for the second derivatives.
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 Helper functions to generate the material property names for the third derivatives.
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 Methods for declaring derivative material properties.
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 Methods for retrieving derivative material properties.
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 Convenience methods for retrieving derivative material properties based on a mix of variable names c and indices v into the _coupled_standard_moose_vars vector.
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 Methods for retrieving derivative material properties.
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 Methods for retrieving derivative Kokkos material properties.
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivative (const std::string &base, const SymbolName &c1)
 
Moose::Kokkos::MaterialProperty< U, dimension > getKokkosMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 check if derivatives of the passed in material property exist w.r.t a variable that is not coupled in to the current object
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 aliases for the deprecated old function names
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

void initializeDerivativeProperties (const std::string name)
 Output material properties are initialized here so that derived classes can modify the name.
 
virtual void computeQpTensorProperties (MaterialProperty< T > &M, Real derivative_prefactor=1.0)
 Fill in the.
 

Protected Attributes

std::vector< MaterialPropertyName > _tensor_names
 component tensor names
 
std::vector< MaterialPropertyName > _weight_names
 component weight names
 
unsigned int _num_args
 number of dependent variables
 
unsigned int _num_comp
 number of compomemt tensors and weights
 
std::vector< MaterialProperty< T > * > _dM
 Composed tensor and its derivatives.
 
std::vector< std::vector< MaterialProperty< T > * > > _d2M
 
std::vector< const MaterialProperty< T > * > _tensors
 component tensors and their derivatives w.r.t. the args
 
std::vector< std::vector< const MaterialProperty< T > * > > _dtensors
 
std::vector< std::vector< std::vector< const MaterialProperty< T > * > > > _d2tensors
 
std::vector< const MaterialProperty< Real > * > _weights
 component weights and their derivatives w.r.t. the args
 
std::vector< std::vector< const MaterialProperty< Real > * > > _dweights
 
std::vector< std::vector< std::vector< const MaterialProperty< Real > * > > > _d2weights
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 Check if a material property is present with the applicable restrictions.
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 helper method to combine multiple VariableNames into a vector (if they are != "")
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 helper method to compile list of missing coupled variables for a given system
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

FEProblemBase & _dmi_fe_problem
 Reference to FEProblemBase.
 

Detailed Description

template<class T, class U>
class CompositeTensorBase< T, U >

CompositeTensorBase computes a simple T type MaterialProperty \( \bar T\) that is summed up from a list of other T objects (tensors) \( T_i \) with associated weights \( w_i \).

\( \bar T = \sum_i T_i\cdot w_i \) Derivatives w.r.t. variables are computed accordingly. This base class is used by the CompositeMobilityTensor and CompositeElasticityTensor classes.

Template Parameters
TThe type of the objects to sum together

Definition at line 27 of file CompositeTensorBase.h.

Member Typedef Documentation

◆ SymbolName

Definition at line 35 of file DerivativeMaterialInterface.h.

Constructor & Destructor Documentation

◆ CompositeTensorBase()

template<class T , class U >
CompositeTensorBase< T, U >::CompositeTensorBase ( const InputParameters &  parameters)

Definition at line 81 of file CompositeTensorBase.h.

83 _tensor_names(this->template getParam<std::vector<MaterialPropertyName>>("tensors")),
84 _weight_names(this->template getParam<std::vector<MaterialPropertyName>>("weights")),
95{
96 if (_num_comp != _weight_names.size())
97 mooseError("The number of supplied 'tensors' and 'weights' must match.");
98}
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
std::vector< std::vector< std::vector< const MaterialProperty< T > * > > > _d2tensors
std::vector< std::vector< MaterialProperty< T > * > > _d2M
unsigned int _num_comp
number of compomemt tensors and weights
std::vector< const MaterialProperty< T > * > _tensors
component tensors and their derivatives w.r.t. the args
std::vector< std::vector< const MaterialProperty< Real > * > > _dweights
std::vector< MaterialPropertyName > _weight_names
component weight names
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.
std::vector< std::vector< const MaterialProperty< T > * > > _dtensors
std::vector< MaterialPropertyName > _tensor_names
component tensor names
std::vector< std::vector< std::vector< const MaterialProperty< Real > * > > > _d2weights
unsigned int _num_args
number of dependent variables
Interface class ("Veneer") to provide generator methods for derivative material property names.

Member Function Documentation

◆ buildVariableVector()

std::vector< VariableName > DerivativeMaterialInterface< U >::buildVariableVector ( const VariableName &  c1,
const VariableName &  c2,
const VariableName &  c3 
)
privateinherited

helper method to combine multiple VariableNames into a vector (if they are != "")

Definition at line 226 of file DerivativeMaterialInterface.h.

574{
575 std::vector<VariableName> c;
576 if (c1 != "")
577 {
578 c.push_back(c1);
579 if (c2 != "")
580 {
581 c.push_back(c2);
582 if (c3 != "")
583 c.push_back(c3);
584 }
585 }
586 return c;
587}

◆ computeQpTensorProperties()

template<class T , class U >
void CompositeTensorBase< T, U >::computeQpTensorProperties ( MaterialProperty< T > &  M,
Real  derivative_prefactor = 1.0 
)
protectedvirtual

Fill in the.

  • main tensor property given by M
  • derivatives, set up by initializeDerivativeProperties

The root_property is kept separate from the derivatives to allow the application of this template to the Eigenstrain calculation, which contributes derivatives to a different material property (and uses a derivative_prefactor of -1).

Definition at line 172 of file CompositeTensorBase.h.

174{
175 const unsigned int qp = this->DerivativeMaterialInterface<U>::_qp;
176
177 M[qp].zero();
178 for (unsigned int i = 0; i < _num_comp; ++i)
179 {
180 M[qp] += (*_tensors[i])[qp] * (*_weights[i])[qp];
181
182 for (unsigned int j = 0; j < _num_args; ++j)
183 {
184 if (i == 0)
185 (*_dM[j])[qp].zero();
186
187 (*_dM[j])[qp] += derivative_prefactor * ((*_tensors[i])[qp] * (*_dweights[i][j])[qp] +
188 (*_dtensors[i][j])[qp] * (*_weights[i])[qp]);
189
190 for (unsigned int k = 0; k <= j; ++k)
191 {
192 if (i == 0)
193 (*_d2M[j][k])[qp].zero();
194
195 (*_d2M[j][k])[qp] +=
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]);
199 }
200 }
201 }
202}
const Number zero

◆ declareKokkosPropertyDerivative()

Moose::Kokkos::MaterialProperty< U, dimension > DerivativeMaterialInterface< U >::declareKokkosPropertyDerivative ( const std::string &  base,
const std::vector< SymbolName > &  c 
)
inlineinherited

Declare a derivative Kokkos material property.

Template Parameters
UThe material property type
dimensionThe material property dimension
Parameters
baseThe name of the property to take the derivative of
cThe variable(s) to take the derivatives with respect to
Returns
The declared Kokkos material property

Definition at line 180 of file DerivativeMaterialInterface.h.

181 {
182 return this->template declareKokkosPropertyByName<U, dimension>(
183 derivativePropertyName(base, c));
184 }
const MaterialPropertyName derivativePropertyName(const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
Helper functions to generate the material property names for the arbitrary derivatives.

◆ declarePropertyDerivative() [1/3]

GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::declarePropertyDerivative ( const std::string &  base,
const std::vector< SymbolName > &  c 
)
inherited

Definition at line 63 of file DerivativeMaterialInterface.h.

316{
317 return this->template declareGenericProperty<U, is_ad>(derivativePropertyName(base, c));
318}

◆ declarePropertyDerivative() [2/3]

GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::declarePropertyDerivative ( const std::string &  base,
const std::vector< VariableName > &  c 
)
inherited

Methods for declaring derivative material properties.

Template Parameters
UThe material property type
Parameters
baseThe name of the property to take the derivative of
cThe variable(s) to take the derivatives with respect to

Definition at line 60 of file DerivativeMaterialInterface.h.

306{
307 std::vector<SymbolName> symbol_vector(c.begin(), c.end());
308 return declarePropertyDerivative<U, is_ad>(base, symbol_vector);
309}

◆ declarePropertyDerivative() [3/3]

GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::declarePropertyDerivative ( const std::string &  base,
const SymbolName &  c1,
const SymbolName &  c2 = "",
const SymbolName &  c3 = "" 
)
inherited

Definition at line 67 of file DerivativeMaterialInterface.h.

327{
328 if (c3 != "")
329 return this->template declareGenericProperty<U, is_ad>(
330 derivativePropertyNameThird(base, c1, c2, c3));
331 if (c2 != "")
332 return this->template declareGenericProperty<U, is_ad>(
333 derivativePropertyNameSecond(base, c1, c2));
334 return this->template declareGenericProperty<U, is_ad>(derivativePropertyNameFirst(base, c1));
335}
const MaterialPropertyName derivativePropertyNameThird(const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
Helper functions to generate the material property names for the third derivatives.
const MaterialPropertyName derivativePropertyNameSecond(const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
Helper functions to generate the material property names for the second derivatives.
const MaterialPropertyName derivativePropertyNameFirst(const MaterialPropertyName &base, const SymbolName &c1) const
Helper functions to generate the material property names for the first derivatives.

◆ derivativePropertyName()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::derivativePropertyName ( const MaterialPropertyName &  base,
const std::vector< SymbolName > &  c 
) const
inherited

Helper functions to generate the material property names for the arbitrary derivatives.

Definition at line 16 of file DerivativeMaterialPropertyNameInterface.C.

18{
19 // to obtain well defined names we sort alphabetically
20 std::vector<SymbolName> a(c);
21 std::sort(a.begin(), a.end());
22
23 // derivative order
24 unsigned int order = a.size();
25 if (order == 0)
26 return base;
27
28 // build the property name as a stringstream
29 std::stringstream name;
30
31 // build numerator
32 name << 'd';
33 if (order > 1)
34 name << '^' << order;
35 name << base << '/';
36
37 // build denominator with 'pretty' names using exponents rather than repeat multiplication
38 unsigned int exponent = 1;
39 for (unsigned i = 1; i <= order; ++i)
40 {
41 if (i == order || a[i - 1] != a[i])
42 {
43 name << 'd' << a[i - 1];
44 if (exponent > 1)
45 name << '^' << exponent;
46 exponent = 1;
47 }
48 else
49 exponent++;
50 }
51
52 return name.str();
53}
std::string name(const ElemQuality q)

Referenced by DerivativeMaterialInterface< T >::declareKokkosPropertyDerivative(), DerivativeMaterialPropertyNameInterface::derivativePropertyNameSecond(), DerivativeMaterialPropertyNameInterface::derivativePropertyNameThird(), and DerivativeMaterialPropertyNameInterface::propertyName().

◆ derivativePropertyNameFirst()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::derivativePropertyNameFirst ( const MaterialPropertyName &  base,
const SymbolName &  c1 
) const
inherited

Helper functions to generate the material property names for the first derivatives.

Definition at line 56 of file DerivativeMaterialPropertyNameInterface.C.

58{
59 return "d" + base + "/d" + c1;
60}

Referenced by DerivativeMaterialPropertyNameInterface::propertyNameFirst(), NEML2Action::setupDerivativeMappings(), and NEML2Action::setupParameterDerivativeMappings().

◆ derivativePropertyNameSecond()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::derivativePropertyNameSecond ( const MaterialPropertyName &  base,
const SymbolName &  c1,
const SymbolName &  c2 
) const
inherited

Helper functions to generate the material property names for the second derivatives.

Definition at line 63 of file DerivativeMaterialPropertyNameInterface.C.

65{
66 return derivativePropertyName(base, {c1, c2});
67}

Referenced by DerivativeMaterialPropertyNameInterface::propertyNameSecond().

◆ derivativePropertyNameThird()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::derivativePropertyNameThird ( const MaterialPropertyName &  base,
const SymbolName &  c1,
const SymbolName &  c2,
const SymbolName &  c3 
) const
inherited

Helper functions to generate the material property names for the third derivatives.

Definition at line 70 of file DerivativeMaterialPropertyNameInterface.C.

75{
76 return derivativePropertyName(base, {c1, c2, c3});
77}

Referenced by DerivativeMaterialPropertyNameInterface::propertyNameThird().

◆ getDefaultMaterialProperty()

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getDefaultMaterialProperty ( const std::string &  name)
inherited

Fetch a material property if it exists, otherwise return getZeroMaterialProperty.

Parameters
nameThe input parameter key of type MaterialPropertyName

Definition at line 44 of file DerivativeMaterialInterface.h.

278{
279 // get the base property name
280 std::string prop_name = this->getMaterialPropertyName(name);
281
282 // Check if it's just a constant
283 const auto * default_property =
284 this->template defaultGenericMaterialProperty<U, is_ad>(prop_name);
285 if (default_property)
286 return *default_property;
287
288 // if found return the requested property
289 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(prop_name);
290}

◆ getDefaultMaterialPropertyByName()

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getDefaultMaterialPropertyByName ( const std::string &  name)
inherited

Fetch a material property by name if it exists, otherwise return getZeroMaterialProperty.

Definition at line 49 of file DerivativeMaterialInterface.h.

296{
297 // TODO: deprecate this
298 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(prop_name);
299}

◆ getKokkosMaterialPropertyDerivative() [1/2]

Moose::Kokkos::MaterialProperty< U, dimension > DerivativeMaterialInterface< U >::getKokkosMaterialPropertyDerivative ( const std::string &  base,
const std::vector< SymbolName > &  c 
)
inherited

Methods for retrieving derivative Kokkos material properties.

A constant zero property is returned if the base property is a default (constant) property or if the derivative property is not declared.

Template Parameters
UThe material property type
dimensionThe material property dimension
Parameters
baseThe name of the property to take the derivative of, or the parameter name containing it
cThe variable(s) to take the derivatives with respect to

Definition at line 155 of file DerivativeMaterialInterface.h.

451{
452 const auto prop_name = this->getMaterialPropertyName(base);
453
454 // Derivatives of constants are zero
455 if (MooseUtils::parsesToReal(prop_name))
457
458 return getKokkosMaterialPropertyDerivativeByName<U, dimension>(prop_name, c);
459}
The Kokkos material property class.
bool parsesToReal(const std::string &input, Real *parsed_real)
Definition MooseUtils.C:152

◆ getKokkosMaterialPropertyDerivative() [2/2]

Moose::Kokkos::MaterialProperty< U, dimension > DerivativeMaterialInterface< U >::getKokkosMaterialPropertyDerivative ( const std::string &  base,
const SymbolName &  c1 
)
inlineinherited

Definition at line 159 of file DerivativeMaterialInterface.h.

160 {
161 return getKokkosMaterialPropertyDerivative<U, dimension>(base, std::vector<SymbolName>{c1});
162 }

◆ getKokkosMaterialPropertyDerivativeByName()

Moose::Kokkos::MaterialProperty< U, dimension > DerivativeMaterialInterface< U >::getKokkosMaterialPropertyDerivativeByName ( const MaterialPropertyName &  base,
const std::vector< SymbolName > &  c 
)
inherited

Definition at line 166 of file DerivativeMaterialInterface.h.

466{
467 const auto prop_name = derivativePropertyName(base, c);
468
469 if (!this->template hasKokkosMaterialPropertyByName<U, dimension>(prop_name))
471
472 return this->template getKokkosMaterialPropertyByName<U, dimension>(prop_name);
473}

◆ getMaterialPropertyDerivative() [1/5]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivative ( const std::string &  base,
const std::vector< SymbolName > &  c 
)
inherited

Check if base is a default property and shortcut to returning zero, as derivatives of constants are zero.

Definition at line 86 of file DerivativeMaterialInterface.h.

352{
353 // get the base property name
354 std::string prop_name = this->getMaterialPropertyName(base);
355
360 if (this->template defaultGenericMaterialProperty<U, is_ad>(prop_name))
361 return this->template getGenericZeroMaterialProperty<U, is_ad>();
362
363 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
364 derivativePropertyName(prop_name, c));
365}

◆ getMaterialPropertyDerivative() [2/5]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivative ( const std::string &  base,
const std::vector< VariableName > &  c 
)
inherited

Methods for retrieving derivative material properties.

Template Parameters
UThe material property type
Parameters
baseThe name of the property to take the derivative of
cThe variable(s) to take the derivatives with respect to

Definition at line 82 of file DerivativeMaterialInterface.h.

342{
343 std::vector<SymbolName> symbol_vector(c.begin(), c.end());
344 return getMaterialPropertyDerivative(base, symbol_vector);
345}
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative(const std::string &base, const std::vector< VariableName > &c)
Methods for retrieving derivative material properties.

◆ getMaterialPropertyDerivative() [3/5]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivative ( const std::string &  base,
const SymbolName &  c1,
const SymbolName &  c2 = "",
const SymbolName &  c3 = "" 
)
inherited

Check if base is a default property and shortcut to returning zero, as derivatives of constants are zero.

Definition at line 90 of file DerivativeMaterialInterface.h.

374{
375 // get the base property name
376 std::string prop_name = this->getMaterialPropertyName(base);
377
382 if (this->template defaultGenericMaterialProperty<Real, is_ad>(prop_name))
383 return this->template getGenericZeroMaterialProperty<U, is_ad>();
384
385 if (c3 != "")
386 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
387 derivativePropertyNameThird(prop_name, c1, c2, c3));
388 if (c2 != "")
389 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
390 derivativePropertyNameSecond(prop_name, c1, c2));
391 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
392 derivativePropertyNameFirst(prop_name, c1));
393}

◆ getMaterialPropertyDerivative() [4/5]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivative ( const std::string &  base,
const SymbolName &  c1,
unsigned int  v2,
unsigned int  v3 = libMesh::invalid_uint 
)
inherited

Convenience methods for retrieving derivative material properties based on a mix of variable names c and indices v into the _coupled_standard_moose_vars vector.

Definition at line 103 of file DerivativeMaterialInterface.h.

402{
403 return getMaterialPropertyDerivative<U, is_ad>(
404 base,
405 c1,
406 this->_coupled_standard_moose_vars[v2]->name(),
407 v3 == libMesh::invalid_uint ? "" : this->_coupled_standard_moose_vars[v3]->name());
408}
const unsigned int invalid_uint

◆ getMaterialPropertyDerivative() [5/5]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivative ( const std::string &  base,
unsigned int  v1,
unsigned int  v2 = libMesh::invalid_uint,
unsigned int  v3 = libMesh::invalid_uint 
)
inherited

Definition at line 110 of file DerivativeMaterialInterface.h.

417{
418 return getMaterialPropertyDerivative<U, is_ad>(
419 base,
420 this->_coupled_standard_moose_vars[v1]->name(),
421 v2 == libMesh::invalid_uint ? "" : this->_coupled_standard_moose_vars[v2]->name(),
422 v3 == libMesh::invalid_uint ? "" : this->_coupled_standard_moose_vars[v3]->name());
423}
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...

◆ getMaterialPropertyDerivativeByName() [1/3]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivativeByName ( const MaterialPropertyName &  base,
const std::vector< SymbolName > &  c 
)
inherited

Definition at line 130 of file DerivativeMaterialInterface.h.

440{
441 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
442 derivativePropertyName(base, c));
443}

◆ getMaterialPropertyDerivativeByName() [2/3]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivativeByName ( const MaterialPropertyName &  base,
const std::vector< VariableName > &  c 
)
inherited

Methods for retrieving derivative material properties.

Template Parameters
UThe material property type
Parameters
baseThe name of the property to take the derivative of
cThe variable(s) to take the derivatives with respect to

Definition at line 125 of file DerivativeMaterialInterface.h.

430{
431 std::vector<SymbolName> symbol_vector(c.begin(), c.end());
432 return getMaterialPropertyDerivativeByName(base, symbol_vector);
433}
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName(const MaterialPropertyName &base, const std::vector< VariableName > &c)
Methods for retrieving derivative material properties.

◆ getMaterialPropertyDerivativeByName() [3/3]

const GenericMaterialProperty< U, is_ad > & DerivativeMaterialInterface< U >::getMaterialPropertyDerivativeByName ( const MaterialPropertyName &  base,
const SymbolName &  c1,
const SymbolName &  c2 = "",
const SymbolName &  c3 = "" 
)
inherited

Definition at line 135 of file DerivativeMaterialInterface.h.

484{
485 if (c3 != "")
486 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
487 derivativePropertyNameThird(base, c1, c2, c3));
488 if (c2 != "")
489 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
490 derivativePropertyNameSecond(base, c1, c2));
491 return this->template getGenericZeroMaterialPropertyByName<U, is_ad>(
493}

◆ haveMaterialProperty()

bool DerivativeMaterialInterface< U >::haveMaterialProperty ( const std::string &  prop_name)
privateinherited

Check if a material property is present with the applicable restrictions.

Definition at line 222 of file DerivativeMaterialInterface.h.

264{
265 // Call the correct method to test for material property declarations
266 BlockRestrictable * blk = dynamic_cast<BlockRestrictable *>(this);
267 BoundaryRestrictable * bnd = dynamic_cast<BoundaryRestrictable *>(this);
268 return ((bnd && bnd->boundaryRestricted() &&
269 bnd->template hasBoundaryMaterialProperty<U, is_ad>(prop_name)) ||
270 (blk && blk->template hasBlockMaterialProperty<U, is_ad>(prop_name)) ||
271 (this->template hasGenericMaterialProperty<U, is_ad>(prop_name)));
272}
An interface that restricts an object to subdomains via the 'blocks' input parameter.
/class BoundaryRestrictable /brief Provides functionality for limiting the object to certain boundary...
virtual bool boundaryRestricted() const
Returns true if this object has been restricted to a boundary.

◆ initializeDerivativeProperties()

template<class T , class U >
void CompositeTensorBase< T, U >::initializeDerivativeProperties ( const std::string  name)
protected

Output material properties are initialized here so that derived classes can modify the name.

Definition at line 113 of file CompositeTensorBase.h.

114{
115 // setup output composite tensor and derivatives
116 for (unsigned int j = 0; j < _num_args; ++j)
117 {
118 const VariableName & jname =
119 this->DerivativeMaterialInterface<U>::getVar("coupled_variables", j)->name();
120 _dM[j] = &this->template declarePropertyDerivative<T>(name, jname);
121 _d2M[j].resize(j + 1);
122
123 for (unsigned int k = 0; k <= j; ++k)
124 {
125 const VariableName & kname =
126 this->DerivativeMaterialInterface<U>::getVar("coupled_variables", k)->name();
127
128 _d2M[j][k] = &this->template declarePropertyDerivative<T>(name, jname, kname);
129 }
130 }
131
132 // setup input components and its derivatives
133 for (unsigned int i = 0; i < _num_comp; ++i)
134 {
135 _tensors[i] = &this->template getMaterialPropertyByName<T>(_tensor_names[i]);
136 _weights[i] = &this->template getMaterialPropertyByName<Real>(_weight_names[i]);
137
138 _dtensors[i].resize(_num_args);
139 _dweights[i].resize(_num_args);
140 _d2tensors[i].resize(_num_args);
141 _d2weights[i].resize(_num_args);
142
143 for (unsigned int j = 0; j < _num_args; ++j)
144 {
145 const VariableName & jname =
146 this->DerivativeMaterialInterface<U>::getVar("coupled_variables", j)->name();
147
148 _dtensors[i][j] =
149 &this->template getMaterialPropertyDerivativeByName<T>(_tensor_names[i], jname);
150 _dweights[i][j] =
151 &this->template getMaterialPropertyDerivativeByName<Real>(_weight_names[i], jname);
152
153 _d2tensors[i][j].resize(j + 1);
154 _d2weights[i][j].resize(j + 1);
155
156 for (unsigned int k = 0; k <= j; ++k)
157 {
158 const VariableName & kname =
159 this->DerivativeMaterialInterface<U>::getVar("coupled_variables", k)->name();
160
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);
165 }
166 }
167 }
168}

◆ isNotObjectVariable()

bool DerivativeMaterialInterface< U >::isNotObjectVariable ( const VariableName &  name)
inlineprivateinherited

Definition at line 237 of file DerivativeMaterialInterface.h.

633{
634 // try to cast this to a Kernel pointer
635 KernelBase * kernel_ptr = dynamic_cast<KernelBase *>(this);
636 if (kernel_ptr != nullptr)
637 return kernel_ptr->variable().name() != name;
638
639 // try to cast this to a BoundaryCondition pointer
640 BoundaryCondition * bc_ptr = dynamic_cast<BoundaryCondition *>(this);
641 if (bc_ptr != nullptr)
642 return bc_ptr->variable().name() != name;
643
644 // This interface is not templated on a class derived from either Kernel or BC
645 return true;
646}
Base class for creating new types of boundary conditions.
This is the common base class for the three main kernel types implemented in MOOSE,...
Definition KernelBase.h:29
const std::string & name() const
Get the name of the class.
Definition MooseBase.h:103
virtual const MooseVariableBase & variable() const =0
Returns the variable that this object operates on.

◆ propertyName()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::propertyName ( const MaterialPropertyName &  base,
const std::vector< SymbolName > &  c 
) const
inlineinherited

aliases for the deprecated old function names

Definition at line 58 of file DerivativeMaterialPropertyNameInterface.h.

60 {
61 mooseDeprecated("This function was renamed to 'derivativePropertyName'");
62 return derivativePropertyName(base, c);
63 }
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition MooseError.h:363

◆ propertyNameFirst()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::propertyNameFirst ( const MaterialPropertyName &  base,
const SymbolName &  c1 
) const
inlineinherited

Definition at line 64 of file DerivativeMaterialPropertyNameInterface.h.

66 {
67 mooseDeprecated("This function was renamed to 'derivativePropertyNameFirst'");
68 return derivativePropertyNameFirst(base, c1);
69 }

◆ propertyNameSecond()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::propertyNameSecond ( const MaterialPropertyName &  base,
const SymbolName &  c1,
const SymbolName &  c2 
) const
inlineinherited

Definition at line 70 of file DerivativeMaterialPropertyNameInterface.h.

73 {
74 mooseDeprecated("This function was renamed to 'derivativePropertyNameSecond'");
75 return derivativePropertyNameSecond(base, c1, c2);
76 }

◆ propertyNameThird()

const MaterialPropertyName DerivativeMaterialPropertyNameInterface::propertyNameThird ( const MaterialPropertyName &  base,
const SymbolName &  c1,
const SymbolName &  c2,
const SymbolName &  c3 
) const
inlineinherited

Definition at line 77 of file DerivativeMaterialPropertyNameInterface.h.

81 {
82 mooseDeprecated("This function was renamed to 'derivativePropertyNameThird'");
83 return derivativePropertyNameThird(base, c1, c2, c3);
84 }

◆ validateCoupling() [1/2]

void DerivativeMaterialInterface< U >::validateCoupling ( const MaterialPropertyName &  base,
const std::vector< VariableName > &  c,
bool  validate_aux = true 
)
inherited

check if derivatives of the passed in material property exist w.r.t a variable that is not coupled in to the current object

Definition at line 193 of file DerivativeMaterialInterface.h.

541{
542 // get the base property name
543 std::string prop_name = this->getMaterialPropertyName(base);
544 // list of potentially missing coupled variables
545 std::vector<VariableName> missing;
546
547 // iterate over all variables in the both the non-linear and auxiliary system (optional)
548 validateCouplingHelper<U, is_ad>(
549 prop_name, c, _dmi_fe_problem.getNonlinearSystemBase(/*nl_sys=*/0).system(), missing);
550 if (validate_aux)
551 validateCouplingHelper<U, is_ad>(
552 prop_name, c, _dmi_fe_problem.getAuxiliarySystem().system(), missing);
553
554 if (missing.size() > 0)
555 {
556 // join list of missing variable names
557 std::string list = missing[0];
558 for (unsigned int i = 1; i < missing.size(); ++i)
559 list += ", " + missing[i];
560
561 mooseWarning("Missing coupled variables {",
562 list,
563 "} (add them to coupled_variables parameter of ",
564 this->name(),
565 ")");
566 }
567}
void mooseWarning(Args &&... args)
Emit a warning message with the given stringified, concatenated args.
Definition MooseError.h:345
virtual libMesh::System & system() override
Get the reference to the libMesh system.
FEProblemBase & _dmi_fe_problem
Reference to FEProblemBase.
AuxiliarySystem & getAuxiliarySystem()
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
virtual libMesh::System & system() override
Get the reference to the libMesh system.

◆ validateCoupling() [2/2]

void DerivativeMaterialInterface< U >::validateCoupling ( const MaterialPropertyName &  base,
const VariableName &  c1 = "",
const VariableName &  c2 = "",
const VariableName &  c3 = "" 
)
inherited

Definition at line 198 of file DerivativeMaterialInterface.h.

596{
597 validateCoupling<U, is_ad>(base, buildVariableVector(c1, c2, c3), true);
598}
std::vector< VariableName > buildVariableVector(const VariableName &c1, const VariableName &c2, const VariableName &c3)
helper method to combine multiple VariableNames into a vector (if they are != "")

◆ validateCouplingHelper()

void DerivativeMaterialInterface< U >::validateCouplingHelper ( const MaterialPropertyName &  base,
const std::vector< VariableName > &  c,
const System &  system,
std::vector< VariableName > &  missing 
)
privateinherited

helper method to compile list of missing coupled variables for a given system

Definition at line 230 of file DerivativeMaterialInterface.h.

502{
503 unsigned int ncoupled = this->_coupled_standard_moose_vars.size();
504
505 // iterate over all variables in the current system (in groups)
506 for (unsigned int i = 0; i < system.n_variable_groups(); ++i)
507 {
508 const libMesh::VariableGroup & vg = system.variable_group(i);
509 for (unsigned int j = 0; j < vg.n_variables(); ++j)
510 {
511 std::vector<SymbolName> cj(c.begin(), c.end());
512 SymbolName jname = vg.name(j);
513 cj.push_back(jname);
514
515 // if the derivative exists make sure the variable is coupled
516 if (haveMaterialProperty<U, is_ad>(derivativePropertyName(base, cj)))
517 {
518 // kernels and BCs to not have the variable they are acting on in coupled_moose_vars
519 bool is_missing = isNotObjectVariable(jname);
520
521 for (unsigned int k = 0; k < ncoupled; ++k)
522 if (this->_coupled_standard_moose_vars[k]->name() == jname)
523 {
524 is_missing = false;
525 break;
526 }
527
528 if (is_missing)
529 missing.push_back(jname);
530 }
531 }
532 }
533}
DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
bool isNotObjectVariable(const VariableName &name)
unsigned int n_variables() const
const std::string & name(unsigned int v) const

◆ validateDerivativeMaterialPropertyBase()

void DerivativeMaterialInterface< U >::validateDerivativeMaterialPropertyBase ( const std::string &  base)
inherited

Check if the material property base exists.

Print a warning if it doesn't. This is useful in materials that pull in only derivative properties, which are optional. If the base property name has a typo all derivatives will be set to zero without the user ever knowing.

Definition at line 217 of file DerivativeMaterialInterface.h.

615{
616 // resolve the input parameter name base to the actual material property name
617 const MaterialPropertyName prop_name = this->template getParam<MaterialPropertyName>(base);
618
619 // check if the material property does not exist on the blocks of the current object,
620 // and check if it is not a plain number in the input file
621 if (!haveMaterialProperty<U, is_ad>(prop_name) &&
622 this->template defaultGenericMaterialProperty<U, is_ad>(prop_name) == 0)
623 mooseWarning("The material property '",
624 prop_name,
625 "' does not exist. The kernel '",
626 this->name(),
627 "' only needs its derivatives, but this may indicate a typo in the input file.");
628}

◆ validateNonlinearCoupling()

void DerivativeMaterialInterface< U >::validateNonlinearCoupling ( const MaterialPropertyName &  base,
const VariableName &  c1 = "",
const VariableName &  c2 = "",
const VariableName &  c3 = "" 
)
inherited

Definition at line 204 of file DerivativeMaterialInterface.h.

607{
608 validateCoupling<U, is_ad>(base, buildVariableVector(c1, c2, c3), false);
609}

◆ validParams()

template<class T , class U >
InputParameters CompositeTensorBase< T, U >::validParams ( )
static

Definition at line 102 of file CompositeTensorBase.h.

103{
104 InputParameters params = U::validParams();
105 params.addRequiredParam<std::vector<MaterialPropertyName>>("tensors", "Component tensors");
106 params.addRequiredParam<std::vector<MaterialPropertyName>>("weights", "Component weights");
107 params.addRequiredCoupledVar("coupled_variables", "variable dependencies for the prefactor");
108 return params;
109}
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
This method adds a coupled variable name pair.
void addRequiredParam(const std::string &name, const std::string &doc_string)
This method adds a parameter and documentation string to the InputParameters object that will be extr...

Member Data Documentation

◆ _d2M

template<class T , class U >
std::vector<std::vector<MaterialProperty<T> *> > CompositeTensorBase< T, U >::_d2M
protected

Definition at line 64 of file CompositeTensorBase.h.

◆ _d2tensors

template<class T , class U >
std::vector<std::vector<std::vector<const MaterialProperty<T> *> > > CompositeTensorBase< T, U >::_d2tensors
protected

Definition at line 70 of file CompositeTensorBase.h.

◆ _d2weights

template<class T , class U >
std::vector<std::vector<std::vector<const MaterialProperty<Real> *> > > CompositeTensorBase< T, U >::_d2weights
protected

Definition at line 76 of file CompositeTensorBase.h.

◆ _dM

template<class T , class U >
std::vector<MaterialProperty<T> *> CompositeTensorBase< T, U >::_dM
protected

Composed tensor and its derivatives.

Definition at line 63 of file CompositeTensorBase.h.

◆ _dmi_fe_problem

FEProblemBase& DerivativeMaterialInterface< U >::_dmi_fe_problem
privateinherited

Reference to FEProblemBase.

Definition at line 240 of file DerivativeMaterialInterface.h.

◆ _dtensors

template<class T , class U >
std::vector<std::vector<const MaterialProperty<T> *> > CompositeTensorBase< T, U >::_dtensors
protected

Definition at line 69 of file CompositeTensorBase.h.

◆ _dweights

template<class T , class U >
std::vector<std::vector<const MaterialProperty<Real> *> > CompositeTensorBase< T, U >::_dweights
protected

Definition at line 75 of file CompositeTensorBase.h.

◆ _num_args

template<class T , class U >
unsigned int CompositeTensorBase< T, U >::_num_args
protected

number of dependent variables

Definition at line 58 of file CompositeTensorBase.h.

◆ _num_comp

template<class T , class U >
unsigned int CompositeTensorBase< T, U >::_num_comp
protected

number of compomemt tensors and weights

Definition at line 60 of file CompositeTensorBase.h.

Referenced by CompositeTensorBase< T, U >::CompositeTensorBase().

◆ _tensor_names

template<class T , class U >
std::vector<MaterialPropertyName> CompositeTensorBase< T, U >::_tensor_names
protected

component tensor names

Definition at line 53 of file CompositeTensorBase.h.

◆ _tensors

template<class T , class U >
std::vector<const MaterialProperty<T> *> CompositeTensorBase< T, U >::_tensors
protected

component tensors and their derivatives w.r.t. the args

Definition at line 68 of file CompositeTensorBase.h.

◆ _weight_names

template<class T , class U >
std::vector<MaterialPropertyName> CompositeTensorBase< T, U >::_weight_names
protected

component weight names

Definition at line 55 of file CompositeTensorBase.h.

Referenced by CompositeTensorBase< T, U >::CompositeTensorBase().

◆ _weights

template<class T , class U >
std::vector<const MaterialProperty<Real> *> CompositeTensorBase< T, U >::_weights
protected

component weights and their derivatives w.r.t. the args

Definition at line 74 of file CompositeTensorBase.h.


The documentation for this class was generated from the following file: