include/deal.II/multigrid/mg_base.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: mg_base.h 25373 2012-04-03 00:15:05Z kanschat @f$
00003 //
00004 //    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
00010 //
00011 //---------------------------------------------------------------------------
00012 #ifndef __deal2__mg_base_h
00013 #define __deal2__mg_base_h
00014 
00015 /*
00016  * This file contains MGLevelObject and some abstract base classes
00017  * used by Multigrid.
00018  */
00019 
00020 #include <deal.II/base/config.h>
00021 #include <deal.II/base/subscriptor.h>
00022 #include <deal.II/base/smartpointer.h>
00023 #include <deal.II/lac/vector.h>
00024 
00025 
00026 DEAL_II_NAMESPACE_OPEN
00027 
00028 
00029 template <int, int> class MGDoFHandler;
00030 template <typename> class MGLevelObject;
00031 
00032 
00033 
00036 
00037 
00048 template <class VECTOR>
00049 class MGMatrixBase : public Subscriptor
00050 {
00051   public:
00052                                    /*
00053                                     * Virtual destructor.
00054                                     */
00055   virtual ~MGMatrixBase();
00056 
00061   virtual void vmult (const unsigned int level,
00062                       VECTOR& dst,
00063                       const VECTOR& src) const = 0;
00064 
00069   virtual void vmult_add (const unsigned int level,
00070                           VECTOR& dst,
00071                           const VECTOR& src) const = 0;
00072 
00078   virtual void Tvmult (const unsigned int level,
00079                        VECTOR& dst,
00080                        const VECTOR& src) const = 0;
00081 
00087   virtual void Tvmult_add (const unsigned int level,
00088                            VECTOR& dst,
00089                            const VECTOR& src) const = 0;
00090 };
00091 
00092 
00100 template <class VECTOR>
00101 class MGCoarseGridBase : public Subscriptor
00102 {
00103   public:
00107     virtual ~MGCoarseGridBase ();
00108 
00112     virtual void operator() (const unsigned int   level,
00113                              VECTOR       &dst,
00114                              const VECTOR &src) const = 0;
00115 };
00116 
00117 
00165  template <class VECTOR>
00166  class MGTransferBase : public Subscriptor
00167  {
00168    public:
00173      virtual ~MGTransferBase();
00174 
00191      virtual void prolongate (const unsigned int to_level,
00192                              VECTOR&            dst,
00193                              const VECTOR&      src) const = 0;
00194 
00222      virtual void restrict_and_add (const unsigned int from_level,
00223                                    VECTOR&            dst,
00224                                    const VECTOR&      src) const = 0;
00225  };
00226 
00227 
00228 
00235 template <class VECTOR>
00236 class MGSmootherBase : public Subscriptor
00237 {
00238   public:
00242     virtual ~MGSmootherBase();
00246     virtual void clear() = 0;
00247 
00253   virtual void smooth (const unsigned int level,
00254                        VECTOR&            u,
00255                        const VECTOR&      rhs) const = 0;
00256 };
00257 
00260 DEAL_II_NAMESPACE_CLOSE
00261 
00262 #endif
00263 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Tue May 22 2012 12:06:16 by doxygen 1.7.3