15#ifndef dealii_precondition_selector_h
16#define dealii_precondition_selector_h
31template <
class number>
33template <
class number>
99template <
typename MatrixType = SparseMatrix<
double>,
100 typename VectorType = ::Vector<
double>>
114 const typename VectorType::value_type &
omega = 1.);
147 vmult(VectorType &dst,
const VectorType &src)
const;
154 Tvmult(VectorType &dst,
const VectorType &src)
const;
199 const typename VectorType::value_type
omega;
206template <
typename MatrixType,
typename VectorType>
208 const std::string &preconditioning,
209 const typename VectorType::value_type &omega)
210 : preconditioning(preconditioning)
215template <
typename MatrixType,
typename VectorType>
223template <
typename MatrixType,
typename VectorType>
231template <
typename MatrixType,
typename VectorType>
235 Assert(A !=
nullptr, ExcNoMatrixGivenToUse());
240template <
typename MatrixType,
typename VectorType>
244 Assert(A !=
nullptr, ExcNoMatrixGivenToUse());
250template <
typename MatrixType,
typename VectorType>
253 const VectorType &src)
const
255 if (preconditioning ==
"none")
261 Assert(A !=
nullptr, ExcNoMatrixGivenToUse());
263 if (preconditioning ==
"jacobi")
265 A->precondition_Jacobi(dst, src, omega);
267 else if (preconditioning ==
"sor")
269 A->precondition_SOR(dst, src, omega);
271 else if (preconditioning ==
"ssor")
273 A->precondition_SSOR(dst, src, omega);
281template <
typename MatrixType,
typename VectorType>
285 const VectorType &src)
const
287 if (preconditioning ==
"none")
293 Assert(A !=
nullptr, ExcNoMatrixGivenToUse());
295 if (preconditioning ==
"jacobi")
297 A->precondition_Jacobi(dst, src, omega);
299 else if (preconditioning ==
"sor")
301 A->precondition_TSOR(dst, src, omega);
303 else if (preconditioning ==
"ssor")
305 A->precondition_SSOR(dst, src, omega);
313template <
typename MatrixType,
typename VectorType>
317 return "none|jacobi|sor|ssor";
virtual void vmult(VectorType &dst, const VectorType &src) const
virtual void Tvmult(VectorType &dst, const VectorType &src) const
typename MatrixType::size_type size_type
const VectorType::value_type omega
static std::string get_precondition_names()
void use_matrix(const MatrixType &M)
std::string preconditioning
virtual ~PreconditionSelector() override
PreconditionSelector(const std::string &preconditioning, const typename VectorType::value_type &omega=1.)
ObserverPointer< const MatrixType, PreconditionSelector< MatrixType, VectorType > > A
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_NOT_IMPLEMENTED()
static ::ExceptionBase & ExcNoMatrixGivenToUse()
#define DeclException0(Exception0)
#define Assert(cond, exc)