LCOV - code coverage report
Current view: top level - src/utils - PorousFlowBrooksCorey.C (source / functions) Hit Total Coverage
Test: porous_flow Test Coverage Lines: 39 39 100.0 %
Date: 2017-11-21 14:47:27 Functions: 12 12 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /****************************************************************/
       2             : /* MOOSE - Multiphysics Object Oriented Simulation Environment  */
       3             : /*                                                              */
       4             : /*          All contents are licensed under LGPL V2.1           */
       5             : /*             See LICENSE for full restrictions                */
       6             : /****************************************************************/
       7             : 
       8             : #include "PorousFlowBrooksCorey.h"
       9             : //#include "libmesh/utility.h"
      10             : 
      11             : namespace PorousFlowBrooksCorey
      12             : {
      13             : Real
      14          12 : effectiveSaturation(Real pc, Real pe, Real lambda)
      15             : {
      16          12 :   if (pc < pe)
      17             :     return 1.0;
      18             :   else
      19          10 :     return std::pow(pc / pe, -lambda);
      20             : }
      21             : 
      22             : Real
      23          10 : dEffectiveSaturation(Real pc, Real pe, Real lambda)
      24             : {
      25          10 :   if (pc < pe)
      26             :     return 0.0;
      27             :   else
      28           8 :     return -lambda * std::pow(pc / pe, -lambda - 1.0) / pe;
      29             : }
      30             : 
      31             : Real
      32           6 : d2EffectiveSaturation(Real pc, Real pe, Real lambda)
      33             : {
      34           6 :   if (pc < pe)
      35             :     return 0.0;
      36             :   else
      37           4 :     return lambda * (lambda + 1.0) * std::pow(pc / pe, -lambda - 2.0) / pe / pe;
      38             : }
      39             : 
      40             : Real
      41       46122 : capillaryPressure(Real seff, Real pe, Real lambda, Real pc_max)
      42             : {
      43       46122 :   if (seff >= 1.0)
      44             :     return 0.0;
      45       46120 :   else if (seff <= 0.0)
      46         404 :     return pc_max;
      47             :   else
      48       91432 :     return std::min(pe * std::pow(seff, -1.0 / lambda), pc_max);
      49             : }
      50             : 
      51             : Real
      52       17195 : dCapillaryPressure(Real seff, Real pe, Real lambda, Real pc_max)
      53             : {
      54       17195 :   if (seff <= 0.0 || seff >= 1.0)
      55             :     return 0.0;
      56             :   else
      57             :   {
      58             :     // Return 0 if pc > pc_max
      59       16790 :     if (capillaryPressure(seff, pe, lambda, pc_max) >= pc_max)
      60             :       return 0.0;
      61             :     else
      62       16790 :       return -pe * std::pow(seff, -1.0 / lambda - 1.0) / lambda;
      63             :   }
      64             : }
      65             : 
      66             : Real
      67       12379 : d2CapillaryPressure(Real seff, Real pe, Real lambda, Real pc_max)
      68             : {
      69       12379 :   if (seff <= 0.0 || seff >= 1.0)
      70             :     return 0.0;
      71             :   else
      72             :   {
      73             :     // Return 0 if pc > pc_max
      74       11975 :     if (capillaryPressure(seff, pe, lambda, pc_max) >= pc_max)
      75             :       return 0.0;
      76             :     else
      77       11975 :       return (lambda + 1.0) * pe * std::pow(seff, -1.0 / lambda - 2.0) / lambda / lambda;
      78             :   }
      79             : }
      80             : 
      81             : Real
      82        9850 : relativePermeabilityW(Real seff, Real lambda)
      83             : {
      84        9850 :   if (seff <= 0.0)
      85             :     return 0.0;
      86        9848 :   else if (seff >= 1.0)
      87             :     return 1.0;
      88             : 
      89        9846 :   return std::pow(seff, (2.0 + 3.0 * lambda) / lambda);
      90             : }
      91             : 
      92             : Real
      93        9846 : dRelativePermeabilityW(Real seff, Real lambda)
      94             : {
      95             :   // Guard against division by zero
      96        9846 :   if (seff <= 0.0 || seff >= 1.0)
      97             :     return 0.0;
      98             : 
      99        9842 :   return (2.0 + 3.0 * lambda) * std::pow(seff, (2.0 + 2.0 * lambda) / lambda) / lambda;
     100             : }
     101             : 
     102             : Real
     103        9850 : relativePermeabilityNW(Real seff, Real lambda)
     104             : {
     105        9850 :   if (seff <= 0.0)
     106             :     return 0.0;
     107        9848 :   else if (seff >= 1.0)
     108             :     return 1.0;
     109             : 
     110        9846 :   return seff * seff * (1.0 - std::pow(1.0 - seff, (2.0 + lambda) / lambda));
     111             : }
     112             : 
     113             : Real
     114        9846 : dRelativePermeabilityNW(Real seff, Real lambda)
     115             : {
     116             :   // Guard against division by zero
     117        9846 :   if (seff <= 0.0 || seff >= 1.0)
     118             :     return 0.0;
     119             : 
     120        9842 :   return seff * (2.0 +
     121        9842 :                  (seff * (2.0 + 3.0 * lambda) - 2.0 * lambda) * std::pow(1.0 - seff, 2.0 / lambda) /
     122        9842 :                      lambda);
     123             : }
     124        2499 : }

Generated by: LCOV version 1.11