https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
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 {
46 MooseVariable * ivar = _coupled_standard_moose_vars[i];
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
65void
67{
68 validateCoupling<Real>("mob_name");
69 validateCoupling<Real>("kappa_name");
70}
71
72RealGradient
74{
75 RealGradient g = _grad_u[_qp] * _dLdop[_qp];
76 for (unsigned int i = 0; i < _n_args; ++i)
77 g += (*_gradarg[i])[_qp] * (*_dLdarg[i])[_qp];
78 return g;
79}
80
81RealGradient
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
93RealGradient
95{
96 return _kappa[_qp] * nablaLPsi();
97}
98
99Real
101{
102 return _grad_u[_qp] * kappaNablaLPsi();
103}
104
105Real
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 =
116 _grad_phi[_j][_qp] * _dLdop[_qp] + _grad_u[_qp] * _phi[_j][_qp] * _d2Ldop2[_qp];
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
127Real
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}
registerMooseObject("PhaseFieldApp", ACInterface)
const std::string name
Definition Setup.h:21
Compute the Allen-Cahn interface term with the weak form residual .
Definition ACInterface.h:21
const bool _variable_L
flag set if L is a function of non-linear variables in args
Definition ACInterface.h:48
RealGradient kappaNablaLPsi()
the term
Definition ACInterface.C:94
ACInterface(const InputParameters &parameters)
Definition ACInterface.C:29
std::vector< const VariableGradient * > _gradarg
Gradients for all coupled variables.
Definition ACInterface.h:68
RealGradient gradL()
Definition ACInterface.C:73
const MaterialProperty< Real > & _dLdop
Mobility derivatives w.r.t. order parameter.
Definition ACInterface.h:51
const MaterialProperty< Real > & _d2Ldop2
Definition ACInterface.h:52
std::vector< const MaterialProperty< Real > * > _dkappadarg
kappa derivative w.r.t. other coupled variables
Definition ACInterface.h:65
std::vector< const MaterialProperty< Real > * > _dLdarg
Mobility derivative w.r.t. other coupled variables.
Definition ACInterface.h:59
virtual Real computeQpResidual()
virtual Real computeQpJacobian()
static InputParameters validParams()
Definition ACInterface.C:15
const MaterialProperty< Real > & _L
Mobility.
Definition ACInterface.h:43
virtual void initialSetup()
Definition ACInterface.C:66
std::vector< const MaterialProperty< Real > * > _d2Ldargdop
Definition ACInterface.h:60
RealGradient nablaLPsi()
the term
Definition ACInterface.C:82
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
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
const MaterialProperty< Real > & _kappa
Interfacial parameter.
Definition ACInterface.h:45
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()
const std::string & name() const
const FieldVariableGradient & gradSln() const override