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

Generated by: LCOV version 1.14