Commit 47f93884 authored by Sina Ackermann's avatar Sina Ackermann Committed by Simon Scholz
Browse files

[doxygen] Adapt documentation for 2p, 2p1c, 2p2c, 2pnc, 2pncmin models

parent 55a2be36
......@@ -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 Updates 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
//! Returns 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
//! Returns 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
......@@ -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
......@@ -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)
{
//! reset the indicator to a state that returns false for all elements
//! Reset 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;
//! check for inadmissible tolerance combination
//! Check for inadmissible tolerance combination
if (coarsenTol > refineTol)
DUNE_THROW(Dune::InvalidStateException, "Refine tolerance must be higher than coarsen tolerance");
//! variables to hold the max/mon saturation values on the leaf
//! Variables 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()))
{
//! index of the current leaf-element
//! Index of the current leaf-element
const auto globalIdxI = fvGridGeometry_->elementMapper().index(element);
//! obtain the saturation at the center of the element
//! Obtain 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];
//! maybe update the global minimum/maximum
//! Maybe update the global minimum/maximum
using std::min;
using std::max;
globalMin = min(satI, globalMin);
globalMax = max(satI, globalMax);
//! calculate maximum delta in saturation for this cell
//! Calculate 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))
{
//! obtain saturation in the neighbor
//! Obtain 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:
}
}
//! compute the maximum delta in saturation
//! Compute the maximum delta in saturation
const auto globalDelta = globalMax - globalMin;
//! compute the refinement/coarsening bounds
//! Compute 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
......
......@@ -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)
......
......@@ -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 Adds 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 Adds 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 Adds 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 Adds 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 Adds 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 Adds Robin flux derivatives for wetting and non-wetting phase
*
* \param derivativeMatrices The matrices containing the derivatives
* \param problem The problem
......
......@@ -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
......
......@@ -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
{
......
......@@ -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
......
......@@ -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
......@@ -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.
*
......
......@@ -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.
......
......@@ -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);
//! updates and stores constitutive relations
//! Updates 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
* Resets 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);
//! gives kind of pressure used (\f$p_w\f$, \f$p_n\f$, \f$p_{global}\f$)
//! Gives kind of pressure used (\f$p_w\f$, \f$p_n\f$, \f$p_{global}\f$)