www.mooseframework.org
KKSACBulkC.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 "KKSACBulkC.h"
11 
12 registerMooseObject("PhaseFieldApp", KKSACBulkC);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<KKSACBulkBase>();
19  params.addClassDescription("KKS model kernel (part 2 of 2) for the Bulk Allen-Cahn. This "
20  "includes all terms dependent on chemical potential.");
21  params.addRequiredCoupledVar("ca", "a-phase concentration");
22  params.addRequiredCoupledVar("cb", "b-phase concentration");
23  return params;
24 }
25 
26 KKSACBulkC::KKSACBulkC(const InputParameters & parameters)
27  : KKSACBulkBase(parameters),
28  _ca_name(getVar("ca", 0)->name()),
29  _ca_var(coupled("ca")),
30  _ca(coupledValue("ca")),
31  _cb_name(getVar("cb", 0)->name()),
32  _cb_var(coupled("cb")),
33  _cb(coupledValue("cb")),
34  _prop_dFadca(getMaterialPropertyDerivative<Real>("fa_name", _ca_name)),
35  _prop_d2Fadca2(getMaterialPropertyDerivative<Real>("fa_name", _ca_name, _ca_name)),
36  _prop_d2Fadcadarg(_nvar)
37 {
38  // Iterate over all coupled variables
39  for (unsigned int i = 0; i < _nvar; ++i)
40  {
41  // get second partial derivatives wrt ca and other coupled variable
42  const auto & var_name = _coupled_moose_vars[i]->name();
43  _prop_d2Fadcadarg[i] = &getMaterialPropertyDerivative<Real>("fa_name", _ca_name, var_name);
44  }
45 }
46 
47 Real
48 KKSACBulkC::computeDFDOP(PFFunctionType type)
49 {
50  const Real A1 = _prop_dFadca[_qp] * (_ca[_qp] - _cb[_qp]);
51  switch (type)
52  {
53  case Residual:
54  return _prop_dh[_qp] * A1;
55 
56  case Jacobian:
57  return _phi[_j][_qp] * _prop_d2h[_qp] * A1;
58  }
59 
60  mooseError("Invalid type passed in");
61 }
62 
63 Real
65 {
66  // first get dependence of mobility _L on other variables using parent class
67  // member function
69 
70  // Then add dependence of KKSACBulkF on other variables
71  // Treat ca and cb specially, as they appear in the residual
72  if (jvar == _ca_var)
73  return res + _L[_qp] * _prop_dh[_qp] *
74  ((_ca[_qp] - _cb[_qp]) * _prop_d2Fadca2[_qp] + _prop_dFadca[_qp]) *
75  _phi[_j][_qp] * _test[_i][_qp];
76 
77  if (jvar == _cb_var)
78  return res - _L[_qp] * _prop_dh[_qp] * _prop_dFadca[_qp] * _phi[_j][_qp] * _test[_i][_qp];
79 
80  // for all other vars get the coupled variable jvar is referring to
81  const unsigned int cvar = mapJvarToCvar(jvar);
82 
83  res += _L[_qp] * _prop_dh[_qp] * (*_prop_d2Fadcadarg[cvar])[_qp] * (_ca[_qp] - _cb[_qp]) *
84  _phi[_j][_qp] * _test[_i][_qp];
85 
86  return res;
87 }
KKSACBulkBase::_prop_d2h
const MaterialProperty< Real > & _prop_d2h
Second derivative of the switching function .
Definition: KKSACBulkBase.h:56
KKSACBulkC::_prop_d2Fadcadarg
std::vector< const MaterialProperty< Real > * > _prop_d2Fadcadarg
Mixed partial derivatives of the free energy function wrt ca and any other coupled variables .
Definition: KKSACBulkC.h:54
ACBulk< Real >::Residual
Definition: ACBulk.h:40
KKSACBulkBase::_prop_dh
const MaterialProperty< Real > & _prop_dh
Derivative of the switching function .
Definition: KKSACBulkBase.h:53
ACBulk::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: ACBulk.h:116
KKSACBulkC::_prop_dFadca
const MaterialProperty< Real > & _prop_dFadca
Derivative of the free energy function .
Definition: KKSACBulkC.h:47
KKSACBulkC::_cb
const VariableValue & _cb
Definition: KKSACBulkC.h:44
KKSACBulkC::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: KKSACBulkC.C:64
KKSACBulkC::_ca
const VariableValue & _ca
Definition: KKSACBulkC.h:39
KKSACBulkBase::_nvar
unsigned int _nvar
Number of coupled variables.
Definition: KKSACBulkBase.h:35
validParams< KKSACBulkC >
InputParameters validParams< KKSACBulkC >()
Definition: KKSACBulkC.C:16
KKSACBulkC::computeDFDOP
virtual Real computeDFDOP(PFFunctionType type)
Definition: KKSACBulkC.C:48
name
const std::string name
Definition: Setup.h:21
KKSACBulkC::KKSACBulkC
KKSACBulkC(const InputParameters &parameters)
Definition: KKSACBulkC.C:26
KKSACBulkC::_prop_d2Fadca2
const MaterialProperty< Real > & _prop_d2Fadca2
Second derivative of the free energy function .
Definition: KKSACBulkC.h:50
ACBulk< Real >::Jacobian
Definition: ACBulk.h:39
KKSACBulkC::_cb_var
unsigned int _cb_var
Definition: KKSACBulkC.h:43
registerMooseObject
registerMooseObject("PhaseFieldApp", KKSACBulkC)
KKSACBulkC
KKSACBulkBase child class for the phase concentration difference term in the the Allen-Cahn bulk res...
Definition: KKSACBulkC.h:27
KKSACBulkC::_ca_var
unsigned int _ca_var
Definition: KKSACBulkC.h:38
validParams< KKSACBulkBase >
InputParameters validParams< KKSACBulkBase >()
Definition: KKSACBulkBase.C:14
KKSACBulkC::_ca_name
std::string _ca_name
phase a concentration
Definition: KKSACBulkC.h:37
KKSACBulkC.h
ACBulk< Real >::_L
const MaterialProperty< Real > & _L
Mobility.
Definition: ACBulk.h:46
KKSACBulkBase
ACBulk child class that takes all the necessary data from a KKSBaseMaterial and sets up the Allen-Cah...
Definition: KKSACBulkBase.h:26