16 #ifndef dealii_precondition_block_base_h 17 #define dealii_precondition_block_base_h 20 #include <deal.II/base/config.h> 22 #include <deal.II/base/exceptions.h> 23 #include <deal.II/base/memory_consumption.h> 24 #include <deal.II/base/smartpointer.h> 25 #include <deal.II/base/subscriptor.h> 27 #include <deal.II/lac/householder.h> 28 #include <deal.II/lac/lapack_full_matrix.h> 32 DEAL_II_NAMESPACE_OPEN
34 template <
typename number>
36 template <
typename number>
57 template <
typename number>
110 reinit(
unsigned int nblocks,
148 template <
typename number2>
151 Vector<number2> & dst,
152 const Vector<number2> &src)
const;
157 template <
typename number2>
160 Vector<number2> & dst,
161 const Vector<number2> &src)
const;
302 template <
typename number>
313 template <
typename number>
331 template <
typename number>
397 std::vector<LAPACKFullMatrix<number>> tmp(
409 template <
typename number>
416 template <
typename number>
417 template <
typename number2>
420 Vector<number2> & dst,
421 const Vector<number2> &src)
const 445 template <
typename number>
446 template <
typename number2>
449 Vector<number2> & dst,
450 const Vector<number2> &src)
const 474 template <
typename number>
487 template <
typename number>
499 template <
typename number>
511 template <
typename number>
525 template <
typename number>
540 template <
typename number>
554 template <
typename number>
568 template <
typename number>
582 template <
typename number>
590 template <
typename number>
598 template <
typename number>
606 template <
typename number>
614 template <
typename number>
618 deallog <<
"PreconditionBlockBase: " <<
size() <<
" blocks; ";
622 unsigned int kermin = 100000000, kermax = 0;
623 double sigmin = 1.e300, sigmax = -1.e300;
624 double kappamin = 1.e300, kappamax = -1.e300;
630 while (k <= matrix.
n_cols() &&
635 const double co = sm / s0;
650 deallog <<
"dim ker [" << kermin <<
':' << kermax <<
"] sigma [" << sigmin
651 <<
':' << sigmax <<
"] kappa [" << kappamin <<
':' << kappamax
665 template <
typename number>
669 std::size_t mem =
sizeof(*this);
678 DEAL_II_NAMESPACE_CLOSE
void inverse_Tvmult(size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const
number singular_value(const size_type i) const
types::global_dof_index size_type
bool store_diagonals() const
#define AssertIndexRange(index, range)
unsigned int size() const
~PreconditionBlockBase()=default
static::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
unsigned long long int global_dof_index
void inverses_computed(bool are_they)
std::vector< FullMatrix< number > > var_diagonal
FullMatrix< number > & inverse(size_type i)
PreconditionBlockBase(bool store_diagonals=false, Inversion method=gauss_jordan)
#define Assert(cond, exc)
#define DeclException0(Exception0)
bool same_diagonal() const
std::vector< FullMatrix< number > > var_inverse_full
void reinit(unsigned int nblocks, size_type blocksize, bool compress, Inversion method=gauss_jordan)
void log_statistics() const
unsigned int n_diagonal_blocks
std::size_t memory_consumption() const
static::ExceptionBase & ExcDiagonalsNotStored()
std::vector< LAPACKFullMatrix< number > > var_inverse_svd
LAPACKFullMatrix< number > & inverse_svd(size_type i)
Householder< number > & inverse_householder(size_type i)
static::ExceptionBase & ExcNotImplemented()
std::vector< Householder< number > > var_inverse_householder
bool inverses_ready() const
FullMatrix< number > & diagonal(size_type i)
static::ExceptionBase & ExcInverseNotAvailable()
void inverse_vmult(size_type i, Vector< number2 > &dst, const Vector< number2 > &src) const
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)