www.mooseframework.org
KKSSplitCHCRes.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 "KKSSplitCHCRes.h"
11 
12 registerMooseObject("PhaseFieldApp", KKSSplitCHCRes);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<SplitCHBase>();
19  params.addClassDescription(
20  "KKS model kernel for the split Bulk Cahn-Hilliard term. This kernel operates on the "
21  "physical concentration 'c' as the non-linear variable");
22  params.addRequiredParam<MaterialPropertyName>(
23  "fa_name",
24  "Base name of an arbitrary phase free energy function F (f_base in the corresponding "
25  "KKSBaseMaterial)");
26  params.addRequiredCoupledVar(
27  "ca", "phase concentration corresponding to the non-linear variable of this kernel");
28  params.addCoupledVar("args_a", "Vector of additional arguments to Fa");
29  params.addRequiredCoupledVar("w",
30  "Chemical potential non-linear helper variable for the split solve");
31  return params;
32 }
33 
34 KKSSplitCHCRes::KKSSplitCHCRes(const InputParameters & parameters)
35  : DerivativeMaterialInterface<JvarMapKernelInterface<SplitCHBase>>(parameters),
36  _nvar(_coupled_moose_vars.size()),
37  _ca_var(coupled("ca")),
38  _ca_name(getVar("ca", 0)->name()),
39  _dFadca(getMaterialPropertyDerivative<Real>("fa_name", _ca_name)),
40  _d2Fadcadarg(_nvar),
41  _w_var(coupled("w")),
42  _w(coupledValue("w"))
43 {
44  // Iterate over all coupled variables
45  for (unsigned int i = 0; i < _nvar; ++i)
46  {
47  // get the second derivative material property
48  const auto & var_name = this->_coupled_moose_vars[i]->name();
49  _d2Fadcadarg[i] = &getMaterialPropertyDerivative<Real>("fa_name", _ca_name, var_name);
50  }
51 }
52 
53 void
55 {
56  validateNonlinearCoupling<Real>("fa_name");
57  validateDerivativeMaterialPropertyBase<Real>("fa_name");
58 }
59 
60 Real
62 {
63  Real residual = SplitCHBase::computeQpResidual();
64  residual += -_w[_qp] * _test[_i][_qp];
65 
66  return residual;
67 }
68 
76 Real
77 KKSSplitCHCRes::computeDFDC(PFFunctionType type)
78 {
79  switch (type)
80  {
81  case Residual:
82  return _dFadca[_qp]; // dFa/dca ( = dFb/dcb = dF/dc)
83 
84  case Jacobian:
85  return 0.0;
86  }
87 
88  mooseError("Invalid type passed in");
89 }
90 
91 Real
93 {
94  // treat w variable explicitly
95  if (jvar == _w_var)
96  return -_phi[_j][_qp] * _test[_i][_qp];
97 
98  // get the coupled variable jvar is referring to
99  const unsigned int cvar = mapJvarToCvar(jvar);
100  return _phi[_j][_qp] * _test[_i][_qp] * (*_d2Fadcadarg[cvar])[_qp];
101 }
KKSSplitCHCRes::KKSSplitCHCRes
KKSSplitCHCRes(const InputParameters &parameters)
Definition: KKSSplitCHCRes.C:34
KKSSplitCHCRes::_d2Fadcadarg
std::vector< const MaterialProperty< Real > * > _d2Fadcadarg
Second derivatives of fa with respect to all ca and coupled variables.
Definition: KKSSplitCHCRes.h:58
SplitCHBase::computeQpResidual
virtual Real computeQpResidual()
Definition: SplitCHBase.C:40
KKSSplitCHCRes::_w
const VariableValue & _w
Definition: KKSSplitCHCRes.h:62
KKSSplitCHCRes.h
SplitCHBase
The couple, SplitCHBase and SplitCHWRes, splits the CH equation by replacing chemical potential with ...
Definition: SplitCHBase.h:21
validParams< SplitCHBase >
InputParameters validParams< SplitCHBase >()
Definition: SplitCHBase.C:14
KKSSplitCHCRes::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: KKSSplitCHCRes.C:92
KKSSplitCHCRes
SplitCHBulk child class that takes all the necessary data from a KKSBaseMaterial.
Definition: KKSSplitCHCRes.h:34
KKSSplitCHCRes::_w_var
unsigned int _w_var
Chemical potential.
Definition: KKSSplitCHCRes.h:61
name
const std::string name
Definition: Setup.h:21
KKSSplitCHCRes::_nvar
unsigned int _nvar
Number of coupled variables.
Definition: KKSSplitCHCRes.h:47
validParams< KKSSplitCHCRes >
InputParameters validParams< KKSSplitCHCRes >()
Definition: KKSSplitCHCRes.C:16
KKSSplitCHCRes::computeQpResidual
virtual Real computeQpResidual()
Definition: KKSSplitCHCRes.C:61
registerMooseObject
registerMooseObject("PhaseFieldApp", KKSSplitCHCRes)
KKSSplitCHCRes::_ca_name
VariableName _ca_name
Definition: KKSSplitCHCRes.h:51
KKSSplitCHCRes::computeDFDC
virtual Real computeDFDC(PFFunctionType type)
Note that per product and chain rules: which is: .
Definition: KKSSplitCHCRes.C:77
KKSSplitCHCRes::initialSetup
virtual void initialSetup()
Definition: KKSSplitCHCRes.C:54
KKSSplitCHCRes::_dFadca
const MaterialProperty< Real > & _dFadca
chemical potential
Definition: KKSSplitCHCRes.h:55