22 #ifndef __HERMES_COMMON_PRECOND_IFPACK_H_
23 #define __HERMES_COMMON_PRECOND_IFPACK_H_
24 #include "../config.h"
29 #include <Ifpack_Preconditioner.h>
33 namespace Preconditioners
35 using namespace Hermes::Solvers;
39 template <
typename Scalar>
40 class HERMES_API IfpackPrecond:
public Precond<Scalar>
47 IfpackPrecond(
const char *cls,
const char *type =
"Jacobi");
52 IfpackPrecond(
const char *cls,
const char *type,
int overlap);
54 IfpackPrecond(Ifpack_Preconditioner *ipc);
55 virtual ~IfpackPrecond();
57 void set_param(
const char *name,
const char *value);
58 void set_param(
const char *name,
int value);
59 void set_param(
const char *name,
double value);
62 virtual Epetra_Operator *get_obj() {
return prec; }
64 virtual void create(Matrix<Scalar> *mat);
65 virtual void destroy() { }
66 virtual void compute();
69 virtual int ApplyInverse(
const Epetra_MultiVector &r, Epetra_MultiVector &z)
const;
70 virtual const Epetra_Comm &Comm()
const;
71 virtual const Epetra_Map &OperatorDomainMap()
const;
72 virtual const Epetra_Map &OperatorRangeMap()
const;
74 void create_point_relax(EpetraMatrix<Scalar> *a,
const char *name);
75 void create_block_relax(EpetraMatrix<Scalar> *a,
const char *name);
76 void create_add_schwartz(EpetraMatrix<Scalar> *a,
const char *name,
int overlap);
79 Ifpack_Preconditioner *prec;
80 Teuchos::ParameterList ilist;
81 EpetraMatrix<Scalar> *mat;
87 friend class AztecOOSolver<Scalar>;