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)
105 params.
addRequiredParam<MaterialPropertyName>(
"kappa_name",
"The kappa used with the kernel");
106 params.
addRequiredParam<MaterialPropertyName>(
"mob_name",
"The mobility used with the kernel");
107 params.
addCoupledVar(
"args",
"Vector of variable arguments of the mobility");
112 template <
typename T>
117 for (
unsigned int i = 0; i < _nvar; ++i)
118 grad_M += (*_dMdarg[i])[_qp] * (*_coupled_grad_vars[i])[_qp];
120 return _kappa[_qp] * _second_u[_qp].tr() *
121 ((_M[_qp] * _second_test[_i][_qp]).tr() + grad_M * _grad_test[_i][_qp]);
124 template <
typename T>
132 _d2Mdc2[_qp] * _phi[_j][_qp] * _grad_u[_qp] + _dMdc[_qp] * _grad_phi[_j][_qp];
134 for (
unsigned int i = 0; i < _nvar; ++i)
136 grad_M += (*_dMdarg[i])[_qp] * (*_coupled_grad_vars[i])[_qp];
137 dgrad_Mdc += (*_d2Mdcdarg[i])[_qp] * _phi[_j][_qp] * (*_coupled_grad_vars[i])[_qp];
141 Real value = _kappa[_qp] * _second_phi[_j][_qp].tr() *
142 ((_M[_qp] * _second_test[_i][_qp]).tr() + grad_M * _grad_test[_i][_qp]) +
143 _kappa[_qp] * _second_u[_qp].tr() *
144 ((_dMdc[_qp] * _second_test[_i][_qp]).tr() * _phi[_j][_qp] +
145 dgrad_Mdc * _grad_test[_i][_qp]);
150 template <
typename T>
155 const unsigned int cvar = mapJvarToCvar(jvar);
158 RealGradient dgrad_Mdarg = (*_d2Mdcdarg[cvar])[_qp] * _phi[_j][_qp] * _grad_u[_qp] +
159 (*_dMdarg[cvar])[_qp] * _grad_phi[_j][_qp];
161 for (
unsigned int i = 0; i < _nvar; ++i)
162 dgrad_Mdarg += (*_d2Mdargdarg[cvar][i])[_qp] * _phi[_j][_qp] * (*_coupled_grad_vars[cvar])[_qp];
165 Real value = _kappa[_qp] * _second_u[_qp].tr() *
166 (((*_dMdarg[cvar])[_qp] * _second_test[_i][_qp]).tr() * _phi[_j][_qp] +
167 dgrad_Mdarg * _grad_test[_i][_qp]);
const VariablePhiSecond & _second_phi
virtual bool isCoupled(const std::string &var_name, unsigned int i=0) const
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 MaterialProperty< T > & _d2Mdc2
const std::string & name() const override
virtual const std::string & name() const
virtual const VariableGradient & coupledGradient(const std::string &var_name, unsigned int comp=0) const
OutputTools< Real >::VariablePhiSecond VariablePhiSecond
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)
const InputParameters & parameters() const
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