From c0773362f7af66c1a26e54faa479f76bcd493be7 Mon Sep 17 00:00:00 2001 From: Peter Munch Date: Sun, 11 Jul 2021 08:01:07 +0200 Subject: [PATCH] Enable different VectorTypes in MGCoarseGridIterativeSolver --- include/deal.II/multigrid/mg_coarse.h | 56 ++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/include/deal.II/multigrid/mg_coarse.h b/include/deal.II/multigrid/mg_coarse.h index 8095f24bc8..735fd91519 100644 --- a/include/deal.II/multigrid/mg_coarse.h +++ b/include/deal.II/multigrid/mg_coarse.h @@ -356,6 +356,58 @@ MGCoarseGridIterativeSolver::value, + VectorType>::type * = nullptr> + void + solve(SolverType & solver, + const MatrixType & matrix, + const PreconditionerType &preconditioner, + VectorType & dst, + const VectorType & src) + { + solver.solve(matrix, dst, src, preconditioner); + } + + template < + class VectorType, + class SolverType, + class MatrixType, + class PreconditionerType, + typename std::enable_if< + !std::is_same::value, + VectorType>::type * = nullptr> + void + solve(SolverType & solver, + const MatrixType & matrix, + const PreconditionerType &preconditioner, + VectorType & dst, + const VectorType & src) + { + typename SolverType::vector_type src_; + typename SolverType::vector_type dst_; + + src_ = src; + dst_ = dst; + + solver.solve(matrix, dst_, src_, preconditioner); + + dst = dst_; + } + } // namespace MGCoarseGridIterativeSolver +} // namespace internal + + + template solve(*matrix, dst, src, *preconditioner); + + internal::MGCoarseGridIterativeSolver::solve( + *solver, *matrix, *preconditioner, dst, src); } -- 2.39.5