21#include "libmesh/preconditioner.h"
22#include "libmesh/eigen_preconditioner.h"
23#include "libmesh/petsc_preconditioner.h"
24#include "libmesh/trilinos_preconditioner.h"
25#include "libmesh/enum_solver_package.h"
26#include "libmesh/enum_preconditioner_type.h"
42 _is_initialized (false)
49std::unique_ptr<Preconditioner<T>>
57 switch (solver_package)
60#ifdef LIBMESH_HAVE_PETSC
63 return std::make_unique<PetscPreconditioner<T>>(comm);
67#ifdef LIBMESH_TRILINOS_HAVE_EPETRA
69 return std::make_unique<TrilinosPreconditioner<T>>(comm);
72#ifdef LIBMESH_HAVE_EIGEN
74 return std::make_unique<EigenPreconditioner<T>>(comm);
78 libmesh_error_msg(
"ERROR: Unrecognized solver package: " << solver_package);
An object whose state is distributed along a set of processors.
This class provides a uniform interface for preconditioners.
Preconditioner(const libMesh::Parallel::Communicator &comm)
Constructor.
static std::unique_ptr< Preconditioner< T > > build_preconditioner(const libMesh::Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a Preconditioner using the linear solver package specified by solver_package,...
The libMesh namespace provides an interface to certain functionality in the library.
void libmesh_ignore(const Args &...)
SolverPackage
Defines an enum for various linear solver packages.