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
61 virtual void zero() override;
62 virtual std::unique_ptr<SparseMatrix<T>> zero_clone() const override;
63 virtual std::unique_ptr<SparseMatrix<T>> clone() const override;
64 virtual void set(const numeric_index_type i, const numeric_index_type j, const T value) override;
65 virtual void add(const numeric_index_type i, const numeric_index_type j, const T value) override;
66 virtual void add_matrix(const DenseMatrix<T> & dm,
67 const std::vector<numeric_index_type> & rows,
68 const std::vector<numeric_index_type> & cols) override;
69 virtual void add_matrix(const DenseMatrix<T> & dm,
70 const std::vector<numeric_index_type> & dof_indices) override;
71 virtual void add(const T a, const SparseMatrix<T> & X) override;
72 virtual T operator()(const numeric_index_type i, const numeric_index_type j) const override;
73 virtual Real l1_norm() const override;
74 virtual Real linfty_norm() const override;
75 virtual void print_personal(std::ostream & os = libMesh::out) const override;
76 virtual void get_diagonal(NumericVector<T> & dest) const override;
77 virtual void get_transpose(SparseMatrix<T> & dest) const override;
78 virtual void get_row(numeric_index_type i,
79 std::vector<numeric_index_type> & indices,
80 std::vector<T> & values) const override;
81
82private:
83 // Make this private because we mark as initialized after we've done our initialization, and we
84 // don't want derived classes to mistakenly register their data as initialized (or not)
86
89
90 friend void init_shell_mat<PetscMatrixShellMatrix<T>>(PetscMatrixShellMatrix<T> & obj);
91 friend void init_shell_mat<PetscMatrixShellMatrix<T>>(PetscMatrixShellMatrix<T> & obj,
94 const numeric_index_type m_l,
95 const numeric_index_type n_l,
96 const numeric_index_type blocksize_in);
97};
98
99//-----------------------------------------------------------------------
100// PetscMatrixShellMatrix inline members
101template <typename T>
103 : PetscMatrixBase<T>(comm_in), _omit_constrained_dofs(false)
104{
105}
106
107} // namespace libMesh
108
109#endif // LIBMESH_HAVE_PETSC
110#endif // LIBMESH_SPARSE_SHELL_MATRIX_H
Defines a dense matrix for use in Finite Element-type computations.
Provides a uniform interface to vector storage schemes for different linear algebra libraries.
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 Real l1_norm() const override
virtual void get_transpose(SparseMatrix< T > &dest) const override
Copies the transpose of the matrix into dest, which may be *this.
virtual Real linfty_norm() const override
virtual std::unique_ptr< SparseMatrix< T > > zero_clone() const override
virtual void add(const numeric_index_type i, const numeric_index_type j, const T value) override
Add value to the element (i,j).
virtual void set(const numeric_index_type i, const numeric_index_type j, const T value) override
Set the element (i,j) to value.
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 void print_personal(std::ostream &os=libMesh::out) const override
Print the contents of the matrix to the screen in a package-personalized style, if available.
virtual void zero() override
Set all entries to 0.
virtual std::unique_ptr< SparseMatrix< T > > clone() const override
virtual T operator()(const numeric_index_type i, const numeric_index_type j) const override
virtual void get_row(numeric_index_type i, std::vector< numeric_index_type > &indices, std::vector< T > &values) const override
Get a row from the matrix.
virtual void add_matrix(const DenseMatrix< T > &dm, const std::vector< numeric_index_type > &rows, const std::vector< numeric_index_type > &cols) override
Add the full matrix dm to the SparseMatrix.
virtual bool require_sparsity_pattern() const override
virtual void get_diagonal(NumericVector< T > &dest) const override
Copies the diagonal part of the matrix into dest.
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.
OStreamProxy out
dof_id_type numeric_index_type
Definition id_types.h:99
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition xdr_io.C:55