https://mooseframework.inl.gov
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
SLKKSMultiPhaseBase Class Reference

Enforce sum of phase sublattice concentrations to be the real concentration. More...

#include <SLKKSMultiPhaseBase.h>

Inheritance diagram for SLKKSMultiPhaseBase:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 SLKKSMultiPhaseBase (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 Attributes

std::vector< unsigned int_ns
 Number of sublattices per phase. More...
 
std::vector< Real_a_cs
 Sublattice site numbers. More...
 
std::vector< unsigned int_phase
 phase index of each cs entry More...
 
const VariableValue_c
 Physical concentration. More...
 
const unsigned int _c_var
 
const std::size_t _ncs
 Sublattice concentrations. More...
 
std::vector< const VariableValue * > _cs
 
const JvarMap & _cs_map
 
const std::size_t _neta
 Order parameters for each phase \( \eta_j \). More...
 
std::vector< VariableName > _eta_names
 
const JvarMap & _eta_map
 
std::vector< MaterialPropertyName > _h_names
 Switching function names. More...
 
const std::size_t _nh
 

Detailed Description

Enforce sum of phase sublattice concentrations to be the real concentration.

D. Schwen et al. https://doi.org/10.1016/j.commatsci.2021.110466

See also
SLKKSPhaseChemicalPotential

Definition at line 22 of file SLKKSMultiPhaseBase.h.

Constructor & Destructor Documentation

◆ SLKKSMultiPhaseBase()

SLKKSMultiPhaseBase::SLKKSMultiPhaseBase ( const InputParameters parameters)

Definition at line 26 of file SLKKSMultiPhaseBase.C.

28  _ncs(coupledComponents("cs")),
29  _cs(_ncs),
30  _cs_map(getParameterJvarMap("cs")),
31  _ns(getParam<std::vector<unsigned int>>("ns")),
32  _neta(coupledComponents("eta")),
34  _eta_map(getParameterJvarMap("eta")),
35  _a_cs(getParam<std::vector<Real>>("as")),
36  _h_names(getParam<std::vector<MaterialPropertyName>>("h_names")),
37  _nh(_h_names.size()),
38  _phase(_ncs),
39  _c(coupledValue("c")),
40  _c_var(coupled("c"))
41 {
42  // consistent number of phases?
43  if (_ns.size() != _nh)
44  paramError("ns",
45  "Need to pass in as many switching functions (parameter `h_names`) as size of "
46  "number of sublattices in each phase (parameter `ns`)");
47 
48  // sum up ns numbers
49  unsigned int nssum = 0;
50  for (auto i : _ns)
51  {
52  if (i == 0)
53  paramError("ns", "All sublattice counts must be larger than zero");
54  nssum += i;
55  }
56 
57  if (nssum != _ncs)
58  paramError("ns", "Numbers need to sum up to the number of passed in cs variables");
59  if (_ncs == 0)
60  paramError("cs", "Need to supply at least 1 phase sublattice concentration");
61 
62  // get order parameter names
63  for (std::size_t i = 0; i < _neta; ++i)
64  _eta_names[i] = coupledName("eta", i);
65 
66  // Load concentration variables into the arrays
67  for (std::size_t i = 0; i < _ncs; ++i)
68  _cs[i] = &coupledValue("cs", i);
69 
70  // normalize sublattice counts within each phase
71  std::size_t k = 0;
72  for (std::size_t i = 0; i < _nh; ++i)
73  {
74  // sum site counts
75  Real sum = _a_cs[k];
76  for (unsigned int j = 1; j < _ns[i]; ++j)
77  sum += _a_cs[j + k];
78  if (sum <= 0)
79  paramError("as", "Sum of sublattice site counts in each phase must be larger than zero");
80 
81  // normalize
82  for (unsigned int j = 0; j < _ns[i]; ++j)
83  {
84  _a_cs[j + k] /= sum;
85 
86  // remember phase index
87  _phase[j + k] = i;
88  }
89 
90  // next phase
91  k += _ns[i];
92  }
93 
94  // consistency checks
95  if (k != _ncs)
96  mooseError("Internal error");
97 }
const std::size_t _neta
Order parameters for each phase .
const JvarMap & _cs_map
void mooseError(Args &&... args)
const std::size_t _ncs
Sublattice concentrations.
const unsigned int _c_var
std::vector< VariableName > _eta_names
std::vector< const VariableValue * > _cs
const VariableValue & _c
Physical concentration.
std::vector< Real > _a_cs
Sublattice site numbers.
const JvarMap & _eta_map
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const std::size_t _nh
std::vector< unsigned int > _phase
phase index of each cs entry
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::vector< MaterialPropertyName > _h_names
Switching function names.
std::vector< unsigned int > _ns
Number of sublattices per phase.
static const std::string k
Definition: NS.h:130

Member Function Documentation

◆ validParams()

InputParameters SLKKSMultiPhaseBase::validParams ( )
static

Definition at line 13 of file SLKKSMultiPhaseBase.C.

Referenced by SLKKSMultiPhaseConcentration::validParams(), and SLKKSMultiACBulkC::validParams().

14 {
15  auto params = Kernel::validParams();
16  params.addRequiredCoupledVar("cs", "Array of sublattice concentrations phase for all phases");
17  params.addCoupledVar("eta", "Order parameters for all phases");
18  params.addRequiredParam<std::vector<unsigned int>>("ns", "Number of sublattices in each phase");
19  params.addRequiredParam<std::vector<Real>>("as", "Sublattice site fractions n all phases");
20  params.addRequiredParam<std::vector<MaterialPropertyName>>(
21  "h_names", "Switching Function Materials for all phases");
22  return params;
23 }
static InputParameters validParams()

Member Data Documentation

◆ _a_cs

std::vector<Real> SLKKSMultiPhaseBase::_a_cs
protected

◆ _c

const VariableValue& SLKKSMultiPhaseBase::_c
protected

Physical concentration.

Definition at line 57 of file SLKKSMultiPhaseBase.h.

Referenced by SLKKSMultiPhaseConcentration::precomputeQpResidual().

◆ _c_var

const unsigned int SLKKSMultiPhaseBase::_c_var
protected

◆ _cs

std::vector<const VariableValue *> SLKKSMultiPhaseBase::_cs
protected

◆ _cs_map

const JvarMap& SLKKSMultiPhaseBase::_cs_map
protected

◆ _eta_map

const JvarMap& SLKKSMultiPhaseBase::_eta_map
protected

◆ _eta_names

std::vector<VariableName> SLKKSMultiPhaseBase::_eta_names
protected

◆ _h_names

std::vector<MaterialPropertyName> SLKKSMultiPhaseBase::_h_names
protected

◆ _ncs

const std::size_t SLKKSMultiPhaseBase::_ncs
protected

◆ _neta

const std::size_t SLKKSMultiPhaseBase::_neta
protected

Order parameters for each phase \( \eta_j \).

Definition at line 40 of file SLKKSMultiPhaseBase.h.

Referenced by SLKKSMultiACBulkC::SLKKSMultiACBulkC(), SLKKSMultiPhaseBase(), and SLKKSMultiPhaseConcentration::SLKKSMultiPhaseConcentration().

◆ _nh

const std::size_t SLKKSMultiPhaseBase::_nh
protected

◆ _ns

std::vector<unsigned int> SLKKSMultiPhaseBase::_ns
protected

◆ _phase

std::vector<unsigned int> SLKKSMultiPhaseBase::_phase
protected

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