LCOV - code coverage report
Current view: top level - src/interfacekernels - SideSetHeatTransferKernel.C (source / functions) Hit Total Coverage
Test: idaholab/moose heat_transfer: #31405 (292dce) with base fef103 Lines: 81 99 81.8 %
Date: 2025-09-04 07:53:51 Functions: 4 4 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 "SideSetHeatTransferKernel.h"
      11             : 
      12             : registerMooseObject("HeatTransferApp", SideSetHeatTransferKernel);
      13             : 
      14             : InputParameters
      15         289 : SideSetHeatTransferKernel::validParams()
      16             : {
      17         289 :   InputParameters params = InterfaceKernel::validParams();
      18         289 :   params.addClassDescription(
      19             :       "Modeling conduction, convection, and radiation across internal side set.");
      20         578 :   params.addParam<MaterialPropertyName>("conductance",
      21             :                                         "gap_conductance",
      22             :                                         "Conductivity of gap divided by effective gap width,"
      23             :                                         "conductance ignored if not provided");
      24         578 :   params.addCoupledVar("Tbulk_var", "Bulk temperature of gap as variable");
      25         578 :   params.addParam<MaterialPropertyName>(
      26             :       "Tbulk_mat", "gap_Tbulk", "Bulk temperature of gap as material property");
      27         578 :   params.addParam<MaterialPropertyName>(
      28             :       "h_primary",
      29             :       "gap_h_primary",
      30             :       "Convective heat transfer coefficient (primary face), convection ignored if not provided");
      31         578 :   params.addParam<MaterialPropertyName>(
      32             :       "h_neighbor",
      33             :       "gap_h_neighbor",
      34             :       "Convective heat transfer coefficient (neighbor face), convection ignored if not provided");
      35         578 :   params.addParam<MaterialPropertyName>(
      36             :       "emissivity_eff_primary",
      37             :       "gap_emissivity_eff_primary",
      38             :       "Effective emmissivity of primary face, radiation ignored if not provided. "
      39             :       "This value contains contributions from reflectivity, see SideSetHeatTransferMaterial "
      40             :       "for details.");
      41         578 :   params.addParam<MaterialPropertyName>(
      42             :       "emissivity_eff_neighbor",
      43             :       "gap_emissivity_eff_neighbor",
      44             :       "Effective emmissivity of neighbor face, radiation ignored if not provided. "
      45             :       "This value contains contributions from reflectivity, see SideSetHeatTransferMaterial "
      46             :       "for details.");
      47         289 :   return params;
      48           0 : }
      49             : 
      50         154 : SideSetHeatTransferKernel::SideSetHeatTransferKernel(const InputParameters & parameters)
      51             :   : InterfaceKernel(parameters),
      52         154 :     _cond(getMaterialProperty<Real>("conductance")),
      53         352 :     _Tbulk_var(isParamValid("Tbulk_var") ? &coupledValue("Tbulk_var") : nullptr),
      54         264 :     _Tbulk_mat(_Tbulk_var ? nullptr : &getMaterialProperty<Real>("Tbulk_mat")),
      55         308 :     _hp(getMaterialProperty<Real>("h_primary")),
      56         308 :     _hm(getMaterialProperty<Real>("h_neighbor")),
      57         308 :     _eps_p(getMaterialProperty<Real>("emissivity_eff_primary")),
      58         462 :     _eps_m(getMaterialProperty<Real>("emissivity_eff_neighbor"))
      59             : {
      60         308 :   if (parameters.isParamSetByUser("Tbulk_mat") && _Tbulk_var)
      61           0 :     paramError("Tbulk_var", "Both Tbulk_mat and Tbulk_var set by user, cannot use both.");
      62             : 
      63         154 :   if (_var.number() == _neighbor_var.number() && _var.isNodal())
      64           0 :     mooseError(
      65             :         "Variable and neighbor variable are the same, but they are not elemental variables.");
      66         154 : }
      67             : 
      68             : Real
      69      222912 : SideSetHeatTransferKernel::computeQpResidual(Moose::DGResidualType type)
      70             : {
      71             :   Real r = 0;
      72             : 
      73      222912 :   if (_cond[_qp] != 0.0) // Conduction
      74             :   {
      75      222912 :     Real jump = _u[_qp] - _neighbor_value[_qp];
      76      222912 :     switch (type)
      77             :     {
      78      111456 :       case Moose::Element:
      79      111456 :         r += _cond[_qp] * jump * _test[_i][_qp];
      80      111456 :         break;
      81             : 
      82      111456 :       case Moose::Neighbor:
      83      111456 :         r -= _cond[_qp] * jump * _test_neighbor[_i][_qp];
      84      111456 :         break;
      85             :     }
      86             :   }
      87             : 
      88      222912 :   if (_hp[_qp] != 0.0 && _hm[_qp] != 0.0) // Convection
      89             :   {
      90      222912 :     Real Tb = (_Tbulk_var ? (*_Tbulk_var)[_qp] : (*_Tbulk_mat)[_qp]);
      91      222912 :     switch (type)
      92             :     {
      93      111456 :       case Moose::Element:
      94      111456 :         r += _hp[_qp] * (_u[_qp] - Tb) * _test[_i][_qp];
      95      111456 :         break;
      96             : 
      97      111456 :       case Moose::Neighbor:
      98      111456 :         r += _hm[_qp] * (_neighbor_value[_qp] - Tb) * _test_neighbor[_i][_qp];
      99      111456 :         break;
     100             :     }
     101             :   }
     102             : 
     103      222912 :   if (_eps_p[_qp] != 0.0 && _eps_m[_qp] != 0.0) // Radiation
     104             :   {
     105      222912 :     Real Rp = _eps_p[_qp] * (_u[_qp] * _u[_qp] * _u[_qp] * _u[_qp]);
     106      222912 :     Real Rm = _eps_m[_qp] * (_neighbor_value[_qp] * _neighbor_value[_qp] * _neighbor_value[_qp] *
     107      222912 :                              _neighbor_value[_qp]);
     108      222912 :     switch (type)
     109             :     {
     110      111456 :       case Moose::Element:
     111      111456 :         r += (Rp - Rm) * _test[_i][_qp];
     112      111456 :         break;
     113             : 
     114      111456 :       case Moose::Neighbor:
     115      111456 :         r += (Rm - Rp) * _test_neighbor[_i][_qp];
     116      111456 :         break;
     117             :     }
     118             :   }
     119             : 
     120      222912 :   return r;
     121             : }
     122             : 
     123             : Real
     124      111240 : SideSetHeatTransferKernel::computeQpJacobian(Moose::DGJacobianType type)
     125             : {
     126             :   Real jac = 0;
     127             : 
     128      111240 :   if (_cond[_qp] != 0.0) // Conduction
     129             :   {
     130      111240 :     switch (type)
     131             :     {
     132       55620 :       case Moose::ElementElement:
     133       55620 :         jac += _cond[_qp] * _phi[_j][_qp] * _test[_i][_qp];
     134       55620 :         break;
     135             : 
     136       55620 :       case Moose::NeighborNeighbor:
     137       55620 :         jac += _cond[_qp] * _phi_neighbor[_j][_qp] * _test_neighbor[_i][_qp];
     138       55620 :         break;
     139             : 
     140           0 :       case Moose::ElementNeighbor:
     141           0 :         jac -= _cond[_qp] * _phi_neighbor[_j][_qp] * _test[_i][_qp];
     142           0 :         break;
     143             : 
     144           0 :       case Moose::NeighborElement:
     145           0 :         jac -= _cond[_qp] * _phi[_j][_qp] * _test_neighbor[_i][_qp];
     146           0 :         break;
     147             :     }
     148             :   }
     149             : 
     150      111240 :   if (_hp[_qp] != 0.0 && _hm[_qp] != 0.0) // Convection
     151             :   {
     152      111240 :     switch (type)
     153             :     {
     154       55620 :       case Moose::ElementElement:
     155       55620 :         jac += _hp[_qp] * _phi[_j][_qp] * _test[_i][_qp];
     156       55620 :         break;
     157             : 
     158       55620 :       case Moose::NeighborNeighbor:
     159       55620 :         jac += _hm[_qp] * _phi_neighbor[_j][_qp] * _test_neighbor[_i][_qp];
     160       55620 :         break;
     161             : 
     162             :       case Moose::NeighborElement:
     163             :       case Moose::ElementNeighbor:
     164             :         break;
     165             :     }
     166             :   }
     167             : 
     168      111240 :   if (_eps_p[_qp] != 0.0 && _eps_m[_qp] != 0.0) // Radiation
     169             :   {
     170      111240 :     switch (type)
     171             :     {
     172       55620 :       case Moose::ElementElement:
     173       55620 :         jac += 4.0 * _eps_p[_qp] * (_u[_qp] * _u[_qp] * _u[_qp]) * _phi[_j][_qp] * _test[_i][_qp];
     174       55620 :         break;
     175             : 
     176       55620 :       case Moose::NeighborNeighbor:
     177       55620 :         jac += 4.0 * _eps_m[_qp] *
     178       55620 :                (_neighbor_value[_qp] * _neighbor_value[_qp] * _neighbor_value[_qp]) *
     179       55620 :                _phi_neighbor[_j][_qp] * _test_neighbor[_i][_qp];
     180       55620 :         break;
     181             : 
     182           0 :       case Moose::ElementNeighbor:
     183           0 :         jac -= 4.0 * _eps_m[_qp] *
     184           0 :                (_neighbor_value[_qp] * _neighbor_value[_qp] * _neighbor_value[_qp]) *
     185           0 :                _phi_neighbor[_j][_qp] * _test[_i][_qp];
     186           0 :         break;
     187             : 
     188           0 :       case Moose::NeighborElement:
     189           0 :         jac -= 4.0 * _eps_p[_qp] * (_u[_qp] * _u[_qp] * _u[_qp]) * _phi[_j][_qp] *
     190           0 :                _test_neighbor[_i][_qp];
     191           0 :         break;
     192             :     }
     193             :   }
     194             : 
     195      111240 :   return jac;
     196             : }

Generated by: LCOV version 1.14