20 #ifndef LIBMESH_PETSC_PRECONDITIONER_H
21 #define LIBMESH_PETSC_PRECONDITIONER_H
23 #include "libmesh/libmesh_config.h"
25 #ifdef LIBMESH_HAVE_PETSC
28 #include "libmesh/preconditioner.h"
29 #include "libmesh/libmesh_common.h"
30 #include "libmesh/reference_counted_object.h"
31 #include "libmesh/libmesh.h"
32 #include "libmesh/petsc_macro.h"
33 #include "libmesh/wrapped_petsc.h"
42 template <
typename T>
class SparseMatrix;
43 template <
typename T>
class NumericVector;
44 template <
typename T>
class ShellMatrix;
45 enum PreconditionerType : int;
57 class PetscPreconditioner :
public Preconditioner<T>
66 PetscPreconditioner (
const libMesh::Parallel::Communicator & comm_in);
71 virtual ~PetscPreconditioner () =
default;
79 virtual void apply(
const NumericVector<T> & x, NumericVector<T> & y)
override;
84 virtual void clear ()
override;
89 virtual void init ()
override;
104 static void set_petsc_preconditioner_type (
const PreconditionerType & preconditioner_type, PC & pc);
111 WrappedPetsc<PC> _pc;
125 static void set_petsc_subpreconditioner_type(
const PCType type, PC & pc);
130 #endif // #ifdef LIBMESH_HAVE_PETSC
131 #endif // LIBMESH_PETSC_PRECONDITIONER_H