13#ifndef dealii_solver_selector_h
14#define dealii_solver_selector_h
88template <
typename VectorType = Vector<
double>>
118 template <
typename MatrixType,
typename PreconditionerType>
122 void solve(
const MatrixType &A,
125 const PreconditionerType &precond)
const;
132 select(
const std::string &name);
196 <<
"Solver " << arg1 <<
" does not exist. Use one of "
198 << get_solver_names());
250template <
typename VectorType>
255 , control(&solver_control)
260template <
typename VectorType>
269template <
typename VectorType>
271template <
typename MatrixType,
typename PreconditionerType>
278 const PreconditionerType &precond)
const
280 if (solver_name ==
"richardson")
283 solver.
solve(A, x, b, precond);
285 else if (solver_name ==
"cg")
288 solver.
solve(A, x, b, precond);
290 else if (solver_name ==
"minres")
293 solver.
solve(A, x, b, precond);
295 else if (solver_name ==
"bicgstab")
298 solver.
solve(A, x, b, precond);
300 else if (solver_name ==
"gmres")
303 solver.
solve(A, x, b, precond);
305 else if (solver_name ==
"fgmres")
308 solver.
solve(A, x, b, precond);
311 Assert(
false, ExcSolverDoesNotExist(solver_name));
316template <
typename VectorType>
325template <
typename VectorType>
329 return "richardson|cg|bicgstab|gmres|fgmres|minres";
334template <
typename VectorType>
344template <
typename VectorType>
354template <
typename VectorType>
359 richardson_data =
data;
364template <
typename VectorType>
367 const typename
SolverCG<VectorType>::AdditionalData &
data)
374template <
typename VectorType>
384template <
typename VectorType>
389 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 PreconditionerTypes &...preconditioners)
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
SolverFGMRES< VectorType >::AdditionalData fgmres_data
SolverMinRes< VectorType >::AdditionalData minres_data
ObserverPointer< SolverControl, SolverSelector< VectorType > > control
SolverCG< VectorType >::AdditionalData cg_data
SolverRichardson< VectorType >::AdditionalData richardson_data
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define DeclException1(Exception1, type1, outsequence)
std::vector< index_type > data