18 #ifndef LIBMESH_PETSC_SHELL_MATRIX_H
19 #define LIBMESH_PETSC_SHELL_MATRIX_H
22 #include "libmesh/libmesh_config.h"
24 #ifdef LIBMESH_HAVE_PETSC
27 #include "libmesh/libmesh_common.h"
28 #include "libmesh/reference_counted_object.h"
29 #include "libmesh/libmesh.h"
30 #include "libmesh/shell_matrix.h"
31 #include "libmesh/petsc_macro.h"
32 #include "libmesh/petsc_solver_exception.h"
33 #include "libmesh/petsc_vector.h"
34 #include "libmesh/libmesh_common.h"
35 #include "libmesh/wrapped_petsc.h"
39 # define LIBMESH_SAW_I
43 # undef I // Avoid complex.h contamination
129 virtual void clear ()
override;
134 virtual void init ()
override;
166 template <
typename T>
175 template <
typename T>
182 ierr = MatGetSize(_mat, &m,
nullptr);
183 LIBMESH_CHKERR(ierr);
190 template <
typename T>
197 ierr = MatGetSize(_mat,
nullptr, &n);
198 LIBMESH_CHKERR(ierr);
204 template <
typename T>
211 ierr = MatGetLocalSize(_mat, &m,
nullptr);
212 LIBMESH_CHKERR(ierr);
219 template <
typename T>
226 ierr = MatGetLocalSize(_mat,
nullptr, &n);
227 LIBMESH_CHKERR(ierr);
233 template <
typename T>
240 PetscErrorCode ierr = MatGetDiagonal(_mat, petsc_dest.
vec());
241 LIBMESH_CHKERR(ierr);
248 #endif // LIBMESH_HAVE_PETSC
249 #endif // LIBMESH_SPARSE_SHELL_MATRIX_H
virtual void vector_mult_add(NumericVector< T > &dest, const NumericVector< T > &arg) const override
执行矩阵与向量的乘法,并将结果添加到目标向量。
该类提供了一个良好的接口,用于访问 PETSc 的 Vec 对象。所有重写的虚拟函数都在 numeric_vector.h 中有文档说明。
WrappedPetsc< Mat > _mat
PETSc Shell 矩阵。
Mat mat()
返回指向底层 PETSc Mat 对象的指针。调用此函数前必须调用 init()。
virtual bool initialized() const
检查矩阵是否已初始化。
这个类允许使用 PETSc shell 矩阵。 所有覆盖的虚拟函数都在 shell_matrix.h 中有文档说明。
virtual void clear() override
清除矩阵的内部数据结构。
virtual numeric_index_type local_m() const
获取本地处理的矩阵行数。
Vec vec()
获取当前向量的原始 PETSc Vec 指针。
virtual numeric_index_type n() const override
获取矩阵的列数。
virtual numeric_index_type m() const override
获取矩阵的行数。
virtual void vector_mult(NumericVector< T > &dest, const NumericVector< T > &arg) const override
执行矩阵与向量的乘法。
virtual ~PetscShellMatrix()=default
默认虚拟析构函数。
dof_id_type numeric_index_type
bool _is_initialized
Flag that tells if init() has been called.
bool _is_initialized
表示矩阵是否已初始化的标志。
virtual numeric_index_type local_n() const
获取本地处理的矩阵列数。
virtual void get_diagonal(NumericVector< T > &dest) const override
获取矩阵的对角线。
PetscShellMatrix(const Parallel::Communicator &comm_in)
构造函数。
通用的Shell矩阵,即一个仅定义其对向量的作用的矩阵。此类包含必须在派生类中重写的纯虚拟成员。
virtual void init() override
初始化矩阵。