00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__mg_base_h
00013 #define __deal2__mg_base_h
00014
00015
00016
00017
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
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