www.mooseframework.org
SoretDiffusion.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 "SoretDiffusion.h"
11 
12 // MOOSE includes
13 #include "MooseVariable.h"
14 
15 registerMooseObject("PhaseFieldApp", SoretDiffusion);
16 
17 template <>
18 InputParameters
20 {
21  InputParameters params = validParams<Kernel>();
22  params.addClassDescription("Add Soret effect to Split formulation Cahn-Hilliard Kernel");
23  params.addRequiredCoupledVar("T", "Temperature");
24  params.addCoupledVar("c", "Concentration");
25  params.addRequiredParam<MaterialPropertyName>("diff_name",
26  "The diffusivity used with the kernel");
27  params.addParam<MaterialPropertyName>(
28  "Q_name", "Qheat", "The material name for the heat of transport");
29  return params;
30 }
31 
32 SoretDiffusion::SoretDiffusion(const InputParameters & parameters)
33  : Kernel(parameters),
34  _T_var(coupled("T")),
35  _T(coupledValue("T")),
36  _grad_T(coupledGradient("T")),
37  _is_coupled(isCoupled("c")),
38  _c_var(_is_coupled ? coupled("c") : _var.number()),
39  _c(_is_coupled ? coupledValue("c") : _u),
40  _D(getMaterialProperty<Real>("diff_name")),
41  _Q(getMaterialProperty<Real>("Q_name")),
42  _kB(8.617343e-5) // Boltzmann constant in eV/K
43 {
44 }
45 
46 Real
48 {
49  const Real T_term = _D[_qp] * _Q[_qp] * _c[_qp] / (_kB * _T[_qp] * _T[_qp]);
50  return T_term * _grad_T[_qp] * _grad_test[_i][_qp];
51 }
52 
53 Real
55 {
56  return (_is_coupled && _c_var != _var.number()) ? 0.0 : computeQpCJacobian();
57 }
58 
59 Real
61 {
62  // c Off-Diagonal Jacobian
63  if (_c_var == jvar)
64  return computeQpCJacobian();
65 
66  // T Off-Diagonal Jacobian
67  if (_T_var == jvar)
68  return _D[_qp] * _Q[_qp] * _c[_qp] * _grad_test[_i][_qp] *
69  (_grad_phi[_j][_qp] - 2.0 * _grad_T[_qp] * _phi[_j][_qp] / _T[_qp]) /
70  (_kB * _T[_qp] * _T[_qp]);
71 
72  return 0.0;
73 }
74 
75 Real
77 {
78  // Calculate the Jacobian for the c variable
79  return _D[_qp] * _Q[_qp] * _phi[_j][_qp] * _grad_T[_qp] / (_kB * _T[_qp] * _T[_qp]) *
80  _grad_test[_i][_qp];
81 }
validParams< SoretDiffusion >
InputParameters validParams< SoretDiffusion >()
Definition: SoretDiffusion.C:19
SoretDiffusion::_c
const VariableValue & _c
Variable value for the concentration.
Definition: SoretDiffusion.h:50
SoretDiffusion::_Q
const MaterialProperty< Real > & _Q
Heat of transport material property.
Definition: SoretDiffusion.h:56
SoretDiffusion::computeQpJacobian
virtual Real computeQpJacobian()
Definition: SoretDiffusion.C:54
SoretDiffusion::_grad_T
const VariableGradient & _grad_T
Variable gradient for temperature.
Definition: SoretDiffusion.h:41
SoretDiffusion::_T
const VariableValue & _T
Coupled variable for the temperature.
Definition: SoretDiffusion.h:38
SoretDiffusion::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar)
Definition: SoretDiffusion.C:60
SoretDiffusion::_D
const MaterialProperty< Real > & _D
Diffusivity material property.
Definition: SoretDiffusion.h:53
SoretDiffusion::SoretDiffusion
SoretDiffusion(const InputParameters &parameters)
Definition: SoretDiffusion.C:32
SoretDiffusion::computeQpCJacobian
virtual Real computeQpCJacobian()
Definition: SoretDiffusion.C:76
SoretDiffusion::_kB
const Real _kB
Boltzmann constant.
Definition: SoretDiffusion.h:59
SoretDiffusion
SoretDiffusion adds the soret effect in the split form of the Cahn-Hilliard equation.
Definition: SoretDiffusion.h:23
SoretDiffusion::_is_coupled
const bool _is_coupled
is the kernel used in a coupled form?
Definition: SoretDiffusion.h:44
SoretDiffusion::_T_var
unsigned int _T_var
int label for temperature variable
Definition: SoretDiffusion.h:35
SoretDiffusion.h
registerMooseObject
registerMooseObject("PhaseFieldApp", SoretDiffusion)
SoretDiffusion::_c_var
unsigned int _c_var
int label for the Concentration
Definition: SoretDiffusion.h:47
SoretDiffusion::computeQpResidual
virtual Real computeQpResidual()
Definition: SoretDiffusion.C:47