libMesh
Loading...
Searching...
No Matches
eigen_preconditioner.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_EIGEN_PRECONDITIONER_H
21#define LIBMESH_EIGEN_PRECONDITIONER_H
22
23#include "libmesh/libmesh_config.h"
24
25#ifdef LIBMESH_HAVE_EIGEN
26
27// Local includes
28#include "libmesh/preconditioner.h"
29
30namespace libMesh
31{
32
33// forward declarations
34template <typename T> class SparseMatrix;
35template <typename T> class NumericVector;
36template <typename T> class ShellMatrix;
37
46template <typename T>
48{
49public:
54
58 virtual ~EigenPreconditioner ();
59
60 virtual void apply(const NumericVector<T> & x, NumericVector<T> & y) override;
61
62 virtual void clear () override {}
63
64 virtual void init () override;
65};
66
67
68
69
70/*----------------------- inline functions ----------------------------------*/
71template <typename T>
72inline
77
78
79
80template <typename T>
81inline
86
87} // namespace libMesh
88
89#endif // #ifdef LIBMESH_HAVE_EIGEN
90#endif // LIBMESH_EIGEN_PRECONDITIONER_H
This class provides an interface to the suite of preconditioners available from Eigen.
virtual void init() override
Initialize data structures if not done so already.
virtual void apply(const NumericVector< T > &x, NumericVector< T > &y) override
Computes the preconditioned vector y based on input vector x.
virtual void clear() override
Release all memory and clear data structures.
EigenPreconditioner(const libMesh::Parallel::Communicator &comm_in)
Constructor.
virtual ~EigenPreconditioner()
Destructor.
Provides a uniform interface to vector storage schemes for different linear algebra libraries.
This class provides a uniform interface for preconditioners.
The libMesh namespace provides an interface to certain functionality in the library.