18 params.addClassDescription(
19 "SLKKS multi-phase model kernel to enforce $c_i = \\sum_j h_j\\sum_k a_{jk} c_{ijk}$. " 20 "The non-linear variable of this kernel is a phase's sublattice concentration");
21 params.addRequiredCoupledVar(
"c",
"Physical concentration");
30 for (std::size_t i = 0; i <
_nh; ++i)
36 for (std::size_t
j = 0;
j <
_neta; ++
j)
41 for (std::size_t i = 0; i <
_ncs; ++i)
42 if (coupled(
"cs", i) == _var.number())
47 paramError(
"cs",
"One of the listed variables must be the kernel variable");
56 for (std::size_t i = 0; i <
_nh; ++i)
60 for (
unsigned int j = 0;
j <
_ns[i]; ++
j)
65 sum += (*
_prop_h[i])[_qp] * csum;
80 return -_test[_i][_qp] * _phi[_j][_qp];
82 auto csvar = mapJvarToCvar(jvar,
_cs_map);
86 auto etavar = mapJvarToCvar(jvar,
_eta_map);
90 for (
unsigned int i = 0; i <
_ncs; ++i)
93 return _test[_i][_qp] * sum * _phi[_j][_qp];
const std::size_t _neta
Order parameters for each phase .
int _l
Position of the nonlinear variable in the cs list.
std::vector< std::vector< const MaterialProperty< Real > * > > _prop_dhdeta
const std::size_t _ncs
Sublattice concentrations.
const unsigned int _c_var
virtual Real precomputeQpResidual()
std::vector< VariableName > _eta_names
std::vector< const VariableValue * > _cs
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
const VariableValue & _c
Physical concentration.
std::vector< Real > _a_cs
Sublattice site numbers.
registerMooseObject("PhaseFieldApp", SLKKSMultiPhaseConcentration)
virtual Real precomputeQpJacobian()
static InputParameters validParams()
Enforce sum of phase sublattice concentrations to be the real concentration.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
SLKKSMultiPhaseConcentration(const InputParameters ¶meters)
std::vector< const MaterialProperty< Real > * > _prop_h
Switching functions for each phase and their derivatives w.r.t. all etas.
std::vector< unsigned int > _phase
phase index of each cs entry
Enforce sum of phase sublattice concentrations to be the real concentration.
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::vector< MaterialPropertyName > _h_names
Switching function names.
static InputParameters validParams()
std::vector< unsigned int > _ns
Number of sublattices per phase.
static const std::string k