libMesh
eigen_preconditioner.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2024 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 
30 namespace libMesh
31 {
32 
33 // forward declarations
34 template <typename T> class SparseMatrix;
35 template <typename T> class NumericVector;
36 template <typename T> class ShellMatrix;
37 
46 template <typename T>
48 {
49 public:
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 ----------------------------------*/
71 template <typename T>
72 inline
74  Preconditioner<T>(comm_in)
75 {
76 }
77 
78 
79 
80 template <typename T>
81 inline
83 {
84  this->clear ();
85 }
86 
87 } // namespace libMesh
88 
89 #endif // #ifdef LIBMESH_HAVE_EIGEN
90 #endif // LIBMESH_EIGEN_PRECONDITIONER_H
EigenPreconditioner(const libMesh::Parallel::Communicator &comm_in)
Constructor.
virtual void init() override
Initialize data structures if not done so already.
Provides a uniform interface to vector storage schemes for different linear algebra libraries...
Definition: vector_fe_ex5.C:43
The libMesh namespace provides an interface to certain functionality in the library.
virtual void apply(const NumericVector< T > &x, NumericVector< T > &y) override
Computes the preconditioned vector y based on input vector x.
virtual ~EigenPreconditioner()
Destructor.
This class provides a uniform interface for preconditioners.
This class provides an interface to the suite of preconditioners available from Eigen.
Generic shell matrix, i.e.
virtual void clear() override
Release all memory and clear data structures.