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;