15#ifndef dealii_solver_selector_h
16#define dealii_solver_selector_h
89template <
typename VectorType = Vector<
double>>
118 template <
class Matrix,
class Preconditioner>
120 solve(
const Matrix &A,
123 const Preconditioner &precond)
const;
130 select(
const std::string &name);
194 <<
"Solver " << arg1 <<
" does not exist. Use one of "
248template <
typename VectorType>
252 , control(&solver_control)
257template <
typename VectorType>
266template <
typename VectorType>
267template <
class Matrix,
class Preconditioner>
272 const Preconditioner &precond)
const
274 if (solver_name ==
"richardson")
277 solver.
solve(A, x, b, precond);
279 else if (solver_name ==
"cg")
282 solver.
solve(A, x, b, precond);
284 else if (solver_name ==
"minres")
287 solver.
solve(A, x, b, precond);
289 else if (solver_name ==
"bicgstab")
292 solver.
solve(A, x, b, precond);
294 else if (solver_name ==
"gmres")
297 solver.
solve(A, x, b, precond);
299 else if (solver_name ==
"fgmres")
302 solver.
solve(A, x, b, precond);
305 Assert(
false, ExcSolverDoesNotExist(solver_name));
310template <
typename VectorType>
319template <
typename VectorType>
323 return "richardson|cg|bicgstab|gmres|fgmres|minres";
328template <
typename VectorType>
338template <
typename VectorType>
348template <
typename VectorType>
353 richardson_data = data;
358template <
typename VectorType>
368template <
typename VectorType>
378template <
typename VectorType>
383 bicgstab_data = data;
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
void solve(const MatrixType &A, VectorType &x, const VectorType &b, const PreconditionerType &preconditioner)
SolverGMRES< VectorType >::AdditionalData gmres_data
virtual ~SolverSelector() override=default
SolverBicgstab< VectorType >::AdditionalData bicgstab_data
void select(const std::string &name)
static std::string get_solver_names()
void set_control(SolverControl &ctrl)
SolverFGMRES< VectorType >::AdditionalData fgmres_data
SolverMinRes< VectorType >::AdditionalData minres_data
void solve(const Matrix &A, VectorType &x, const VectorType &b, const Preconditioner &precond) const
void set_data(const typename SolverRichardson< VectorType >::AdditionalData &data)
SmartPointer< SolverControl, SolverSelector< VectorType > > control
SolverCG< VectorType >::AdditionalData cg_data
SolverRichardson< VectorType >::AdditionalData richardson_data
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcSolverDoesNotExist(std::string arg1)
#define Assert(cond, exc)
#define DeclException1(Exception1, type1, outsequence)