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 "LinearFVVolumetricHeatTransfer.h" 11 : #include "SubProblem.h" 12 : #include "NS.h" 13 : #include "FEProblemBase.h" 14 : 15 : registerMooseObject("NavierStokesApp", LinearFVVolumetricHeatTransfer); 16 : 17 : InputParameters 18 72 : LinearFVVolumetricHeatTransfer::validParams() 19 : { 20 72 : InputParameters params = LinearFVElementalKernel::validParams(); 21 72 : params.addClassDescription( 22 : "Represents a heat transfer term between the fluid and a homogenized structure."); 23 144 : params.addRequiredParam<MooseFunctorName>("h_solid_fluid", 24 : "Name of the convective heat transfer coefficient."); 25 144 : params.addRequiredParam<bool>("is_solid", "Whether this kernel acts on the solid temperature."); 26 72 : params.addRequiredParam<VariableName>(NS::T_fluid, "Fluid temperature."); 27 72 : params.addRequiredParam<VariableName>(NS::T_solid, "Solid temperature."); 28 72 : return params; 29 0 : } 30 : 31 36 : LinearFVVolumetricHeatTransfer::LinearFVVolumetricHeatTransfer(const InputParameters & params) 32 : : LinearFVElementalKernel(params), 33 36 : _h_solid_fluid(getFunctor<Real>("h_solid_fluid")), 34 36 : _temp_fluid(getTemperatureVariable(NS::T_fluid)), 35 36 : _temp_solid(getTemperatureVariable(NS::T_solid)), 36 108 : _is_solid(getParam<bool>("is_solid")) 37 : { 38 36 : } 39 : 40 : const MooseLinearVariableFV<Real> & 41 72 : LinearFVVolumetricHeatTransfer::getTemperatureVariable(const std::string & vname) 42 : { 43 72 : auto * ptr = dynamic_cast<MooseLinearVariableFV<Real> *>( 44 72 : &_fe_problem.getVariable(_tid, getParam<VariableName>(vname))); 45 : 46 72 : if (!ptr) 47 0 : paramError( 48 : vname, "The variable supplied to ", vname, " should be of type MooseLinearVariableFVReal!"); 49 : 50 72 : return *ptr; 51 : } 52 : 53 : Real 54 50100 : LinearFVVolumetricHeatTransfer::computeMatrixContribution() 55 : { 56 50100 : const auto elem = makeElemArg(_current_elem_info->elem()); 57 50100 : const auto state = determineState(); 58 : 59 50100 : return _h_solid_fluid(elem, state) * _current_elem_volume; 60 : } 61 : 62 : Real 63 50100 : LinearFVVolumetricHeatTransfer::computeRightHandSideContribution() 64 : { 65 50100 : const auto elem = makeElemArg(_current_elem_info->elem()); 66 50100 : const auto state = determineState(); 67 : 68 50100 : const auto temp_value = _is_solid ? _temp_fluid.getElemValue(*_current_elem_info, state) 69 50100 : : _temp_solid.getElemValue(*_current_elem_info, state); 70 : 71 50100 : return _h_solid_fluid(elem, state) * temp_value * _current_elem_volume; 72 : }