17 #ifndef __deal2__mg_matrix_h
18 #define __deal2__mg_matrix_h
20 #include <deal.II/lac/vector.h>
21 #include <deal.II/lac/pointer_matrix.h>
22 #include <deal.II/lac/sparse_matrix.h>
23 #include <deal.II/multigrid/mg_base.h>
24 #include <deal.II/base/mg_level_object.h>
25 #include <deal.II/base/std_cxx1x/shared_ptr.h>
27 DEAL_II_NAMESPACE_OPEN
42 template <
class VECTOR = Vector<
double> >
58 template <
class MATRIX>
67 template <
class MATRIX>
76 virtual void vmult (
const unsigned int level, VECTOR &dst,
const VECTOR &src)
const;
77 virtual void vmult_add (
const unsigned int level, VECTOR &dst,
const VECTOR &src)
const;
78 virtual void Tvmult (
const unsigned int level, VECTOR &dst,
const VECTOR &src)
const;
79 virtual void Tvmult_add (
const unsigned int level, VECTOR &dst,
const VECTOR &src)
const;
95 template <
class MATRIX = SparseMatrix<
double>,
class VECTOR = Vector<
double> >
102 virtual void vmult (
const unsigned int level,
104 const VECTOR &src)
const;
105 virtual void vmult_add (
const unsigned int level,
107 const VECTOR &src)
const;
108 virtual void Tvmult (
const unsigned int level,
110 const VECTOR &src)
const;
111 virtual void Tvmult_add (
const unsigned int level,
113 const VECTOR &src)
const;
114 std::size_t memory_consumption ()
const;
131 template <
class MATRIX,
typename number>
143 const unsigned int col = 0,
160 const unsigned int col);
166 virtual void vmult (
const unsigned int level,
174 virtual void vmult_add (
const unsigned int level,
183 virtual void Tvmult (
const unsigned int level,
192 virtual void Tvmult_add (
const unsigned int level,
218 template <
class VECTOR>
219 template <
class MATRIX>
230 template <
class VECTOR>
231 template <
class MATRIX>
239 template <
class VECTOR>
245 template <
class VECTOR>
250 return *matrices[level];
254 template <
class VECTOR>
257 const unsigned int level,
259 const VECTOR &src)
const
261 matrices[level]->vmult(dst, src);
265 template <
class VECTOR>
268 const unsigned int level,
270 const VECTOR &src)
const
272 matrices[level]->vmult_add(dst, src);
276 template <
class VECTOR>
280 const VECTOR &src)
const
282 matrices[level]->Tvmult(dst, src);
286 template <
class VECTOR>
290 const VECTOR &src)
const
292 matrices[level]->Tvmult_add(dst, src);
296 template <
class VECTOR>
301 return sizeof(*this) + matrices->memory_consumption();
307 template <
class MATRIX,
class VECTOR>
310 matrix (p, typeid(*this).name())
314 template <
class MATRIX,
class VECTOR>
322 template <
class MATRIX,
class VECTOR>
326 const VECTOR &src)
const
331 m[level].vmult(dst, src);
335 template <
class MATRIX,
class VECTOR>
339 const VECTOR &src)
const
344 m[level].vmult_add(dst, src);
348 template <
class MATRIX,
class VECTOR>
352 const VECTOR &src)
const
357 m[level].Tvmult(dst, src);
361 template <
class MATRIX,
class VECTOR>
365 const VECTOR &src)
const
370 m[level].Tvmult_add(dst, src);
374 template <
class MATRIX,
class VECTOR>
378 return sizeof(*this) + matrix->memory_consumption();
383 template <
class MATRIX,
typename number>
386 const unsigned int col,
389 matrix (p, typeid(*this).name()),
396 template <
class MATRIX,
typename number>
404 template <
class MATRIX,
typename number>
408 const unsigned int bcol)
415 template <
class MATRIX,
typename number>
425 m[level].block(row, col).vmult(dst, src);
429 template <
class MATRIX,
typename number>
439 m[level].block(row, col).vmult_add(dst, src);
443 template <
class MATRIX,
typename number>
453 m[level].block(row, col).Tvmult(dst, src);
457 template <
class MATRIX,
typename number>
467 m[level].block(row, col).Tvmult_add(dst, src);
470 DEAL_II_NAMESPACE_CLOSE
void set_matrix(MGLevelObject< MATRIX > *M)
virtual void Tvmult(const unsigned int level, Vector< number > &dst, const Vector< number > &src) const
virtual void Tvmult_add(const unsigned int level, VECTOR &dst, const VECTOR &src) const
virtual void vmult(const unsigned int level, Vector< number > &dst, const Vector< number > &src) const
virtual void Tvmult_add(const unsigned int level, VECTOR &dst, const VECTOR &src) const
virtual void Tvmult(const unsigned int level, VECTOR &dst, const VECTOR &src) const
MGMatrixSelect(const unsigned int row=0, const unsigned int col=0, MGLevelObject< MATRIX > *matrix=0)
std::size_t memory_consumption() const
virtual void vmult(const unsigned int level, VECTOR &dst, const VECTOR &src) const
void select_block(const unsigned int row, const unsigned int col)
virtual void vmult(const unsigned int level, VECTOR &dst, const VECTOR &src) const
#define Assert(cond, exc)
virtual void vmult_add(const unsigned int level, VECTOR &dst, const VECTOR &src) const
unsigned int max_level() const
SmartPointer< MGLevelObject< MATRIX >, MGMatrixSelect< MATRIX, number > > matrix
virtual void vmult_add(const unsigned int level, Vector< number > &dst, const Vector< number > &src) const
BlockCompressedSparsityPattern CompressedBlockSparsityPattern DEAL_II_DEPRECATED
void initialize(const MGLevelObject< MATRIX > &M)
unsigned int min_level() const
::ExceptionBase & ExcNotInitialized()
virtual void Tvmult_add(const unsigned int level, Vector< number > &dst, const Vector< number > &src) const
virtual void Tvmult(const unsigned int level, VECTOR &dst, const VECTOR &src) const
virtual void vmult_add(const unsigned int level, VECTOR &dst, const VECTOR &src) const
const PointerMatrixBase< VECTOR > & operator[](unsigned int level) const