3.5-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
thresholdcapillarypressures.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*****************************************************************************
4 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
19
26#ifndef DUMUX_PNM_THRESHOLD_CAPILLARY_PRESSURES_HH
27#define DUMUX_PNM_THRESHOLD_CAPILLARY_PRESSURES_HH
28
29#include <cmath>
30
31namespace Dumux::PoreNetwork {
32
34{
36 template<class Scalar>
37 static constexpr Scalar pcSnapoff(const Scalar surfaceTension,
38 const Scalar contactAngle,
39 const Scalar inscribedRadius) noexcept
40 {
41 using std::sin;
42 using std::cos;
43 const Scalar theta = contactAngle;
44 const Scalar cosTheta = std::cos(theta);
45 const Scalar sinTheta = std::sin(theta);
46 return surfaceTension / inscribedRadius * (cosTheta - sinTheta);
47 }
48
54 template<class Scalar>
55 static constexpr Scalar pcEntry(const Scalar surfaceTension,
56 const Scalar contactAngle,
57 const Scalar inscribedRadius,
58 const Scalar shapeFactor) noexcept
59 {
60 using std::sin;
61 using std::cos;
62 using std::sqrt;
63 const Scalar theta = contactAngle;
64 const Scalar cosTheta = cos(theta);
65 const Scalar sinTheta = sin(theta);
66
67 const Scalar D = M_PI - 3*theta + 3*sinTheta*cosTheta - (cosTheta*cosTheta) / (4*shapeFactor);
68 const Scalar F = (1 + sqrt(1 + 4*shapeFactor*D / (cosTheta*cosTheta))) / (1 + 2*sqrt(M_PI*shapeFactor));
69 return surfaceTension / inscribedRadius * cosTheta * (1 + 2*sqrt(M_PI*shapeFactor)) * F;
70 }
71};
72
73} // namespace Dumux::PoreNetwork
74
75#endif
Definition: discretization/porenetwork/fvelementgeometry.hh:34
Scalar shapeFactor(Shape shape, const Scalar inscribedRadius)
Returns the value of the shape factor for a given shape.
Definition: throatproperties.hh:161
Definition: thresholdcapillarypressures.hh:34
static constexpr Scalar pcSnapoff(const Scalar surfaceTension, const Scalar contactAngle, const Scalar inscribedRadius) noexcept
The snap-off capillary pressure of a pore throat.
Definition: thresholdcapillarypressures.hh:37
static constexpr Scalar pcEntry(const Scalar surfaceTension, const Scalar contactAngle, const Scalar inscribedRadius, const Scalar shapeFactor) noexcept
The entry capillary pressure of a pore throat.
Definition: thresholdcapillarypressures.hh:55