Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dumux-repositories
dumux
Commits
47f93884
Commit
47f93884
authored
Dec 17, 2018
by
Sina Ackermann
Committed by
Simon Scholz
Dec 18, 2018
Browse files
[doxygen] Adapt documentation for 2p, 2p1c, 2p2c, 2pnc, 2pncmin models
parent
55a2be36
Changes
106
Hide whitespace changes
Inline
Side-by-side
dumux/porousmediumflow/2p/boxmaterialinterfaceparams.hh
View file @
47f93884
...
...
@@ -21,6 +21,7 @@
* \ingroup TwoPModel
* \brief copydoc Dumux::BoxMaterialInterfaceParams
*/
#ifndef DUMUX_2P_BOX_MATERIAL_INTERFACE_PARAMS_HH
#define DUMUX_2P_BOX_MATERIAL_INTERFACE_PARAMS_HH
...
...
@@ -35,9 +36,11 @@ namespace Dumux {
* \ingroup TwoPModel
* \brief Class that determines the material with the lowest capillary
* pressure (under fully water-saturated conditions) around the nodes
* of a grid. These parameters are then associated with the global degree
* of freedom. On the basis of these parameters, the saturations in the
* remaining sub-control volumes connected to the vertex can be reconstructed.
* of a grid.
*
* These parameters are then associated with the global degree
* of freedom. On the basis of these parameters, the saturations in the
* remaining sub-control volumes connected to the vertex can be reconstructed.
*/
template
<
class
SpatialParams
>
class
BoxMaterialInterfaceParams
...
...
@@ -46,7 +49,7 @@ public:
using
MaterialLawParams
=
typename
SpatialParams
::
MaterialLaw
::
Params
;
/*!
* \brief Update the scv -> dofparameter map
* \brief Update
s
the scv -> dofparameter map
*
* \param fvGridGeometry The finite volume grid geometry
* \param spatialParams Class encapsulating the spatial parameters
...
...
@@ -104,12 +107,12 @@ public:
}
}
//! Return if this scv is connected to a material interface
//! Return
s
if this scv is connected to a material interface
template
<
class
Scv
>
bool
isOnMaterialInterface
(
const
Scv
&
scv
)
const
{
assert
(
isUpdated_
);
return
isOnMaterialInterface_
[
scv
.
dofIndex
()];
}
//! Return the material parameters associated with the dof
//! Return
s
the material parameters associated with the dof
template
<
class
Scv
>
const
MaterialLawParams
&
getDofParams
(
const
Scv
&
scv
)
const
{
assert
(
isUpdated_
);
return
*
(
dofParams_
[
scv
.
dofIndex
()]);
}
...
...
@@ -120,6 +123,6 @@ private:
std
::
vector
<
const
MaterialLawParams
*>
dofParams_
;
};
}
}
// end namespace Dumux
#endif
dumux/porousmediumflow/2p/formulation.hh
View file @
47f93884
...
...
@@ -16,12 +16,12 @@
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*****************************************************************************/
/*!
* \file
* \ingroup TwoPModel
* \brief Defines an enumeration for the formulations accepted by the two-phase model.
*/
#ifndef DUMUX_2P_FORMULATION_INDICES_HH
#define DUMUX_2P_FORMULATION_INDICES_HH
...
...
@@ -37,6 +37,6 @@ enum class TwoPFormulation
p1s0
//!< first phase saturation and second phase pressure as primary variables
};
}
// namespace Dumux
}
//
end
namespace Dumux
#endif
dumux/porousmediumflow/2p/gridadaptindicator.hh
View file @
47f93884
...
...
@@ -19,7 +19,7 @@
/*!
* \file
* \ingroup TwoPModel
* \brief Class defining a standard, saturation dependent indicator for grid adaptation
* \brief Class defining a standard, saturation dependent indicator for grid adaptation
.
*/
#ifndef DUMUX_TWOP_ADAPTION_INDICATOR_HH
...
...
@@ -36,8 +36,9 @@
namespace
Dumux
{
/*!\ingroup TwoPModel
* \brief Class defining a standard, saturation dependent indicator for grid adaptation
/*!
* \ingroup TwoPModel
* \brief Class defining a standard, saturation dependent indicator for grid adaptation.
*/
template
<
class
TypeTag
>
class
TwoPGridAdaptIndicator
...
...
@@ -52,7 +53,8 @@ class TwoPGridAdaptIndicator
enum
{
saturationIdx
=
Indices
::
saturationIdx
};
public:
/*! \brief The Constructor
/*!
* \brief The Constructor
*
* \param fvGridGeometry The finite volume grid geometry
* \param paramGroup The parameter group in which to look for runtime parameters first (default is "")
...
...
@@ -115,7 +117,7 @@ public:
Scalar
refineTol
=
0.05
,
Scalar
coarsenTol
=
0.001
)
{
//!
r
eset the indicator to a state that returns false for all elements
//!
R
eset the indicator to a state that returns false for all elements
refineBound_
=
std
::
numeric_limits
<
Scalar
>::
max
();
coarsenBound_
=
std
::
numeric_limits
<
Scalar
>::
lowest
();
maxSaturationDelta_
.
assign
(
fvGridGeometry_
->
gridView
().
size
(
0
),
0.0
);
...
...
@@ -124,32 +126,32 @@ public:
if
(
minLevel_
>=
maxLevel_
)
return
;
//!
c
heck for inadmissible tolerance combination
//!
C
heck for inadmissible tolerance combination
if
(
coarsenTol
>
refineTol
)
DUNE_THROW
(
Dune
::
InvalidStateException
,
"Refine tolerance must be higher than coarsen tolerance"
);
//!
v
ariables to hold the max/mon saturation values on the leaf
//!
V
ariables to hold the max/mon saturation values on the leaf
Scalar
globalMax
=
std
::
numeric_limits
<
Scalar
>::
lowest
();
Scalar
globalMin
=
std
::
numeric_limits
<
Scalar
>::
max
();
//! Calculate minimum and maximum saturation
for
(
const
auto
&
element
:
elements
(
fvGridGeometry_
->
gridView
()))
{
//!
i
ndex of the current leaf-element
//!
I
ndex of the current leaf-element
const
auto
globalIdxI
=
fvGridGeometry_
->
elementMapper
().
index
(
element
);
//!
o
btain the saturation at the center of the element
//!
O
btain the saturation at the center of the element
const
auto
geometry
=
element
.
geometry
();
const
auto
elemSol
=
elementSolution
(
element
,
sol
,
*
fvGridGeometry_
);
const
Scalar
satI
=
evalSolution
(
element
,
geometry
,
*
fvGridGeometry_
,
elemSol
,
geometry
.
center
())[
saturationIdx
];
//!
m
aybe update the global minimum/maximum
//!
M
aybe update the global minimum/maximum
using
std
::
min
;
using
std
::
max
;
globalMin
=
min
(
satI
,
globalMin
);
globalMax
=
max
(
satI
,
globalMax
);
//!
c
alculate maximum delta in saturation for this cell
//!
C
alculate maximum delta in saturation for this cell
for
(
const
auto
&
intersection
:
intersections
(
fvGridGeometry_
->
gridView
(),
element
))
{
//! Only consider internal intersections
...
...
@@ -162,7 +164,7 @@ public:
//! Visit intersection only once
if
(
element
.
level
()
>
outside
.
level
()
||
(
element
.
level
()
==
outside
.
level
()
&&
globalIdxI
<
globalIdxJ
))
{
//!
o
btain saturation in the neighbor
//!
O
btain saturation in the neighbor
const
auto
outsideGeometry
=
outside
.
geometry
();
const
auto
elemSolJ
=
elementSolution
(
outside
,
sol
,
*
fvGridGeometry_
);
const
Scalar
satJ
=
evalSolution
(
outside
,
outsideGeometry
,
*
fvGridGeometry_
,
elemSolJ
,
outsideGeometry
.
center
())[
saturationIdx
];
...
...
@@ -176,10 +178,10 @@ public:
}
}
//!
c
ompute the maximum delta in saturation
//!
C
ompute the maximum delta in saturation
const
auto
globalDelta
=
globalMax
-
globalMin
;
//!
c
ompute the refinement/coarsening bounds
//!
C
ompute the refinement/coarsening bounds
refineBound_
=
refineTol
*
globalDelta
;
coarsenBound_
=
coarsenTol
*
globalDelta
;
...
...
@@ -204,13 +206,14 @@ public:
checkNeighborsRefine_
(
element
);
}
/*! \brief function call operator to return mark
/*!
* \brief function call operator to return mark
*
*
\return 1 if an element should be refined
*
-1 if an element should be coarsened
*
0 otherwise
* \return 1 if an element should be refined
* -1 if an element should be coarsened
* 0 otherwise
*
*
\param element A grid element
* \param element A grid element
*/
int
operator
()
(
const
Element
&
element
)
const
{
...
...
@@ -232,9 +235,9 @@ private:
/*!
* \brief Method ensuring the refinement ratio of 2:1
*
*
For any given element, a loop over the neighbors checks if the
*
entities refinement would require that any of the neighbors has
*
to be refined, too. This is done recursively over all levels of the grid.
* For any given element, a loop over the neighbors checks if the
* entities refinement would require that any of the neighbors has
* to be refined, too. This is done recursively over all levels of the grid.
*
* \param element Element of interest that is to be refined
* \param level level of the refined element: it is at least 1
...
...
dumux/porousmediumflow/2p/griddatatransfer.hh
View file @
47f93884
...
...
@@ -21,6 +21,7 @@
* \ingroup TwoPModel
* \brief Performs the transfer of data on a grid from before to after adaptation.
*/
#ifndef DUMUX_TWOP_GRIDDATA_TRANSFER_HH
#define DUMUX_TWOP_GRIDDATA_TRANSFER_HH
...
...
@@ -104,12 +105,13 @@ class TwoPGridDataTransfer : public GridDataTransfer
static_assert
(
formulation
==
p0s1
||
formulation
==
p1s0
,
"Chosen formulation not known to the TwoPGridDataTransfer"
);
public:
/*! \brief Constructor
/*!
* \brief Constructor
*
*
\param problem The DuMuX problem to be solved
*
\param fvGridGeometry The finite volume grid geometry
*
\param gridVariables The secondary variables on the grid
*
\param sol The solution (primary variables) on the grid
* \param problem The DuMuX problem to be solved
* \param fvGridGeometry The finite volume grid geometry
* \param gridVariables The secondary variables on the grid
* \param sol The solution (primary variables) on the grid
*/
TwoPGridDataTransfer
(
std
::
shared_ptr
<
const
Problem
>
problem
,
std
::
shared_ptr
<
FVGridGeometry
>
fvGridGeometry
,
...
...
@@ -123,12 +125,13 @@ public:
,
adaptionMap_
(
fvGridGeometry
->
gridView
().
grid
(),
0
)
{}
/*! \brief Stores primary variables and additional data
/*!
* \brief Stores primary variables and additional data
*
*
To reconstruct the solution in father elements, problem properties might
*
need to be accessed. From upper level on downwards, the old solution is stored
*
into a container object, before the grid is adapted. Father elements hold averaged
*
information from the son cells for the case of the sons being coarsened.
* To reconstruct the solution in father elements, problem properties might
* need to be accessed. From upper level on downwards, the old solution is stored
* into a container object, before the grid is adapted. Father elements hold averaged
* information from the son cells for the case of the sons being coarsened.
*/
void
store
()
override
{
...
...
@@ -185,15 +188,16 @@ public:
}
}
/*! \brief Reconstruct missing primary variables (where elements are created/deleted)
/*!
* \brief Reconstruct missing primary variables (where elements are created/deleted)
*
*
To reconstruct the solution in father elements, problem properties might
*
need to be accessed.
*
Starting from the lowest level, the old solution is mapped on the new grid:
*
Where coarsened, new cells get information from old father element.
*
Where refined, a new solution is reconstructed from the old father cell,
*
and then a new son is created. That is then stored into the general data
*
structure (AdaptedValues).
* To reconstruct the solution in father elements, problem properties might
* need to be accessed.
* Starting from the lowest level, the old solution is mapped on the new grid:
* Where coarsened, new cells get information from old father element.
* Where refined, a new solution is reconstructed from the old father cell,
* and then a new son is created. That is then stored into the general data
* structure (AdaptedValues).
*/
void
reconstruct
()
override
{
...
...
@@ -387,14 +391,15 @@ public:
private:
/*! \brief Stores sons entries into father element for averaging
/*!
* \brief Stores sons entries into father element for averaging
*
*
Sum up the adaptedValues (sons values) into father element. We store from leaf
*
upwards, so sons are stored first, then cells on the next leaf (=fathers)
*
can be averaged.
* Sum up the adaptedValues (sons values) into father element. We store from leaf
* upwards, so sons are stored first, then cells on the next leaf (=fathers)
* can be averaged.
*
*
\param adaptedValues Container for model-specific values to be adapted
*
\param adaptedValuesFather Values to be adapted of father cell
* \param adaptedValues Container for model-specific values to be adapted
* \param adaptedValuesFather Values to be adapted of father cell
*/
static
void
storeAdaptionValues
(
AdaptedValues
&
adaptedValues
,
AdaptedValues
&
adaptedValuesFather
)
...
...
dumux/porousmediumflow/2p/incompressiblelocalresidual.hh
View file @
47f93884
...
...
@@ -22,6 +22,7 @@
* \brief Element-wise calculation of the residual and its derivatives
* for a two-phase, incompressible test problem.
*/
#ifndef DUMUX_2P_INCOMPRESSIBLE_TEST_LOCAL_RESIDUAL_HH
#define DUMUX_2P_INCOMPRESSIBLE_TEST_LOCAL_RESIDUAL_HH
...
...
@@ -73,7 +74,7 @@ public:
using
ParentType
::
ParentType
;
/*!
* \brief Add storage derivatives for wetting and non-wetting phase
* \brief Add
s
storage derivatives for wetting and non-wetting phase
*
* Compute storage derivatives for the wetting and the non-wetting phase with respect to \f$p_w\f$
* and \f$S_n\f$.
...
...
@@ -116,7 +117,7 @@ public:
}
/*!
* \brief Add source derivatives for wetting and non-wetting phase
* \brief Add
s
source derivatives for wetting and non-wetting phase
.
*
* \param partialDerivatives The partial derivatives
* \param problem The problem
...
...
@@ -135,7 +136,7 @@ public:
{
/* TODO maybe forward to problem for the user to implement the source derivatives?*/
}
/*!
* \brief Add flux derivatives for wetting and non-wetting phase for cell-centered FVM using TPFA
* \brief Add
s
flux derivatives for wetting and non-wetting phase for cell-centered FVM using TPFA
*
* Compute derivatives for the wetting and the non-wetting phase flux with respect to \f$p_w\f$
* and \f$S_n\f$.
...
...
@@ -254,7 +255,7 @@ public:
}
/*!
* \brief Add flux derivatives for wetting and non-wetting phase for box method
* \brief Add
s
flux derivatives for wetting and non-wetting phase for box method
*
* Compute derivatives for the wetting and the non-wetting phase flux with respect to \f$p_w\f$
* and \f$S_n\f$.
...
...
@@ -414,7 +415,7 @@ public:
}
/*!
* \brief Add cell-centered Dirichlet flux derivatives for wetting and non-wetting phase
* \brief Add
s
cell-centered Dirichlet flux derivatives for wetting and non-wetting phase
*
* Compute derivatives for the wetting and the non-wetting phase flux with respect to \f$p_w\f$
* and \f$S_n\f$.
...
...
@@ -496,7 +497,7 @@ public:
}
/*!
* \brief Add Robin flux derivatives for wetting and non-wetting phase
* \brief Add
s
Robin flux derivatives for wetting and non-wetting phase
*
* \param derivativeMatrices The matrices containing the derivatives
* \param problem The problem
...
...
dumux/porousmediumflow/2p/indices.hh
View file @
47f93884
...
...
@@ -16,12 +16,12 @@
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*****************************************************************************/
/*!
* \file
* \ingroup TwoPModel
* \brief Defines the indices required for the two-phase fully implicit model.
*/
#ifndef DUMUX_2P_INDICES_HH
#define DUMUX_2P_INDICES_HH
...
...
dumux/porousmediumflow/2p/iofields.hh
View file @
47f93884
...
...
@@ -19,8 +19,9 @@
/*!
* \file
* \ingroup TwoPModel
* \brief Adds I/O fields specific to the two-phase model
* \brief Adds I/O fields specific to the two-phase model
.
*/
#ifndef DUMUX_TWOP_IO_FIELDS_HH
#define DUMUX_TWOP_IO_FIELDS_HH
...
...
@@ -34,7 +35,7 @@ namespace Dumux {
/*!
* \ingroup TwoPModel
* \brief Adds I/O fields specific to the two-phase model
* \brief Adds I/O fields specific to the two-phase model
.
*/
class
TwoPIOFields
{
...
...
dumux/porousmediumflow/2p/model.hh
View file @
47f93884
...
...
@@ -16,14 +16,13 @@
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*****************************************************************************/
/*!
* \file
* \ingroup TwoPModel
* \brief Adaption of the fully implicit scheme to the two-phase flow model.
*
* This model implements two-phase flow of two immiscible fluids
* \f$\alpha \in \{ w, n \}\f$ using a standard multiphase Darcy
* \f$\alpha \in \{ w, n \}\f$ using a standard multi
-
phase Darcy
* approach as the equation for the conservation of momentum, i.e.
\f[
v_\alpha = - \frac{k_{r\alpha}}{\mu_\alpha} \textbf{K}
...
...
@@ -133,8 +132,7 @@ class TwoPIOFields;
////////////////////////////////
// properties
////////////////////////////////
namespace
Properties
{
namespace
Properties
{
//////////////////////////////////////////////////////////////////
// Type tags
...
...
dumux/porousmediumflow/2p/saturationreconstruction.hh
View file @
47f93884
...
...
@@ -21,6 +21,7 @@
* \ingroup TwoPModel
* \brief copydoc Dumux::TwoPScvSaturationReconstruction
*/
#ifndef DUMUX_2P_SCV_SATURATION_RECONSTRUCTION_HH
#define DUMUX_2P_SCV_SATURATION_RECONSTRUCTION_HH
...
...
@@ -31,9 +32,11 @@ namespace Dumux {
/*!
* \ingroup TwoPModel
* \brief Class that computes the non-wetting saturation in an scv from the saturation
* at the global degree of freedom. This is only necessary in conjunction with
* the box scheme where the degrees of freedom lie on material interfaces. There
* the non-wetting phase saturation is generally discontinuous.
* at the global degree of freedom.
*
* This is only necessary in conjunction with the box scheme where the degrees of
* freedom lie on material interfaces. There the non-wetting phase saturation is
* generally discontinuous.
*/
template
<
DiscretizationMethod
M
,
bool
enableReconstruction
>
class
TwoPScvSaturationReconstruction
...
...
@@ -41,6 +44,7 @@ class TwoPScvSaturationReconstruction
public:
/*!
* \brief Compute the non-wetting phase saturation in an scv
*
* \note In the default case, we don't reconstruct anything. We do
* Reconstruction is only done when using the box method
* and enableReconstruction = true.
...
...
@@ -101,6 +105,6 @@ public:
}
};
}
}
// end namespace Dumux
#endif
dumux/porousmediumflow/2p/sequential/celldata.hh
View file @
47f93884
...
...
@@ -21,23 +21,23 @@
* \ingroup SequentialTwoPModel
* \brief Class including data of one grid cell
*/
#ifndef DUMUX_ELEMENTDATA2P_HH
#define DUMUX_ELEMENTDATA2P_HH
#include
"properties.hh"
#include
"fluxdata.hh"
namespace
Dumux
{
namespace
Dumux
{
template
<
class
TypeTag
>
class
FluxData2P
;
/*!
* \brief Class including data of one grid cell.
* \ingroup SequentialTwoPModel
* \brief Class including data of one grid cell.
*
* The variables of two-phase flow, which are phase pressures and saturations are stored in this class.
*Further, resulting cell values for constitutive relationships like
*
Further, resulting cell values for constitutive relationships like
* mobilities, fractional flow functions and capillary pressure are stored.
* Additionally, data assigned to cell-cell interfaces, so-called flux-data are stored.
*
...
...
@@ -48,10 +48,11 @@ template<class TypeTag, bool enableCompressibility>
class
CellData2P
;
/*!
* \brief Class including the variables and data of discretized data of the constitutive relations for one grid cell.
* \ingroup SequentialTwoPModel
* \brief Class including the variables and data of discretized data of the constitutive relations for one grid cell.
*
* The variables of two-phase flow, which are phase pressures and saturations are stored in this class.
*Further, resulting cell values for constitutive relationships like
*
Further, resulting cell values for constitutive relationships like
* mobilities, fractional flow functions and capillary pressure are stored.
* Additionally, data assigned to cell-cell interfaces, so-called flux-data are stored.
*
...
...
dumux/porousmediumflow/2p/sequential/celldataadaptive.hh
View file @
47f93884
...
...
@@ -21,17 +21,17 @@
* \ingroup SequentialTwoPModel
* \brief Class including the data of a grid cell needed if an adaptive grid is used.
*/
#ifndef DUMUX_ELEMENTDATA2P_ADAPTIVE_HH
#define DUMUX_ELEMENTDATA2P_ADAPTIVE_HH
#include
<dune/grid/utility/persistentcontainer.hh>
#include
"celldata.hh"
namespace
Dumux
{
namespace
Dumux
{
/*!
* \brief Class including the data of a grid cell needed if an adaptive grid is used.
* \ingroup SequentialTwoPModel
* \brief Class including the data of a grid cell needed if an adaptive grid is used.
*
* The class provides model-specific functions needed to adapt the stored cell data to a new (adapted) grid.
* Additionally, it provides the storage-infrastructure for explicit front tracking.
...
...
dumux/porousmediumflow/2p/sequential/diffusion/cellcentered/pressure.hh
View file @
47f93884
...
...
@@ -21,6 +21,7 @@
* \ingroup SequentialTwoPModel
* \brief Finite Volume discretization of a two-phase flow pressure equation.
*/
#ifndef DUMUX_FVPRESSURE2P_HH
#define DUMUX_FVPRESSURE2P_HH
...
...
@@ -30,14 +31,13 @@
#include
<dumux/porousmediumflow/sequential/cellcentered/pressure.hh>
#include
<dumux/porousmediumflow/2p/sequential/diffusion/properties.hh>
namespace
Dumux
{
namespace
Dumux
{
/*!
* \brief Finite Volume discretization of a two-phase flow pressure equation of the sequential IMPES model.
* \ingroup SequentialTwoPModel
* \brief Finite Volume discretization of a two-phase flow pressure equation of the sequential IMPES model.
*
* This model implements two-phase flow of two immiscible fluids \f$\alpha \in \{ w, n \}\f$ using
* a standard multiphase Darcy approach as the equation for the conservation of momentum, i.e.
* a standard multi
-
phase Darcy approach as the equation for the conservation of momentum, i.e.
\f[
v_\alpha = - \frac{k_{r\alpha}}{\mu_\alpha} \textbf{K}
\left(\textbf{grad}\, p_\alpha - \varrho_{\alpha} {\textbf g} \right).
...
...
@@ -51,9 +51,9 @@ namespace Dumux
\right\} = q_\alpha \;.
\f]
* In the incompressible case the phase densities \f$ \varrho_\alpha \f$ can be eliminated from the equations.
The two equations
* are then added up, and because \f$S_w + S_n = 1\f$, the first term cancels out.
This leads to the so-called pressure
* equation. For the wetting (\f$w\f$)
* In the incompressible case the phase densities \f$ \varrho_\alpha \f$ can be eliminated from the equations.
*
The two equations
are then added up, and because \f$S_w + S_n = 1\f$, the first term cancels out.
*
This leads to the so-called pressure
equation. For the wetting (\f$w\f$)
* phase pressure as primary variable this yields
\f[
- \text{div}\, \left[\lambda \boldsymbol K \left(\textbf{grad}\, p_w + f_n \textbf{grad}\,
...
...
@@ -70,16 +70,16 @@ namespace Dumux
- \text{div}\, \left[\lambda \boldsymbol K \left(\textbf{grad}\,
p_{global} - \sum f_\alpha \varrho_\alpha {\textbf g}\right)\right] = q.
\f]
* Here, \f$ p_\alpha \f$ is a phase pressure, \f$ p_ {global} \f$ the global pressure of a classical fractional flow formulation
* (see e.g. P. Binning and M. A. Celia, ''Practical implementation of the fractional flow approach to multi-phase flow simulation'',
* Advances in water resources, vol. 22, no. 5, pp. 461-478, 1999.),
* Here, \f$ p_\alpha \f$ is a phase pressure, \f$ p_ {global} \f$ the global pressure of a classical fractional
* flow formulation (see e.g. Binning and Celia (1999) \cite Binning1999),
* \f$ p_c = p_n - p_w \f$ is the capillary pressure, \f$ \boldsymbol K \f$ the absolute permeability tensor,
* \f$ \lambda = \lambda_w + \lambda_n \f$ the total mobility depending on the
* saturation (\f$ \lambda_\alpha = k_{r_\alpha} / \mu_\alpha \f$),
* \f$ f_\alpha = \lambda_\alpha / \lambda \f$ the fractional flow function of a phase,
* \f$ \varrho_\alpha \f$ a phase density, \f$ {\textbf g} \f$ the gravitational acceleration vector and \f$ q = q_w + q_n \f$ the total source term.
* Depending on the primary variable chosen, one of the pressure equations above is solved sequentially together with the conservation
* of the phase mass for one phase.
* \f$ \varrho_\alpha \f$ a phase density, \f$ {\textbf g} \f$ the gravitational acceleration vector and
* \f$ q = q_w + q_n \f$ the total source term.
* Depending on the primary variable chosen, one of the pressure equations above is solved sequentially
* together with the conservation of the phase mass for one phase.
*
* For all cases, \f$ p = p_D \f$ on \f$ \Gamma_{Dirichlet} \f$, and \f$ \boldsymbol v_{total} \cdot \boldsymbol n = q_N \f$
* on \f$ \Gamma_{Neumann} \f$.
...
...
@@ -188,7 +188,7 @@ public:
void
getFluxOnBoundary
(
EntryType
&
entry
,
const
Intersection
&
intersection
,
const
CellData
&
cellData
,
const
bool
first
);
//!
u
pdates and stores constitutive relations
//!
U
pdates and stores constitutive relations
void
updateMaterialLaws
();
/*!
...
...
@@ -249,7 +249,7 @@ public:
numIter
++
;
}
//std::cout<<"Pressure defect = "<<pressureNorm<<"; "<<
//
std::cout<<"Pressure defect = "<<pressureNorm<<"; "<<
// numIter<<" Iterations needed for initial pressure field"<<std::endl;
}
...
...
@@ -303,7 +303,7 @@ public:
/*!
* \brief Velocity update
*
* Reset the velocities in the cellData
* Reset
s
the velocities in the cellData
.
*/
void
updateVelocity
()
{
...
...
@@ -541,6 +541,7 @@ public:
/*!
* \brief Constructs a FVPressure2P object
*
* \param problem A problem class object
*/
FVPressure2P
(
Problem
&
problem
)
:
...
...
@@ -595,13 +596,14 @@ private:
int
vtkOutputLevel_
;
static
const
bool
compressibility_
=
GET_PROP_VALUE
(
TypeTag
,
EnableCompressibility
);
//!
g
ives kind of pressure used (\f$p_w\f$, \f$p_n\f$, \f$p_{global}\f$)
//!
G
ives kind of pressure used (\f$p_w\f$, \f$p_n\f$, \f$p_{global}\f$)