21 #include "libmesh/auto_ptr.h"
22 #include "libmesh/libmesh_logging.h"
23 #include "libmesh/linear_solver.h"
24 #include "libmesh/laspack_linear_solver.h"
25 #include "libmesh/eigen_sparse_linear_solver.h"
26 #include "libmesh/petsc_linear_solver.h"
27 #include "libmesh/trilinos_aztec_linear_solver.h"
28 #include "libmesh/preconditioner.h"
29 #include "libmesh/sparse_matrix.h"
30 #include "libmesh/enum_to_string.h"
31 #include "libmesh/solver_configuration.h"
32 #include "libmesh/enum_solver_package.h"
33 #include "libmesh/enum_preconditioner_type.h"
34 #include "libmesh/enum_solver_type.h"
47 _preconditioner (nullptr),
48 same_preconditioner (false),
49 _solver_configuration(nullptr)
56 std::unique_ptr<LinearSolver<T>>
64 switch (solver_package)
66 #ifdef LIBMESH_HAVE_LASPACK
68 return libmesh_make_unique<LaspackLinearSolver<T>>(comm);
72 #ifdef LIBMESH_HAVE_PETSC
74 return libmesh_make_unique<PetscLinearSolver<T>>(comm);
78 #ifdef LIBMESH_TRILINOS_HAVE_AZTECOO
80 return libmesh_make_unique<AztecLinearSolver<T>>(comm);
84 #ifdef LIBMESH_HAVE_EIGEN
86 return libmesh_make_unique<EigenSparseLinearSolver<T>>(comm);
90 libmesh_error_msg(
"ERROR: Unrecognized solver package: " << solver_package);
93 return std::unique_ptr<LinearSolver<T>>();
101 return _preconditioner->type();
103 return _preconditioner_type;
106 template <
typename T>
111 _preconditioner->set_type(pct);
113 _preconditioner_type = pct;
116 template <
typename T>
121 libmesh_error_msg(
"Preconditioner must be attached before the solver is initialized!");
124 _preconditioner = preconditioner;
127 template <
typename T>
131 same_preconditioner = reuse_flag;
134 template <
typename T>
140 libmesh_not_implemented();
144 template <
typename T>
149 const unsigned int n_iter)
152 LOG_SCOPE(
"adjoint_solve()",
"LinearSolver");
160 const std::pair<unsigned int, Real> totalrval = this->solve (mat, sol, rhs, tol, n_iter);
169 template <
typename T>
176 template <
typename T>
179 _solver_configuration = &solver_configuration;