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 "PorousFlowFullySaturatedUpwindHeatAdvection.h" 11 : 12 : registerMooseObject("PorousFlowApp", PorousFlowFullySaturatedUpwindHeatAdvection); 13 : registerMooseObject("PorousFlowApp", ADPorousFlowFullySaturatedUpwindHeatAdvection); 14 : 15 : template <bool is_ad> 16 : InputParameters 17 211 : PorousFlowFullySaturatedUpwindHeatAdvectionTempl<is_ad>::validParams() 18 : { 19 211 : InputParameters params = PorousFlowDarcyBaseTempl<is_ad>::validParams(); 20 211 : params.addClassDescription("Heat advection by a fluid. The fluid is assumed to have a single " 21 : "phase, and the advection is fully upwinded"); 22 211 : return params; 23 0 : } 24 : 25 : template <bool is_ad> 26 113 : PorousFlowFullySaturatedUpwindHeatAdvectionTempl< 27 : is_ad>::PorousFlowFullySaturatedUpwindHeatAdvectionTempl(const InputParameters & parameters) 28 : : PorousFlowDarcyBaseTempl<is_ad>(parameters), 29 113 : _enthalpy(this->template getGenericMaterialProperty<std::vector<Real>, is_ad>( 30 : "PorousFlow_fluid_phase_enthalpy_nodal")), 31 113 : _denthalpy_dvar(is_ad ? nullptr 32 106 : : &this->template getMaterialProperty<std::vector<std::vector<Real>>>( 33 113 : "dPorousFlow_fluid_phase_enthalpy_nodal_dvar")) 34 : { 35 113 : if (_dictator.numPhases() != 1) 36 2 : mooseError("PorousFlowFullySaturatedUpwindHeatAdvection should not be used for multi-phase " 37 : "scenarios as it does not include relative-permeability effects"); 38 111 : } 39 : 40 : template <bool is_ad> 41 : GenericReal<is_ad> 42 319567 : PorousFlowFullySaturatedUpwindHeatAdvectionTempl<is_ad>::mobility(unsigned nodenum, 43 : unsigned phase) const 44 : { 45 319567 : return _enthalpy[nodenum][phase] * _fluid_density_node[nodenum][phase] / 46 319567 : _fluid_viscosity[nodenum][phase]; 47 : } 48 : 49 : template <bool is_ad> 50 : Real 51 175919 : PorousFlowFullySaturatedUpwindHeatAdvectionTempl<is_ad>::dmobility(unsigned nodenum, 52 : unsigned phase, 53 : unsigned pvar) const 54 : { 55 : if constexpr (!is_ad) 56 : { 57 175919 : Real dm = (*_denthalpy_dvar)[nodenum][phase][pvar] * _fluid_density_node[nodenum][phase] / 58 175919 : _fluid_viscosity[nodenum][phase]; 59 175919 : dm += _enthalpy[nodenum][phase] * (*_dfluid_density_node_dvar)[nodenum][phase][pvar] / 60 : _fluid_viscosity[nodenum][phase]; 61 175919 : dm -= _enthalpy[nodenum][phase] * _fluid_density_node[nodenum][phase] * 62 175919 : (*_dfluid_viscosity_dvar)[nodenum][phase][pvar] / 63 : Utility::pow<2>(_fluid_viscosity[nodenum][phase]); 64 : return dm; 65 : } 66 : else 67 : libmesh_ignore(nodenum, phase, pvar); 68 0 : return 0.0; 69 : } 70 : 71 : template class PorousFlowFullySaturatedUpwindHeatAdvectionTempl<false>; 72 : template class PorousFlowFullySaturatedUpwindHeatAdvectionTempl<true>;