22 #ifndef __HERMES_COMMON_PRECOND_ML_H_
23 #define __HERMES_COMMON_PRECOND_ML_H_
24 #include "../config.h"
28 #include <ml_MultiLevelPreconditioner.h>
32 namespace Preconditioners
34 using namespace Hermes::Solvers;
38 template <
typename Scalar>
39 class HERMES_API MlPrecond :
public Precond<Scalar>
45 MlPrecond(
const char *type);
47 MlPrecond(ML_Epetra::MultiLevelPreconditioner *mpc);
50 void set_param(
const char *name,
const char *value);
51 void set_param(
const char *name,
int value);
52 void set_param(
const char *name,
double value);
54 virtual Epetra_Operator *get_obj() {
return prec; }
57 virtual void create(Matrix<Scalar> *mat);
59 virtual void destroy();
61 virtual void compute();
66 virtual int ApplyInverse(
const Epetra_MultiVector &r, Epetra_MultiVector &z)
const;
67 virtual const Epetra_Comm &Comm()
const;
68 virtual const Epetra_Map &OperatorDomainMap()
const;
69 virtual const Epetra_Map &OperatorRangeMap()
const;
71 ML_Epetra::MultiLevelPreconditioner *prec;
72 Teuchos::ParameterList mlist;
73 EpetraMatrix<Scalar> *mat;
76 friend class AztecOOSolver<Scalar>;