20 #ifndef LIBMESH_PRECONDITIONER_H
21 #define LIBMESH_PRECONDITIONER_H
25 #include "libmesh/libmesh_common.h"
26 #include "libmesh/reference_counted_object.h"
27 #include "libmesh/libmesh.h"
28 #include "libmesh/parallel_object.h"
37 template <
typename T>
class SparseMatrix;
38 template <
typename T>
class NumericVector;
39 template <
typename T>
class ShellMatrix;
40 enum SolverPackage : int;
41 enum PreconditionerType : int;
80 static std::unique_ptr<Preconditioner<T>>
141 void set_type (
const PreconditionerType pct);
165 template <
typename T>
172 template <
typename T>
181 template <
typename T>
187 _preconditioner_type = pct;
193 #endif // LIBMESH_PRECONDITIONER_H
virtual void clear()
释放所有内存并清除数据结构。
PreconditionerType type() const
virtual void apply(const NumericVector< T > &x, NumericVector< T > &y)=0
计算基于输入向量 x 的预处理向量 y。通常通过解 来实现此操作,以获得 的作用。
PreconditionerType _preconditioner_type
枚举类型,表示要使用的预处理器类型。
void set_matrix(SparseMatrix< Number > &mat)
设置要进行预处理的矩阵。
这是一个通用的稀疏矩阵类。该类包含了必须在派生类中覆盖的纯虚拟成员。 使用一个公共的基类允许从不同的求解器包中以不同的格式统一访问稀疏矩阵。
SolverPackage default_solver_package()
该类提供了一个统一的接口,用于预处理器。此基类可继承,以包装来自不同软件包(如 PETSc 或 Trilinos)的预处理器。
Preconditioner(const libMesh::Parallel::Communicator &comm)
构造函数。初始化 Preconditioner 的数据结构。
bool _is_initialized
Flag that tells if init() has been called.
This class implements reference counting.
bool _is_initialized
指示数据结构是否已初始化的标志。
void set_type(const PreconditionerType pct)
设置要使用的预处理器类型。
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 包装结果以确保安全性。 ...
virtual void init()
如果尚未初始化数据结构,则初始化数据结构。
virtual void setup()
每当 "操作可能已更改" 时都会调用此函数。
virtual ~Preconditioner()
析构函数。
SparseMatrix< T > * _matrix
要进行预处理的矩阵 P...