20 #ifndef LIBMESH_TRILINOS_PRECONDITIONER_H
21 #define LIBMESH_TRILINOS_PRECONDITIONER_H
23 #include "libmesh/libmesh_config.h"
25 #ifdef LIBMESH_TRILINOS_HAVE_EPETRA
28 #include "libmesh/preconditioner.h"
29 #include "libmesh/libmesh_common.h"
30 #include "libmesh/reference_counted_object.h"
31 #include "libmesh/libmesh.h"
35 #include "libmesh/ignore_warnings.h"
36 #include "Epetra_Operator.h"
37 #include "Epetra_FECrsMatrix.h"
38 #include "Teuchos_ParameterList.hpp"
39 #include "libmesh/restore_warnings.h"
48 template <
typename T>
class SparseMatrix;
49 template <
typename T>
class NumericVector;
50 template <
typename T>
class ShellMatrix;
51 enum PreconditionerType : int;
63 public Epetra_Operator
90 virtual void clear ()
override {}
95 virtual void init ()
override;
102 void set_params(Teuchos::ParameterList & list);
148 virtual int Apply(
const Epetra_MultiVector & X, Epetra_MultiVector & Y)
const override;
151 virtual int ApplyInverse(
const Epetra_MultiVector & r, Epetra_MultiVector & z)
const override;
154 virtual double NormInf()
const override;
157 virtual const char *
Label()
const override;
166 virtual const Epetra_Comm &
Comm()
const override;
179 template <
typename T>
190 template <
typename T>
199 #endif // LIBMESH_TRILINOS_HAVE_EPETRA
200 #endif // LIBMESH_TRILINOS_PRECONDITIONER_H
void set_params(Teuchos::ParameterList &list)
存储 ParameterList list 的副本。
virtual void init() override
初始化预条件器。
virtual ~TrilinosPreconditioner()
析构函数。
TrilinosPreconditioner(const libMesh::Parallel::Communicator &comm)
构造函数。初始化 PetscPreconditioner 数据结构
Teuchos::ParameterList _param_list
用于构建预条件器的参数列表。
virtual bool HasNormInf() const override
Epetra_FECrsMatrix * mat()
返回实际的 Trilinos 预条件器对象。
virtual void apply(const NumericVector< T > &x, NumericVector< T > &y) override
应用预条件器。
void set_preconditioner_type(const PreconditionerType &preconditioner_type)
根据 libMesh PreconditionerType 设置 Trilinos 预条件器。
virtual void clear() override
清除预条件器。
这个类提供了一个接口,用于使用Trilinos提供的预条件器套件。 所有重写的虚拟函数在preconditioner.h中有文档说明。
该类提供了一个统一的接口,用于预处理器。此基类可继承,以包装来自不同软件包(如 PETSc 或 Trilinos)的预处理器。
Epetra_FECrsMatrix * _mat
从 _matrix 对象中提取出来的 Trilinos 矩阵。
void compute()
计算预条件器。在 Trilinos 中,我们需要显式调用此函数。
virtual const Epetra_Map & OperatorDomainMap() const override
virtual bool UseTranspose() const override
virtual double NormInf() const override
virtual int SetUseTranspose(bool UseTranspose) override
virtual const char * Label() const override
virtual const Epetra_Map & OperatorRangeMap() const override
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const override
Epetra_Operator * _prec
Trilinos 预条件器。
virtual const Epetra_Comm & Comm() const override
virtual int ApplyInverse(const Epetra_MultiVector &r, Epetra_MultiVector &z) const override