56 std::vector<const MaterialProperty<T> *>
_dMdarg;
58 std::vector<std::vector<const MaterialProperty<T> *>>
_d2Mdargdarg;
68 _kappa(getMaterialProperty<
Real>(
"kappa_name")),
69 _M(getMaterialProperty<T>(
"mob_name")),
70 _dMdc(getMaterialPropertyDerivative<T>(
"mob_name", _var.
name())),
71 _d2Mdc2(getMaterialPropertyDerivative<T>(
"mob_name", _var.
name(), _var.
name())),
73 _second_test(secondTest()),
74 _second_phi(secondPhi()),
75 _nvar(_coupled_moose_vars.size()),
79 _coupled_grad_vars(_nvar)
82 for (
unsigned int i = 0; i <
_nvar; ++i)
89 for (
unsigned int j = 0;
j <
_nvar; ++
j)
104 params.
addRequiredParam<MaterialPropertyName>(
"kappa_name",
"The kappa used with the kernel");
105 params.
addRequiredParam<MaterialPropertyName>(
"mob_name",
"The mobility used with the kernel");
106 params.
addCoupledVar(
"coupled_variables",
"Vector of variable arguments of the mobility");
110 template <
typename T>
115 for (
unsigned int i = 0; i < _nvar; ++i)
116 grad_M += (*_dMdarg[i])[_qp] * (*_coupled_grad_vars[i])[_qp];
118 return _kappa[_qp] * _second_u[_qp].tr() *
119 ((_M[_qp] * _second_test[_i][_qp]).tr() + grad_M * _grad_test[_i][_qp]);
122 template <
typename T>
130 _d2Mdc2[_qp] * _phi[_j][_qp] * _grad_u[_qp] + _dMdc[_qp] * _grad_phi[_j][_qp];
132 for (
unsigned int i = 0; i < _nvar; ++i)
134 grad_M += (*_dMdarg[i])[_qp] * (*_coupled_grad_vars[i])[_qp];
135 dgrad_Mdc += (*_d2Mdcdarg[i])[_qp] * _phi[_j][_qp] * (*_coupled_grad_vars[i])[_qp];
139 Real value = _kappa[_qp] * _second_phi[_j][_qp].tr() *
140 ((_M[_qp] * _second_test[_i][_qp]).tr() + grad_M * _grad_test[_i][_qp]) +
141 _kappa[_qp] * _second_u[_qp].tr() *
142 ((_dMdc[_qp] * _second_test[_i][_qp]).tr() * _phi[_j][_qp] +
143 dgrad_Mdc * _grad_test[_i][_qp]);
148 template <
typename T>
153 const unsigned int cvar = mapJvarToCvar(jvar);
156 RealGradient dgrad_Mdarg = (*_d2Mdcdarg[cvar])[_qp] * _phi[_j][_qp] * _grad_u[_qp] +
157 (*_dMdarg[cvar])[_qp] * _grad_phi[_j][_qp];
159 for (
unsigned int i = 0; i < _nvar; ++i)
160 dgrad_Mdarg += (*_d2Mdargdarg[cvar][i])[_qp] * _phi[_j][_qp] * (*_coupled_grad_vars[cvar])[_qp];
163 Real value = _kappa[_qp] * _second_u[_qp].tr() *
164 (((*_dMdarg[cvar])[_qp] * _second_test[_i][_qp]).tr() * _phi[_j][_qp] +
165 dgrad_Mdarg * _grad_test[_i][_qp]);
const VariablePhiSecond & _second_phi
unsigned int _nvar
Number of variables.
This is the Cahn-Hilliard equation base class that implements the interfacial or gradient energy term...
static InputParameters validParams()
virtual Real computeQpJacobian()
static InputParameters validParams()
std::vector< const VariableGradient * > _coupled_grad_vars
Coupled variables used in mobility.
virtual Real computeQpResidual()
const InputParameters & parameters() const
const MaterialProperty< T > & _d2Mdc2
virtual const VariableGradient & coupledGradient(const std::string &var_name, unsigned int comp=0) const
OutputTools< Real >::VariablePhiSecond VariablePhiSecond
const std::string & name() const
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
std::vector< const MaterialProperty< T > * > _dMdarg
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
const VariableTestSecond & _second_test
const MaterialProperty< T > & _M
const VariableSecond & _second_u
std::vector< MooseVariableFieldBase *> _coupled_moose_vars
const MaterialProperty< Real > & _kappa
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
OutputTools< Real >::VariableTestSecond VariableTestSecond
CHInterfaceBase(const InputParameters ¶meters)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
OutputTools< Real >::VariableSecond VariableSecond
std::vector< const MaterialProperty< T > * > _d2Mdcdarg
std::vector< std::vector< const MaterialProperty< T > * > > _d2Mdargdarg
const MaterialProperty< T > & _dMdc