20 #ifndef LIBMESH_SHELL_MATRIX_H
21 #define LIBMESH_SHELL_MATRIX_H
25 #include "libmesh/libmesh_common.h"
26 #include "libmesh/reference_counted_object.h"
27 #include "libmesh/libmesh.h"
28 #include "libmesh/id_types.h"
29 #include "libmesh/parallel_object.h"
30 #include "libmesh/dof_map.h"
31 #include "libmesh/parallel.h"
37 template <
typename T>
class NumericVector;
38 enum SolverPackage : int;
47 class ShellMatrix :
public ReferenceCountedObject<ShellMatrix<T>>,
56 ShellMatrix (
const Parallel::Communicator & comm_in);
65 static std::unique_ptr<ShellMatrix<T>>
66 build(
const Parallel::Communicator & comm,
97 const NumericVector<T> & arg)
const = 0;
106 const NumericVector<T> & arg)
const = 0;
113 virtual void get_diagonal (NumericVector<T> & dest)
const = 0;
128 virtual void clear () { libmesh_error_msg (
"Not implemented yet"); }
135 virtual void init () { libmesh_error_msg (
"Not implemented yet"); }
147 template <
typename T>
150 ParallelObject(comm_in),
155 template <
typename T>
164 #endif // LIBMESH_SHELL_MATRIX_H
virtual ~ShellMatrix()
析构函数。
void attach_dof_map(const DofMap &dof_map)
附加要使用的 DofMap 指针。
static std::unique_ptr< ShellMatrix< T > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
使用指定的线性求解器包构建一个 ShellMatrix<T>。
virtual numeric_index_type m() const =0
virtual void vector_mult_add(NumericVector< T > &dest, const NumericVector< T > &arg) const =0
将矩阵与 arg 相乘并将结果添加到 dest 中。
SolverPackage default_solver_package()
This class handles the numbering of degrees of freedom on a mesh.
dof_id_type numeric_index_type
ShellMatrix(const Parallel::Communicator &comm_in)
构造函数;
virtual void init()
初始化对象。
DofMap const * _dof_map
与此对象关联的 DofMap 对象。
virtual void clear()
清除对象,释放内存。
virtual numeric_index_type n() const =0
virtual void get_diagonal(NumericVector< T > &dest) const =0
将矩阵的对角线部分复制到 dest 中。
virtual void vector_mult(NumericVector< T > &dest, const NumericVector< T > &arg) const =0
将矩阵与 arg 相乘并将结果存储在 dest 中。