LCOV - code coverage report
Current view: top level - src/kernels - PorousFlowFullySaturatedUpwindHeatAdvection.C (source / functions) Hit Total Coverage
Test: idaholab/moose porous_flow: #33380 (547b29) with base 8581c3 Lines: 21 23 91.3 %
Date: 2026-07-20 19:40:36 Functions: 7 8 87.5 %
Legend: Lines: hit not hit

          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>;

Generated by: LCOV version 1.14