17 #ifndef __deal2__mg_coarse_h
18 #define __deal2__mg_coarse_h
21 #include <deal.II/lac/full_matrix.h>
22 #include <deal.II/lac/matrix_lib.h>
23 #include <deal.II/lac/householder.h>
24 #include <deal.II/multigrid/mg_base.h>
42 template<
class SOLVER,
class VECTOR = Vector<
double> >
57 template<
class MATRIX,
class PRECOND>
70 template<
class MATRIX,
class PRECOND>
89 const VECTOR &src)
const;
97 template <
class MATRIX>
128 template<
typename number =
double,
class VECTOR = Vector<number> >
145 const VECTOR &src)
const;
162 template<
typename number =
double,
class VECTOR = Vector<number> >
181 const VECTOR &src)
const;
202 template<
class SOLVER,
class VECTOR>
206 solver(0, typeid(*this).name()),
212 template<
class SOLVER,
class VECTOR>
213 template<
class MATRIX,
class PRECOND>
219 solver(&s, typeid(*this).name())
226 template<
class SOLVER,
class VECTOR>
234 template<
class SOLVER,
class VECTOR>
235 template<
class MATRIX,
class PRECOND>
252 template<
class SOLVER,
class VECTOR>
267 template<
class SOLVER,
class VECTOR>
272 const VECTOR &src)
const
277 solver->solve(*matrix, dst, src, *precondition);
281 template<
class SOLVER,
class VECTOR>
282 template<
class MATRIX>
294 template<
typename number,
class VECTOR>
298 if (A != 0) householder.initialize(*A);
303 template<
typename number,
class VECTOR>
308 householder.initialize(A);
313 template<
typename number,
class VECTOR>
318 const VECTOR &src)
const
320 householder.least_squares(dst, src);
325 template<
typename number,
class VECTOR>
332 template<
typename number,
class VECTOR>
338 matrix.reinit(A.n_rows(), A.n_cols());
340 matrix.compute_inverse_svd(threshold);
344 template<
typename number,
class VECTOR>
349 const VECTOR &src)
const
351 matrix.vmult(dst, src);
355 template<
typename number,
class VECTOR>
359 const unsigned int n = std::min(matrix.n_rows(), matrix.n_cols());
361 for (
unsigned int i=0; i<n; ++i)
362 deallog <<
' ' << matrix.singular_value(i);
363 deallog << std::endl;
369 DEAL_II_NAMESPACE_CLOSE
MGCoarseGridHouseholder(const FullMatrix< number > *A=0)
PointerMatrixBase< VECTOR > * precondition
void initialize(const FullMatrix< number > &A)
void initialize(const FullMatrix< number > &A, const double threshold=0)
PointerMatrixBase< VECTOR > * matrix
void initialize(SOLVER &, const MATRIX &, const PRECOND &)
SmartPointer< SOLVER, MGCoarseGridLACIteration< SOLVER, VECTOR > > solver
#define Assert(cond, exc)
MGCoarseGridLACIteration()
LAPACKFullMatrix< number > matrix
~MGCoarseGridLACIteration()
void operator()(const unsigned int level, VECTOR &dst, const VECTOR &src) const
Householder< number > householder
void operator()(const unsigned int level, VECTOR &dst, const VECTOR &src) const
void set_matrix(const MATRIX &)
::ExceptionBase & ExcNotInitialized()
void operator()(const unsigned int level, VECTOR &dst, const VECTOR &src) const