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 : }