www.mooseframework.org
ACBarrierFunction.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 
10 #include "ACBarrierFunction.h"
11 #include "libmesh/utility.h"
12 
13 registerMooseObject("PhaseFieldApp", ACBarrierFunction);
14 
15 template <>
16 InputParameters
18 {
19  InputParameters params = validParams<ACGrGrBase>();
20  params.addRequiredParam<MaterialPropertyName>(
21  "gamma", "The interface profile coefficient to use with the kernel");
22  params.addClassDescription("Allen-Cahn kernel used when 'mu' is a function of variables");
23  return params;
24 }
25 
26 ACBarrierFunction::ACBarrierFunction(const InputParameters & parameters)
27  : ACGrGrBase(parameters),
28  _n_eta(_vals.size()),
29  _uname(getParam<NonlinearVariableName>("variable")),
30  _gamma_name(getParam<MaterialPropertyName>("gamma")),
31  _gamma(getMaterialPropertyByName<Real>(_gamma_name)),
32  _dmudvar(getMaterialPropertyDerivative<Real>("mu", _uname)),
33  _d2mudvar2(getMaterialPropertyDerivative<Real>("mu", _uname, _uname)),
34  _vname(getParam<std::vector<VariableName>>("v")),
35  _d2mudvardeta(_n_eta)
36 {
37  for (unsigned int i = 0; i < _n_eta; ++i)
38  _d2mudvardeta[i] = &getMaterialPropertyDerivative<Real>("mu", _uname, _vname[i]);
39 }
40 
41 Real
42 ACBarrierFunction::computeDFDOP(PFFunctionType type)
43 {
44  switch (type)
45  {
46  case Residual:
47  return _dmudvar[_qp] * calculateF0();
48 
49  case Jacobian:
50  {
51  Real df0dvar = 0.0;
52  for (unsigned int i = 0; i < _n_eta; ++i)
53  df0dvar += (*_vals[i])[_qp] * (*_vals[i])[_qp];
54 
55  df0dvar *= 2.0 * _gamma[_qp] * _u[_qp];
56  df0dvar += _u[_qp] * _u[_qp] * _u[_qp] - _u[_qp];
57 
58  return (_d2mudvar2[_qp] * calculateF0() + _dmudvar[_qp] * df0dvar) * _phi[_j][_qp];
59  }
60 
61  default:
62  mooseError("Invalid type passed in");
63  }
64 }
65 
66 Real
68 {
69  const unsigned int j = mapJvarToCvar(jvar);
70  Real sum_etai2 = 0.0;
71  Real df0deta_base = 0.0;
72  Real df0deta = 0.0;
73 
74  for (unsigned int i = 0; i < _n_eta; ++i)
75  if (i != j)
76  sum_etai2 += (*_vals[i])[_qp] * (*_vals[i])[_qp];
77 
78  df0deta_base = (*_vals[j])[_qp] * (*_vals[j])[_qp] - 1.0 +
79  2.0 * _gamma[_qp] * (_u[_qp] * _u[_qp] + sum_etai2);
80  df0deta = (*_vals[j])[_qp] * df0deta_base;
81 
82  return ((*_d2mudvardeta[j])[_qp] * calculateF0() + _dmudvar[_qp] * df0deta) * _phi[_j][_qp] *
83  _test[_i][_qp] * _L[_qp];
84 }
85 
86 Real
88 {
89  Real var_phase = 0.25 * _u[_qp] * _u[_qp] * _u[_qp] * _u[_qp] - 0.5 * _u[_qp] * _u[_qp];
90  Real eta_phase = 0.0;
91  Real eta_interface = 0.0;
92  Real sum_eta_j2;
93 
94  for (unsigned int i = 0; i < _n_eta; ++i)
95  {
96  sum_eta_j2 = 0.0;
97  for (unsigned int j = i + 1; j < _n_eta; ++j)
98  sum_eta_j2 += (*_vals[j])[_qp] * (*_vals[j])[_qp];
99  // eta_phase += 0.25 * (*_vals[i])[_qp] * (*_vals[i])[_qp] * (*_vals[i])[_qp] * (*_vals[i])[_qp]
100  // -
101  // 0.5 * (*_vals[i])[_qp] * (*_vals[i])[_qp];
102  eta_phase += 0.25 * Utility::pow<4>((*_vals[i])[_qp]) - 0.5 * Utility::pow<2>((*_vals[i])[_qp]);
103  eta_interface +=
104  (_u[_qp] * _u[_qp] + sum_eta_j2) * (*_vals[i])[_qp] * (*_vals[i])[_qp] * _gamma[_qp];
105  }
106  return 0.25 + var_phase + eta_phase + eta_interface;
107 }
ACBarrierFunction::_n_eta
unsigned int _n_eta
Definition: ACBarrierFunction.h:33
ACBulk< Real >::Residual
Definition: ACBulk.h:40
ACGrGrBase::_vals
std::vector< const VariableValue * > _vals
Definition: ACGrGrBase.h:33
ACBarrierFunction::_vname
const std::vector< VariableName > _vname
Definition: ACBarrierFunction.h:40
ACBarrierFunction::_uname
const NonlinearVariableName _uname
Definition: ACBarrierFunction.h:34
ACBarrierFunction
Several kernels use a material property called mu.
Definition: ACBarrierFunction.h:24
ACBarrierFunction::ACBarrierFunction
ACBarrierFunction(const InputParameters &parameters)
Definition: ACBarrierFunction.C:26
validParams< ACBarrierFunction >
InputParameters validParams< ACBarrierFunction >()
Definition: ACBarrierFunction.C:17
ACBarrierFunction::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: ACBarrierFunction.C:67
ACGrGrBase
This is the base class for kernels that calculate the residual for grain growth.
Definition: ACGrGrBase.h:25
validParams< ACGrGrBase >
InputParameters validParams< ACGrGrBase >()
Definition: ACGrGrBase.C:14
ACBarrierFunction::computeDFDOP
virtual Real computeDFDOP(PFFunctionType type)
Definition: ACBarrierFunction.C:42
ACBarrierFunction::_gamma
const MaterialProperty< Real > & _gamma
Definition: ACBarrierFunction.h:36
ACBarrierFunction::calculateF0
Real calculateF0()
Definition: ACBarrierFunction.C:87
registerMooseObject
registerMooseObject("PhaseFieldApp", ACBarrierFunction)
ACBulk< Real >::Jacobian
Definition: ACBulk.h:39
ACBarrierFunction::_d2mudvar2
const MaterialProperty< Real > & _d2mudvar2
Definition: ACBarrierFunction.h:38
ACBarrierFunction::_d2mudvardeta
std::vector< const MaterialProperty< Real > * > _d2mudvardeta
Definition: ACBarrierFunction.h:41
ACBarrierFunction::_dmudvar
const MaterialProperty< Real > & _dmudvar
Definition: ACBarrierFunction.h:37
ACBarrierFunction.h
ACBulk< Real >::_L
const MaterialProperty< Real > & _L
Mobility.
Definition: ACBulk.h:46