From 37503b44430c92a4f2ccfbfd3257347ec1cd3a55 Mon Sep 17 00:00:00 2001
From: Timo Koch <timo.koch@iws.uni-stuttgart.de>
Date: Wed, 20 Dec 2017 14:17:13 +0100
Subject: [PATCH] [doc] Improve documentation in folder linear

---
 doc/doxygen/modules.txt                       |   2 +-
 dumux/linear/amgbackend.hh                    |  18 +++-
 dumux/linear/amgparallelhelpers.hh            | 101 +++++++++---------
 dumux/linear/amgtraits.hh                     |   4 +-
 .../linearsolveracceptsmultitypematrix.hh     |   9 +-
 dumux/linear/matrixconverter.hh               |  14 +--
 dumux/linear/scotchbackend.hh                 |  26 ++---
 dumux/linear/seqsolverbackend.hh              |  21 ++--
 dumux/linear/solver.hh                        |  17 ++-
 dumux/linear/vectorexchange.hh                |  18 ++--
 10 files changed, 129 insertions(+), 101 deletions(-)

diff --git a/doc/doxygen/modules.txt b/doc/doxygen/modules.txt
index c939ebdcaf..bc08dca62d 100644
--- a/doc/doxygen/modules.txt
+++ b/doc/doxygen/modules.txt
@@ -416,7 +416,7 @@
 /* ***************** Linear ******************/
 /*!
  * \defgroup Linear Linear
- *  TODO: Doc me in modules.txt!
+ * \brief Linear solvers and helpers
  */
 
 /* ***************** Nonlinear ******************/
diff --git a/dumux/linear/amgbackend.hh b/dumux/linear/amgbackend.hh
index 6a43782d1e..1ac88cc193 100644
--- a/dumux/linear/amgbackend.hh
+++ b/dumux/linear/amgbackend.hh
@@ -19,8 +19,8 @@
 /*!
  * \file
  * \ingroup Linear
- *
- * \brief Provides a linear solver based on the ISTL AMG.
+ * \brief Provides a linear solver based on the ISTL AMG preconditioner
+ *        and the ISTL BiCGSTAB solver.
  */
 #ifndef DUMUX_AMGBACKEND_HH
 #define DUMUX_AMGBACKEND_HH
@@ -39,6 +39,7 @@
 namespace Dumux {
 
 /*!
+ * \ingroup Linear
  * \brief Scale the linear system by the inverse of
  * its (block-)diagonal entries.
  *
@@ -69,7 +70,9 @@ void scaleLinearSystem(Matrix& matrix, Vector& rhs)
 }
 
 /*!
- * \brief Provides a linear solver using the ISTL AMG.
+ * \ingroup Linear
+ * \brief A linear solver based on the ISTL AMG preconditioner
+ *        and the ISTL BiCGSTAB solver.
  */
 template <class TypeTag>
 class AMGBackend : public LinearSolver<TypeTag>
@@ -90,7 +93,8 @@ public:
     /*!
      * \brief Construct the backend.
      *
-     * \param problem the problem at hand
+     * \param gridView the grid view on which we are performing the multi-grid
+     * \param dofMapper an index mapper for dof entities
      */
     AMGBackend(const GridView& gridView, const DofMapper& dofMapper)
     : gridView_(gridView)
@@ -121,6 +125,7 @@ public:
         using Criterion = Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<BCRSMat, Dune::Amg::FirstDiagonal>>;
 
         //! \todo Check whether the default accumulation mode atOnceAccu is needed.
+        //! \todo make parameters changeable at runtime from input file / parameter tree
         Dune::Amg::Parameters params(15,2000,1.2,1.6,Dune::Amg::atOnceAccu);
         params.setDefaultValuesIsotropic(Grid::dimension);
         params.setDebugLevel(this->verbosity());
@@ -138,6 +143,9 @@ public:
         return result_.converged;
     }
 
+    /*!
+     * \brief The name of the solver
+     */
     std::string name() const
     {
         return "AMG preconditioned BiCGSTAB solver";
@@ -166,6 +174,8 @@ private:
      * The function is called from the solve function. The call is
      * forwarded to the corresponding function of a class template.
      *
+     * \tparam Matrix the matrix type
+     * \tparam Vector the vector type
      * \tparam isParallel decides if the setting is parallel or sequential
      */
     template<class Matrix, class Vector, bool isParallel>
diff --git a/dumux/linear/amgparallelhelpers.hh b/dumux/linear/amgparallelhelpers.hh
index 27c67626ea..fb00d09fc8 100644
--- a/dumux/linear/amgparallelhelpers.hh
+++ b/dumux/linear/amgparallelhelpers.hh
@@ -18,7 +18,7 @@
  *****************************************************************************/
 /*!
  * \file
- *
+ * \ingroup Linear
  * \brief Provides a helper class for nonoverlapping
  *        decomposition using the ISTL AMG.
  */
@@ -32,10 +32,10 @@
 #include <dumux/common/properties.hh>
 #include <dumux/linear/amgtraits.hh>
 
-namespace Dumux
-{
+namespace Dumux {
 
 /*!
+ * \ingroup Linear
  * \brief A parallel helper class providing a nonoverlapping
  *        decomposition of all degrees of freedom
  */
@@ -63,8 +63,8 @@ class ParallelISTLHelper
         const DofMapper& mapper_;
     };
 
-    /**
-     * @brief GatherScatter implementation that makes a right hand side in the box model consistent.
+    /*!
+     * \brief GatherScatter implementation that makes a right hand side in the box model consistent.
      */
     template<class V>
     class ConsistencyBoxGatherScatter
@@ -113,7 +113,7 @@ class ParallelISTLHelper
 
 
     /**
-     * @brief Writes 1<<24 to each data item (of the container) that is gathered or scattered
+     * \brief Writes 1<<24 to each data item (of the container) that is gathered or scattered
      * and is neither interior nor border.
      *
      * Can be used to mark ghost cells.
@@ -169,7 +169,7 @@ class ParallelISTLHelper
     };
 
     /**
-     * @brief GatherScatter handle that sets 1<<24 for data items neither associated to
+     * \brief GatherScatter handle that sets 1<<24 for data items neither associated to
      * the interior or border and take the minimum when scattering.
      *
      * Used to compute an owner rank for each unknown.
@@ -230,7 +230,7 @@ class ParallelISTLHelper
     };
 
     /**
-     * @brief GatherScatter handle for finding out about neighbouring processor ranks.
+     * \brief GatherScatter handle for finding out about neighbouring processor ranks.
      *
      */
     struct NeighbourGatherScatter
@@ -279,7 +279,7 @@ class ParallelISTLHelper
 
 
     /**
-     * @brief GatherScatter handle for finding out about neighbouring processor ranks.
+     * \brief GatherScatter handle for finding out about neighbouring processor ranks.
      *
      */
     struct SharedGatherScatter
@@ -329,7 +329,7 @@ class ParallelISTLHelper
     };
 
     /**
-     * @brief GatherScatter handle for finding out about neighbouring processor ranks.
+     * \brief GatherScatter handle for finding out about neighbouring processor ranks.
      *
      */
     template<typename GI>
@@ -448,13 +448,13 @@ public:
 #if HAVE_MPI
 
     /**
-     * @brief Creates a matrix suitable for parallel AMG and the parallel information
+     * \brief Creates a matrix suitable for parallel AMG and the parallel information
      *
      *
-     * @tparam MatrixType The type of the ISTL matrix used.
-     * @tparam Comm The type of the OwnerOverlapCopyCommunication
-     * @param m The local matrix.
-     * @param c The parallel information object providing index set, interfaces and
+     * \tparam MatrixType The type of the ISTL matrix used.
+     * \tparam Comm The type of the OwnerOverlapCopyCommunication
+     * \param m The local matrix.
+     * \param c The parallel information object providing index set, interfaces and
      * communicators.
      */
     template<typename MatrixType, typename Comm>
@@ -471,10 +471,11 @@ private:
 
 }; // class ParallelISTLHelper
 
-/**
- * @brief Helper class for adding up matrix entries on border.
- * @tparam GridOperator The grid operator to work on.
- * @tparam MatrixType The MatrixType.
+/*!
+ * \ingroup Linear
+ * \brief Helper class for adding up matrix entries on border.
+ * \tparam GridOperator The grid operator to work on.
+ * \tparam MatrixType The MatrixType.
  */
 template<class TypeTag>
 class EntityExchanger
@@ -497,7 +498,7 @@ class EntityExchanger
 public:
     /*! \brief Constructor. Sets up the local to global relations.
       \param[in] gridView The gridView on which we are operating
-      \param[in] dofMapper The local dof mapper
+      \param[in] mapper The local dof mapper
     */
     EntityExchanger(const GridView& gridView, const DofMapper& mapper)
     : gridView_(gridView), mapper_(mapper)
@@ -522,7 +523,7 @@ public:
     }
 
     /**
-     * @brief A DataHandle class to exchange matrix sparsity patterns.
+     * \brief A DataHandle class to exchange matrix sparsity patterns.
      *
      *  We look at a 2D example with a nonoverlapping grid,
      *  two processes and no ghosts with Q1 discretization.
@@ -551,12 +552,12 @@ public:
         //! Export type of data for message buffer
         using DataType = IdType;
 
-        /** @brief Constructor
-            @param[in] mapper The local dof mapper.
-            @param[in] g2i Global to local index map.
-            @param[in] i2g Local to global index map.
-            @param[in] A Matrix to operate on.
-            @param[in] helper parallel istl helper.
+        /** \brief Constructor
+            \param[in] mapper The local dof mapper.
+            \param[in] g2i Global to local index map.
+            \param[in] i2g Local to global index map.
+            \param[in] A Matrix to operate on.
+            \param[in] helper parallel istl helper.
         */
         MatPatternExchange (const DofMapper& mapper,
                             const std::map<IdType,int>& g2i,
@@ -566,21 +567,21 @@ public:
               sparsity_(A.N()), A_(A), helper_(helper)
         {}
 
-        /** @brief Returns true if data for given valid codim should be communicated
+        /** \brief Returns true if data for given valid codim should be communicated
          */
         bool contains (int dim, int codim) const
         {
             return (codim==dofCodim);
         }
 
-        /** @brief Returns true if size of data per entity of given dim and codim is a constant
+        /** \brief Returns true if size of data per entity of given dim and codim is a constant
          */
         bool fixedsize (int dim, int codim) const
         {
             return false;
         }
 
-        /** @brief How many objects of type DataType have to be sent for a given entity
+        /** \brief How many objects of type DataType have to be sent for a given entity
          */
         template<class EntityType>
         size_t size (EntityType& e) const
@@ -597,7 +598,7 @@ public:
             return n;
         }
 
-        /** @brief Pack data from user to message buffer
+        /** \brief Pack data from user to message buffer
          */
         template<class MessageBuffer, class EntityType>
         void gather (MessageBuffer& buff, const EntityType& e) const
@@ -612,7 +613,7 @@ public:
 
         }
 
-        /** @brief Unpack data from message buffer to user
+        /** \brief Unpack data from message buffer to user
          */
         template<class MessageBuffer, class EntityType>
         void scatter (MessageBuffer& buff, const EntityType& e, size_t n)
@@ -632,7 +633,7 @@ public:
         }
 
         /**
-         * @brief Get the communicated sparsity pattern
+         * \brief Get the communicated sparsity pattern
          * @return the vector with the sparsity pattern
          */
         std::vector<std::set<int> >& sparsity ()
@@ -669,11 +670,11 @@ public:
         //! Export type of data for message buffer
         using DataType = MatEntry;
 
-        /** @brief Constructor
-            @param[in] mapper The local dof mapper.
-            @param[in] g2i Global to local index map.
-            @param[in] i2g Local to global index map.
-            @param[in] A Matrix to operate on.
+        /** \brief Constructor
+            \param[in] mapper The local dof mapper.
+            \param[in] g2i Global to local index map.
+            \param[in] i2g Local to global index map.
+            \param[in] A Matrix to operate on.
         */
         MatEntryExchange (const DofMapper& mapper, const std::map<IdType,int>& g2i,
                           const std::map<int,IdType>& i2g,
@@ -681,21 +682,21 @@ public:
             : mapper_(mapper), gid2Index_(g2i), index2GID_(i2g), A_(A)
         {}
 
-        /** @brief Returns true if data for given valid codim should be communicated
+        /** \brief Returns true if data for given valid codim should be communicated
          */
         bool contains (int dim, int codim) const
         {
             return (codim==dofCodim);
         }
 
-        /** @brief Returns true if size of data per entity of given dim and codim is a constant
+        /** \brief Returns true if size of data per entity of given dim and codim is a constant
          */
         bool fixedsize (int dim, int codim) const
         {
             return false;
         }
 
-        /** @brief How many objects of type DataType have to be sent for a given entity
+        /** \brief How many objects of type DataType have to be sent for a given entity
          */
         template<class EntityType>
         size_t size (EntityType& e) const
@@ -712,7 +713,7 @@ public:
             return n;
         }
 
-        /** @brief Pack data from user to message buffer
+        /** \brief Pack data from user to message buffer
          */
         template<class MessageBuffer, class EntityType>
         void gather (MessageBuffer& buff, const EntityType& e) const
@@ -727,7 +728,7 @@ public:
 
         }
 
-        /** @brief Unpack data from message buffer to user
+        /** \brief Unpack data from message buffer to user
          */
         template<class MessageBuffer, class EntityType>
         void scatter (MessageBuffer& buff, const EntityType& e, size_t n)
@@ -753,9 +754,9 @@ public:
 
     }; // class MatEntryExchange
 
-    /** @brief communicates values for the sparsity pattern of the new matrix.
-        @param A Matrix to operate on.
-        @param helper ParallelelISTLHelper.
+    /** \brief communicates values for the sparsity pattern of the new matrix.
+        \param A Matrix to operate on.
+        \param helper ParallelelISTLHelper.
     */
     void getExtendedMatrix (Matrix& A, const ParallelISTLHelper<TypeTag>& helper)
     {
@@ -800,8 +801,8 @@ public:
         }
     }
 
-    /** @brief Sums up the entries corresponding to border vertices.
-        @param A Matrix to operate on.
+    /** \brief Sums up the entries corresponding to border vertices.
+        \param A Matrix to operate on.
     */
     void sumEntries (Matrix& A)
     {
@@ -815,8 +816,8 @@ public:
 
 #if HAVE_MPI
     /**
-     * @brief Extends the sparsity pattern of the discretization matrix for AMG.
-     * @param A A reference to the matrix to change.
+     * \brief Extends the sparsity pattern of the discretization matrix for AMG.
+     * \param A A reference to the matrix to change.
      */
     void getExtendedMatrix (Matrix& A) const;
 #endif
diff --git a/dumux/linear/amgtraits.hh b/dumux/linear/amgtraits.hh
index 59d04e70d5..26ef8eb7e9 100644
--- a/dumux/linear/amgtraits.hh
+++ b/dumux/linear/amgtraits.hh
@@ -18,7 +18,6 @@
  *****************************************************************************/
 /*!
  * \file
- * \ingroup Properties
  * \ingroup Linear
  *
  * \brief Define traits for the AMG backend.
@@ -36,8 +35,7 @@
 #include <dumux/common/properties.hh>
 #include <dumux/discretization/methods.hh>
 
-namespace Dumux
-{
+namespace Dumux {
 
 // Forward declaration for the property definitions
 template <class TypeTag> class AMGBackend;
diff --git a/dumux/linear/linearsolveracceptsmultitypematrix.hh b/dumux/linear/linearsolveracceptsmultitypematrix.hh
index 9d19e662a2..fa4778d0cf 100644
--- a/dumux/linear/linearsolveracceptsmultitypematrix.hh
+++ b/dumux/linear/linearsolveracceptsmultitypematrix.hh
@@ -18,7 +18,8 @@
  *****************************************************************************/
 /*!
  * \file
- * \brief Dumux mixeddimension iterative solver backend
+ * \ingroup Linear
+ * \brief Trait checking if linear solvers accept Dune::MultiTypeBlockMatrix or we need to convert the matrix
  */
 #ifndef DUMUX_LINEAR_SOLVER_ACCEPTS_MULTITYPEMATRIX_HH
 #define DUMUX_LINEAR_SOLVER_ACCEPTS_MULTITYPEMATRIX_HH
@@ -32,13 +33,17 @@ template<typename TypeTag, typename LinearSolver>
 struct LinearSolverAcceptsMultiTypeMatrixImpl
 { static constexpr bool value = true; };
 
-//! Convenience using declaration
+/*!
+ * \ingroup Linear
+ * \brief Trait checking if linear solvers accept Dune::MultiTypeBlockMatrix or we need to convert the matrix
+ */
 template <typename TypeTag>
 using LinearSolverAcceptsMultiTypeMatrix = LinearSolverAcceptsMultiTypeMatrixImpl<TypeTag, typename GET_PROP_TYPE(TypeTag, LinearSolver)>;
 
 //! Solvers that don't accept multi-type matrices
 //! Those are all with ILU preconditioner that doesn't support the additional block level
 //! And the direct solvers that have BCRS Matrix hardcoded
+
 template<typename TypeTag>
 struct LinearSolverAcceptsMultiTypeMatrixImpl<TypeTag, ILUnBiCGSTABBackend<TypeTag>>
 { static constexpr bool value = false; };
diff --git a/dumux/linear/matrixconverter.hh b/dumux/linear/matrixconverter.hh
index 87adb0a092..087b4453f0 100644
--- a/dumux/linear/matrixconverter.hh
+++ b/dumux/linear/matrixconverter.hh
@@ -18,8 +18,8 @@
  *****************************************************************************/
 /*!
  * \file
+ * \ingroup Linear
  * \brief A helper classe that converts a Dune::MultiTypeBlockMatrix into a plain Dune::BCRSMatrix
- *
  */
 #ifndef DUMUX_MATRIX_CONVERTER
 #define DUMUX_MATRIX_CONVERTER
@@ -35,7 +35,8 @@
 namespace Dumux {
 
 /*!
- * A helper classe that converts a Dune::MultiTypeBlockMatrix into a plain Dune::BCRSMatrix
+ * \ingroup Linear
+ * \brief A helper classe that converts a Dune::MultiTypeBlockMatrix into a plain Dune::BCRSMatrix
  * TODO: allow block sizes for BCRSMatrix other than 1x1 ?
  *
  */
@@ -50,7 +51,6 @@ public:
     /*!
      * \brief Converts the matrix to a type the IterativeSolverBackend can handle
      *
-     * \param M The converted matrix
      * \param A The original multitype blockmatrix
      */
     static auto multiTypeToBCRSMatrix(const MultiTypeBlockMatrix &A)
@@ -184,7 +184,8 @@ private:
 };
 
 /*!
- * A helper classe that converts a Dune::MultiTypeBlockVector into a plain Dune::BlockVector and transfers back values
+ * \ingroup Linear
+ * \brief A helper classe that converts a Dune::MultiTypeBlockVector into a plain Dune::BlockVector and transfers back values
  */
 template<class MultiTypeBlockVector, class Scalar=double>
 class VectorConverter
@@ -197,7 +198,7 @@ public:
     /*!
      * \brief Converts a Dune::MultiTypeBlockVector to a plain 1x1 Dune::BlockVector
      *
-     * \param A The original multitype blockvector
+     * \param b The original multitype blockvector
      */
     static auto multiTypeToBlockVector(const MultiTypeBlockVector& b)
     {
@@ -262,6 +263,7 @@ private:
         return size;
     }
 };
-}
+
+} // end namespace Dumux
 
 #endif
diff --git a/dumux/linear/scotchbackend.hh b/dumux/linear/scotchbackend.hh
index 9121848cdf..e70a42da6d 100644
--- a/dumux/linear/scotchbackend.hh
+++ b/dumux/linear/scotchbackend.hh
@@ -19,8 +19,9 @@
 
 /*!
  * \file
+ * \ingroup Linear
  * \brief An interface to the scotch library for matrix reordering
- * \note This is adapted from the FEniCS implementation of the scotch interface
+ * \note You need to have PTSCOTCH installed to use this feature
  */
 #ifndef DUMUX_SCOTCH_BACKEND_HH
 #define DUMUX_SCOTCH_BACKEND_HH
@@ -37,15 +38,21 @@ extern "C"
 }
 #endif
 
-namespace Dumux
-{
+namespace Dumux {
 
+/*!
+ * \file
+ * \ingroup Linear
+ * \brief A reordering backend using the scotch library
+ * \note You need to have PTSCOTCH installed to use this feature
+ */
 template<class IndexType>
 class ScotchBackend
 {
+public:
+    //! the graph type
     using Graph = std::vector<std::vector<IndexType>>;
 
-public:
     //! Compute reordering (map[old] -> new) using
     //! Gibbs-Poole-Stockmeyer (GPS) re-ordering
     static std::vector<int> computeGPSReordering(const Graph& graph,
@@ -56,7 +63,7 @@ public:
         return computeReordering(graph, strategy);
     }
 
-    // Compute graph re-ordering
+    //! Compute graph re-ordering
     static std::vector<int> computeReordering(const Graph& graph,
                                               std::string scotchStrategy = "")
     {
@@ -65,7 +72,7 @@ public:
         return permutation;
     }
 
-    // Compute graph re-ordering
+    //! Compute graph re-ordering
     static void computeReordering(const Graph& graph,
                                    std::vector<int>& permutation,
                                    std::vector<int>& inversePermutation,
@@ -120,13 +127,6 @@ public:
             exit(1);
         }
 
-        // Check graph data for consistency
-        // if (SCOTCH_graphCheck(&scotchGraph))
-        // {
-        //     std::cerr << "Consistency error in SCOTCH graph!" << std::endl;
-        //     exit(1);
-        // }
-
         // Re-ordering strategy
         SCOTCH_Strat strat;
         SCOTCH_stratInit(&strat);
diff --git a/dumux/linear/seqsolverbackend.hh b/dumux/linear/seqsolverbackend.hh
index c1a101b2d2..b4d1ebac29 100644
--- a/dumux/linear/seqsolverbackend.hh
+++ b/dumux/linear/seqsolverbackend.hh
@@ -18,7 +18,8 @@
  *****************************************************************************/
 /*!
  * \file
- * \brief Dumux sequential solver backends
+ * \ingroup Linear
+ * \brief Dumux sequential linear solver backends
  */
 #ifndef DUMUX_SEQ_SOLVER_BACKEND_HH
 #define DUMUX_SEQ_SOLVER_BACKEND_HH
@@ -52,17 +53,13 @@ struct isBCRSMatrix<Dune::BCRSMatrix<T> > : public std::true_type {};
  * combinations. Several parameters from the group LinearSolver are read to
  * customize the solver and preconditioner:
  *
- * Verbosity: determines how verbose the linear solver should print output.
- *
- * MaxIterations: the maximum number of iterations for the linear solver.
- *
- * ResidualReduction: the threshold for declaration of convergence.
- *
- * PreconditionerRelaxation: relaxation parameter for the preconditioner.
- *
- * PreconditionerIterations: usually specifies the number of times the
- * preconditioner is applied. In case of ILU(n), it specifies the order of the
- * applied ILU.
+ * - Verbosity: determines how verbose the linear solver should print output.
+ * - MaxIterations: the maximum number of iterations for the linear solver.
+ * - ResidualReduction: the threshold for declaration of convergence.
+ * - PreconditionerRelaxation: relaxation parameter for the preconditioner.
+ * - PreconditionerIterations: usually specifies the number of times the
+ *                             preconditioner is applied. In case of ILU(n),
+ *                             it specifies the order of the applied ILU.
  */
 class IterativePreconditionedSolverImpl
 {
diff --git a/dumux/linear/solver.hh b/dumux/linear/solver.hh
index 23acc3cc06..f1332dd45c 100644
--- a/dumux/linear/solver.hh
+++ b/dumux/linear/solver.hh
@@ -18,7 +18,8 @@
  *****************************************************************************/
 /*!
  * \file
- * \brief Dumux sequential solver backends
+ * \ingroup Linear
+ * \brief Base class for linear solvers
  */
 #ifndef DUMUX_LINEAR_SOLVER_HH
 #define DUMUX_LINEAR_SOLVER_HH
@@ -41,7 +42,15 @@ public:
     //! export scalar type (might be needed to set parameters from output)
     using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
 
-    //! default constructor sets some parameters
+    /*!
+     * \brief Contruct the solver
+     * \note Read parameters from the parameter tree
+     *       - LinearSolver.Verbosity the verbosity level of the linear solver
+     *       - LinearSolver.MaxIterations the maximum iterations of the solver
+     *       - LinearSolver.ResidualReduction the residual reduction threshold, i.e. stopping criterion
+     *       - LinearSolver.PreconditionerRelaxation precondition relaxation
+     *       - LinearSolver.PreconditionerIterations the number of preconditioner iterations
+     */
     LinearSolver()
     {
         static const std::string modelParamGroup = GET_PROP_VALUE(TypeTag, ModelParameterGroup);
@@ -52,6 +61,10 @@ public:
         precondIter_ = getParamFromGroup<int>(modelParamGroup, "LinearSolver.PreconditionerIterations");
     }
 
+    /*!
+     * \brief Solve the linear system Ax = b
+     * \note This has to be overloaded by the actual solver
+     */
     template<class Matrix, class Vector>
     bool solve(const Matrix& A, Vector& x, const Vector& b)
     {
diff --git a/dumux/linear/vectorexchange.hh b/dumux/linear/vectorexchange.hh
index bfbae64b7e..2b46b2b3d0 100644
--- a/dumux/linear/vectorexchange.hh
+++ b/dumux/linear/vectorexchange.hh
@@ -18,6 +18,7 @@
  *****************************************************************************/
 /*!
  * \file
+ * \ingroup Linear
  * \brief Contains a class to exchange entries of a vector
  */
 #ifndef DUMUX_VECTOR_EXCHANGE_HH
@@ -28,6 +29,8 @@
 namespace Dumux
 {
 /*!
+ * \ingroup Linear
+ * \todo why is this needed? is parallel/vectorexhange.hh not the same?
  * \brief A data handle class to exchange entries of a vector
  */
 template<class Mapper, class Vector> // mapper type and vector type
@@ -51,9 +54,8 @@ public:
         return true;
   }
 
-  /*! how many objects of type DataType have to be sent for a given entity
-
-  Note: Only the sender side needs to know this size.
+  /*! \brief how many objects of type DataType have to be sent for a given entity
+  * \note Only the sender side needs to know this size.
   */
   template<class Entity>
   size_t size (Entity& entity) const
@@ -68,10 +70,10 @@ public:
       buff.write(dataVector_[mapper_.index(entity)]);
   }
 
-  /*! unpack data from message buffer to user
-
-  n is the number of objects sent by the sender
-  */
+  /*!
+   * \brief unpack data from message buffer to user
+   * \note n is the number of objects sent by the sender
+   */
   template<class MessageBuffer, class Entity>
   void scatter (MessageBuffer& buff, const Entity& entity, size_t n)
   {
@@ -90,6 +92,6 @@ private:
   Vector& dataVector_;
 };
 
-}
+} // end namespace Dumux
 
 #endif
-- 
GitLab