61 params.
addClassDescription(
"Cahn-Hilliard Kernel that uses a DerivativeMaterial Free Energy");
63 "f_name",
"Base name of the free energy function F defined in a DerivativeParsedMaterial");
65 "Vector of displacement gradient variables (see " 66 "Modules/PhaseField/DisplacementGradients " 74 _nvar(_coupled_moose_vars.size()),
75 _second_derivatives(_nvar + 1),
76 _third_derivatives(_nvar + 1),
77 _third_cross_derivatives(_nvar),
82 &this->
template getMaterialPropertyDerivative<Real>(
"f_name", _var.name(), _var.name());
84 "f_name", _var.name(), _var.name(), _var.name());
88 for (
unsigned int i = 0; i <
_nvar; ++i)
90 const VariableName iname = _coupled_moose_vars[i]->name();
91 if (iname == _var.name())
93 if (this->isCoupled(
"args"))
95 "args",
"The kernel variable should not be specified in the coupled `args` parameter.");
97 this->paramError(
"coupled_variables",
98 "The kernel variable should not be specified in the coupled " 99 "`coupled_variables` parameter.");
102 &this->
template getMaterialPropertyDerivative<Real>(
"f_name", _var.name(), iname);
104 "f_name", _var.name(), _var.name(), iname);
107 for (
unsigned int j = 0;
j <
_nvar; ++
j)
109 VariableName jname = _coupled_moose_vars[
j]->name();
111 &this->
template getMaterialPropertyDerivative<Real>(
"f_name", _var.name(), iname, jname);
114 _grad_vars[i + 1] = &_subproblem.getStandardVariable(_tid, iname).gradSln();
118 template <
typename T>
127 this->
template validateCoupling<Real>(
"f_name", _var.name());
128 this->
template validateDerivativeMaterialPropertyBase<Real>(
"f_name");
131 template <
typename T>
140 for (
unsigned int i = 0; i <= _nvar; ++i)
141 res += (*_grad_vars[i])[_qp] * (*_second_derivatives[i])[_qp];
145 res = _grad_phi[_j][_qp] * (*_second_derivatives[0])[_qp];
146 for (
unsigned int i = 0; i <= _nvar; ++i)
147 res += _phi[_j][_qp] * (*_grad_vars[i])[_qp] * (*_third_derivatives[i])[_qp];
154 template <
typename T>
159 const unsigned int cvar = this->mapJvarToCvar(jvar);
161 RealGradient J = _grad_u[_qp] * _phi[_j][_qp] * (*_third_derivatives[cvar + 1])[_qp] +
162 _grad_phi[_j][_qp] * (*_second_derivatives[cvar + 1])[_qp];
164 for (
unsigned int i = 0; i < _nvar; ++i)
165 J += _phi[_j][_qp] * (*_grad_vars[i + 1])[_qp] * (*_third_cross_derivatives[i][cvar])[_qp];
virtual void initialSetup()
CahnHilliardBase implements the residual of the Cahn-Hilliard equation in a general way that can be t...
virtual RealGradient computeGradDFDCons(PFFunctionType type)
void mooseError(Args &&... args)
This is the Cahn-Hilliard equation base class that implements the bulk or local energy term of the eq...
CHBulk< T >::PFFunctionType PFFunctionType
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
static InputParameters validParams()
std::vector< const MaterialProperty< Real > * > _second_derivatives
std::vector< const VariableGradient * > _grad_vars
std::vector< const MaterialProperty< Real > * > _third_derivatives
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
CahnHilliardBase(const InputParameters ¶meters)
std::vector< std::vector< const MaterialProperty< Real > * > > _third_cross_derivatives
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
static InputParameters validParams()