libMesh
Loading...
Searching...
No Matches
petsc_matrix_shell_matrix.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3
4// This library is free software; you can redistribute it and/or
5// modify it under the terms of the GNU Lesser General Public
6// License as published by the Free Software Foundation; either
7// version 2.1 of the License, or (at your option) any later version.
8
9// This library is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12// Lesser General Public License for more details.
13
14// You should have received a copy of the GNU Lesser General Public
15// License along with this library; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
18#ifndef LIBMESH_PETSC_MATRIX_SHELL_MATRIX_H
19#define LIBMESH_PETSC_MATRIX_SHELL_MATRIX_H
20
21#include "libmesh/libmesh_config.h"
22
23#ifdef LIBMESH_HAVE_PETSC
24
25#include "libmesh/petsc_matrix_base.h"
26#include "libmesh/petsc_shell_matrix.h"
27
28namespace libMesh
29{
30
37template <typename T>
39{
40public:
42
43 virtual void init(const numeric_index_type m,
45 const numeric_index_type m_l,
46 const numeric_index_type n_l,
47 const numeric_index_type = 30,
48 const numeric_index_type = 10,
49 const numeric_index_type blocksize = 1) override;
50
55 virtual void init(ParallelType = PARALLEL) override;
56
57 virtual SparseMatrix<T> & operator=(const SparseMatrix<T> &) override;
58
59 virtual bool require_sparsity_pattern() const override { return false; }
60
61private:
62 // Make this private because we mark as initialized after we've done our initialization, and we
63 // don't want derived classes to mistakenly register their data as initialized (or not)
65
68
69 friend void init_shell_mat<PetscMatrixShellMatrix<T>>(PetscMatrixShellMatrix<T> & obj);
70 friend void init_shell_mat<PetscMatrixShellMatrix<T>>(PetscMatrixShellMatrix<T> & obj,
73 const numeric_index_type m_l,
74 const numeric_index_type n_l,
75 const numeric_index_type blocksize_in);
76};
77
78//-----------------------------------------------------------------------
79// PetscMatrixShellMatrix inline members
80template <typename T>
82 : PetscMatrixBase<T>(comm_in), _omit_constrained_dofs(false)
83{
84}
85
86template <typename T>
89{
90 libmesh_error();
91}
92
93} // namespace libMesh
94
95#endif // LIBMESH_HAVE_PETSC
96#endif // LIBMESH_SPARSE_SHELL_MATRIX_H
This class provides a nice interface to the PETSc C-based data structures for parallel,...
virtual numeric_index_type n() const override
virtual numeric_index_type m() const override
This class allows to use a PETSc shell matrix as a PetscMatrix.
PetscMatrixShellMatrix(const Parallel::Communicator &comm_in)
virtual void init(const numeric_index_type m, const numeric_index_type n, const numeric_index_type m_l, const numeric_index_type n_l, const numeric_index_type=30, const numeric_index_type=10, const numeric_index_type blocksize=1) override
Initialize SparseMatrix with the specified sizes.
virtual SparseMatrix< T > & operator=(const SparseMatrix< T > &) override
This looks like a copy assignment operator, but note that, unlike normal copy assignment operators,...
virtual void init(ParallelType=PARALLEL) override
Initialize this matrix using the sparsity structure computed by dof_map.
virtual bool require_sparsity_pattern() const override
const bool _omit_constrained_dofs
Whether to omit constrained degrees of freedom.
Generic sparse matrix.
bool _is_initialized
Flag indicating whether or not the matrix has been initialized.
The libMesh namespace provides an interface to certain functionality in the library.
ParallelType
Defines an enum for parallel data structure types.
dof_id_type numeric_index_type
Definition id_types.h:99