LCOV - code coverage report
Current view: top level - src/kernels - SoretDiffusion.C (source / functions) Hit Total Coverage
Test: idaholab/moose phase_field: #31405 (292dce) with base fef103 Lines: 34 35 97.1 %
Date: 2025-09-04 07:55:36 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.14