13#ifndef dealii_precondition_block_base_h
14#define dealii_precondition_block_base_h
34template <
typename number>
36template <
typename number>
55template <
typename number>
146 template <
typename number2>
155 template <
typename number2>
300template <
typename number>
312template <
typename number>
330template <
typename number>
396 std::vector<LAPACKFullMatrix<number>> tmp(
408template <
typename number>
417template <
typename number>
418template <
typename number2>
446template <
typename number>
447template <
typename number2>
475template <
typename number>
487template <
typename number>
499template <
typename number>
511template <
typename number>
525template <
typename number>
539template <
typename number>
553template <
typename number>
567template <
typename number>
581template <
typename number>
589template <
typename number>
597template <
typename number>
605template <
typename number>
613template <
typename number>
617 deallog <<
"PreconditionBlockBase: " <<
size() <<
" blocks; ";
621 unsigned int kermin = 100000000, kermax = 0;
622 double sigmin = 1.e300, sigmax = -1.e300;
623 double kappamin = 1.e300, kappamax = -1.e300;
629 while (k <= matrix.n_cols() &&
630 matrix.singular_value(matrix.n_cols() - k) == 0)
632 const double s0 = matrix.singular_value(0);
633 const double sm = matrix.singular_value(matrix.n_cols() - k);
634 const double co = sm / s0;
649 deallog <<
"dim ker [" << kermin <<
':' << kermax <<
"] sigma [" << sigmin
650 <<
':' << sigmax <<
"] kappa [" << kappamin <<
':' << kappamax
666template <
typename number>
670 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 log_statistics() const
FullMatrix< number > & inverse(const size_type i)
types::global_dof_index size_type
FullMatrix< number > & diagonal(const size_type i)
LAPACKFullMatrix< number > & inverse_svd(const size_type i)
std::vector< FullMatrix< number > > var_inverse_full
bool inverses_ready() const
unsigned int size() const
std::vector< Householder< number > > var_inverse_householder
PreconditionBlockBase(const bool store_diagonals=false, const Inversion method=gauss_jordan)
bool store_diagonals() const
void reinit(const unsigned int nblocks, const size_type blocksize, const bool compress, const Inversion method=gauss_jordan)
void inverse_vmult(const size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const
void inverse_Tvmult(const size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const
void inverses_computed(const bool are_they)
~PreconditionBlockBase()=default
Householder< number > & inverse_householder(const size_type i)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_NOT_IMPLEMENTED()
#define DeclException0(Exception0)
static ::ExceptionBase & ExcDiagonalsNotStored()
#define Assert(cond, exc)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInverseNotAvailable()
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
unsigned int global_dof_index