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
SwitchingFunctionMultiPhaseMaterialTempl< is_ad > Class Template Reference

SwitchingFunctionMultiPhaseMaterial is a switching function for a multi-phase, multi-order parameter system. More...

#include <SwitchingFunctionMultiPhaseMaterial.h>

Inheritance diagram for SwitchingFunctionMultiPhaseMaterialTempl< is_ad >:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 SwitchingFunctionMultiPhaseMaterialTempl (const InputParameters &parameters)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
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="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
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)
 
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)
 
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 > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
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)
 
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)
 
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="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
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="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
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="")
 
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
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
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 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
 
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

virtual void computeQpProperties ()
 

Protected Attributes

MaterialPropertyName _h_name
 Name of the function.
 
const unsigned int _num_eta_p
 Order parameters for phase alpha.
 
const std::vector< const GenericVariableValue< is_ad > * > _eta_p
 
const std::vector< VariableName > _eta_p_names
 
const unsigned int _num_eta
 Order parameters for all phases (including alpha)
 
const std::vector< const GenericVariableValue< is_ad > * > _eta
 
const std::vector< VariableName > _eta_names
 
std::vector< bool > _is_p
 List of which order parameters in the full list of all etas belong to phase p.
 
GenericMaterialProperty< Real, is_ad > & _prop_h
 Switching function and derivatives.
 
std::vector< GenericMaterialProperty< Real, is_ad > * > _prop_dh
 
std::vector< std::vector< GenericMaterialProperty< Real, is_ad > * > > _prop_d2h
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

FEProblemBase_dmi_fe_problem
 

Detailed Description

template<bool is_ad>
class SwitchingFunctionMultiPhaseMaterialTempl< is_ad >

SwitchingFunctionMultiPhaseMaterial is a switching function for a multi-phase, multi-order parameter system.

Defined by Moelans, Acta Mat., v 59, p.1077-1086 (2011). For phase alpha, the switching function is \( h_\alpha = (sum_i \eta_{\alpha i}^2) / (sum_\rho sum_i \eta_{\rho i}^2) \) for phase alpha, where \( i \) indexes grains of a phase and \( rho \) indexes phases

Definition at line 25 of file SwitchingFunctionMultiPhaseMaterial.h.

Constructor & Destructor Documentation

◆ SwitchingFunctionMultiPhaseMaterialTempl()

Definition at line 31 of file SwitchingFunctionMultiPhaseMaterial.C.

34 _h_name(this->getParam<MaterialPropertyName>("h_name")),
35 _num_eta_p(coupledComponents("phase_etas")),
36 _eta_p(coupledGenericValues<is_ad>("phase_etas")),
37 _eta_p_names(coupledNames("phase_etas")),
38 _num_eta(coupledComponents("all_etas")),
39 _eta(coupledGenericValues<is_ad>("all_etas")),
40 _eta_names(coupledNames("all_etas")),
42 _prop_h(declareGenericProperty<Real, is_ad>(_h_name)),
45{
46 // Declare h derivative properties
47 for (unsigned int i = 0; i < _num_eta; ++i)
48 _prop_d2h[i].resize(_num_eta, NULL);
49
50 for (unsigned int i = 0; i < _num_eta; ++i)
51 {
52 _prop_dh[i] = &this->template declarePropertyDerivative<Real, is_ad>(_h_name, _eta_names[i]);
53 for (unsigned int j = i; j < _num_eta; ++j)
54 {
55 _prop_d2h[i][j] = _prop_d2h[j][i] = &this->template declarePropertyDerivative<Real, is_ad>(
57 }
58 }
59
60 // Determine which order parameters in the list of all etas belong to phase p
61 for (unsigned int i = 0; i < _num_eta; ++i)
62 {
63 _is_p[i] = false;
64 for (unsigned int j = 0; j < _num_eta_p; ++j)
65 {
66 if (_eta_names[i] == _eta_p_names[j])
67 _is_p[i] = true;
68 }
69 }
70}
GenericMaterialProperty< Real, is_ad > & _prop_h
Switching function and derivatives.
MaterialPropertyName _h_name
Name of the function.
const unsigned int _num_eta
Order parameters for all phases (including alpha)
const unsigned int _num_eta_p
Order parameters for phase alpha.
std::vector< std::vector< GenericMaterialProperty< Real, is_ad > * > > _prop_d2h
const std::vector< const GenericVariableValue< is_ad > * > _eta
const std::vector< const GenericVariableValue< is_ad > * > _eta_p
std::vector< GenericMaterialProperty< Real, is_ad > * > _prop_dh
std::vector< bool > _is_p
List of which order parameters in the full list of all etas belong to phase p.

Member Function Documentation

◆ computeQpProperties()

template<bool is_ad>
void SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::computeQpProperties ( )
protectedvirtual

Definition at line 74 of file SwitchingFunctionMultiPhaseMaterial.C.

75{
76 GenericReal<is_ad> sum_p = 0.0;
77 GenericReal<is_ad> sum_all = 0.0;
78
79 for (unsigned int i = 0; i < _num_eta_p; ++i)
80 sum_p += (*_eta_p[i])[_qp] * (*_eta_p[i])[_qp];
81
82 for (unsigned int i = 0; i < _num_eta; ++i)
83 sum_all += (*_eta[i])[_qp] * (*_eta[i])[_qp];
84
85 GenericReal<is_ad> sum_notp = sum_all - sum_p;
86
87 _prop_h[_qp] = sum_p / sum_all;
88
89 for (unsigned int i = 0; i < _num_eta; ++i)
90 {
91 // First derivatives
92 if (_is_p[i])
93 (*_prop_dh[i])[_qp] = 2.0 * (*_eta[i])[_qp] * sum_notp / (sum_all * sum_all);
94 else
95 (*_prop_dh[i])[_qp] = -2.0 * (*_eta[i])[_qp] * sum_p / (sum_all * sum_all);
96
97 // Second derivatives
98 for (unsigned int j = 0; j < _num_eta; ++j)
99 {
100 if (i == j)
101 {
102 if (_is_p[i])
103 (*_prop_d2h[i][j])[_qp] =
104 (2.0 * sum_all * sum_notp - 8.0 * (*_eta[i])[_qp] * (*_eta[i])[_qp] * sum_notp) /
105 (sum_all * sum_all * sum_all);
106 else
107 (*_prop_d2h[i][j])[_qp] =
108 (-2.0 * sum_p * sum_all + 8.0 * (*_eta[i])[_qp] * (*_eta[i])[_qp] * sum_p) /
109 (sum_all * sum_all * sum_all);
110 }
111 else if (_is_p[i] && _is_p[j])
112 (*_prop_d2h[i][j])[_qp] =
113 -8.0 * (*_eta[i])[_qp] * (*_eta[j])[_qp] * sum_notp / (sum_all * sum_all * sum_all);
114 else if (!_is_p[i] && !_is_p[j])
115 (*_prop_d2h[i][j])[_qp] =
116 8.0 * (*_eta[i])[_qp] * (*_eta[j])[_qp] * sum_p / (sum_all * sum_all * sum_all);
117 else
118 (*_prop_d2h[i][j])[_qp] = (4.0 * sum_all - 8.0 * sum_notp) * (*_eta[i])[_qp] *
119 (*_eta[j])[_qp] / (sum_all * sum_all * sum_all);
120 }
121 }
122}
Moose::GenericType< Real, is_ad > GenericReal

◆ validParams()

template<bool is_ad>
InputParameters SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::validParams ( )
static

Definition at line 18 of file SwitchingFunctionMultiPhaseMaterial.C.

19{
21 params.addRequiredParam<MaterialPropertyName>(
22 "h_name", "Name of the switching function material property for the given phase");
23 params.addRequiredCoupledVar("phase_etas", "Vector of order parameters for the given phase");
24 params.addRequiredCoupledVar("all_etas", "Vector of all order parameters for all phases");
25 params.addClassDescription("Calculates the switching function for a given phase for a "
26 "multi-phase, multi-order parameter model");
27 return params;
28}
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()

Member Data Documentation

◆ _eta

template<bool is_ad>
const std::vector<const GenericVariableValue<is_ad> *> SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_eta
protected

Definition at line 45 of file SwitchingFunctionMultiPhaseMaterial.h.

◆ _eta_names

template<bool is_ad>
const std::vector<VariableName> SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_eta_names
protected

◆ _eta_p

template<bool is_ad>
const std::vector<const GenericVariableValue<is_ad> *> SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_eta_p
protected

Definition at line 40 of file SwitchingFunctionMultiPhaseMaterial.h.

◆ _eta_p_names

template<bool is_ad>
const std::vector<VariableName> SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_eta_p_names
protected

◆ _h_name

template<bool is_ad>
MaterialPropertyName SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_h_name
protected

◆ _is_p

template<bool is_ad>
std::vector<bool> SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_is_p
protected

List of which order parameters in the full list of all etas belong to phase p.

Definition at line 49 of file SwitchingFunctionMultiPhaseMaterial.h.

Referenced by SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::SwitchingFunctionMultiPhaseMaterialTempl().

◆ _num_eta

template<bool is_ad>
const unsigned int SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_num_eta
protected

Order parameters for all phases (including alpha)

Definition at line 44 of file SwitchingFunctionMultiPhaseMaterial.h.

Referenced by SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::SwitchingFunctionMultiPhaseMaterialTempl().

◆ _num_eta_p

template<bool is_ad>
const unsigned int SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_num_eta_p
protected

◆ _prop_d2h

template<bool is_ad>
std::vector<std::vector<GenericMaterialProperty<Real, is_ad> *> > SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_prop_d2h
protected

◆ _prop_dh

template<bool is_ad>
std::vector<GenericMaterialProperty<Real, is_ad> *> SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_prop_dh
protected

◆ _prop_h

template<bool is_ad>
GenericMaterialProperty<Real, is_ad>& SwitchingFunctionMultiPhaseMaterialTempl< is_ad >::_prop_h
protected

Switching function and derivatives.

Definition at line 52 of file SwitchingFunctionMultiPhaseMaterial.h.


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