LCOV - code coverage report
Current view: top level - src/kernels - PorousFlowDesorpedMassTimeDerivative.C (source / functions) Hit Total Coverage
Test: idaholab/moose porous_flow: #33380 (547b29) with base 8581c3 Lines: 37 40 92.5 %
Date: 2026-07-20 19:40:36 Functions: 9 12 75.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 "PorousFlowDesorpedMassTimeDerivative.h"
      11             : 
      12             : #include "MooseVariable.h"
      13             : 
      14             : #include "libmesh/quadrature.h"
      15             : 
      16             : registerMooseObject("PorousFlowApp", PorousFlowDesorpedMassTimeDerivative);
      17             : registerMooseObject("PorousFlowApp", ADPorousFlowDesorpedMassTimeDerivative);
      18             : 
      19             : template <bool is_ad>
      20             : InputParameters
      21         102 : PorousFlowDesorpedMassTimeDerivativeTempl<is_ad>::validParams()
      22             : {
      23             :   InputParameters params = GenericKernel<is_ad>::validParams();
      24         204 :   params.set<MultiMooseEnum>("vector_tags") = "time";
      25         204 :   params.set<MultiMooseEnum>("matrix_tags") = "system time";
      26         204 :   params.addRequiredParam<UserObjectName>(
      27             :       "PorousFlowDictator", "The UserObject that holds the list of PorousFlow variable names.");
      28         204 :   params.addRequiredCoupledVar(
      29             :       "conc_var", "The variable that represents the concentration of desorped species");
      30         102 :   params.addClassDescription("Desorped component mass derivative wrt time.");
      31         102 :   return params;
      32           0 : }
      33             : 
      34             : template <bool is_ad>
      35          54 : PorousFlowDesorpedMassTimeDerivativeTempl<is_ad>::PorousFlowDesorpedMassTimeDerivativeTempl(
      36             :     const InputParameters & parameters)
      37             :   : GenericKernel<is_ad>(parameters),
      38          54 :     _dictator(this->template getUserObject<PorousFlowDictator>("PorousFlowDictator")),
      39          54 :     _conc_var_number(this->coupled("conc_var")),
      40          54 :     _conc(this->template coupledGenericValue<is_ad>("conc_var")),
      41          54 :     _conc_old(this->coupledValueOld("conc_var")),
      42         108 :     _porosity(this->template getGenericMaterialProperty<Real, is_ad>("PorousFlow_porosity_qp")),
      43         108 :     _porosity_old(this->template getMaterialPropertyOld<Real>("PorousFlow_porosity_qp")),
      44          54 :     _dporosity_dvar(is_ad ? nullptr
      45          47 :                           : &this->template getMaterialProperty<std::vector<Real>>(
      46             :                                 "dPorousFlow_porosity_qp_dvar")),
      47          54 :     _dporosity_dgradvar(is_ad ? nullptr
      48          47 :                               : &this->template getMaterialProperty<std::vector<RealGradient>>(
      49          54 :                                     "dPorousFlow_porosity_qp_dgradvar"))
      50             : {
      51          54 : }
      52             : 
      53             : template <bool is_ad>
      54             : GenericReal<is_ad>
      55        6672 : PorousFlowDesorpedMassTimeDerivativeTempl<is_ad>::computeQpResidual()
      56             : {
      57        6672 :   GenericReal<is_ad> c = (1.0 - _porosity[_qp]) * _conc[_qp];
      58        6672 :   Real c_old = (1.0 - _porosity_old[_qp]) * _conc_old[_qp];
      59        6672 :   return _test[_i][_qp] * (c - c_old) / this->_dt;
      60             : }
      61             : 
      62             : template <bool is_ad>
      63             : Real
      64       29152 : PorousFlowDesorpedMassTimeDerivativeTempl<is_ad>::computeQpJacobian()
      65             : {
      66       29152 :   return computeQpJac(_var.number());
      67             : }
      68             : 
      69             : template <bool is_ad>
      70             : Real
      71        8192 : PorousFlowDesorpedMassTimeDerivativeTempl<is_ad>::computeQpOffDiagJacobian(unsigned int jvar)
      72             : {
      73        8192 :   return computeQpJac(jvar);
      74             : }
      75             : 
      76             : template <bool is_ad>
      77             : Real
      78       37344 : PorousFlowDesorpedMassTimeDerivativeTempl<is_ad>::computeQpJac(unsigned int jvar)
      79             : {
      80             :   if constexpr (!is_ad)
      81             :   {
      82             :     Real deriv = 0.0;
      83             : 
      84       37344 :     if (jvar == _conc_var_number)
      85        4064 :       deriv = (1.0 - this->_porosity[this->_qp]) * this->_phi[this->_j][this->_qp];
      86             : 
      87       37344 :     if (_dictator.notPorousFlowVariable(jvar))
      88           0 :       return this->_test[this->_i][this->_qp] * deriv / this->_dt;
      89       37344 :     const unsigned int pvar = _dictator.porousFlowVariableNum(jvar);
      90             : 
      91       37344 :     deriv -= (*_dporosity_dgradvar)[this->_qp][pvar] * this->_grad_phi[this->_j][this->_qp] *
      92       37344 :              this->_conc[this->_qp];
      93       37344 :     deriv -= (*_dporosity_dvar)[this->_qp][pvar] * this->_phi[this->_j][this->_qp] *
      94             :              this->_conc[this->_qp];
      95             : 
      96       37344 :     return this->_test[this->_i][this->_qp] * deriv / this->_dt;
      97             :   }
      98             :   else
      99             :     libmesh_ignore(jvar);
     100           0 :   return 0.0;
     101             : }
     102             : 
     103             : template class PorousFlowDesorpedMassTimeDerivativeTempl<false>;
     104             : template class PorousFlowDesorpedMassTimeDerivativeTempl<true>;

Generated by: LCOV version 1.14