www.mooseframework.org
ACInterface2DMultiPhase1.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
11 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<ACInterface>();
19  params.addClassDescription(
20  "Gradient energy Allen-Cahn Kernel where the derivative of interface parameter kappa "
21  "wrt the gradient of order parameter is considered.");
22  params.addParam<MaterialPropertyName>("dkappadgrad_etaa_name",
23  "dkappadgrad_etaa",
24  "The derivative of the kappa with respect to grad_etaa");
25  params.addParam<MaterialPropertyName>(
26  "d2kappadgrad_etaa_name",
27  "d2kappadgrad_etaa",
28  "The second derivative of the kappa with respect to grad_etaa");
29  params.addRequiredCoupledVar(
30  "etas", "All other coupled order parameters eta_i of the multiphase problem");
31  return params;
32 }
33 
34 ACInterface2DMultiPhase1::ACInterface2DMultiPhase1(const InputParameters & parameters)
35  : ACInterface(parameters),
36  _dkappadgrad_etaa(getMaterialProperty<RealGradient>("dkappadgrad_etaa_name")),
37  _d2kappadgrad_etaa(getMaterialProperty<RealTensorValue>("d2kappadgrad_etaa_name")),
38  _num_etas(coupledComponents("etas")),
39  _eta(_num_etas),
40  _grad_eta(_num_etas)
41 {
42 }
43 
44 Real
46 {
47  // get the sum of square of gradients of all order parameters
48  Real SumSquareGradOp = _grad_u[_qp] * _grad_u[_qp];
49  for (unsigned int i = 0; i < _num_etas; ++i)
50  {
51  _grad_eta[i] = &coupledGradient("etas", i);
52  SumSquareGradOp += (*_grad_eta[i])[_qp] * (*_grad_eta[i])[_qp];
53  }
54  return SumSquareGradOp;
55 }
56 
57 Real
59 {
60  return 0.5 * nablaLPsi() * _dkappadgrad_etaa[_qp] * sumSquareGradEta();
61 }
62 
63 Real
65 {
66  // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
67  RealGradient dsum = _dLdop[_qp] * _phi[_j][_qp] * _grad_test[_i][_qp];
68 
69  // compute the derivative of the gradient of the mobility
70  if (_variable_L)
71  {
72  RealGradient dgradL =
73  _grad_phi[_j][_qp] * _dLdop[_qp] + _grad_u[_qp] * _phi[_j][_qp] * _d2Ldop2[_qp];
74 
75  for (unsigned int i = 0; i < _nvar; ++i)
76  dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[i])[_qp];
77 
78  dsum += dgradL * _test[_i][_qp];
79  }
80  Real jac1 = 0.5 * dsum * _dkappadgrad_etaa[_qp] * sumSquareGradEta();
81  Real jac2 =
82  0.5 * nablaLPsi() * (_d2kappadgrad_etaa[_qp] * _grad_phi[_j][_qp]) * sumSquareGradEta();
83  Real jac3 = nablaLPsi() * _dkappadgrad_etaa[_qp] * _grad_u[_qp] * _grad_phi[_j][_qp];
84  return jac1 + jac2 + jac3;
85 }
86 
87 Real
89 {
90  // get the coupled variable jvar is referring to
91  const unsigned int cvar = mapJvarToCvar(jvar);
92 
93  // dsum is the derivative \f$ \frac\partial{\partial \eta} \left( \nabla (L\psi) \right) \f$
94  RealGradient dsum = (*_dLdarg[cvar])[_qp] * _phi[_j][_qp] * _grad_test[_i][_qp];
95 
96  // compute the derivative of the gradient of the mobility
97  if (_variable_L)
98  {
99  RealGradient dgradL = _grad_phi[_j][_qp] * (*_dLdarg[cvar])[_qp] +
100  _grad_u[_qp] * _phi[_j][_qp] * (*_d2Ldargdop[cvar])[_qp];
101 
102  for (unsigned int i = 0; i < _nvar; ++i)
103  dgradL += (*_gradarg[i])[_qp] * _phi[_j][_qp] * (*_d2Ldarg2[cvar][i])[_qp];
104 
105  dsum += dgradL * _test[_i][_qp];
106  }
107 
108  // the gradient of coupled variable etab
109  _grad_eta[0] = &coupledGradient("etas", 0);
110 
111  Real jac1 = 0.5 * dsum * _dkappadgrad_etaa[_qp] * sumSquareGradEta();
112  Real jac2 =
113  -0.5 * nablaLPsi() * (_d2kappadgrad_etaa[_qp] * _grad_phi[_j][_qp]) * sumSquareGradEta();
114  Real jac3 = nablaLPsi() * _dkappadgrad_etaa[_qp] * (*_grad_eta[0])[_qp] * _grad_phi[_j][_qp];
115  return jac1 + jac2 + jac3;
116 }
ACInterface::_gradarg
std::vector< const VariableGradient * > _gradarg
Gradients for all coupled variables.
Definition: ACInterface.h:74
validParams< ACInterface2DMultiPhase1 >
InputParameters validParams< ACInterface2DMultiPhase1 >()
Definition: ACInterface2DMultiPhase1.C:16
ACInterface::_variable_L
const bool _variable_L
flag set if L is a function of non-linear variables in args
Definition: ACInterface.h:51
ACInterface2DMultiPhase1::_d2kappadgrad_etaa
const MaterialProperty< RealTensorValue > & _d2kappadgrad_etaa
Definition: ACInterface2DMultiPhase1.h:41
ACInterface2DMultiPhase1::computeQpResidual
virtual Real computeQpResidual()
Definition: ACInterface2DMultiPhase1.C:58
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
ACInterface2DMultiPhase1
Compute the Allen-Cahn interface term with the weak form residual .
Definition: ACInterface2DMultiPhase1.h:27
ACInterface::nablaLPsi
RealGradient nablaLPsi()
the term
Definition: ACInterface.C:86
validParams< ACInterface >
InputParameters validParams< ACInterface >()
Definition: ACInterface.C:16
registerMooseObject
registerMooseObject("PhaseFieldApp", ACInterface2DMultiPhase1)
ACInterface::_nvar
const unsigned int _nvar
number of coupled variables
Definition: ACInterface.h:62
ACInterface::_d2Ldargdop
std::vector< const MaterialProperty< Real > * > _d2Ldargdop
Definition: ACInterface.h:66
ACInterface2DMultiPhase1::ACInterface2DMultiPhase1
ACInterface2DMultiPhase1(const InputParameters &parameters)
Definition: ACInterface2DMultiPhase1.C:34
ACInterface2DMultiPhase1.h
ACInterface2DMultiPhase1::_grad_eta
std::vector< const VariableGradient * > _grad_eta
Definition: ACInterface2DMultiPhase1.h:46
ACInterface::_dLdarg
std::vector< const MaterialProperty< Real > * > _dLdarg
Mobility derivative w.r.t. other coupled variables.
Definition: ACInterface.h:65
ACInterface::_d2Ldarg2
std::vector< std::vector< const MaterialProperty< Real > * > > _d2Ldarg2
Definition: ACInterface.h:67
ACInterface::_dLdop
const MaterialProperty< Real > & _dLdop
Mobility derivatives w.r.t. order parameter.
Definition: ACInterface.h:54
ACInterface
Compute the Allen-Cahn interface term with the weak form residual .
Definition: ACInterface.h:25
ACInterface2DMultiPhase1::_dkappadgrad_etaa
const MaterialProperty< RealGradient > & _dkappadgrad_etaa
Interfacial parameter.
Definition: ACInterface2DMultiPhase1.h:40
ACInterface2DMultiPhase1::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: ACInterface2DMultiPhase1.C:88
ACInterface2DMultiPhase1::_num_etas
unsigned int _num_etas
Order parameters.
Definition: ACInterface2DMultiPhase1.h:44
ACInterface2DMultiPhase1::computeQpJacobian
virtual Real computeQpJacobian()
Definition: ACInterface2DMultiPhase1.C:64
ACInterface2DMultiPhase1::sumSquareGradEta
Real sumSquareGradEta()
Definition: ACInterface2DMultiPhase1.C:45
ACInterface::_d2Ldop2
const MaterialProperty< Real > & _d2Ldop2
Definition: ACInterface.h:55