LCOV - code coverage report
Current view: top level - src/userobjects - RichardsRelPermPower.C (source / functions) Hit Total Coverage
Test: idaholab/moose richards: #31405 (292dce) with base fef103 Lines: 29 30 96.7 %
Date: 2025-09-04 07:56:35 Functions: 5 5 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             : //  "Power" form of relative permeability
      11             : //
      12             : #include "RichardsRelPermPower.h"
      13             : 
      14             : registerMooseObject("RichardsApp", RichardsRelPermPower);
      15             : 
      16             : InputParameters
      17         843 : RichardsRelPermPower::validParams()
      18             : {
      19         843 :   InputParameters params = RichardsRelPerm::validParams();
      20        1686 :   params.addRequiredRangeCheckedParam<Real>(
      21             :       "simm",
      22             :       "simm >= 0 & simm < 1",
      23             :       "Immobile saturation.  Must be between 0 and 1.   Define s = "
      24             :       "(seff - simm)/(1 - simm).  Then relperm = (n+1)s^n - "
      25             :       "ns^(n+1)");
      26        1686 :   params.addRequiredRangeCheckedParam<Real>("n",
      27             :                                             "n >= 2",
      28             :                                             "Exponent.  Must be >= 2.   Define s = "
      29             :                                             "(seff - simm)/(1 - simm).  Then "
      30             :                                             "relperm = (n+1)s^n - ns^(n+1)");
      31         843 :   params.addClassDescription("Power form of relative permeability.  Define s = (seff - simm)/(1 - "
      32             :                              "simm).  Then relperm = (n+1)s^n - ns^(n+1) if s<simm, otherwise "
      33             :                              "relperm=1");
      34         843 :   return params;
      35           0 : }
      36             : 
      37         416 : RichardsRelPermPower::RichardsRelPermPower(const InputParameters & parameters)
      38        1248 :   : RichardsRelPerm(parameters), _simm(getParam<Real>("simm")), _n(getParam<Real>("n"))
      39             : {
      40         416 : }
      41             : 
      42             : Real
      43     6756526 : RichardsRelPermPower::relperm(Real seff) const
      44             : {
      45     6756526 :   if (seff >= 1.0)
      46             :     return 1.0;
      47             : 
      48     2855696 :   if (seff <= _simm)
      49             :     return 0.0;
      50             : 
      51     2718004 :   Real s_internal = (seff - _simm) / (1.0 - _simm);
      52     2718004 :   Real krel = (_n + 1) * std::pow(s_internal, _n) - _n * std::pow(s_internal, _n + 1);
      53             : 
      54             :   // bound, just in case
      55     2718004 :   if (krel < 0)
      56             :   {
      57             :     krel = 0;
      58             :   }
      59     2718004 :   if (krel > 1)
      60             :   {
      61             :     krel = 1;
      62             :   }
      63             :   return krel;
      64             : }
      65             : 
      66             : Real
      67    11160762 : RichardsRelPermPower::drelperm(Real seff) const
      68             : {
      69    11160762 :   if (seff >= 1.0)
      70             :     return 0.0;
      71             : 
      72     4440077 :   if (seff <= _simm)
      73             :     return 0.0;
      74             : 
      75     4213322 :   Real s_internal = (seff - _simm) / (1.0 - _simm);
      76             :   Real krelp =
      77     4213322 :       (_n + 1) * _n * std::pow(s_internal, _n - 1) - _n * (_n + 1) * std::pow(s_internal, _n);
      78     4213322 :   return krelp / (1.0 - _simm);
      79             : }
      80             : 
      81             : Real
      82     4552486 : RichardsRelPermPower::d2relperm(Real seff) const
      83             : {
      84     4552486 :   if (seff >= 1.0)
      85             :     return 0.0;
      86             : 
      87     1732487 :   if (seff <= _simm)
      88             :     return 0.0;
      89             : 
      90     1643332 :   Real s_internal = (seff - _simm) / (1.0 - _simm);
      91     1643332 :   Real krelpp = (_n + 1) * _n * (_n - 1) * std::pow(s_internal, _n - 2) -
      92     1643332 :                 _n * (_n + 1) * _n * std::pow(s_internal, _n - 1);
      93     1643332 :   return krelpp / std::pow(1.0 - _simm, 2);
      94             : }

Generated by: LCOV version 1.14