https://mooseframework.inl.gov
ACInterface.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "ACInterface.h"
11 
12 registerMooseObject("PhaseFieldApp", ACInterface);
13 
16 {
18  params.addClassDescription("Gradient energy Allen-Cahn Kernel");
19  params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel");
20  params.addParam<MaterialPropertyName>("kappa_name", "kappa_op", "The kappa used with the kernel");
21  params.addParam<bool>("variable_L",
22  true,
23  "The mobility is a function of any MOOSE variable (if "
24  "this is set to false L must be constant over the "
25  "entire domain!)");
26  return params;
27 }
28 
31  _L(getMaterialProperty<Real>("mob_name")),
32  _kappa(getMaterialProperty<Real>("kappa_name")),
33  _variable_L(getParam<bool>("variable_L")),
34  _dLdop(getMaterialPropertyDerivative<Real>("mob_name", _var.name())),
35  _d2Ldop2(getMaterialPropertyDerivative<Real>("mob_name", _var.name(), _var.name())),
36  _dkappadop(getMaterialPropertyDerivative<Real>("kappa_name", _var.name())),
37  _dLdarg(_n_args),
38  _d2Ldargdop(_n_args),
39  _d2Ldarg2(_n_args),
40  _dkappadarg(_n_args),
41  _gradarg(_n_args)
42 {
43  // Get mobility and kappa derivatives and coupled variable gradients
44  for (unsigned int i = 0; i < _n_args; ++i)
45  {
47  const VariableName iname = ivar->name();
48  if (iname == _var.name())
49  paramError("coupled_variables",
50  "The kernel variable should not be specified in the coupled `coupled_variables` "
51  "parameter.");
52 
53  _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i);
54  _dkappadarg[i] = &getMaterialPropertyDerivative<Real>("kappa_name", i);
55  _d2Ldargdop[i] = &getMaterialPropertyDerivative<Real>("mob_name", iname, _var.name());
56 
57  _gradarg[i] = &(ivar->gradSln());
58 
59  _d2Ldarg2[i].resize(_n_args);
60  for (unsigned int j = 0; j < _n_args; ++j)
61  _d2Ldarg2[i][j] = &getMaterialPropertyDerivative<Real>("mob_name", i, j);
62  }
63 }
64 
65 void
67 {
68  validateCoupling<Real>("mob_name");
69  validateCoupling<Real>("kappa_name");
70 }
71 
74 {
76  for (unsigned int i = 0; i < _n_args; ++i)
77  g += (*_gradarg[i])[_qp] * (*_dLdarg[i])[_qp];
78  return g;
79 }
80 
83 {
84  // sum is the product rule gradient \f$ \nabla (L\psi) \f$
85  RealGradient sum = _L[_qp] * _grad_test[_i][_qp];
86 
87  if (_variable_L)
88  sum += gradL() * _test[_i][_qp];
89 
90  return sum;
91 }
92 
95 {
96  return _kappa[_qp] * nablaLPsi();
97 }
98 
99 Real
101 {
102  return _grad_u[_qp] * kappaNablaLPsi();
103 }
104 
105 Real
107 {
108  // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
109  RealGradient dsum =
110  (_dkappadop[_qp] * _L[_qp] + _kappa[_qp] * _dLdop[_qp]) * _phi[_j][_qp] * _grad_test[_i][_qp];
111 
112  // compute the derivative of the gradient of the mobility
113  if (_variable_L)
114  {
115  RealGradient dgradL =
117 
118  for (unsigned int i = 0; i < _n_args; ++i)
119  dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[i])[_qp];
120 
121  dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
122  }
123 
124  return _grad_phi[_j][_qp] * kappaNablaLPsi() + _grad_u[_qp] * dsum;
125 }
126 
127 Real
129 {
130  // get the coupled variable jvar is referring to
131  const unsigned int cvar = mapJvarToCvar(jvar);
132 
133  // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
134  RealGradient dsum = ((*_dkappadarg[cvar])[_qp] * _L[_qp] + _kappa[_qp] * (*_dLdarg[cvar])[_qp]) *
135  _phi[_j][_qp] * _grad_test[_i][_qp];
136 
137  // compute the derivative of the gradient of the mobility
138  if (_variable_L)
139  {
140  RealGradient dgradL = _grad_phi[_j][_qp] * (*_dLdarg[cvar])[_qp] +
141  _grad_u[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[cvar])[_qp];
142 
143  for (unsigned int i = 0; i < _n_args; ++i)
144  dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldarg2[cvar][i])[_qp];
145 
146  dsum += (_kappa[_qp] * dgradL + _dkappadop[_qp] * _phi[_j][_qp] * gradL()) * _test[_i][_qp];
147  }
148 
149  return _grad_u[_qp] * dsum;
150 }
static InputParameters validParams()
Definition: ACInterface.C:15
void paramError(const std::string &param, Args... args) const
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
const FieldVariableGradient & gradSln() const override
registerMooseObject("PhaseFieldApp", ACInterface)
std::vector< const VariableGradient * > _gradarg
Gradients for all coupled variables.
Definition: ACInterface.h:68
virtual Real computeQpJacobian()
Definition: ACInterface.C:106
const MaterialProperty< Real > & _L
Mobility.
Definition: ACInterface.h:43
const bool _variable_L
flag set if L is a function of non-linear variables in args
Definition: ACInterface.h:48
RealGradient nablaLPsi()
the term
Definition: ACInterface.C:82
RealGradient kappaNablaLPsi()
the term
Definition: ACInterface.C:94
ACInterface(const InputParameters &parameters)
Definition: ACInterface.C:29
const MaterialProperty< Real > & _dLdop
Mobility derivatives w.r.t. order parameter.
Definition: ACInterface.h:51
std::vector< const MaterialProperty< Real > * > _d2Ldargdop
Definition: ACInterface.h:60
std::vector< const MaterialProperty< Real > * > _dkappadarg
kappa derivative w.r.t. other coupled variables
Definition: ACInterface.h:65
const std::string & name() const
Compute the Allen-Cahn interface term with the weak form residual .
Definition: ACInterface.h:20
virtual void initialSetup()
Definition: ACInterface.C:66
const std::string name
Definition: Setup.h:20
static InputParameters validParams()
std::vector< const MaterialProperty< Real > * > _dLdarg
Mobility derivative w.r.t. other coupled variables.
Definition: ACInterface.h:59
std::vector< std::vector< const MaterialProperty< Real > * > > _d2Ldarg2
Definition: ACInterface.h:61
const MaterialProperty< Real > & _dkappadop
kappa derivative w.r.t. order parameter
Definition: ACInterface.h:56
const MaterialProperty< Real > & _kappa
Interfacial parameter.
Definition: ACInterface.h:45
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const MaterialProperty< Real > & _d2Ldop2
Definition: ACInterface.h:52
void addClassDescription(const std::string &doc_string)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
virtual Real computeQpResidual()
Definition: ACInterface.C:100
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: ACInterface.C:128
RealGradient gradL()
Definition: ACInterface.C:73