From 7ec68d52ed93434966766045cc41468b94d82c67 Mon Sep 17 00:00:00 2001
From: Markus Blatt <mblatt@dune-project.org>
Date: Fri, 20 Apr 2007 13:59:25 +0000
Subject: [PATCH] Restructured ISTL documentation.

[[Imported from SVN: r751]]
---
 istl/basearray.hh              |  9 ---------
 istl/bcrsmatrix.hh             | 10 +++++++---
 istl/bvector.hh                | 12 +++++-------
 istl/io.hh                     | 14 +++++++-------
 istl/istl.hh                   | 32 --------------------------------
 istl/matrix.hh                 |  6 ++++--
 istl/operators.hh              | 24 ++++++++++++++++++------
 istl/owneroverlapcopy.hh       |  2 +-
 istl/paamg/aggregates.hh       | 28 +++++++++++++++++-----------
 istl/paamg/amg.hh              | 12 +++++++++---
 istl/paamg/construction.hh     |  7 +++++--
 istl/paamg/galerkin.hh         | 12 +++++++++---
 istl/paamg/graph.hh            | 26 +++++++++++---------------
 istl/paamg/hierarchy.hh        | 13 ++++++-------
 istl/paamg/indicescoarsener.hh |  4 +++-
 istl/paamg/transfer.hh         |  4 ++--
 istl/preconditioners.hh        | 18 ++++++++++--------
 istl/remoteindices.hh          |  7 ++++---
 istl/scalarproducts.hh         | 23 ++++++++++++++---------
 istl/schwarz.hh                | 21 +++++++++++++++------
 istl/solvercategory.hh         |  2 +-
 istl/solvers.hh                |  8 +++++---
 istl/vbvector.hh               |  2 +-
 23 files changed, 154 insertions(+), 142 deletions(-)
 delete mode 100644 istl/istl.hh

diff --git a/istl/basearray.hh b/istl/basearray.hh
index aae61f5ac..678882546 100644
--- a/istl/basearray.hh
+++ b/istl/basearray.hh
@@ -18,11 +18,6 @@
 
 namespace Dune {
 
-  /**
-              @addtogroup ISTL
-              @{
-   */
-
   /**  A simple array container for objects of type B implementing
 
        -  iterator access
@@ -751,10 +746,6 @@ namespace Dune {
     size_type* j;     // the index set
   };
 
-
-
-  /** @} end documentation */
-
 } // end namespace
 
 #endif
diff --git a/istl/bcrsmatrix.hh b/istl/bcrsmatrix.hh
index 54801a6e2..ad67e7ec1 100644
--- a/istl/bcrsmatrix.hh
+++ b/istl/bcrsmatrix.hh
@@ -26,7 +26,11 @@
 namespace Dune {
 
   /**
-              @addtogroup ISTL
+   * @defgroup ISTL_SPMV Sparse Matrix and Vector classes
+   * @ingroup ISTL
+   */
+  /**
+              @addtogroup ISTL_SPMV
               @{
    */
 
@@ -52,7 +56,7 @@ namespace Dune {
 
            For general finite element implementations the number of rows n
        is known, the number of non-zeroes might also be known (e.g.
-     #edges + #nodes for P1) but the size of a row and the indices of a row
+     \#edges + \#nodes for P1) but the size of a row and the indices of a row
        can not be defined in sequential order.
 
            Error checking: no error checking is provided normally.
@@ -123,7 +127,7 @@ namespace Dune {
        *
        * For general finite element implementations the number of rows n
        * is known, the number of non-zeroes might also be known (e.g.
-       * #edges + #nodes for P1) but the size of a row and the indices of a row
+       * \#edges + \#nodes for P1) but the size of a row and the indices of a row
        * can not be defined in sequential order.
        */
       random,
diff --git a/istl/bvector.hh b/istl/bvector.hh
index 8764ae81c..70a5d3960 100644
--- a/istl/bvector.hh
+++ b/istl/bvector.hh
@@ -23,11 +23,6 @@
 
 namespace Dune {
 
-  /**
-              @addtogroup ISTL
-              @{
-   */
-
 
   /**
       \brief An unmanaged vector of blocks.
@@ -213,6 +208,10 @@ namespace Dune {
     {       }
   };
 
+  /**
+              @addtogroup ISTL_SPMV
+              @{
+   */
 
   /**
       \brief A vector of blocks with memory management.
@@ -635,6 +634,7 @@ namespace Dune {
     size_type capacity_;
   };
 
+  /** @} */
   //! Send BlockVector to an output stream
   template<class K, class A>
   std::ostream& operator<< (std::ostream& s, const BlockVector<K, A>& v)
@@ -1173,8 +1173,6 @@ namespace Dune {
   };
 #endif
 
-  /** @} end documentation */
-
 } // end namespace
 
 #endif
diff --git a/istl/io.hh b/istl/io.hh
index 406e097bf..2175ce5d1 100644
--- a/istl/io.hh
+++ b/istl/io.hh
@@ -15,19 +15,19 @@
 #include <dune/common/fmatrix.hh>
 #include "bcrsmatrix.hh"
 
-/** \file
-
-   \brief Some generic functions for pretty printing vectors and matrices
- */
 
 namespace Dune {
 
   /**
-              @addtogroup ISTL
+              @addtogroup ISTL_SPMV
               @{
    */
 
 
+  /** \file
+
+     \brief Some generic functions for pretty printing vectors and matrices
+   */
   //==== pretty printing of vectors
 
   // recursively print all the blocks
@@ -224,9 +224,9 @@ namespace Dune {
    *
    * @param s The ostream to print to.
    * @param mat The matrix to print.
-   * @param titel The title for the matrix.
+   * @param title The title for the matrix.
    * @param rowtext The text to prepend to each print out of a matrix row.
-   * @param with The number of nonzero blocks to print in one line.
+   * @param width The number of nonzero blocks to print in one line.
    * @param precision The precision to use when printing the numbers.
    */
   template<class B, int n, int m, class A>
diff --git a/istl/istl.hh b/istl/istl.hh
deleted file mode 100644
index fbb88ee49..000000000
--- a/istl/istl.hh
+++ /dev/null
@@ -1,32 +0,0 @@
-// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-// vi: set et ts=4 sw=2 sts=2:
-// $Id$
-#ifndef DUNE_ISTL_HH
-#define DUNE_ISTL_HH
-
-/** @defgroup ISTL Iterative Solvers Template Library
-
-    The SPMV module defines a set of classes for sparse
-    matrices and vectors with the following features:
-
-    - They are efficient (including access to single elements)
-
-    - They provide a recursive block structure for a flexible
-      construction of iterative linear solvers
-
-    - They are very flexible
- */
-
-
-namespace Dune {
-
-  /**
-              @addtogroup ISTL
-              @{
-   */
-
-  /** @} end documentation */
-
-} // end namespace
-
-#endif
diff --git a/istl/matrix.hh b/istl/matrix.hh
index a267d89a2..88192fe81 100644
--- a/istl/matrix.hh
+++ b/istl/matrix.hh
@@ -12,8 +12,10 @@
 
 namespace Dune {
 
+  /** \addtogroup ISTL_SPMV
+     \{
+   */
   /** \brief A generic dynamic matrix
-      \addtogroup ISTL
 
       This matrix is currently implemented as a BlockVector of BlockVectors.
       That makes the code fairly simple, as we get all iterators for free.
@@ -542,7 +544,7 @@ namespace Dune {
 
     int cols_;
   };
-
+  /** \} */
 } // end namespace Dune
 
 #endif
diff --git a/istl/operators.hh b/istl/operators.hh
index 009784ad6..0c6733301 100644
--- a/istl/operators.hh
+++ b/istl/operators.hh
@@ -11,19 +11,31 @@
 
 #include "solvercategory.hh"
 
-/** \file
-
-   \brief Define general, extensible interface for operators.
-        The available implementation wraps a matrix.
- */
 
 namespace Dune {
 
-  /** @addtogroup ISTL
+  /**
+   * @defgroup ISTL_Operators Operator concept
+   * @ingroup ISTL_Solvers
+   *
+   * The solvers in ISTL do not work on matrices directly. Instead we use
+   * an abstract operator concept. This allows for using matrix-free
+   * operators, i.e. operators that are not stored as matrices in any
+   * form. Thus our solver algorithms can easily be turned into matrix-free
+   * solvers just by plugging in matrix-free representations of linear
+   * operators and preconditioners.
+   */
+  /** @addtogroup ISTL_Operators
           @{
    */
 
 
+  /** \file
+
+     \brief Define general, extensible interface for operators.
+          The available implementation wraps a matrix.
+   */
+
   //=====================================================================
   // Abstract operator interface
   //=====================================================================
diff --git a/istl/owneroverlapcopy.hh b/istl/owneroverlapcopy.hh
index da5c46136..831860c95 100644
--- a/istl/owneroverlapcopy.hh
+++ b/istl/owneroverlapcopy.hh
@@ -36,7 +36,7 @@
 namespace Dune {
 
   /**
-     @addtogroup ISTL
+     @addtogroup ISTL_Comm
      @{
    */
 
diff --git a/istl/paamg/aggregates.hh b/istl/paamg/aggregates.hh
index 5acf81456..af28859c0 100644
--- a/istl/paamg/aggregates.hh
+++ b/istl/paamg/aggregates.hh
@@ -317,7 +317,10 @@ namespace Dune
     class FirstDiagonal
     {
     public:
-
+      /**
+       * @brief compute the norm of a matrix.
+       * @param m The matrix ro compute the norm of.
+       */
       template<class M>
       typename M::field_type operator()(const M& m) const
       {
@@ -332,6 +335,10 @@ namespace Dune
      */
     struct RowSum
     {
+      /**
+       * @brief compute the norm of a matrix.
+       * @param m The matrix ro compute the norm of.
+       */
       template<class M>
       typename M::field_type operator()(const M& m) const
       {
@@ -343,8 +350,8 @@ namespace Dune
      * @brief Criterion taking advantage of symmetric matrices.
      *
      * The two template parameters are:
-     * <dt>M</dt><dd>The type of the matrix the amg coarsening works on, e. g. BCRSMatrix</dd>
-     * <dt>Norm</dt><dd>The norm to use to determine the strong couplings between the nodes</dd>
+     * <dt>M</dt> <dd>The type of the matrix the amg coarsening works on, e. g. BCRSMatrix</dd>
+     * <dt>Norm</dt> <dd>The norm to use to determine the strong couplings between the nodes, e.g. FirstDiagonal or RowSum.</dd>
      */
     template<class M, class Norm>
     class SymmetricCriterion : public AggregationCriterion<SymmetricDependency<M,Norm> >
@@ -357,8 +364,8 @@ namespace Dune
      * Nevertheless the sparsity pattern has to be symmetric.
      *
      * The two template parameters are:
-     * <dt>M</dt><dd>The type of the matrix the amg coarsening works on, e. g. BCRSMatrix</dd>
-     * <dt>Norm</dt><dd>The norm to use to determine the strong couplings between the nodes</dd>
+     * <dt>M</dt> <dd>The type of the matrix the amg coarsening works on, e. g. BCRSMatrix</dd>
+     * <dt>Norm</dt> <dd>The norm to use to determine the strong couplings between the nodes, e.g. FirstDiagonal or RowSum.</dd>
      */
     template<class M, class Norm>
     class UnSymmetricCriterion : public AggregationCriterion<Dependency<M,Norm> >
@@ -452,19 +459,19 @@ namespace Dune
       /**
        * @brief Breadth first search within an aggregate
        *
-       * The template parameters: <br />
+       * The template parameters: <br>
        * <dl>
        * <dt>reset</dt><dd>If true the visited flags of the vertices
        *  will be reset after
        * the search</dd>
        * <dt>G</dt><dd>The type of the graph we perform the search on.</dd>
-       * <td>F</dt><dd>
+       * <td>F</dt><dd>The type of the visitor to operate on the vertices</dd>
        * </dl>
        * @param start The vertex where the search should start
        * from. This does not need to belong to the aggregate.
        * @param aggregate The aggregate id.
        * @param graph The matrix graph to perform the search on.
-       * @param visited A list to store the visited vertices in.
+       * @param visitedMap A map to mark the already visited vertices
        * @param aggregateVisitor A functor that is called with
        * each G::ConstEdgeIterator with an edge pointing to the
        * aggregate. Use DummyVisitor these are of no interest.
@@ -479,7 +486,7 @@ namespace Dune
       /**
        * @brief Breadth first search within an aggregate
        *
-       * The template parameters: <br />
+       * The template parameters: <br>
        * <dl><dt>L</dt><dd>A container type providing push_back(Vertex), and
        * pop_front() in case remove is true</dd>
        * <dt>remove</dt><dd> If true the entries in the visited list
@@ -497,6 +504,7 @@ namespace Dune
        * @param nonAggregateVisitor A functor that is called with
        * each G::ConstEdgeIterator with an edge pointing to another
        * aggregate. Use DummyVisitor these are of no interest.
+       * @param visitedMap A map to mark the already visited vertices
        */
       template<bool remove, bool reset, class G, class L, class F1, class F2, class VM>
       std::size_t breadthFirstSearch(const VertexDescriptor& start,
@@ -1024,8 +1032,6 @@ namespace Dune
       public:
         /**
          * @brief Constructor.
-         * @param aggregates The mapping of the vertices to
-         * aggregates.
          */
         DependencyCounter();
 
diff --git a/istl/paamg/amg.hh b/istl/paamg/amg.hh
index ff0596f4f..a024bb6ab 100644
--- a/istl/paamg/amg.hh
+++ b/istl/paamg/amg.hh
@@ -15,6 +15,11 @@ namespace Dune
 {
   namespace Amg
   {
+    /**
+     * @defgroup ISTL_PAAMG Parallel Algebraic Multigrid
+     * @ingroup ISTL_Prec
+     * @brief A Parallel Algebraic Multigrid based on Agglomeration.
+     */
 
     /**
      * @addtogroup ISTL_PAAMG
@@ -72,12 +77,13 @@ namespace Dune
 
       /**
        * @brief Construct a new amg with a specific coarse solver.
-       * @param matrix The matrix we precondition for.
-       * @param solverArgs The arguments needed for the construction of the
-       * direct solver to use at the coarsest level.
+       * @param matrices The already set up matix hierarchy.
+       * @param coarseSolver The set up solver to use on the coarse
+       * grid, must natch the soarse matrix in the matrix hierachy.
        * @param smootherArgs The  arguments needed for thesmoother to use
        * for pre and post smoothing
        * @param gamma The number of subcycles. 1 for V-cycle, 2 for W-cycle.
+       * @param smoothingSteps The number of smoothing steps for pre and postsmoothing.
        */
       AMG(const OperatorHierarchy& matrices, CoarseSolver& coarseSolver,
           const SmootherArgs& smootherArgs, std::size_t gamma,
diff --git a/istl/paamg/construction.hh b/istl/paamg/construction.hh
index 9c5ebb07d..92a3ab063 100644
--- a/istl/paamg/construction.hh
+++ b/istl/paamg/construction.hh
@@ -46,14 +46,17 @@ namespace Dune
        * @brief Construct an object with the specified arguments.
        *
        * In the default implementation the copy constructor is called.
-       * @param object Pointer to the space allocated for the object.
-       * @param arguments The arguments for the construction.
+       * @param args The arguments for the construction.
        */
       static inline T* construct(Arguments&  args)
       {
         return new T();
       }
 
+      /**
+       * @brief Destroys an object.
+       * @param t Pointer to the object to destroy.
+       */
       static inline void deconstruct(T* t)
       {
         delete t;
diff --git a/istl/paamg/galerkin.hh b/istl/paamg/galerkin.hh
index 070894a4d..ee8024c5d 100644
--- a/istl/paamg/galerkin.hh
+++ b/istl/paamg/galerkin.hh
@@ -100,7 +100,9 @@ namespace Dune
        * @brief Calculate the galerkin product.
        * @param fine The fine matrix.
        * @param aggregates The aggregate mapping.
-       * @param coarse The coarse Matric.
+       * @param coarse The coarse Matrix.
+       * @param pinfo Parallel information about the fine level.
+       * @param copy The attribute set identifying the copy nodes of the graph.
        */
       template<class M, class V, class I, class O>
       void calculate(const M& fine, const AggregatesMap<V>& aggregates, M& coarse,
@@ -123,13 +125,14 @@ namespace Dune
        * @param pinfo Parallel information about the fine level.
        * @param aggregates The mapping of the fine level unknowns  onto aggregates.
        * @param size The number of columns and rows of the coarse matrix.
+       * @param copy The attribute set identifying the copy nodes of the graph.
        */
       template<class M, class G, class V, class Set>
       M* build(const M& fine, G& fineGraph, V& visitedMap,
                const ParallelInformation& pinfo,
                const AggregatesMap<typename G::VertexDescriptor>& aggregates,
                const typename M::size_type& size,
-               const Set& overlap);
+               const Set& copy);
     private:
       std::size_t* overlapStart_;
 
@@ -169,13 +172,14 @@ namespace Dune
        * @param pinfo Parallel information about the fine level.
        * @param aggregates The mapping of the fine level unknowns  onto aggregates.
        * @param size The number of columns and rows of the coarse matrix.
+       * @param copy The attribute set identifying the copy nodes of the graph.
        */
       template<class M, class G, class V, class Set>
       M* build(const M& fine, G& fineGraph, V& visitedMap,
                const SequentialInformation& pinfo,
                const AggregatesMap<typename G::VertexDescriptor>& aggregates,
                const typename M::size_type& size,
-               const Set& overlap);
+               const Set& copy);
     };
 
     struct BaseConnectivityConstructor
@@ -229,6 +233,8 @@ namespace Dune
         /**
          * @brief Constructor
          * @param aggregates The mapping of the vertices onto the aggregates.
+         * @param graph The graph to work on.
+         * @param visitedMap The map for marking vertices as visited
          * @param connected The set to added the connected aggregates to.
          */
         ConnectedBuilder(const AggregatesMap<Vertex>& aggregates, Graph& graph,
diff --git a/istl/paamg/graph.hh b/istl/paamg/graph.hh
index 96bf6a31e..905859608 100644
--- a/istl/paamg/graph.hh
+++ b/istl/paamg/graph.hh
@@ -17,11 +17,6 @@ namespace Dune
 {
   namespace Amg
   {
-    /**
-     * @defgroup ISTL_PAAMG Parallel Algebraic Multigrid
-     * @ingroup ISTL
-     * @brief A Parallel Algebraic Multigrid based on Agglomeration.
-     */
     /**
      * @addtogroup ISTL_PAAMG
      *
@@ -235,7 +230,6 @@ namespace Dune
          *
          * only operator== or operator!= may be called safely on an
          * iterator constructed this way.
-         * @param graph The graph we are a vertex iterator for.
          * @param current The current vertex to position on.
          */
         explicit VertexIteratorT(const VertexDescriptor& current);
@@ -506,7 +500,7 @@ namespace Dune
         /**
          * @brief Constructor.
          * @param source The source vertex of the edge.
-         * @param firstEdge Pointer to the beginning of the graph's edge array.
+         * @param edge Pointer to the edge the iterator should point to.
          */
         explicit EdgeIterator(const VertexDescriptor& source, const EdgeDescriptor& edge);
 
@@ -515,7 +509,7 @@ namespace Dune
          *
          * Only operator== or operator!= can be called safely on an iterator constructed
          * this way!
-         * @param firstEdge Pointer to the beginning of the graph's edge array.
+         * @param edge Pointer to the end of the graph's edge array.
          */
         explicit EdgeIterator(const EdgeDescriptor& edge);
 
@@ -559,7 +553,8 @@ namespace Dune
       {
       public:
         /**
-         * @param Constructor.
+         * @brief Constructor.
+         * @param graph The graph over whose vertices to iterate.
          * @param current The position of the iterator.
          * @param end The last vertex of the graph.
          */
@@ -568,7 +563,7 @@ namespace Dune
 
 
         /**
-         * @param Constructor for end iterator.
+         * @brief Constructor for end iterator.
          *
          * Use with care! All operations except operator== or operator!= will fail!
          * @param current The position of the iterator.
@@ -1043,20 +1038,19 @@ namespace Dune
         Father;
 
         /**
-         * @param Constructor.
+         * @brief Constructor.
          * @param iter The iterator of the underlying graph.
-         * @param graph The graph over whose edges we iterate.
+         * @param graph The graph over whose edges we iterate on.
          */
         explicit EdgeIteratorT(const Father& iter,
                                C* graph);
 
         /**
-         * @param Constructor for the end iterator.
+         * @brief Constructor for the end iterator.
          *
          * Only operator== or operator!= should be called on
          * an iterator constructed this way.
          * @param iter The iterator of the underlying graph.
-         * @param graph The graph over whose edges we iterate.
          */
         explicit EdgeIteratorT(const Father& iter);
 
@@ -1305,7 +1299,8 @@ namespace Dune
       /**
        * @brief Constructor.
        * @param graph The graph we attach properties to.
-       * @param
+       * @param vmap The map of the vertices onto indices.
+       * @param emap The map of the edges onto indices.
        */
       PropertiesGraph(Graph& graph, const VertexMap& vmap=VertexMap(),
                       const EdgeMap& emap=EdgeMap());
@@ -1427,6 +1422,7 @@ namespace Dune
     /**
      * @brief Visit all neighbour vertices of a vertex in a graph.
      *
+     * @param graph The graph whose vertices to visit.
      * @param vertex The vertex whose neighbours we want to
      * visit.
      * @param visitor The visitor evaluated for each EdgeIterator
diff --git a/istl/paamg/hierarchy.hh b/istl/paamg/hierarchy.hh
index 204017a41..3ebb0780d 100644
--- a/istl/paamg/hierarchy.hh
+++ b/istl/paamg/hierarchy.hh
@@ -103,8 +103,7 @@ namespace Dune
       Hierarchy(MemberType& first);
 
       /**
-       * @brief Construct a new hierarchy.
-       * @param first The first element in the hierarchy.
+       * @brief Construct a new empty hierarchy.
        */
       Hierarchy();
 
@@ -310,8 +309,7 @@ namespace Dune
       /**
        * @brief Constructor
        * @param fineMatrix The matrix to coarsen.
-       * @param indexSet The index set mapping the global indices to matrix rows.
-       * @param remoteIndices Information about the remote indices.
+       * @param pinfo The information about the parallel data decmposition at the first level.
        */
       MatrixHierarchy(const MatrixOperator& fineMatrix,
                       const ParallelInformation& pinfo=ParallelInformation());
@@ -339,14 +337,15 @@ namespace Dune
 
       /**
        * @brief Coarsen the vector hierarchy according to the matrix hierarchy.
-       * @param hierachy The vector hierarchy to coarsen.
+       * @param hierarchy The vector hierarchy to coarsen.
        */
       template<class V, class TA>
       void coarsenVector(Hierarchy<BlockVector<V,TA> >& hierarchy) const;
 
       /**
        * @brief Coarsen the smoother hierarchy according to the matrix hierarchy.
-       * @param hierachy The smoother hierarchy to coarsen.
+       * @param smoothers The smoother hierarchy to coarsen.
+       * @param args The arguments for the construction of the coarse level smoothers.
        */
       template<class S, class TA>
       void coarsenSmoother(Hierarchy<S,TA>& smoothers,
@@ -521,7 +520,7 @@ namespace Dune
        * @param maxLevel The macimum number of levels allowed in the matric hierarchy (default: 100).
        * @param coarsenTarget If the number of nodes in the matrix is below this threshold the
        * coarsening will stop (default: 1000).
-       * @param minCoarsenRate. If the coarsening rate falls below this threshold the
+       * @param minCoarsenRate If the coarsening rate falls below this threshold the
        * coarsening will stop (default: 1.2)
        */
       CoarsenCriterion(int maxLevel=100, int coarsenTarget=1000, double minCoarsenRate=1.2)
diff --git a/istl/paamg/indicescoarsener.hh b/istl/paamg/indicescoarsener.hh
index 9358c4fe1..352db0efa 100644
--- a/istl/paamg/indicescoarsener.hh
+++ b/istl/paamg/indicescoarsener.hh
@@ -77,8 +77,10 @@ namespace Dune
        *
        * @param fineInfo The parallel information at the fine level.
        * @param fineGraph The graph of the fine lecel,
-       * @param vistedMap Map for marking vertices as visited.
+       * @param visitedMap Map for marking vertices as visited.
        * @param aggregates The mapping of unknowns onto aggregates.
+       * @param coarseInfo The information about the parallel data decomposition
+       * on the coarse level.
        * @return The number of unknowns on the coarse level.
        */
       template<typename Graph, typename VM>
diff --git a/istl/paamg/transfer.hh b/istl/paamg/transfer.hh
index d429b47be..be423ae6c 100644
--- a/istl/paamg/transfer.hh
+++ b/istl/paamg/transfer.hh
@@ -51,7 +51,7 @@ namespace Dune
                             const SequentialInformation & comm);
     };
 
-#ifdef HAVE_MPI
+#if HAVE_MPI
 
     template<class V,class B, class T>
     class Transfer<V,BlockVector<B>,ParallelInformation<T> >
@@ -117,7 +117,7 @@ namespace Dune
       }
     }
 
-#ifdef HAVE_MPI
+#if HAVE_MPI
     template<class V, class B, class T>
     inline void Transfer<V,BlockVector<B>,ParallelInformation<T> >::prolongate(const AggregatesMap<Vertex>& aggregates,
                                                                                Vector& coarse, Vector& fine,
diff --git a/istl/preconditioners.hh b/istl/preconditioners.hh
index 108e7ece4..307d30189 100644
--- a/istl/preconditioners.hh
+++ b/istl/preconditioners.hh
@@ -18,8 +18,10 @@
 
 
 namespace Dune {
-
-  /** @addtogroup ISTL
+  /** @defgroup ISTL_Prec Preconditioners
+      @ingroup ISTL_Solvers
+   */
+  /** @addtogroup ISTL_Prec
           @{
    */
   /** \file
@@ -149,7 +151,7 @@ namespace Dune {
     /*!
        \brief Apply the precondtioner
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
@@ -224,7 +226,7 @@ namespace Dune {
     /*!
        \brief Apply the preconditioner.
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
@@ -296,7 +298,7 @@ namespace Dune {
     /*!
        \brief Apply the preconditioner.
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
@@ -368,7 +370,7 @@ namespace Dune {
     /*!
        \brief Apply the preconditioner.
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
@@ -442,7 +444,7 @@ namespace Dune {
     /*!
        \brief Apply the preconditoner.
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
@@ -514,7 +516,7 @@ namespace Dune {
     /*!
        \brief Apply the precondioner.
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
diff --git a/istl/remoteindices.hh b/istl/remoteindices.hh
index e17522c6b..1603e5a03 100644
--- a/istl/remoteindices.hh
+++ b/istl/remoteindices.hh
@@ -125,7 +125,6 @@ namespace Dune {
      * @brief Constructor.
      * Private as it should only be called from within Indexset.
      * @param attribute The attribute of the index on the remote processor.
-     * @param local The corresponding local index.
      */
     RemoteIndex(const T2& attribute);
 
@@ -212,7 +211,8 @@ namespace Dune {
      * @param comm The communicator to use.
      * @param source The indexset which represents the global to
      * local mapping at the source of the communication
-     * @param to The indexset to which the communication which represents the global to
+     * @param destination The indexset to which the communication
+     * which represents the global to
      * local mapping at the destination of the communication.
      * May be the same as the source indexset.
      */
@@ -229,7 +229,8 @@ namespace Dune {
      * @param comm The communicator to use.
      * @param source The indexset which represents the global to
      * local mapping at the source of the communication
-     * @param to The indexset to which the communication which represents the global to
+     * @param destination The indexset to which the communication
+     * which represents the global to
      * local mapping at the destination of the communication.
      * May be the same as the source indexset.
      */
diff --git a/istl/scalarproducts.hh b/istl/scalarproducts.hh
index d50353275..25bc86d18 100644
--- a/istl/scalarproducts.hh
+++ b/istl/scalarproducts.hh
@@ -11,20 +11,25 @@
 
 #include "solvercategory.hh"
 
-/** \file
 
-   \brief Define base class for scalar product and norm.
+namespace Dune {
+  /**
+   * @defgroup ISTL_SP Scalar products
+   * @ingroup ISTL_Solvers
+   * @brief Scalar products for the use in iterative solvers
+   */
+  /** @addtogroup ISTL_SP
+          @{
+   */
 
-   These classes have to be implemented differently for different
-   data partitioning strategies. Default implementations for the
-   sequential case are provided.
+  /** \file
 
- */
+     \brief Define base class for scalar product and norm.
 
-namespace Dune {
+     These classes have to be implemented differently for different
+     data partitioning strategies. Default implementations for the
+     sequential case are provided.
 
-  /** @addtogroup ISTL
-          @{
    */
 
   /*! \brief Base class for scalar product and norm computation
diff --git a/istl/schwarz.hh b/istl/schwarz.hh
index e1ed32210..1e3bddfce 100644
--- a/istl/schwarz.hh
+++ b/istl/schwarz.hh
@@ -30,7 +30,7 @@
 namespace Dune {
 
   /**
-     @addtogroup ISTL
+     @addtogroup ISTL_Operators
      @{
    */
 
@@ -96,8 +96,12 @@ namespace Dune {
     const communication_type& communication;
   };
 
+  /** @} */
 
-
+  /**
+   * @addtogroup ISTL_SP
+   * @{
+   */
   /**
    * \brief Scalar product for overlapping schwarz methods.
    *
@@ -167,7 +171,12 @@ namespace Dune {
     }
   };
 
-
+  /**
+   * @}
+   *
+   * @addtogroup ISTL_Prec
+   * @{
+   */
   //! \brief A parallel SSOR preconditioner.
   template<class M, class X, class Y, class C>
   class ParSSOR : public Preconditioner<X,Y> {
@@ -215,7 +224,7 @@ namespace Dune {
     /*!
        \brief Apply the precondtioner
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
@@ -299,9 +308,9 @@ namespace Dune {
     }
 
     /*!
-       \brief Apply the precondtioner
+       \brief Apply the preconditioner
 
-       \copydoc Preconditioner::apply(X&,Y&)
+       \copydoc Preconditioner::apply(X&,const Y&)
      */
     virtual void apply (X& v, const Y& d)
     {
diff --git a/istl/solvercategory.hh b/istl/solvercategory.hh
index 7f6607360..128a803d9 100644
--- a/istl/solvercategory.hh
+++ b/istl/solvercategory.hh
@@ -8,7 +8,7 @@
 namespace Dune {
 
   /**
-     @addtogroup ISTL
+     @addtogroup ISTL_Solvers
      @{
    */
 
diff --git a/istl/solvers.hh b/istl/solvers.hh
index 2f93188b6..a5d20b912 100644
--- a/istl/solvers.hh
+++ b/istl/solvers.hh
@@ -18,8 +18,10 @@
 #include <dune/common/helpertemplates.hh>
 
 namespace Dune {
-
-  /** @addtogroup ISTL
+  /** @defgroup ISTL_Solvers Iterative Solvers
+      @ingroup ISTL
+   */
+  /** @addtogroup ISTL_Solvers
           @{
    */
 
@@ -791,7 +793,7 @@ namespace Dune {
     /*!
        \brief Apply inverse operator with given reduction factor.
 
-       \copydoc InverseOperator::apply(X&,Y&,double,InverseOperatorResult)
+       \copydoc InverseOperator::apply(X&,Y&,double,InverseOperatorResult&)
      */
     virtual void apply (X& x, X& b, double reduction, InverseOperatorResult& r)
     {
diff --git a/istl/vbvector.hh b/istl/vbvector.hh
index bd7e88738..0ef88a871 100644
--- a/istl/vbvector.hh
+++ b/istl/vbvector.hh
@@ -18,7 +18,7 @@
 namespace Dune {
 
   /**
-              @addtogroup ISTL
+              @addtogroup ISTL_SPMV
               @{
    */
 
-- 
GitLab