16 #ifndef dealii__matrix_lib_h 17 #define dealii__matrix_lib_h 19 #include <deal.II/base/subscriptor.h> 20 #include <deal.II/lac/vector_memory.h> 21 #include <deal.II/lac/pointer_matrix.h> 22 #include <deal.II/lac/solver_richardson.h> 24 DEAL_II_NAMESPACE_OPEN
26 template<
typename number>
class Vector;
54 template<
typename VectorType>
74 template <
typename MatrixType1,
typename MatrixType2>
76 const MatrixType2 &
m2,
87 template <
typename MatrixType1,
typename MatrixType2>
88 void reinit (
const MatrixType1 &m1,
const MatrixType2 &m2);
93 template <
typename MatrixType1,
typename MatrixType2>
95 const MatrixType2 &m2,
104 virtual void vmult (VectorType &w,
105 const VectorType &v)
const;
111 virtual void Tvmult (VectorType &w,
112 const VectorType &v)
const;
118 const VectorType &v)
const;
125 const VectorType &v)
const;
158 template<
typename VectorType>
169 template <
typename MatrixType>
170 ScaledMatrix (
const MatrixType &M,
const double factor);
179 template <
typename MatrixType>
180 void initialize (
const MatrixType &M,
const double factor);
190 void vmult (VectorType &w,
const VectorType &v)
const;
195 void Tvmult (VectorType &w,
const VectorType &v)
const;
226 template<
typename number,
typename vector_number>
245 const MatrixType &
m2,
255 const MatrixType &
m2,
264 virtual void vmult (VectorType &w,
265 const VectorType &v)
const;
271 virtual void Tvmult (VectorType &w,
272 const VectorType &v)
const;
278 const VectorType &v)
const;
285 const VectorType &v)
const;
337 template <
typename number>
343 template <
typename number>
349 template <
typename number>
356 template <
typename number>
364 template <
typename number>
372 template <
typename number>
380 template <
typename VectorType>
381 void Tvmult(VectorType &,
const VectorType &)
const;
386 template <
typename VectorType>
387 void Tvmult_add(VectorType &,
const VectorType &)
const;
433 template<
typename VectorType>
452 template <
typename MatrixType,
typename PreconditionerType>
454 const PreconditionerType &);
463 void vmult (VectorType &,
const VectorType &)
const;
468 void vmult_add (VectorType &,
const VectorType &)
const;
473 void Tvmult (VectorType &,
const VectorType &)
const;
478 void Tvmult_add (VectorType &,
const VectorType &)
const;
509 template<
typename VectorType>
518 template<
typename VectorType>
519 template<
typename MatrixType>
523 m(new_pointer_matrix_base(mat, VectorType())),
529 template<
typename VectorType>
530 template<
typename MatrixType>
536 m = new_pointer_matrix_base(mat, VectorType());
542 template<
typename VectorType>
553 template<
typename VectorType>
561 template<
typename VectorType>
571 template<
typename VectorType>
583 template<
typename VectorType>
585 : m1(0), m2(0), mem(0)
589 template<
typename VectorType>
595 template<
typename VectorType>
596 template<
typename MatrixType1,
typename MatrixType2>
598 const MatrixType2 &mat2,
607 template<
typename VectorType>
608 template<
typename MatrixType1,
typename MatrixType2>
619 template<
typename VectorType>
620 template<
typename MatrixType1,
typename MatrixType2>
623 const MatrixType2 &mat2,
634 template<
typename VectorType>
642 template<
typename VectorType>
653 template<
typename VectorType>
658 Assert (
m1 != 0, ExcNotInitialized());
659 Assert (
m2 != 0, ExcNotInitialized());
661 VectorType *v =
mem->alloc();
669 template<
typename VectorType>
674 Assert (
m1 != 0, ExcNotInitialized());
675 Assert (
m2 != 0, ExcNotInitialized());
677 VectorType *v =
mem->alloc();
680 m1->vmult_add (dst, *v);
685 template<
typename VectorType>
690 Assert (
m1 != 0, ExcNotInitialized());
691 Assert (
m2 != 0, ExcNotInitialized());
693 VectorType *v =
mem->alloc();
695 m1->Tvmult (*v, src);
696 m2->Tvmult (dst, *v);
701 template<
typename VectorType>
706 Assert (
m1 != 0, ExcNotInitialized());
707 Assert (
m2 != 0, ExcNotInitialized());
709 VectorType *v =
mem->alloc();
711 m1->Tvmult (*v, src);
712 m2->Tvmult_add (dst, *v);
720 template <
typename VectorType>
724 Assert(
false, ExcNotImplemented());
728 template <
typename VectorType>
732 Assert(
false, ExcNotImplemented());
737 template <
typename VectorType>
738 template <
typename MatrixType,
typename PreconditionerType>
741 const PreconditionerType &p)
746 if (precondition != 0)
752 DEAL_II_NAMESPACE_CLOSE
SolverRichardson< VectorType > solver
void Tvmult_add(VectorType &, const VectorType &) const
const types::global_dof_index invalid_size_type
PointerMatrixBase< VectorType > * m
virtual void Tvmult(VectorType &w, const VectorType &v) const
void initialize(const MatrixType &, const PreconditionerType &)
void initialize(const MatrixType1 &m1, const MatrixType2 &m2, VectorMemory< VectorType > &mem)
void vmult(VectorType &w, const VectorType &v) const
PointerMatrixBase< VectorType > * matrix
PointerMatrixBase< VectorType > * m1
SmartPointer< VectorMemory< VectorType >, ProductSparseMatrix< number, vector_number > > mem
void initialize(const MatrixType &M, const double factor)
virtual void Tvmult_add(VectorType &w, const VectorType &v) const
virtual void vmult(VectorType &w, const VectorType &v) const
unsigned int global_dof_index
Vector< vector_number > VectorType
SmartPointer< const MatrixType, ProductSparseMatrix< number, vector_number > > m1
#define Assert(cond, exc)
PointerMatrixBase< VectorType > * m2
SparseMatrix< number > MatrixType
VectorMemory< VectorType > & mem
SmartPointer< const MatrixType, ProductSparseMatrix< number, vector_number > > m2
types::global_dof_index size_type
void reinit(const MatrixType1 &m1, const MatrixType2 &m2)
PointerMatrixBase< VectorType > * precondition
void Tvmult(VectorType &, const VectorType &) const
virtual void vmult_add(VectorType &w, const VectorType &v) const
void Tvmult(VectorType &w, const VectorType &v) const
const size_type component
SmartPointer< VectorMemory< VectorType >, ProductMatrix< VectorType > > mem