3.4
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
25#ifndef DUMUX_PNM_THRESHOLD_CAPILLARY_PRESSURES_HH
26#define DUMUX_PNM_THRESHOLD_CAPILLARY_PRESSURES_HH
27
28#include <cmath>
29
30namespace Dumux::PoreNetwork {
31
33{
35 template<class Scalar>
36 static constexpr Scalar pcSnapoff(const Scalar surfaceTension,
37 const Scalar contactAngle,
38 const Scalar inscribedRadius) noexcept
39 {
40 using std::sin;
41 using std::cos;
42 const Scalar theta = contactAngle;
43 const Scalar cosTheta = std::cos(theta);
44 const Scalar sinTheta = std::sin(theta);
45 return surfaceTension / inscribedRadius * (cosTheta - sinTheta);
46 }
47
53 template<class Scalar>
54 static constexpr Scalar pcEntry(const Scalar surfaceTension,
55 const Scalar contactAngle,
56 const Scalar inscribedRadius,
57 const Scalar shapeFactor) noexcept
58 {
59 using std::sin;
60 using std::cos;
61 using std::sqrt;
62 const Scalar theta = contactAngle;
63 const Scalar cosTheta = cos(theta);
64 const Scalar sinTheta = sin(theta);
65
66 const Scalar D = M_PI - 3*theta + 3*sinTheta*cosTheta - (cosTheta*cosTheta) / (4*shapeFactor);
67 const Scalar F = (1 + sqrt(1 + 4*shapeFactor*D / (cosTheta*cosTheta))) / (1 + 2*sqrt(M_PI*shapeFactor));
68 return surfaceTension / inscribedRadius * cosTheta * (1 + 2*sqrt(M_PI*shapeFactor)) * F;
69 }
70};
71
72} // namespace Dumux::PoreNetwork
73
74#endif
Definition: discretization/porenetwork/fvelementgeometry.hh:33
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:33
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:36
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:54