libMesh
Loading...
Searching...
No Matches
laspack_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
19
20#ifndef LIBMESH_LASPACK_MATRIX_H
21#define LIBMESH_LASPACK_MATRIX_H
22
23#include "libmesh/libmesh_config.h"
24
25#ifdef LIBMESH_HAVE_LASPACK
26
27// Local includes
28#include "libmesh/sparse_matrix.h"
29
30// Laspack includes
31#include <qmatrix.h>
32
33// C++ includes
34#include <algorithm>
35#include <cstddef>
36
37namespace libMesh
38{
39
40// Forward declarations
41template <typename T> class DenseMatrix;
42template <typename T> class LaspackVector;
43template <typename T> class LaspackLinearSolver;
44
55template <typename T>
56class LaspackMatrix final : public SparseMatrix<T>
57{
58
59public:
71
78 LaspackMatrix (const LaspackMatrix &) = delete;
81 virtual ~LaspackMatrix ();
82 virtual SparseMatrix<T> & operator=(const SparseMatrix<T> &) override
83 {
84 libmesh_not_implemented();
85 return *this;
86 }
87
88 virtual SolverPackage solver_package() override
89 {
90 return LASPACK_SOLVERS;
91 }
92
96 virtual bool need_full_sparsity_pattern() const override
97 { return true; }
98
104 virtual void update_sparsity_pattern (const SparsityPattern::Graph &) override;
105
106 virtual void init (const numeric_index_type m,
107 const numeric_index_type n,
108 const numeric_index_type m_l,
109 const numeric_index_type n_l,
110 const numeric_index_type nnz=30,
111 const numeric_index_type noz=10,
112 const numeric_index_type blocksize=1) override;
113
114 virtual void init (ParallelType = PARALLEL) override;
115
116 virtual void clear () override;
117
118 virtual void zero () override;
119
120 virtual std::unique_ptr<SparseMatrix<T>> zero_clone () const override;
121
122 virtual std::unique_ptr<SparseMatrix<T>> clone () const override;
123
124 virtual void close () override;
125
126 virtual numeric_index_type m () const override;
127
128 virtual numeric_index_type n () const override;
129
130 virtual numeric_index_type row_start () const override;
131
132 virtual numeric_index_type row_stop () const override;
133
134 virtual numeric_index_type col_start () const override;
135
136 virtual numeric_index_type col_stop () const override;
137
138 virtual void set (const numeric_index_type i,
139 const numeric_index_type j,
140 const T value) override;
141
142 virtual void add (const numeric_index_type i,
143 const numeric_index_type j,
144 const T value) override;
145
146 virtual void add_matrix (const DenseMatrix<T> & dm,
147 const std::vector<numeric_index_type> & rows,
148 const std::vector<numeric_index_type> & cols) override;
149
150 virtual void add_matrix (const DenseMatrix<T> & dm,
151 const std::vector<numeric_index_type> & dof_indices) override;
152
160 virtual void add (const T a, const SparseMatrix<T> & X) override;
161
162 virtual T operator () (const numeric_index_type i,
163 const numeric_index_type j) const override;
164
165 virtual Real l1_norm () const override;
166
167 virtual Real linfty_norm () const override;
168
169 virtual bool closed() const override { return _closed; }
170
171 virtual void print_personal(std::ostream & os=libMesh::out) const override { this->print(os); }
172
173 virtual void get_diagonal (NumericVector<T> & dest) const override;
174
175 virtual void get_transpose (SparseMatrix<T> & dest) const override;
176
177 virtual void get_row(numeric_index_type i,
178 std::vector<numeric_index_type> & indices,
179 std::vector<T> & values) const override;
180
181private:
182
188 const numeric_index_type j) const;
189
193 QMatrix _QMat;
194
198 std::vector<numeric_index_type> _csr;
199
204 std::vector<std::vector<numeric_index_type>::const_iterator> _row_start;
205
210
214 friend class LaspackVector<T>;
215 friend class LaspackLinearSolver<T>;
216};
217
218} // namespace libMesh
219
220#endif // #ifdef LIBMESH_HAVE_LASPACK
221#endif // #ifdef LIBMESH_LASPACK_MATRIX_H
Defines a dense matrix for use in Finite Element-type computations.
This class provides an interface to Laspack iterative solvers that is compatible with the libMesh Lin...
The LaspackMatrix class wraps a QMatrix object from the Laspack library.
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 nnz=30, const numeric_index_type noz=10, const numeric_index_type blocksize=1) override
Initialize SparseMatrix with the specified sizes.
virtual void clear() override
Restores the SparseMatrix<T> to a pristine state.
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 zero() override
Set all entries to 0.
std::vector< numeric_index_type > _csr
The compressed row indices.
QMatrix _QMat
The Laspack sparse matrix pointer.
virtual numeric_index_type col_start() const override
virtual void close() override
Calls the SparseMatrix's internal assembly routines, ensuring that the values are consistent across p...
numeric_index_type pos(const numeric_index_type i, const numeric_index_type j) const
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.
std::vector< std::vector< numeric_index_type >::const_iterator > _row_start
The start of each row in the compressed row index data structure.
virtual numeric_index_type col_stop() const override
virtual std::unique_ptr< SparseMatrix< T > > clone() const override
LaspackMatrix(const LaspackMatrix &)=delete
virtual std::unique_ptr< SparseMatrix< T > > zero_clone() const override
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 numeric_index_type row_stop() const override
virtual SolverPackage solver_package() override
virtual T operator()(const numeric_index_type i, const numeric_index_type j) 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 bool need_full_sparsity_pattern() const override
The LaspackMatrix needs the full sparsity pattern.
virtual void get_transpose(SparseMatrix< T > &dest) const override
Copies the transpose of the matrix into dest, which may be *this.
virtual SparseMatrix< T > & operator=(const SparseMatrix< T > &) override
This looks like a copy assignment operator, but note that, unlike normal copy assignment operators,...
bool _closed
Flag indicating if the matrix has been closed yet.
LaspackMatrix(LaspackMatrix &&)=delete
This class manages a C-style struct (QMatrix) manually, so we don't want to allow any automatic copy/...
virtual numeric_index_type n() const override
virtual Real l1_norm() const override
virtual bool closed() const override
virtual void update_sparsity_pattern(const SparsityPattern::Graph &) override
Updates the matrix sparsity pattern.
virtual numeric_index_type m() const override
virtual Real linfty_norm() const override
virtual numeric_index_type row_start() const override
virtual void get_diagonal(NumericVector< T > &dest) const override
Copies the diagonal part of the matrix into dest.
LaspackMatrix & operator=(const LaspackMatrix &)=delete
This class provides a nice interface to the Laspack C-based data structures for serial vectors.
Provides a uniform interface to vector storage schemes for different linear algebra libraries.
const Parallel::Communicator & comm() const
Generic sparse matrix.
void print(std::ostream &os=libMesh::out, const bool sparse=false) const
Print the contents of the matrix to the screen in a uniform style, regardless of matrix/solver packag...
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
SolverPackage
Defines an enum for various linear solver packages.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const bool value
Definition xdr_io.C:55