|
Reference documentation for deal.II version 9.2.0
|
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\)
\(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\)
\(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\)
\(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Go to the documentation of this file.
16 #ifndef dealii_precondition_block_h
17 #define dealii_precondition_block_h
82 template <
typename MatrixType,
83 typename inverse_type =
typename MatrixType::value_type>
91 using number =
typename MatrixType::value_type;
274 template <
typename number2>
277 const Vector<number2> &prev,
278 const Vector<number2> &src,
279 const bool transpose_diagonal)
const;
292 template <
typename number2>
295 const Vector<number2> &prev,
296 const Vector<number2> &src,
297 const bool transpose_diagonal)
const;
325 <<
"The blocksize " << arg1 <<
" and the size of the matrix "
326 << arg2 <<
" do not match.");
380 template <
typename MatrixType,
381 typename inverse_type =
typename MatrixType::value_type>
390 using number =
typename MatrixType::value_type;
538 template <
typename number2>
540 vmult(Vector<number2> &,
const Vector<number2> &)
const;
545 template <
typename number2>
547 Tvmult(Vector<number2> &,
const Vector<number2> &)
const;
555 template <
typename number2>
557 vmult_add(Vector<number2> &,
const Vector<number2> &)
const;
562 template <
typename number2>
564 Tvmult_add(Vector<number2> &,
const Vector<number2> &)
const;
569 template <
typename number2>
571 step(Vector<number2> &dst,
const Vector<number2> &rhs)
const;
576 template <
typename number2>
578 Tstep(Vector<number2> &dst,
const Vector<number2> &rhs)
const;
612 template <
typename number2>
614 do_vmult(Vector<number2> &,
const Vector<number2> &,
bool adding)
const;
657 template <
typename MatrixType,
658 typename inverse_type =
typename MatrixType::value_type>
677 using number =
typename MatrixType::value_type;
703 template <
typename number2>
705 vmult(Vector<number2> &,
const Vector<number2> &)
const;
717 template <
typename number2>
719 vmult_add(Vector<number2> &,
const Vector<number2> &)
const;
729 template <
typename number2>
731 Tvmult(Vector<number2> &,
const Vector<number2> &)
const;
743 template <
typename number2>
745 Tvmult_add(Vector<number2> &,
const Vector<number2> &)
const;
750 template <
typename number2>
752 step(Vector<number2> &dst,
const Vector<number2> &rhs)
const;
757 template <
typename number2>
759 Tstep(Vector<number2> &dst,
const Vector<number2> &rhs)
const;
776 template <
typename number2>
779 const Vector<number2> &,
780 const bool transpose_diagonal,
781 const bool adding)
const;
792 template <
typename number2>
795 const Vector<number2> &,
796 const bool transpose_diagonal,
797 const bool adding)
const;
822 template <
typename MatrixType,
823 typename inverse_type =
typename MatrixType::value_type>
837 using number =
typename MatrixType::value_type;
873 template <
typename number2>
875 vmult(Vector<number2> &,
const Vector<number2> &)
const;
880 template <
typename number2>
882 Tvmult(Vector<number2> &,
const Vector<number2> &)
const;
887 template <
typename number2>
889 step(Vector<number2> &dst,
const Vector<number2> &rhs)
const;
894 template <
typename number2>
896 Tstep(Vector<number2> &dst,
const Vector<number2> &rhs)
const;
904 template <
typename MatrixType,
typename inverse_type>
914 template <
typename MatrixType,
typename inverse_type>
919 const unsigned int nb = i / bs;
926 if (jb + nb * bs != j)
936 template <
typename MatrixType,
typename inverse_type>
944 , b_iterator(&
matrix->inverse(0), 0, 0)
945 , b_end(&
matrix->inverse(0), 0, 0)
949 if (a_block ==
matrix->size())
954 b_iterator =
matrix->inverse(a_block).begin(r);
955 b_end =
matrix->inverse(a_block).end();
961 template <
typename MatrixType,
typename inverse_type>
964 inverse_type>::const_iterator::Accessor::row()
const
968 return bs * a_block + b_iterator->row();
972 template <
typename MatrixType,
typename inverse_type>
975 inverse_type>::const_iterator::Accessor::column()
const
979 return bs * a_block + b_iterator->column();
983 template <
typename MatrixType,
typename inverse_type>
990 return b_iterator->value();
994 template <
typename MatrixType,
typename inverse_type>
1003 template <
typename MatrixType,
typename inverse_type>
1027 template <
typename MatrixType,
typename inverse_type>
1037 template <
typename MatrixType,
typename inverse_type>
1047 template <
typename MatrixType,
typename inverse_type>
1052 if (accessor.a_block == accessor.matrix->size() &&
1053 accessor.a_block == other.accessor.a_block)
1056 if (accessor.a_block != other.accessor.a_block)
1059 return (accessor.row() == other.accessor.row() &&
1060 accessor.column() == other.accessor.column());
1064 template <
typename MatrixType,
typename inverse_type>
1069 return !(*
this == other);
1073 template <
typename MatrixType,
typename inverse_type>
1078 return (accessor.row() < other.accessor.row() ||
1079 (accessor.row() == other.accessor.row() &&
1080 accessor.column() < other.accessor.column()));
1084 template <
typename MatrixType,
typename inverse_type>
1093 template <
typename MatrixType,
typename inverse_type>
1102 template <
typename MatrixType,
typename inverse_type>
1114 template <
typename MatrixType,
typename inverse_type>
void Tvmult(Vector< number2 > &, const Vector< number2 > &) const
friend class const_iterator
PreconditionBlock(bool store_diagonals=false)
typename MatrixType::value_type value_type
FullMatrix< inverse_type >::const_iterator b_iterator
typename MatrixType::value_type number
void vmult_add(Vector< number2 > &, const Vector< number2 > &) const
AdditionalData(const size_type block_size, const double relaxation=1., const bool invert_diagonal=true, const bool same_diagonal=false)
const Accessor & operator*() const
void vmult_add(Vector< number2 > &, const Vector< number2 > &) const
MatrixTableIterators::Accessor< TransposeTable< T >, Constness, MatrixTableIterators::Storage::column_major > Accessor
void backward(Vector< number2 > &, const Vector< number2 > &, const bool transpose_diagonal, const bool adding) const
void Tvmult_add(Vector< number2 > &, const Vector< number2 > &) const
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInverseMatricesAlreadyExist()
void step(Vector< number2 > &dst, const Vector< number2 > &rhs) const
static ::ExceptionBase & ExcWrongBlockSize(int arg1, int arg2)
std::vector< size_type > permutation
void initialize(const MatrixType &A, const AdditionalData parameters)
const_iterator(const PreconditionBlockJacobi< MatrixType, inverse_type > *matrix, const size_type row)
PreconditionBlockBase< inverse_type >::Inversion inversion
unsigned int size() const
typename MatrixType::value_type number
void vmult(Vector< number2 > &, const Vector< number2 > &) const
bool operator!=(const const_iterator &) const
void forward(Vector< number2 > &, const Vector< number2 > &, const bool transpose_diagonal, const bool adding) const
SmartPointer< const MatrixType, PreconditionBlock< MatrixType, inverse_type > > A
void vmult(Vector< number2 > &, const Vector< number2 > &) const
void backward_step(Vector< number2 > &dst, const Vector< number2 > &prev, const Vector< number2 > &src, const bool transpose_diagonal) const
unsigned int global_dof_index
void Tstep(Vector< number2 > &dst, const Vector< number2 > &rhs) const
#define DEAL_II_NAMESPACE_OPEN
@ matrix
Contents is actually a matrix.
inverse_type value() const
bool store_diagonals() const
void Tstep(Vector< number2 > &dst, const Vector< number2 > &rhs) const
void Tvmult_add(Vector< number2 > &, const Vector< number2 > &) const
types::global_dof_index size_type
types::global_dof_index size_type
const_iterator & operator++()
types::global_dof_index size_type
void forward_step(Vector< number2 > &dst, const Vector< number2 > &prev, const Vector< number2 > &src, const bool transpose_diagonal) const
types::global_dof_index size_type
size_type block_size() const
#define Assert(cond, exc)
void set_permutation(const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation)
const Accessor * operator->() const
~PreconditionBlock() override=default
value_type el(size_type i, size_type j) const
#define DeclException0(Exception0)
void vmult(Vector< number2 > &, const Vector< number2 > &) const
void step(Vector< number2 > &dst, const Vector< number2 > &rhs) const
std::size_t memory_consumption() const
std::vector< size_type > inverse_permutation
void Tvmult(Vector< number2 > &, const Vector< number2 > &) const
Accessor(const PreconditionBlockJacobi< MatrixType, inverse_type > *matrix, const size_type row)
bool operator==(const const_iterator &) const
void Tvmult(Vector< number2 > &, const Vector< number2 > &) const
void step(Vector< number2 > &dst, const Vector< number2 > &rhs) const
const PreconditionBlockJacobi< MatrixType, inverse_type > * matrix
FullMatrix< inverse_type >::const_iterator b_end
#define DEAL_II_NAMESPACE_CLOSE
const_iterator begin() const
bool operator<(const const_iterator &) const
typename MatrixType::value_type number
#define DeclException2(Exception2, type1, type2, outsequence)
void invert_permuted_diagblocks()
void do_vmult(Vector< number2 > &, const Vector< number2 > &, bool adding) const
static ::ExceptionBase & ExcIteratorPastEnd()
const_iterator end() const
void Tstep(Vector< number2 > &dst, const Vector< number2 > &rhs) const