https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
PolycrystalDiffusivity Class Reference

Generates a diffusion function to distinguish between the solid, void, grain boundary, and surface diffusion rates. More...

#include <PolycrystalDiffusivity.h>

Inheritance diagram for PolycrystalDiffusivity:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 PolycrystalDiffusivity (const InputParameters &parameters)
 
virtual void computeQpProperties ()
 
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 Attributes

const VariableValue_c
 Variable values for concentration and order parameters.
 
VariableName _c_name
 
const unsigned int _op_num
 
std::vector< const VariableValue * > _vals
 
const MaterialPropertyName _diff_name
 Mateiral property and its derivatives declarations.
 
MaterialProperty< Real > & _diff
 
MaterialProperty< Real > * _dDdc
 
std::vector< MaterialProperty< Real > * > _dDdv
 
const MaterialProperty< Real > & _hb
 Switching function material and its derivatives.
 
const MaterialProperty< Real > & _hm
 
const MaterialProperty< Real > & _dhbdc
 
const MaterialProperty< Real > & _dhmdc
 
std::vector< const MaterialProperty< Real > * > _dhbdv
 
std::vector< const MaterialProperty< Real > * > _dhmdv
 
const Real _diff_bulk
 Input parameters.
 
const Real _diff_void
 
const Real _diff_surf
 
const Real _diff_gb
 
const Real _s_weight
 
const Real _gb_weight
 
const Real _b_weight
 
const Real _v_weight
 

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

Generates a diffusion function to distinguish between the solid, void, grain boundary, and surface diffusion rates.

Definition at line 19 of file PolycrystalDiffusivity.h.

Constructor & Destructor Documentation

◆ PolycrystalDiffusivity()

PolycrystalDiffusivity::PolycrystalDiffusivity ( const InputParameters parameters)

Definition at line 41 of file PolycrystalDiffusivity.C.

43 _c(coupledValue("c")),
44 _c_name(coupledName("c", 0)),
45 _op_num(coupledComponents("v")),
47 _diff_name(getParam<MaterialPropertyName>("diffusivity")),
48 _diff(declareProperty<Real>(_diff_name)),
49 _dDdc(isCoupledConstant(_c_name) ? nullptr
51 _hb(getMaterialProperty<Real>("void_switch")),
52 _hm(getMaterialProperty<Real>("solid_switch")),
57 _diff_bulk(getParam<Real>("Dbulk")),
58 _diff_void(getParam<Real>("Dvoid")),
59 _diff_surf(getParam<Real>("Dsurf")),
60 _diff_gb(getParam<Real>("Dgb")),
61 _s_weight(getParam<Real>("surf_weight")),
62 _gb_weight(getParam<Real>("gb_weight")),
63 _b_weight(getParam<Real>("bulk_weight")),
64 _v_weight(getParam<Real>("void_weight"))
65{
66 if (_op_num == 0)
67 paramError("op_num", "Model requires a non zero number of order parameters.");
68
69 _dDdv.resize(_op_num);
70 for (MooseIndex(_op_num) op_index = 0; op_index < _op_num; ++op_index)
71 {
72 _vals[op_index] = &coupledValue("v", op_index);
73 const VariableName op_name = coupledName("v", op_index);
74 if (!isCoupledConstant("v"))
75 _dDdv[op_index] = &declarePropertyDerivative<Real>(_diff_name, coupledName("v", op_index));
76 _dhbdv[op_index] = &getMaterialPropertyDerivative<Real>("void_switch", op_index);
77 _dhmdv[op_index] = &getMaterialPropertyDerivative<Real>("solid_switch", op_index);
78 }
79}
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative(const std::string &base, const std::vector< VariableName > &c)
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative(const std::string &base, const std::vector< VariableName > &c)
const VariableValue & _c
Variable values for concentration and order parameters.
const MaterialProperty< Real > & _dhmdc
const MaterialPropertyName _diff_name
Mateiral property and its derivatives declarations.
const MaterialProperty< Real > & _hm
std::vector< const VariableValue * > _vals
const MaterialProperty< Real > & _hb
Switching function material and its derivatives.
MaterialProperty< Real > * _dDdc
std::vector< const MaterialProperty< Real > * > _dhmdv
std::vector< MaterialProperty< Real > * > _dDdv
std::vector< const MaterialProperty< Real > * > _dhbdv
const Real _diff_bulk
Input parameters.
MaterialProperty< Real > & _diff
const MaterialProperty< Real > & _dhbdc
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Member Function Documentation

◆ computeQpProperties()

void PolycrystalDiffusivity::computeQpProperties ( )
virtual

Definition at line 82 of file PolycrystalDiffusivity.C.

83{
84 Real SumEtaij = 0.0;
85 Real SumEtaj = 0.0;
86 for (const auto i : make_range(_op_num))
87 for (const auto j : make_range(i + 1, _op_num))
88 {
89 SumEtaij += 18.0 * (*_vals[i])[_qp] * (*_vals[i])[_qp] * (*_vals[j])[_qp] * (*_vals[j])[_qp];
90 SumEtaj += 18.0 * ((*_vals[i])[_qp] * (*_vals[j])[_qp] * (*_vals[j])[_qp] +
91 (*_vals[j])[_qp] * (*_vals[i])[_qp] * (*_vals[i])[_qp]);
92 }
93 Real c = _c[_qp];
94 c = std::abs(c) > 1.0 ? 1.0 : (c < 0.0 ? std::abs(c) : c);
95 const Real mc = 1.0 - c;
96
97 // Compute diffusion function
98 _diff[_qp] = _b_weight * _diff_bulk * _hm[_qp] + _v_weight * _diff_void * _hb[_qp] +
99 30.0 * _diff_surf * _s_weight * c * c * mc * mc + _diff_gb * SumEtaij * _gb_weight;
100
101 if (_dDdc)
102 (*_dDdc)[_qp] = _b_weight * _diff_bulk * _dhmdc[_qp] + _v_weight * _diff_void * _dhbdc[_qp] +
103 30.0 * _diff_surf * _s_weight * (2.0 * c * mc * mc - 2.0 * c * c * mc);
104 for (const auto op_index : make_range(_op_num))
105 if (_dDdv[op_index])
106 (*_dDdv[op_index])[_qp] = _b_weight * _diff_bulk * (*_dhmdv[op_index])[_qp] +
107 _v_weight * _diff_void * (*_dhbdv[op_index])[_qp] +
108 _diff_gb * SumEtaj * _gb_weight;
109}
for(PetscInt i=0;i< nvars;++i)
if(subdm)
IntRange< T > make_range(T beg, T end)

◆ validParams()

InputParameters PolycrystalDiffusivity::validParams ( )
static

Definition at line 15 of file PolycrystalDiffusivity.C.

16{
19 "Generates a diffusion coefficient to distinguish between the bulk, pore, grain "
20 "boundaries, and surfaces");
22 "v", "var_name_base", "op_num", "Array of coupled variables");
23 params.addParam<Real>("Dbulk", 1.0, "Diffusion coefficient for volumetric diffusion in solid");
24 params.addParam<Real>(
25 "Dvoid", 1.0, "Diffusion coefficient for diffusion within void/pore/bubble ");
26 params.addParam<Real>("Dsurf", 1.0, "Diffusion coefficient for surface diffusion");
27 params.addParam<Real>("Dgb", 1.0, "Diffusion coefficient for grain boundary diffusion");
28 params.addRequiredCoupledVar("c", "Vacancy phase variable");
29 params.addParam<Real>("surf_weight", 1.0, "Surface diffusion weight");
30 params.addParam<Real>("gb_weight", 1.0, "Grain boundary diffusion weight");
31 params.addParam<Real>("bulk_weight", 1.0, "Bulk diffusion weight");
32 params.addParam<Real>("void_weight", 1.0, "Void diffusion weight");
33 params.addParam<MaterialPropertyName>(
34 "void_switch", "hb", "Switching Function Materials for the void");
35 params.addParam<MaterialPropertyName>(
36 "solid_switch", "hm", "Switching Function Materials for the solid");
37 params.addParam<MaterialPropertyName>("diffusivity", "D", "The name of the diffusion property");
38 return params;
39}
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void addRequiredCoupledVarWithAutoBuild(const std::string &name, const std::string &base_name, const std::string &num_name, const std::string &doc_string)
static InputParameters validParams()

Member Data Documentation

◆ _b_weight

const Real PolycrystalDiffusivity::_b_weight
protected

Definition at line 55 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _c

const VariableValue& PolycrystalDiffusivity::_c
protected

Variable values for concentration and order parameters.

Definition at line 29 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _c_name

VariableName PolycrystalDiffusivity::_c_name
protected

Definition at line 30 of file PolycrystalDiffusivity.h.

◆ _dDdc

MaterialProperty<Real>* PolycrystalDiffusivity::_dDdc
protected

Definition at line 37 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _dDdv

std::vector<MaterialProperty<Real> *> PolycrystalDiffusivity::_dDdv
protected

Definition at line 38 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties(), and PolycrystalDiffusivity().

◆ _dhbdc

const MaterialProperty<Real>& PolycrystalDiffusivity::_dhbdc
protected

Definition at line 43 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _dhbdv

std::vector<const MaterialProperty<Real> *> PolycrystalDiffusivity::_dhbdv
protected

Definition at line 45 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties(), and PolycrystalDiffusivity().

◆ _dhmdc

const MaterialProperty<Real>& PolycrystalDiffusivity::_dhmdc
protected

Definition at line 44 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _dhmdv

std::vector<const MaterialProperty<Real> *> PolycrystalDiffusivity::_dhmdv
protected

Definition at line 46 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties(), and PolycrystalDiffusivity().

◆ _diff

MaterialProperty<Real>& PolycrystalDiffusivity::_diff
protected

Definition at line 36 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _diff_bulk

const Real PolycrystalDiffusivity::_diff_bulk
protected

Input parameters.

Definition at line 49 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _diff_gb

const Real PolycrystalDiffusivity::_diff_gb
protected

Definition at line 52 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _diff_name

const MaterialPropertyName PolycrystalDiffusivity::_diff_name
protected

Mateiral property and its derivatives declarations.

Definition at line 35 of file PolycrystalDiffusivity.h.

Referenced by PolycrystalDiffusivity().

◆ _diff_surf

const Real PolycrystalDiffusivity::_diff_surf
protected

Definition at line 51 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _diff_void

const Real PolycrystalDiffusivity::_diff_void
protected

Definition at line 50 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _gb_weight

const Real PolycrystalDiffusivity::_gb_weight
protected

Definition at line 54 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _hb

const MaterialProperty<Real>& PolycrystalDiffusivity::_hb
protected

Switching function material and its derivatives.

Definition at line 41 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _hm

const MaterialProperty<Real>& PolycrystalDiffusivity::_hm
protected

Definition at line 42 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _op_num

const unsigned int PolycrystalDiffusivity::_op_num
protected

Definition at line 31 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties(), and PolycrystalDiffusivity().

◆ _s_weight

const Real PolycrystalDiffusivity::_s_weight
protected

Definition at line 53 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _v_weight

const Real PolycrystalDiffusivity::_v_weight
protected

Definition at line 56 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties().

◆ _vals

std::vector<const VariableValue *> PolycrystalDiffusivity::_vals
protected

Definition at line 32 of file PolycrystalDiffusivity.h.

Referenced by computeQpProperties(), and PolycrystalDiffusivity().


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