15#ifndef dealii_precondition_block_base_h
16#define dealii_precondition_block_base_h
36template <
typename number>
38template <
typename number>
57template <
typename number>
148 template <
typename number2>
157 template <
typename number2>
302template <
typename number>
313template <
typename number>
331template <
typename number>
397 std::vector<LAPACKFullMatrix<number>> tmp(
409template <
typename number>
416template <
typename number>
417template <
typename number2>
445template <
typename number>
446template <
typename number2>
474template <
typename number>
486template <
typename number>
498template <
typename number>
510template <
typename number>
524template <
typename number>
538template <
typename number>
552template <
typename number>
566template <
typename number>
580template <
typename number>
588template <
typename number>
596template <
typename number>
604template <
typename number>
612template <
typename number>
616 deallog <<
"PreconditionBlockBase: " <<
size() <<
" blocks; ";
620 unsigned int kermin = 100000000, kermax = 0;
621 double sigmin = 1.e300, sigmax = -1.e300;
622 double kappamin = 1.e300, kappamax = -1.e300;
628 while (k <= matrix.n_cols() &&
629 matrix.singular_value(matrix.n_cols() - k) == 0)
631 const double s0 = matrix.singular_value(0);
632 const double sm = matrix.singular_value(matrix.n_cols() - k);
633 const double co = sm / s0;
648 deallog <<
"dim ker [" << kermin <<
':' << kermax <<
"] sigma [" << sigmin
649 <<
':' << sigmax <<
"] kappa [" << kappamin <<
':' << kappamax
665template <
typename number>
669 std::size_t mem =
sizeof(*this);
bool same_diagonal() const
std::vector< FullMatrix< number > > var_diagonal
unsigned int n_diagonal_blocks
std::size_t memory_consumption() const
std::vector< LAPACKFullMatrix< number > > var_inverse_svd
void inverses_computed(bool are_they)
void reinit(unsigned int nblocks, size_type blocksize, bool compress, Inversion method=gauss_jordan)
void inverse_vmult(size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const
void log_statistics() const
types::global_dof_index size_type
PreconditionBlockBase(bool store_diagonals=false, Inversion method=gauss_jordan)
Householder< number > & inverse_householder(size_type i)
std::vector< FullMatrix< number > > var_inverse_full
bool inverses_ready() const
unsigned int size() const
const FullMatrix< number > & diagonal(size_type i) const
std::vector< Householder< number > > var_inverse_householder
FullMatrix< number > & inverse(size_type i)
FullMatrix< number > & diagonal(size_type i)
bool store_diagonals() const
const Householder< number > & inverse_householder(size_type i) const
const FullMatrix< number > & inverse(size_type i) const
void inverse_Tvmult(size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const
LAPACKFullMatrix< number > & inverse_svd(size_type i)
const LAPACKFullMatrix< number > & inverse_svd(size_type i) const
~PreconditionBlockBase()=default
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DeclException0(Exception0)
static ::ExceptionBase & ExcDiagonalsNotStored()
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInverseNotAvailable()
#define DEAL_II_NOT_IMPLEMENTED()
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
unsigned int global_dof_index