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 "PorousFlowHeatAdvection.h" 11 : 12 : registerMooseObject("PorousFlowApp", PorousFlowHeatAdvection); 13 : registerMooseObject("PorousFlowApp", ADPorousFlowHeatAdvection); 14 : 15 : template <bool is_ad> 16 : InputParameters 17 351 : PorousFlowHeatAdvectionTempl<is_ad>::validParams() 18 : { 19 351 : InputParameters params = PorousFlowDarcyBaseTempl<is_ad>::validParams(); 20 351 : params.addClassDescription("Fully-upwinded heat flux, advected by the fluid"); 21 351 : return params; 22 0 : } 23 : 24 : template <bool is_ad> 25 186 : PorousFlowHeatAdvectionTempl<is_ad>::PorousFlowHeatAdvectionTempl( 26 : const InputParameters & parameters) 27 : : PorousFlowDarcyBaseTempl<is_ad>(parameters), 28 186 : _enthalpy(this->template getGenericMaterialProperty<std::vector<Real>, is_ad>( 29 : "PorousFlow_fluid_phase_enthalpy_nodal")), 30 186 : _denthalpy_dvar(is_ad ? nullptr 31 179 : : &this->template getMaterialProperty<std::vector<std::vector<Real>>>( 32 : "dPorousFlow_fluid_phase_enthalpy_nodal_dvar")), 33 372 : _relative_permeability(this->template getGenericMaterialProperty<std::vector<Real>, is_ad>( 34 : "PorousFlow_relative_permeability_nodal")), 35 186 : _drelative_permeability_dvar( 36 : is_ad ? nullptr 37 179 : : &this->template getMaterialProperty<std::vector<std::vector<Real>>>( 38 186 : "dPorousFlow_relative_permeability_nodal_dvar")) 39 : { 40 186 : } 41 : 42 : template <bool is_ad> 43 : GenericReal<is_ad> 44 664716 : PorousFlowHeatAdvectionTempl<is_ad>::mobility(unsigned nodenum, unsigned phase) const 45 : { 46 664716 : return _enthalpy[nodenum][phase] * _fluid_density_node[nodenum][phase] * 47 664988 : _relative_permeability[nodenum][phase] / _fluid_viscosity[nodenum][phase]; 48 : } 49 : 50 : template <bool is_ad> 51 : Real 52 416541 : PorousFlowHeatAdvectionTempl<is_ad>::dmobility(unsigned nodenum, 53 : unsigned phase, 54 : unsigned pvar) const 55 : { 56 : if constexpr (!is_ad) 57 : { 58 416541 : Real dm = (*_denthalpy_dvar)[nodenum][phase][pvar] * _fluid_density_node[nodenum][phase] * 59 416541 : _relative_permeability[nodenum][phase] / _fluid_viscosity[nodenum][phase]; 60 416541 : dm += _enthalpy[nodenum][phase] * (*_dfluid_density_node_dvar)[nodenum][phase][pvar] * 61 416541 : _relative_permeability[nodenum][phase] / _fluid_viscosity[nodenum][phase]; 62 416541 : dm += _enthalpy[nodenum][phase] * _fluid_density_node[nodenum][phase] * 63 416541 : (*_drelative_permeability_dvar)[nodenum][phase][pvar] / _fluid_viscosity[nodenum][phase]; 64 416541 : dm -= _enthalpy[nodenum][phase] * _fluid_density_node[nodenum][phase] * 65 416541 : _relative_permeability[nodenum][phase] * (*_dfluid_viscosity_dvar)[nodenum][phase][pvar] / 66 : std::pow(_fluid_viscosity[nodenum][phase], 2); 67 : return dm; 68 : } 69 : else 70 : libmesh_ignore(nodenum, phase, pvar); 71 0 : return 0.0; 72 : } 73 : 74 : template class PorousFlowHeatAdvectionTempl<false>; 75 : template class PorousFlowHeatAdvectionTempl<true>;