www.mooseframework.org
CHSplitFlux.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 "CHSplitFlux.h"
11 
12 registerMooseObject("PhaseFieldApp", CHSplitFlux);
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<Kernel>();
19  params.addClassDescription("Computes flux $j$ as nodal variable $j = -M\\nabla\\mu$");
20  params.addRequiredParam<unsigned int>("component", "Flux component");
21  params.addRequiredParam<MaterialPropertyName>("mobility_name", "Mobility property name");
22  params.addRequiredCoupledVar("mu", "Chemical Potential");
23  params.addCoupledVar("c", "Concentration");
24  return params;
25 }
26 
27 CHSplitFlux::CHSplitFlux(const InputParameters & parameters)
28  : DerivativeMaterialInterface<Kernel>(parameters),
29  _component(getParam<unsigned int>("component")),
30  _mu_var(coupled("mu")),
31  _grad_mu(coupledGradient("mu")),
32  _mobility(getMaterialProperty<RealTensorValue>("mobility_name")),
33  _has_coupled_c(isCoupled("c")),
34  _c_var(_has_coupled_c ? coupled("c") : 0),
35  _dmobility_dc(_has_coupled_c
36  ? &getMaterialPropertyDerivative<RealTensorValue>("mobility_name",
37  getVar("c", 0)->name())
38  : NULL)
39 {
40 }
41 
42 Real
44 {
45  return _test[_i][_qp] * (_u[_qp] + _mobility[_qp].row(_component) * _grad_mu[_qp]);
46 }
47 
48 Real
50 {
51  return _test[_i][_qp] * _phi[_j][_qp];
52 }
53 
54 Real
56 {
57  if (jvar == _mu_var)
58  return _test[_i][_qp] * _mobility[_qp].row(_component) * _grad_phi[_j][_qp];
59  else if (_has_coupled_c && jvar == _c_var)
60  return _test[_i][_qp] * (*_dmobility_dc)[_qp].row(_component) * _grad_mu[_qp] * _phi[_j][_qp];
61  else
62  return 0.0;
63 }
CHSplitFlux::_mobility
const MaterialProperty< RealTensorValue > & _mobility
Definition: CHSplitFlux.h:39
CHSplitFlux::_c_var
const unsigned int _c_var
Definition: CHSplitFlux.h:42
CHSplitFlux::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: CHSplitFlux.C:55
CHSplitFlux.h
CHSplitFlux::_component
const unsigned int _component
Definition: CHSplitFlux.h:36
CHSplitFlux::_has_coupled_c
const bool _has_coupled_c
Definition: CHSplitFlux.h:41
CHSplitFlux::computeQpResidual
virtual Real computeQpResidual()
Definition: CHSplitFlux.C:43
name
const std::string name
Definition: Setup.h:21
CHSplitFlux::computeQpJacobian
virtual Real computeQpJacobian()
Definition: CHSplitFlux.C:49
CHSplitFlux::CHSplitFlux
CHSplitFlux(const InputParameters &parameters)
Definition: CHSplitFlux.C:27
registerMooseObject
registerMooseObject("PhaseFieldApp", CHSplitFlux)
CHSplitFlux
CHSplitFlux computes flux as non-linear variable via residual = flux + mobility * gradient(chemical p...
Definition: CHSplitFlux.h:26
CHSplitFlux::_grad_mu
const VariableGradient & _grad_mu
Definition: CHSplitFlux.h:38
validParams< CHSplitFlux >
InputParameters validParams< CHSplitFlux >()
Definition: CHSplitFlux.C:16
CHSplitFlux::_mu_var
const unsigned int _mu_var
Definition: CHSplitFlux.h:37