17 #ifndef __deal2__solver_selector_h
18 #define __deal2__solver_selector_h
21 #include <deal.II/base/config.h>
22 #include <deal.II/base/smartpointer.h>
23 #include <deal.II/lac/solver.h>
24 #include <deal.II/lac/vector.h>
25 #include <deal.II/lac/vector_memory.h>
26 #include <deal.II/lac/solver_control.h>
27 #include <deal.II/lac/solver_cg.h>
28 #include <deal.II/lac/solver_bicgstab.h>
29 #include <deal.II/lac/solver_gmres.h>
30 #include <deal.II/lac/solver_minres.h>
31 #include <deal.II/lac/vector_memory.h>
32 #include <deal.II/lac/solver_richardson.h>
33 #include <deal.II/lac/precondition.h>
100 template <
class VECTOR = Vector<
double> >
136 template<
class Matrix,
class Preconditioner>
137 void solve(
const Matrix &A,
140 const Preconditioner &precond)
const;
147 void select(
const std::string &name);
160 ::AdditionalData &data);
167 ::AdditionalData &data);
174 ::AdditionalData &data);
181 ::AdditionalData &data);
188 ::AdditionalData &data);
195 ::AdditionalData &data);
207 std::string, <<
"Solver " << arg1 <<
" does not exist. Use one of "
262 template <
class VECTOR>
267 template <
class VECTOR>
272 solver_name(solver_name)
276 template <
class VECTOR>
281 template <
class VECTOR>
289 template <
class VECTOR>
290 template<
class Matrix,
class Preconditioner>
295 const Preconditioner &precond)
const
297 if (solver_name==
"richardson")
300 solver.
solve(A,x,b,precond);
302 else if (solver_name==
"cg")
305 solver.
solve(A,x,b,precond);
307 else if (solver_name==
"minres")
310 solver.
solve(A,x,b,precond);
312 else if (solver_name==
"bicgstab")
315 solver.
solve(A,x,b,precond);
317 else if (solver_name==
"gmres")
320 solver.
solve(A,x,b,precond);
322 else if (solver_name==
"fgmres")
325 solver.
solve(A,x,b,precond);
328 Assert(
false,ExcSolverDoesNotExist(solver_name));
332 template <
class VECTOR>
340 template <
class VECTOR>
343 return "richardson|cg|bicgstab|gmres|fgmres|minres";
347 template <
class VECTOR>
355 template <
class VECTOR>
363 template <
class VECTOR>
367 richardson_data=data;
371 template <
class VECTOR>
379 template <
class VECTOR>
387 template <
class VECTOR>
395 DEAL_II_NAMESPACE_CLOSE
DeclException1(ExcSolverDoesNotExist, std::string,<< "Solver "<< arg1<< " does not exist. Use one of "<< std::endl<< get_solver_names())
void set_control(SolverControl &ctrl)
void solve(const MATRIX &A, VECTOR &x, const VECTOR &b, const PRECONDITIONER &precondition)
SolverRichardson< VECTOR >::AdditionalData richardson_data
void solve(const MATRIX &A, VECTOR &x, const VECTOR &b, const PRECONDITIONER &precondition)
void solve(const MATRIX &A, VECTOR &x, const VECTOR &b, const PRECONDITIONER &precondition)
SmartPointer< SolverControl, SolverSelector< VECTOR > > control
#define Assert(cond, exc)
void select(const std::string &name)
SolverFGMRES< VECTOR >::AdditionalData fgmres_data
void set_data(const typename SolverRichardson< VECTOR >::AdditionalData &data)
BlockCompressedSparsityPattern CompressedBlockSparsityPattern DEAL_II_DEPRECATED
void solve(const MATRIX &A, VECTOR &x, const VECTOR &b, const PRECONDITIONER &precondition)
void solve(const MATRIX &A, VECTOR &x, const VECTOR &b, const PRECONDITIONER &precondition)
SolverCG< VECTOR >::AdditionalData cg_data
static std::string get_solver_names()
SolverGMRES< VECTOR >::AdditionalData gmres_data
SolverBicgstab< VECTOR >::AdditionalData bicgstab_data
void solve(const Matrix &A, VECTOR &x, const VECTOR &b, const Preconditioner &precond) const
void solve(const MATRIX &A, VECTOR &x, const VECTOR &b, const PRECONDITIONER &precondition)
SolverMinRes< VECTOR >::AdditionalData minres_data