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