LCOV - code coverage report
Current view: top level - src/fvkernels - FVPorousFlowEnergyTimeDerivative.C (source / functions) Hit Total Coverage
Test: idaholab/moose porous_flow: #32971 (54bef8) with base c6cf66 Lines: 34 35 97.1 %
Date: 2026-05-29 20:38:56 Functions: 3 3 100.0 %
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 "FVPorousFlowEnergyTimeDerivative.h"
      11             : #include "PorousFlowDictator.h"
      12             : 
      13             : registerADMooseObject("PorousFlowApp", FVPorousFlowEnergyTimeDerivative);
      14             : 
      15             : InputParameters
      16          57 : FVPorousFlowEnergyTimeDerivative::validParams()
      17             : {
      18          57 :   InputParameters params = FVTimeKernel::validParams();
      19         114 :   params.addRequiredParam<UserObjectName>("PorousFlowDictator",
      20             :                                           "The PorousFlowDictator UserObject");
      21          57 :   params.addClassDescription("Derivative of heat energy with respect to time");
      22          57 :   return params;
      23           0 : }
      24             : 
      25          30 : FVPorousFlowEnergyTimeDerivative::FVPorousFlowEnergyTimeDerivative(
      26          30 :     const InputParameters & parameters)
      27             :   : FVTimeKernel(parameters),
      28          30 :     _dictator(getUserObject<PorousFlowDictator>("PorousFlowDictator")),
      29          30 :     _num_phases(_dictator.numPhases()),
      30          30 :     _fluid_present(_num_phases > 0),
      31          60 :     _porosity(getADMaterialProperty<Real>("PorousFlow_porosity_qp")),
      32          60 :     _porosity_old(getMaterialPropertyOld<Real>("PorousFlow_porosity_qp")),
      33          60 :     _density(_fluid_present
      34          50 :                  ? &getADMaterialProperty<std::vector<Real>>("PorousFlow_fluid_phase_density_qp")
      35             :                  : nullptr),
      36          50 :     _density_old(_fluid_present ? &getMaterialPropertyOld<std::vector<Real>>(
      37             :                                       "PorousFlow_fluid_phase_density_qp")
      38             :                                 : nullptr),
      39          60 :     _rock_energy(getADMaterialProperty<Real>("PorousFlow_matrix_internal_energy_nodal")),
      40          60 :     _rock_energy_old(getMaterialPropertyOld<Real>("PorousFlow_matrix_internal_energy_nodal")),
      41          50 :     _energy(_fluid_present ? &getADMaterialProperty<std::vector<Real>>(
      42             :                                  "PorousFlow_fluid_phase_internal_energy_qp")
      43             :                            : nullptr),
      44          50 :     _energy_old(_fluid_present ? &getMaterialPropertyOld<std::vector<Real>>(
      45             :                                      "PorousFlow_fluid_phase_internal_energy_qp")
      46             :                                : nullptr),
      47          60 :     _saturation(_fluid_present
      48          50 :                     ? &getADMaterialProperty<std::vector<Real>>("PorousFlow_saturation_qp")
      49             :                     : nullptr),
      50          60 :     _saturation_old(_fluid_present
      51          50 :                         ? &getMaterialPropertyOld<std::vector<Real>>("PorousFlow_saturation_qp")
      52          30 :                         : nullptr)
      53             : {
      54          30 : }
      55             : 
      56             : ADReal
      57       61810 : FVPorousFlowEnergyTimeDerivative::computeQpResidual()
      58             : {
      59             :   /// Porous matrix heat energy
      60       61810 :   ADReal energy = (1.0 - _porosity[_qp]) * _rock_energy[_qp];
      61       61810 :   Real energy_old = (1.0 - _porosity_old[_qp]) * _rock_energy_old[_qp];
      62             : 
      63             :   /// Add the fluid heat energy
      64       61810 :   if (_fluid_present)
      65      121790 :     for (const auto p : make_range(_num_phases))
      66             :     {
      67      123620 :       energy += _porosity[_qp] * (*_density)[_qp][p] * (*_saturation)[_qp][p] * (*_energy)[_qp][p];
      68       61810 :       energy_old += _porosity_old[_qp] * (*_density_old)[_qp][p] * (*_saturation_old)[_qp][p] *
      69       61810 :                     (*_energy_old)[_qp][p];
      70             :     }
      71             : 
      72      123620 :   return (energy - energy_old) / _dt;
      73             : }

Generated by: LCOV version 1.14