https://mooseframework.inl.gov
ACInterfaceKobayashi1.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 "ACInterfaceKobayashi1.h"
11 
13 
16 {
18  params.addClassDescription("Anisotropic gradient energy Allen-Cahn Kernel Part 1");
19  params.addParam<MaterialPropertyName>("mob_name", "L", "The mobility used with the kernel");
20  params.addParam<MaterialPropertyName>("eps_name", "eps", "The anisotropic interface parameter");
21  params.addParam<MaterialPropertyName>(
22  "deps_name",
23  "deps",
24  "The derivative of the anisotropic interface parameter with respect to angle");
25  params.addParam<MaterialPropertyName>(
26  "depsdgrad_op_name",
27  "depsdgrad_op",
28  "The derivative of the anisotropic interface parameter eps with respect to grad_op");
29  params.addParam<MaterialPropertyName>(
30  "ddepsdgrad_op_name", "ddepsdgrad_op", "The derivative of deps with respect to grad_op");
31  return params;
32 }
33 
36  _L(getMaterialProperty<Real>("mob_name")),
37  _dLdop(getMaterialPropertyDerivative<Real>("mob_name", _var.name())),
38  _eps(getMaterialProperty<Real>("eps_name")),
39  _deps(getMaterialProperty<Real>("deps_name")),
40  _depsdgrad_op(getMaterialProperty<RealGradient>("depsdgrad_op_name")),
41  _ddepsdgrad_op(getMaterialProperty<RealGradient>("ddepsdgrad_op_name"))
42 {
43  // reserve space for derivatives
44  _dLdarg.resize(_n_args);
45  _depsdarg.resize(_n_args);
46  _ddepsdarg.resize(_n_args);
47 
48  // Iterate over all coupled variables
49  for (unsigned int i = 0; i < _n_args; ++i)
50  {
51  _dLdarg[i] = &getMaterialPropertyDerivative<Real>("mob_name", i);
52  _depsdarg[i] = &getMaterialPropertyDerivative<Real>("eps_name", i);
53  _ddepsdarg[i] = &getMaterialPropertyDerivative<Real>("deps_name", i);
54  }
55 }
56 
59 {
60  // Set modified gradient vector
61  const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0);
62 
63  // Define anisotropic interface residual
64  return _eps[_qp] * _deps[_qp] * _L[_qp] * v;
65 }
66 
69 {
70  // Set modified gradient vector
71  const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0);
72 
73  // dvdgrad_op*_grad_phi
74  const RealGradient dv(-_grad_phi[_j][_qp](1), _grad_phi[_j][_qp](0), 0);
75 
76  // Derivative of epsilon wrt nodal op values
77  Real depsdop_i = _depsdgrad_op[_qp] * _grad_phi[_j][_qp];
78  Real ddepsdop_i = _ddepsdgrad_op[_qp] * _grad_phi[_j][_qp];
79  ;
80 
81  // Set the Jacobian
82  RealGradient jac1 = _eps[_qp] * _deps[_qp] * dv;
83  RealGradient jac2 = _deps[_qp] * depsdop_i * v;
84  RealGradient jac3 = _eps[_qp] * ddepsdop_i * v;
85 
86  return _L[_qp] * (jac1 + jac2 + jac3);
87 }
88 
89 Real
91 {
92  // get the coupled variable jvar is referring to
93  const unsigned int cvar = mapJvarToCvar(jvar);
94 
95  // Set modified gradient vector
96  const RealGradient v(-_grad_u[_qp](1), _grad_u[_qp](0), 0);
97 
98  // Set off-diagonal jaocbian terms from mobility dependence
99  Real dsum =
100  _L[_qp] * (_deps[_qp] * (*_depsdarg[cvar])[_qp] * _phi[_j][_qp] * v * _grad_test[_i][_qp]);
101  dsum +=
102  _L[_qp] * (_eps[_qp] * (*_ddepsdarg[cvar])[_qp] * _phi[_j][_qp] * v * _grad_test[_i][_qp]);
103  dsum += (*_dLdarg[cvar])[_qp] * _phi[_j][_qp] * _eps[_qp] * _deps[_qp] * v * _grad_test[_i][_qp];
104 
105  return dsum;
106 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
ACInterfaceKobayashi1(const InputParameters &parameters)
Kernel 1 of 2 for interfacial energy anisotropy in the Allen-Cahn equation as implemented in R...
std::vector< const MaterialProperty< Real > * > _depsdarg
const MaterialProperty< RealGradient > & _ddepsdgrad_op
const MaterialProperty< Real > & _eps
static InputParameters validParams()
const std::string name
Definition: Setup.h:20
std::vector< const MaterialProperty< Real > * > _dLdarg
Mobility derivative w.r.t. other coupled variables.
static InputParameters validParams()
const MaterialProperty< Real > & _deps
virtual RealGradient precomputeQpResidual()
Enum of computeDFDOP inputs.
const MaterialProperty< Real > & _L
Mobility.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
registerMooseObject("PhaseFieldApp", ACInterfaceKobayashi1)
void addClassDescription(const std::string &doc_string)
virtual RealGradient precomputeQpJacobian()
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
const MaterialProperty< RealGradient > & _depsdgrad_op
std::vector< const MaterialProperty< Real > * > _ddepsdarg