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