16 #ifndef dealii_precondition_selector_h
17 #define dealii_precondition_selector_h
31 template <
class number>
33 template <
class number>
99 template <
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;
198 const typename VectorType::value_type
omega;
205 template <
typename MatrixType,
typename VectorType>
207 const std::string &preconditioning,
208 const typename VectorType::value_type &omega)
209 : preconditioning(preconditioning)
214 template <
typename MatrixType,
typename VectorType>
222 template <
typename MatrixType,
typename VectorType>
230 template <
typename MatrixType,
typename VectorType>
234 Assert(
A !=
nullptr, ExcNoMatrixGivenToUse());
239 template <
typename MatrixType,
typename VectorType>
243 Assert(
A !=
nullptr, ExcNoMatrixGivenToUse());
249 template <
typename MatrixType,
typename VectorType>
252 const VectorType &src)
const
254 if (preconditioning ==
"none")
260 Assert(
A !=
nullptr, ExcNoMatrixGivenToUse());
262 if (preconditioning ==
"jacobi")
264 A->precondition_Jacobi(dst, src, omega);
266 else if (preconditioning ==
"sor")
268 A->precondition_SOR(dst, src, omega);
270 else if (preconditioning ==
"ssor")
272 A->precondition_SSOR(dst, src, omega);
280 template <
typename MatrixType,
typename VectorType>
284 const VectorType &src)
const
286 if (preconditioning ==
"none")
292 Assert(
A !=
nullptr, ExcNoMatrixGivenToUse());
294 if (preconditioning ==
"jacobi")
296 A->precondition_Jacobi(dst, src, omega);
298 else if (preconditioning ==
"sor")
300 A->precondition_TSOR(dst, src, omega);
302 else if (preconditioning ==
"ssor")
304 A->precondition_SSOR(dst, src, omega);
312 template <
typename MatrixType,
typename VectorType>
316 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.)
SmartPointer< const MatrixType, PreconditionSelector< MatrixType, VectorType > > A
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DeclException0(Exception0)
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotImplemented()
static ::ExceptionBase & ExcNoMatrixGivenToUse()
types::global_dof_index size_type