From a7f9ef439d5ee5de6454389a2e396e417dee971f Mon Sep 17 00:00:00 2001 From: Markus Blatt <markus@dr-blatt.de> Date: Mon, 21 Jul 2014 19:01:11 +0200 Subject: [PATCH] [doc] Improves doxygen documentation of schwarz.hh. Namely we try to document the template parameters in more detail and make sure that cross reference to OwnerOverlapCopyCommunication, vectors, and matrix implemetation appear. --- dune/istl/schwarz.hh | 98 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 11 deletions(-) diff --git a/dune/istl/schwarz.hh b/dune/istl/schwarz.hh index f12ab0b1a..53e5c4191 100644 --- a/dune/istl/schwarz.hh +++ b/dune/istl/schwarz.hh @@ -53,21 +53,49 @@ namespace Dune { */ /** - * @brief An overlapping schwarz operator. + * \brief An overlapping schwarz operator. + * + * This operator represents a parallel matrix product using + * sequential data structures together with a parallel index set + * describing an overlapping domain decomposition and the communication. + * \tparam M The type of the sequential matrix to use, + * e.g. BCRSMatrix or another matrix type fulfilling the + * matrix interface of ISTL. + * \tparam X The type of the sequential vector to use for the left hand side, + * e.g. BlockVector or another type fulfilling the ISTL + * vector interface. + * \tparam Y The type of the sequential vector to use for the right hand side, + * e..g. BlockVector or another type fulfilling the ISTL + * vector interface. + * \tparam C The type of the communication object. + * This must either be OwnerOverlapCopyCommunication or a type + * implementing the same interface. */ template<class M, class X, class Y, class C> class OverlappingSchwarzOperator : public AssembledLinearOperator<M,X,Y> { public: //! \brief The type of the matrix we operate on. + //! + //! E.g. BCRSMatrix or another matrix type fulfilling the + //! matrix interface of ISTL typedef M matrix_type; //! \brief The type of the domain. + //! + //! E.g. BlockVector or another type fulfilling the ISTL + //! vector interface. typedef X domain_type; //! \brief The type of the range. + //! + //! E.g. BlockVector or another type fulfilling the ISTL + //! vector interface. typedef Y range_type; //! \brief The field type of the range typedef typename X::field_type field_type; - //! \brief The type of the communication object + //! \brief The type of the communication object. + //! + //! This must either be OwnerOverlapCopyCommunication or a type + //! implementing the same interface. typedef C communication_type; enum { @@ -80,7 +108,7 @@ namespace Dune { * * @param A The assembled matrix. * @param com The communication object for syncing overlap and copy - * data points. (E.~g. OwnerOverlapCommunication ) + * data points. (E.~g. OwnerOverlapCopyCommunication ) */ OverlappingSchwarzOperator (const matrix_type& A, const communication_type& com) : _A_(A), communication(com) @@ -103,7 +131,7 @@ namespace Dune { // since there d is const! } - //! get matrix via * + //! get the sequential assembled linear operator. virtual const matrix_type& getmat () const { return _A_; @@ -124,16 +152,28 @@ namespace Dune { * \brief Scalar product for overlapping schwarz methods. * * Consistent vectors in interior and border are assumed. + * \tparam X The type of the sequential vector to use for the left hand side, + * e.g. BlockVector or another type fulfilling the ISTL + * vector interface. + * \tparam C The type of the communication object. + * This must either be OwnerOverlapCopyCommunication or a type + * implementing the same interface. */ template<class X, class C> class OverlappingSchwarzScalarProduct : public ScalarProduct<X> { public: - //! \brief The type of the domain. + //! \brief The type of the vector to compute the scalar product on. + //! + //! E.g. BlockVector or another type fulfilling the ISTL + //! vector interface. typedef X domain_type; - //! \brief The type of the range + //! \brief The field type used by the vector type domain_type. typedef typename X::field_type field_type; - //! \brief The type of the communication object + //! \brief The type of the communication object. + //! + //! This must either be OwnerOverlapCopyCommunication or a type + //! implementing the same interface. typedef C communication_type; //! define the category @@ -141,7 +181,7 @@ namespace Dune { /*! \brief Constructor needs to know the grid * \param com The communication object for syncing overlap and copy - * data points. (E.~g. OwnerOverlapCommunication ) + * data points. (E.~g. OwnerOverlapCopyCommunication ) */ OverlappingSchwarzScalarProduct (const communication_type& com) : communication(com) @@ -196,6 +236,18 @@ namespace Dune { * @{ */ //! \brief A parallel SSOR preconditioner. + //! \tparam M The type of the sequential matrix to use, + //! e.g. BCRSMatrix or another matrix type fulfilling the + //! matrix interface of ISTL. + //! \tparam X The type of the sequential vector to use for the left hand side, + //! e.g. BlockVector or another type fulfilling the ISTL + //! vector interface. + //! \tparam Y The type of the sequential vector to use for the right hand side, + //! e..g. BlockVector or another type fulfilling the ISTL + //! vector interface. + //! \tparam C The type of the communication object. + //! This must either be OwnerOverlapCopyCommunication or a type + //! implementing the same interface. template<class M, class X, class Y, class C> class ParSSOR : public Preconditioner<X,Y> { public: @@ -223,7 +275,7 @@ namespace Dune { \param n The number of iterations to perform. \param w The relaxation factor. \param c The communication object for syncing overlap and copy - * data points. (E.~g. OwnerOverlapCommunication ) + * data points. (E.~g. OwnerOverlapCopyCommunication ) */ ParSSOR (const matrix_type& A, int n, field_type w, const communication_type& c) : _A_(A), _n(n), _w(w), communication(c) @@ -283,18 +335,42 @@ namespace Dune { * preconditioner. In each step the sequential preconditioner * is applied and then all owner data points are updated on * all other processes. + * \tparam M The type of the sequential matrix to use, + * e.g. BCRSMatrix or another matrix type fulfilling the + * matrix interface of ISTL. + * \tparam X The type of the sequential vector to use for the left hand side, + * e.g. BlockVector or another type fulfilling the ISTL + * vector interface. + * \tparam Y The type of the sequential vector to use for the right hand side, + * e..g. BlockVector or another type fulfilling the ISTL + * vector interface. + * \tparam C The type of the communication object. + * This must either be OwnerOverlapCopyCommunication or a type + * implementing the same interface. + * \tparam The type of the sequential preconditioner to use + * for approximately solving the local matrix block consisting of unknowns + * owned by the process. Has to implement the Preconditioner interface. */ template<class X, class Y, class C, class T=Preconditioner<X,Y> > class BlockPreconditioner : public Preconditioner<X,Y> { friend class Amg::ConstructionTraits<BlockPreconditioner<X,Y,C,T> >; public: //! \brief The domain type of the preconditioner. + //! + //! E.g. BlockVector or another type fulfilling the ISTL + //! vector interface. typedef X domain_type; //! \brief The range type of the preconditioner. + //! + //! E.g. BlockVector or another type fulfilling the ISTL + //! vector interface. typedef Y range_type; //! \brief The field type of the preconditioner. typedef typename X::field_type field_type; - //! \brief The type of the communication object. + //! \brief The type of the communication object.. + //! + //! This must either be OwnerOverlapCopyCommunication or a type + //! implementing the same interface. typedef C communication_type; // define the category @@ -308,7 +384,7 @@ namespace Dune { constructor gets all parameters to operate the prec. \param p The sequential preconditioner. \param c The communication object for syncing overlap and copy - data points. (E.~g. OwnerOverlapCommunication ) + data points. (E.~g. OwnerOverlapCopyCommunication ) */ BlockPreconditioner (T& p, const communication_type& c) : preconditioner(p), communication(c) -- GitLab