11 #include "libmesh/utility.h" 22 "gamma",
"The interface profile coefficient to use with the kernel");
30 _uname(this->template getParam<NonlinearVariableName>(
"variable")),
31 _gamma_name(this->template getParam<MaterialPropertyName>(
"gamma")),
32 _gamma(this->template getGenericMaterialProperty<
Real, is_ad>(_gamma_name)),
33 _dmudvar(this->template getGenericMaterialProperty<
Real, is_ad>(
34 this->derivativePropertyNameFirst(
"mu", _uname)))
41 _d2mudvar2(getMaterialPropertyDerivative<
Real>(
"mu", _uname, _uname)),
42 _vname(getParam<
std::vector<VariableName>>(
"v")),
43 _d2mudvardeta(_n_eta),
44 _vmap(getParameterJvarMap(
"v"))
46 for (
unsigned int i = 0; i <
_n_eta; ++i)
61 for (
unsigned int i = 0; i <
_n_eta; ++i)
62 df0dvar += (*_vals[i])[_qp] * (*_vals[i])[_qp];
64 df0dvar *= 2.0 *
_gamma[_qp] * _u[_qp];
65 df0dvar += _u[_qp] * _u[_qp] * _u[_qp] - _u[_qp];
78 ADReal f0 = 0.25 + 0.25 * _u[_qp] * _u[_qp] * _u[_qp] * _u[_qp] - 0.5 * _u[_qp] * _u[_qp];
79 ADReal sum_etaj = _u[_qp] * _u[_qp];
81 for (
unsigned int i = 0; i < _op_num; ++i)
83 for (
unsigned int j = i + 1;
j < _op_num; ++
j)
84 sum_etaj += (*_vals[
j])[_qp] * (*_vals[
j])[_qp];
86 f0 += 0.25 * Utility::pow<4>((*_vals[i])[_qp]) - 0.5 * Utility::pow<2>((*_vals[i])[_qp]);
87 f0 += sum_etaj * Utility::pow<2>((*_vals[i])[_qp]) *
_gamma[_qp];
95 const unsigned int j = mapJvarToCvar(jvar);
97 Real df0deta_base = 0.0;
100 for (
unsigned int i = 0; i <
_n_eta; ++i)
102 sum_etai2 += (*_vals[i])[_qp] * (*_vals[i])[_qp];
104 auto etavar = mapJvarToCvar(jvar,
_vmap);
107 df0deta_base = (*_vals[etavar])[_qp] * (*_vals[etavar])[_qp] - 1.0 +
108 2.0 *
_gamma[_qp] * (_u[_qp] * _u[_qp] + sum_etai2);
109 df0deta = (*_vals[etavar])[_qp] * df0deta_base;
112 _phi[_j][_qp] * _test[_i][_qp] * _L[_qp];
120 Real var_phase = 0.25 * _u[_qp] * _u[_qp] * _u[_qp] * _u[_qp] - 0.5 * _u[_qp] * _u[_qp];
121 Real eta_phase = 0.0;
122 Real eta_interface = 0.0;
125 for (
unsigned int i = 0; i <
_n_eta; ++i)
128 for (
unsigned int j = i + 1;
j <
_n_eta; ++
j)
129 sum_eta_j2 += (*_vals[
j])[_qp] * (*_vals[
j])[_qp];
133 eta_phase += 0.25 * Utility::pow<4>((*_vals[i])[_qp]) - 0.5 * Utility::pow<2>((*_vals[i])[_qp]);
135 (_u[_qp] * _u[_qp] + sum_eta_j2) * (*_vals[i])[_qp] * (*_vals[i])[_qp] *
_gamma[_qp];
137 return 0.25 + var_phase + eta_phase + eta_interface;
ACBarrierFunctionTempl(const InputParameters ¶meters)
const std::vector< VariableName > _vname
registerMooseObject("PhaseFieldApp", ACBarrierFunction)
void mooseError(Args &&... args)
const NonlinearVariableName _uname
virtual ADReal computeDFDOP()
typename std::conditional< is_ad, ADGrainGrowthBase, ACGrGrBase >::type ACBarrierFunctionBase
Several kernels use a material property called mu.
DualNumber< Real, DNDerivativeType, true > ADReal
static InputParameters validParams()
virtual Real computeDFDOP(PFFunctionType type)
ACBarrierFunction(const InputParameters ¶meters)
InputParameters validParams()
const GenericMaterialProperty< Real, is_ad > & _gamma
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
std::vector< const MaterialProperty< Real > * > _d2mudvardeta
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
const MaterialProperty< Real > & _d2mudvar2
const GenericMaterialProperty< Real, is_ad > & _dmudvar