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"
39 ParallelObject(comm_in),
41 _preconditioner_type (ILU_PRECOND),
49 std::unique_ptr<Preconditioner<T>>
51 const SolverPackage solver_package)
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);
该类提供了一个统一的接口,用于预处理器。此基类可继承,以包装来自不同软件包(如 PETSc 或 Trilinos)的预处理器。
void libmesh_ignore(const Args &...)
Preconditioner(const libMesh::Parallel::Communicator &comm)
构造函数。初始化 Preconditioner 的数据结构。
bool _is_initialized
Flag that tells if init() has been called.
static std::unique_ptr< Preconditioner< T > > build_preconditioner(const libMesh::Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
构建一个 Preconditioner,使用由 solver_package 指定的线性求解器软件包, 并以 std::unique_ptr 包装结果以确保安全性。 ...