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;
49 class ShellMatrix :
public ReferenceCountedObject<ShellMatrix<T>>,
56 ShellMatrix (
const Parallel::Communicator & comm_in);
62 static std::unique_ptr<ShellMatrix<T>>
63 build(
const Parallel::Communicator &
comm,
88 const NumericVector<T> & arg)
const = 0;
94 const NumericVector<T> & arg)
const = 0;
99 virtual void get_diagonal (NumericVector<T> & dest)
const = 0;
108 virtual void clear () { libmesh_error_msg (
"Not implemented yet"); }
110 virtual void init () { libmesh_error_msg (
"Not implemented yet"); }
123 template <
typename T>
131 template <
typename T>
140 #endif // LIBMESH_SHELL_MATRIX_H virtual ~ShellMatrix()
Destructor.
void attach_dof_map(const DofMap &dof_map)
Get a pointer to the DofMap to use.
static std::unique_ptr< ShellMatrix< T > > build(const Parallel::Communicator &comm, const SolverPackage solver_package=libMesh::default_solver_package())
Builds a ShellMatrix<T> using the linear solver package specified by solver_package.
const Parallel::Communicator & comm() const
The libMesh namespace provides an interface to certain functionality in the library.
virtual numeric_index_type m() const =0
virtual void vector_mult_add(NumericVector< T > &dest, const NumericVector< T > &arg) const =0
Multiplies the matrix with arg and adds the result to 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)
Constructor; does nothing.
DofMap const * _dof_map
The DofMap object associated with this object.
An object whose state is distributed along a set of processors.
virtual numeric_index_type n() const =0
virtual void get_diagonal(NumericVector< T > &dest) const =0
Copies the diagonal part of the matrix into dest.
SolverPackage
Defines an enum for various linear solver packages.
Generic shell matrix, i.e.
virtual void vector_mult(NumericVector< T > &dest, const NumericVector< T > &arg) const =0
Multiplies the matrix with arg and stores the result in dest.
void ErrorVector unsigned int