From 7c95e212a4c5802c1a92e8b7826c97fe8633d950 Mon Sep 17 00:00:00 2001
From: Sina Ackermann <sina.ackermann@iws.uni-stuttgart.de>
Date: Tue, 19 Dec 2017 14:21:55 +0100
Subject: [PATCH] [doc][2p] Adapt doxygen documentation for 2p model (implicit)

---
 .../porousmediumflow/2p/gridadaptindicator.hh | 20 +++--
 dumux/porousmediumflow/2p/griddatatransfer.hh | 82 ++++++++++---------
 .../2p/incompressiblelocalresidual.hh         | 79 +++++++++++++++++-
 dumux/porousmediumflow/2p/indices.hh          | 24 +++---
 dumux/porousmediumflow/2p/model.hh            |  7 +-
 dumux/porousmediumflow/2p/volumevariables.hh  | 22 ++++-
 dumux/porousmediumflow/2p/vtkoutputfields.hh  |  7 +-
 7 files changed, 174 insertions(+), 67 deletions(-)

diff --git a/dumux/porousmediumflow/2p/gridadaptindicator.hh b/dumux/porousmediumflow/2p/gridadaptindicator.hh
index 5bab61ccc9..78c7ebb489 100644
--- a/dumux/porousmediumflow/2p/gridadaptindicator.hh
+++ b/dumux/porousmediumflow/2p/gridadaptindicator.hh
@@ -16,6 +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 Class defining a standard, saturation dependent indicator for grid adaptation
+ */
+
 #ifndef DUMUX_TWOP_ADAPTION_INDICATOR_HH
 #define DUMUX_TWOP_ADAPTION_INDICATOR_HH
 
@@ -24,10 +30,6 @@
 #include <dumux/common/properties.hh>
 #include <dumux/discretization/evalsolution.hh>
 
-/**
- * \file
- * \brief Class defining a standard, saturation dependent indicator for grid adaptation
- */
 namespace Dumux
 {
 
@@ -50,7 +52,7 @@ class TwoPGridAdaptIndicator
 public:
     /*! \brief The Constructor
      *
-     *  \param fvGridGeometry The finite volume grid geometry
+     * \param fvGridGeometry The finite volume grid geometry
      *
      *  Note: refineBound_, coarsenBound_ & maxSaturationDelta_ are chosen
      *        in a way such that the indicator returns false for all elements
@@ -68,6 +70,7 @@ public:
     /*!
      * \brief Function to set the minimum allowed level.
      *
+     * \param minLevel The minimum level
      */
     void setMinLevel(std::size_t minLevel)
     {
@@ -77,6 +80,7 @@ public:
     /*!
      * \brief Function to set the maximum allowed level.
      *
+     *\param maxLevel The maximum level
      */
     void setMaxLevel(std::size_t maxLevel)
     {
@@ -86,6 +90,8 @@ public:
     /*!
      * \brief Function to set the minumum/maximum allowed levels.
      *
+     * \param minLevel The minimum level
+     * \param maxLevel The maximum level
      */
     void setLevels(std::size_t minLevel, std::size_t maxLevel)
     {
@@ -96,6 +102,10 @@ public:
     /*!
      * \brief Calculates the indicator used for refinement/coarsening for each grid cell.
      *
+     * \param sol The solution vector
+     * \param refineTol The refinement tolerance
+     * \param coarsenTol The coarsening tolerance
+     *
      *  This standard two-phase indicator is based on the saturation gradient.
      */
     void calculate(const SolutionVector& sol,
diff --git a/dumux/porousmediumflow/2p/griddatatransfer.hh b/dumux/porousmediumflow/2p/griddatatransfer.hh
index 1ca104eb8b..5992c2ad0b 100644
--- a/dumux/porousmediumflow/2p/griddatatransfer.hh
+++ b/dumux/porousmediumflow/2p/griddatatransfer.hh
@@ -16,6 +16,11 @@
  *   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 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
 
@@ -27,6 +32,7 @@
 namespace Dumux {
 
 /*!
+ * \ingroup TwoPModel
  * \brief Class performing the transfer of data on a grid from before to after adaptation.
  */
 template<class TypeTag>
@@ -60,7 +66,7 @@ class TwoPGridDataTransfer : public GridDataTransfer
     static constexpr int dimWorld = Grid::dimensionworld;
     static constexpr bool isBox = GET_PROP_VALUE(TypeTag, DiscretizationMethod) == DiscretizationMethods::Box;
 
-    //! export some indices
+    // export some indices
     enum {
         // index of saturation in primary variables
         saturationIdx = Indices::saturationIdx,
@@ -77,12 +83,12 @@ class TwoPGridDataTransfer : public GridDataTransfer
         formulation = GET_PROP_VALUE(TypeTag, Formulation)
     };
 
-    //! This won't work (mass conservative) for compressible fluids
+    // This won't work (mass conservative) for compressible fluids
     static_assert(!FluidSystem::isCompressible(wPhaseIdx)
                   && !FluidSystem::isCompressible(nPhaseIdx),
                   "This adaption helper is only mass conservative for incompressible fluids!");
 
-    //! check if the used formulation is implemented here
+    // check if the used formulation is implemented here
     static_assert(formulation == pwsn || formulation == pnsw, "Chosen formulation not known to the TwoPGridDataTransfer");
 
 public:
@@ -121,19 +127,19 @@ public:
         {
             for (const auto& element : elements(grid.levelGridView(level)))
             {
-                //! get map entry
+                // get map entry
                 auto& adaptedValues = adaptionMap_[element];
 
-                //! put values in the map for leaf elements
+                // put values in the map for leaf elements
                 if (element.isLeaf())
                 {
                     auto fvGeometry = localView(*fvGridGeometry_);
                     fvGeometry.bindElement(element);
 
-                    //! store current element solution
+                    // store current element solution
                     adaptedValues.u = ElementSolution(element, sol_, *fvGridGeometry_);
 
-                    //! compute mass in the scvs
+                    // compute mass in the scvs
                     for (const auto& scv : scvs(fvGeometry))
                     {
                         VolumeVariables volVars;
@@ -144,11 +150,11 @@ public:
                         adaptedValues.associatedMass[wPhaseIdx] += poreVolume * volVars.density(wPhaseIdx) * volVars.saturation(wPhaseIdx);
                     }
 
-                    //! leaf elements always start with count = 1
+                    // leaf elements always start with count = 1
                     adaptedValues.count = 1;
                     adaptedValues.wasLeaf = true;
                 }
-                //! Average in father elements
+                // Average in father elements
                 if (element.level() > 0)
                 {
                     auto& adaptedValuesFather = adaptionMap_[element.father()];
@@ -158,9 +164,9 @@ public:
                         storeAdaptionValues(adaptedValues, adaptedValuesFather);
                 }
 
-                //! The vertices of the non-leaf elements exist on the leaf as well
-                //! This element solution constructor uses the vertex mapper to obtain
-                //! the privars at the vertices, thus, this works for non-leaf elements!
+                // The vertices of the non-leaf elements exist on the leaf as well
+                // This element solution constructor uses the vertex mapper to obtain
+                // the privars at the vertices, thus, this works for non-leaf elements!
                 if(isBox && !element.isLeaf())
                     adaptedValues.u = ElementSolution(element, sol_, *fvGridGeometry_);
             }
@@ -179,12 +185,12 @@ public:
      */
     void reconstruct() override
     {
-        //! resize stuff (grid might have changed)
+        // resize stuff (grid might have changed)
         adaptionMap_.resize();
         fvGridGeometry_->update();
         sol_.resize(fvGridGeometry_->numDofs());
 
-        //! vectors storing the mass associated with each vertex, when using the box method
+        // vectors storing the mass associated with each vertex, when using the box method
         std::vector<Scalar> massCoeff;
         std::vector<Scalar> associatedMass;
 
@@ -194,7 +200,7 @@ public:
             associatedMass.resize(fvGridGeometry_->numDofs(), 0.0);
         }
 
-        //! iterate over leaf and reconstruct the solution
+        // iterate over leaf and reconstruct the solution
         for (const auto& element : elements(fvGridGeometry_->gridView().grid().leafGridView(), Dune::Partitions::interior))
         {
             if (!element.isNew())
@@ -204,7 +210,7 @@ public:
                 auto fvGeometry = localView(*fvGridGeometry_);
                 fvGeometry.bindElement(element);
 
-                //! obtain element solution from map (divide by count!)
+                // obtain element solution from map (divide by count!)
                 auto elemSol = adaptedValues.u;
                 if (!isBox)
                     elemSol[0] /= adaptedValues.count;
@@ -215,14 +221,14 @@ public:
                     VolumeVariables volVars;
                     volVars.update(elemSol, *problem_, element, scv);
 
-                    //! write solution at dof in current solution vector
+                    // write solution at dof in current solution vector
                     sol_[scv.dofIndex()] = elemSol[scv.indexInElement()];
 
                     const auto dofIdxGlobal = scv.dofIndex();
-                    //! For cc schemes, overwrite the saturation by a mass conservative one here
+                    // For cc schemes, overwrite the saturation by a mass conservative one here
                     if (!isBox)
                     {
-                        //! only recalculate the saturations if element hasn't been leaf before adaptation
+                        // only recalculate the saturations if element hasn't been leaf before adaptation
                         if (!adaptedValues.wasLeaf)
                         {
                             if (formulation == pwsn)
@@ -238,7 +244,7 @@ public:
                         }
                     }
 
-                    //! For the box scheme, add mass & mass coefficient to container (saturations are recalculated at the end)
+                    // For the box scheme, add mass & mass coefficient to container (saturations are recalculated at the end)
                     else
                     {
                         const auto scvVolume = scv.volume();
@@ -257,10 +263,10 @@ public:
             }
             else
             {
-                //! value is not in map, interpolate from father element
+                // value is not in map, interpolate from father element
                 assert(element.hasFather() && "new element does not have a father element!");
 
-                //! find the ancestor element that existed on the old grid already
+                // find the ancestor element that existed on the old grid already
                 auto fatherElement = element.father();
                 while(fatherElement.isNew() && fatherElement.level() > 0)
                     fatherElement = fatherElement.father();
@@ -269,7 +275,7 @@ public:
                 {
                     const auto& adaptedValuesFather = adaptionMap_[fatherElement];
 
-                    //! obtain the mass contained in father
+                    // obtain the mass contained in father
                     Scalar massFather = 0.0;
                     if (formulation == pwsn)
                         massFather = adaptedValuesFather.associatedMass[nPhaseIdx];
@@ -288,10 +294,10 @@ public:
                         VolumeVariables volVars;
                         volVars.update(elemSolSon, *problem_, element, scv);
 
-                        //! store constructed values of son in the current solution
+                        // store constructed values of son in the current solution
                         sol_[scv.dofIndex()] = elemSolSon[0];
 
-                        //! overwrite the saturation by a mass conservative one here
+                        // overwrite the saturation by a mass conservative one here
                         Scalar massCoeffSon = 0.0;
                         if (formulation == pwsn)
                             massCoeffSon = scv.volume() * volVars.density(nPhaseIdx) * volVars.porosity();
@@ -307,7 +313,7 @@ public:
                     auto fvGeometry = localView(*fvGridGeometry_);
                     fvGeometry.bindElement(element);
 
-                    //! interpolate solution in the father to the vertices of the new son
+                    // interpolate solution in the father to the vertices of the new son
                     ElementSolution elemSolSon(element, sol_, *fvGridGeometry_);
                     const auto fatherGeometry = fatherElement.geometry();
                     for (const auto& scv : scvs(fvGeometry))
@@ -316,7 +322,7 @@ public:
                                                                         adaptedValuesFather.u,
                                                                         scv.dofPosition());
 
-                    //! compute mass & mass coeffients for the scvs (saturations are recalculated at the end)
+                    // compute mass & mass coeffients for the scvs (saturations are recalculated at the end)
                     const auto fatherElementVolume = fatherGeometry.volume();
                     for (const auto& scv : scvs(fvGeometry))
                     {
@@ -336,7 +342,7 @@ public:
                             associatedMass[dofIdxGlobal] += scvVolume / fatherElementVolume * adaptedValuesFather.associatedMass[wPhaseIdx];
                         }
 
-                        //! store constructed (pressure) values of son in the current solution (saturation comes later)
+                        // store constructed (pressure) values of son in the current solution (saturation comes later)
                         sol_[dofIdxGlobal] = elemSolSon[scv.indexInElement()];
                     }
                 }
@@ -349,7 +355,7 @@ public:
                 sol_[dofIdxGlobal][saturationIdx] = associatedMass[dofIdxGlobal] / massCoeff[dofIdxGlobal];
         }
 
-        //! reset entries in adaptation map
+        // reset entries in adaptation map
         adaptionMap_.resize( typename PersistentContainer::Value() );
         adaptionMap_.shrinkToFit();
         adaptionMap_.fill( typename PersistentContainer::Value() );
@@ -381,31 +387,31 @@ public:
     static void storeAdaptionValues(AdaptedValues& adaptedValues,
                                     AdaptedValues& adaptedValuesFather)
     {
-        //! Add associated mass of the child to the one of the father
+        // Add associated mass of the child to the one of the father
         adaptedValuesFather.associatedMass += adaptedValues.associatedMass;
 
         if(!isBox)
         {
-            //! add the child's primary variables to the ones of father
-            //! we have to divide the child's ones in case it was composed
-            //! of several children as well!
+            // add the child's primary variables to the ones of father
+            // we have to divide the child's ones in case it was composed
+            // of several children as well!
             auto values = adaptedValues.u[0];
             values /= adaptedValues.count;
             adaptedValuesFather.u[0] += values;
 
-            //! keep track of the number of children that composed this father
+            // keep track of the number of children that composed this father
             adaptedValuesFather.count += 1;
 
-            //! A father element is never leaf
+            // A father element is never leaf
             adaptedValuesFather.wasLeaf = false;
         }
         else
         {
-            //! For the box scheme, scaling of primary variables by count is obsolete
-            //! Thus, we always want count = 1
+            // For the box scheme, scaling of primary variables by count is obsolete
+            // Thus, we always want count = 1
             adaptedValuesFather.count = 1;
 
-            //! A father element is never leaf
+            // A father element is never leaf
             adaptedValuesFather.wasLeaf = false;
         }
     }
diff --git a/dumux/porousmediumflow/2p/incompressiblelocalresidual.hh b/dumux/porousmediumflow/2p/incompressiblelocalresidual.hh
index 84480d1177..4c4a67e6d6 100644
--- a/dumux/porousmediumflow/2p/incompressiblelocalresidual.hh
+++ b/dumux/porousmediumflow/2p/incompressiblelocalresidual.hh
@@ -18,7 +18,7 @@
  *****************************************************************************/
 /*!
  * \file
- *
+ * \ingroup TwoPModel
  * \brief Element-wise calculation of the residual and its derivatives
  *        for a two-phase, incompressible test problem.
  */
@@ -31,6 +31,11 @@
 namespace Dumux
 {
 
+/*!
+ * \ingroup TwoPModel
+ * \brief Element-wise calculation of the residual and its derivatives
+ *        for a two-phase, incompressible test problem.
+ */
 template<class TypeTag>
 class TwoPIncompressibleLocalResidual : public ImmiscibleLocalResidual<TypeTag>
 {
@@ -66,6 +71,19 @@ class TwoPIncompressibleLocalResidual : public ImmiscibleLocalResidual<TypeTag>
 public:
     using ParentType::ParentType;
 
+    /*!
+     * \brief Add 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$.
+     *
+     * \param partialDerivatives The partial derivatives
+     * \param problem The problem
+     * \param element The element
+     * \param fvGeometry The finite volume element geometry
+     * \param curVolVars The current volume variables
+     * \param scv The sub control volume
+     */
     template<class PartialDerivativeMatrix>
     void addStorageDerivatives(PartialDerivativeMatrix& partialDerivatives,
                                const Problem& problem,
@@ -96,6 +114,16 @@ public:
         partialDerivatives[contiNEqIdx][saturationIdx] += volume*phi_rho_n/this->timeLoop().timeStepSize();
     }
 
+    /*!
+     * \brief Add source derivatives for wetting and non-wetting phase
+     *
+     * \param partialDerivatives The partial derivatives
+     * \param problem The problem
+     * \param element The element
+     * \param fvGeometry The finite volume element geometry
+     * \param curVolVars The current volume variables
+     * \param scv The sub control volume
+     */
     template<class PartialDerivativeMatrix>
     void addSourceDerivatives(PartialDerivativeMatrix& partialDerivatives,
                               const Problem& problem,
@@ -105,6 +133,19 @@ public:
                               const SubControlVolume& scv) const
     { /* 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
+     *
+     * Compute derivatives for the wetting and the non-wetting phase flux with respect to \f$p_w\f$
+     * and \f$S_n\f$.
+     *
+     * \param partialDerivatives The partial derivatives
+     * \param problem The problem
+     * \param element The element
+     * \param fvGeometry The finite volume element geometry
+     * \param curVolVars The current volume variables
+     * \param scv The sub control volume
+     */
     template<class PartialDerivativeMatrices, class T = TypeTag>
     std::enable_if_t<GET_PROP_VALUE(T, DiscretizationMethod) != DiscretizationMethods::Box, void>
     addFluxDerivatives(PartialDerivativeMatrices& derivativeMatrices,
@@ -208,6 +249,19 @@ public:
         dI_dJ[contiNEqIdx][saturationIdx] += tij_up_n*dpc_dSn_outside;
     }
 
+    /*!
+     * \brief Add 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$.
+     *
+     * \param partialDerivatives The partial derivatives
+     * \param problem The problem
+     * \param element The element
+     * \param fvGeometry The finite volume element geometry
+     * \param curVolVars The current volume variables
+     * \param scv The sub control volume
+     */
     template<class JacobianMatrix, class T = TypeTag>
     std::enable_if_t<GET_PROP_VALUE(T, DiscretizationMethod) == DiscretizationMethods::Box, void>
     addFluxDerivatives(JacobianMatrix& A,
@@ -353,6 +407,19 @@ public:
         }
     }
 
+    /*!
+     * \brief Add 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$.
+     *
+     * \param derivativeMatrices The matrices containing the derivatives
+     * \param problem The problem
+     * \param element The element
+     * \param curElemVolVars The current element volume variables
+     * \param elemFluxVarsCache The element flux variables cache
+     * \param scvf The sub control volume face
+     */
     template<class PartialDerivativeMatrices>
     void addCCDirichletFluxDerivatives(PartialDerivativeMatrices& derivativeMatrices,
                                        const Problem& problem,
@@ -423,6 +490,16 @@ public:
         dI_dI[contiNEqIdx][saturationIdx] += tij*dpc_dSn_inside*up_n;
     }
 
+    /*!
+     * \brief Add Robin flux derivatives for wetting and non-wetting phase
+     *
+     * \param derivativeMatrices The matrices containing the derivatives
+     * \param problem The problem
+     * \param element The element
+     * \param curElemVolVars The current element volume variables
+     * \param elemFluxVarsCache The element flux variables cache
+     * \param scvf The sub control volume face
+     */
     template<class PartialDerivativeMatrices>
     void addRobinFluxDerivatives(PartialDerivativeMatrices& derivativeMatrices,
                                  const Problem& problem,
diff --git a/dumux/porousmediumflow/2p/indices.hh b/dumux/porousmediumflow/2p/indices.hh
index b75c8a585e..53b11b6bad 100644
--- a/dumux/porousmediumflow/2p/indices.hh
+++ b/dumux/porousmediumflow/2p/indices.hh
@@ -19,6 +19,7 @@
 
 /*!
  * \file
+ * \ingroup TwoPModel
  * \brief Defines the indices required for the two-phase fully implicit model.
  */
 #ifndef DUMUX_BOX_2P_INDICES_HH
@@ -30,10 +31,8 @@ namespace Dumux
 {
 // \{
 
-
 /*!
  * \ingroup TwoPModel
- * \ingroup ImplicitIndices
  * \brief Enumerates the formulations which the two-phase model accepts.
  */
 struct TwoPFormulation
@@ -44,10 +43,10 @@ struct TwoPFormulation
 
 /*!
  * \ingroup TwoPModel
- * \ingroup ImplicitIndices
  * \brief Defines the indices required for the two-phase fully implicit model.
  *
  * \tparam TypeTag The problem type tag
+ * \tparam PVOffset The first index in a primary variable vector.
  */
 template <class TypeTag, int PVOffset = 0>
 struct TwoPCommonIndices
@@ -55,23 +54,22 @@ struct TwoPCommonIndices
     using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
 
     // Phase indices
-    static const int wPhaseIdx = FluidSystem::wPhaseIdx; //!< Index of the wetting phase
-    static const int nPhaseIdx = FluidSystem::nPhaseIdx; //!< Index of the non-wetting phase
+    static const int wPhaseIdx = FluidSystem::wPhaseIdx; //!< index of the wetting phase
+    static const int nPhaseIdx = FluidSystem::nPhaseIdx; //!< index of the non-wetting phase
 
     // Primary variable indices
-    static const int pressureIdx = PVOffset + 0; //!< Index for wetting/non-wetting phase pressure (depending on formulation) in a solution vector
-    static const int saturationIdx = PVOffset + 1; //!< Index of the saturation of the non-wetting/wetting phase
+    static const int pressureIdx = PVOffset + 0; //!< index for wetting/non-wetting phase pressure (depending on formulation) in a solution vector
+    static const int saturationIdx = PVOffset + 1; //!< index of the saturation of the non-wetting/wetting phase
 
     // indices of the equations
-    static const int conti0EqIdx = PVOffset + 0; //!< Index of the first continuity equation
-    static const int contiWEqIdx = PVOffset + 0; //!< Index of the continuity equation of the wetting phase
-    static const int contiNEqIdx = PVOffset + 1; //!< Index of the continuity equation of the non-wetting phase
+    static const int conti0EqIdx = PVOffset + 0; //!< index of the first continuity equation
+    static const int contiWEqIdx = PVOffset + 0; //!< index of the continuity equation of the wetting phase
+    static const int contiNEqIdx = PVOffset + 1; //!< index of the continuity equation of the non-wetting phase
 };
 
 
 /*!
- * \ingroup TwoPBoxModel
- * \ingroup ImplicitIndices
+ * \ingroup TwoPModel
  * \brief The indices for the \f$p_w-S_n\f$ formulation of the
  *        isothermal two-phase model.
  *
@@ -92,10 +90,10 @@ struct TwoPIndices
 
 /*!
  * \ingroup TwoPModel
- * \ingroup ImplicitIndices
  * \brief The indices for the \f$p_n-S_w\f$ formulation of the
  *        isothermal two-phase model.
  *
+ * \tparam TypeTag The problem type tag
  * \tparam PVOffset The first index in a primary variable vector.
  */
 template <class TypeTag, int PVOffset>
diff --git a/dumux/porousmediumflow/2p/model.hh b/dumux/porousmediumflow/2p/model.hh
index e261e448a7..b11c9247de 100644
--- a/dumux/porousmediumflow/2p/model.hh
+++ b/dumux/porousmediumflow/2p/model.hh
@@ -85,8 +85,9 @@ namespace Properties
 // Type tags
 //////////////////////////////////////////////////////////////////
 
-//! The type tags for the isothermal & non-isothermal two-phase model
+//! The type tag for the isothermal two-phase model
 NEW_TYPE_TAG(TwoP, INHERITS_FROM(PorousMediumFlow));
+//! The type tag for the non-isothermal two-phase model
 NEW_TYPE_TAG(TwoPNI, INHERITS_FROM(TwoP, NonIsothermal));
 
 ///////////////////////////////////////////////////////////////////////////
@@ -101,7 +102,7 @@ SET_BOOL_PROP(TwoP, EnableMolecularDiffusion, false);                         //
 SET_BOOL_PROP(TwoP, EnableEnergyBalance, false);                              //!< Isothermal model (non-isothermal type tag is below)
 SET_TYPE_PROP(TwoP, LocalResidual, ImmiscibleLocalResidual<TypeTag>);         //!< Use the immiscible local residual operator for the 2p model
 SET_TYPE_PROP(TwoP, VolumeVariables, TwoPVolumeVariables<TypeTag>);           //!< the VolumeVariables property
-SET_TYPE_PROP(TwoP, SpatialParams, FVSpatialParams<TypeTag>);           //!< The spatial parameters. Use FVSpatialParams by default.
+SET_TYPE_PROP(TwoP, SpatialParams, FVSpatialParams<TypeTag>);                 //!< The spatial parameters. Use FVSpatialParams by default.
 SET_TYPE_PROP(TwoP, VtkOutputFields, TwoPVtkOutputFields<TypeTag>);           //!< Set the vtk output fields specific to the twop model
 
 SET_TYPE_PROP(TwoP,
@@ -126,7 +127,7 @@ SET_TYPE_PROP(TwoPNI, IsothermalVolumeVariables, TwoPVolumeVariables<TypeTag>);
 SET_TYPE_PROP(TwoPNI, IsothermalLocalResidual, ImmiscibleLocalResidual<TypeTag>); //!< set isothermal LocalResidual
 SET_TYPE_PROP(TwoPNI, IsothermalVtkOutputFields, TwoPVtkOutputFields<TypeTag>);   //!< set isothermal output fields
 
-//! set isothermal Indices
+//! Set isothermal Indices
 SET_PROP(TwoPNI, IsothermalIndices)
 {
 private:
diff --git a/dumux/porousmediumflow/2p/volumevariables.hh b/dumux/porousmediumflow/2p/volumevariables.hh
index 56954663f6..fff2863bbf 100644
--- a/dumux/porousmediumflow/2p/volumevariables.hh
+++ b/dumux/porousmediumflow/2p/volumevariables.hh
@@ -18,7 +18,7 @@
  *****************************************************************************/
 /*!
  * \file
- *
+ * \ingroup TwoPModel
  * \brief Contains the quantities which are constant within a
  *        finite volume in the two-phase model.
  */
@@ -73,8 +73,14 @@ public:
     using FluidState = typename GET_PROP_TYPE(TypeTag, FluidState);
 
     /*!
-     * \copydoc ImplicitVolumeVariables::update
-     */
+     * \brief Update all quantities for a given control volume
+     *
+     * \param elemSol A vector containing all primary variables connected to the element
+     * \param problem The object specifying the problem which ought to
+     *                be simulated
+     * \param element An element which contains part of the control volume
+     * \param scv The sub control volume
+    */
     void update(const ElementSolutionVector &elemSol,
                 const Problem &problem,
                 const Element &element,
@@ -101,7 +107,15 @@ public:
     }
 
     /*!
-     * \copydoc ImplicitModel::completeFluidState
+     * \brief Complete the fluid state
+     *
+     * \param elemSol A vector containing all primary variables connected to the element
+     * \param problem The problem
+     * \param element The element
+     * \param scv The sub control volume
+     * \param fluidState The fluid state
+     *
+     * Set temperature, saturations, capillary pressures, viscosities, densities and enthalpies.
      */
     static void completeFluidState(const ElementSolutionVector& elemSol,
                                    const Problem& problem,
diff --git a/dumux/porousmediumflow/2p/vtkoutputfields.hh b/dumux/porousmediumflow/2p/vtkoutputfields.hh
index 9792db5f3a..50895f1214 100644
--- a/dumux/porousmediumflow/2p/vtkoutputfields.hh
+++ b/dumux/porousmediumflow/2p/vtkoutputfields.hh
@@ -18,7 +18,8 @@
  *****************************************************************************/
 /*!
  * \file
- * \brief Adds vtk output fields specific to the twop model
+ * \ingroup TwoPModel
+ * \brief Adds vtk output fields specific to the two-phase model
  */
 #ifndef DUMUX_TWOP_VTK_OUTPUT_FIELDS_HH
 #define DUMUX_TWOP_VTK_OUTPUT_FIELDS_HH
@@ -27,8 +28,8 @@ namespace Dumux
 {
 
 /*!
- * \ingroup TwoP, InputOutput
- * \brief Adds vtk output fields specific to the twop model
+ * \ingroup TwoPModel
+ * \brief Adds vtk output fields specific to the two-phase model
  */
 template<class TypeTag>
 class TwoPVtkOutputFields
-- 
GitLab