00001 #ifndef HIERARCHICALBASISPREC_H
00002 #define HIERARCHICALBASISPREC_H
00003
00004 #include "Epetra_Operator.h"
00005
00006 class Epetra_LinearProblem;
00007 class Amesos_BaseSolver;
00008 class BlockPCGSolver;
00009 class AztecOO;
00010 namespace Teuchos {
00011 class ParameterList;
00012 }
00013
00014 #include <ml_include.h>
00015 #include <ml_epetra_preconditioner.h>
00016
00017 #include "Teuchos_ParameterList.hpp"
00018
00023 class HierarchicalBasisPrec : public virtual Epetra_Operator {
00024
00025 public:
00026
00043 HierarchicalBasisPrec(Epetra_CrsMatrix* Block11,
00044 Epetra_CrsMatrix* TMatrix,
00045 Epetra_CrsMatrix* NodeMatrix,
00046 Epetra_CrsMatrix* Block12,
00047 Epetra_CrsMatrix* Block22,
00048 const Epetra_Map& DMap,
00049 const Epetra_Map& RMap,
00050 Teuchos::ParameterList& params);
00051
00053 ~HierarchicalBasisPrec();
00054
00056
00058
00067 int SetUseTranspose(bool UseTranspose);
00069
00071
00073
00081 int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00082
00084
00095 int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00096
00098
00099
00100
00101
00102
00103 double NormInf() const;
00105
00107
00109 const char * Label() const;
00110
00112 bool UseTranspose() const;
00113
00115 bool HasNormInf() const;
00116
00118 const Epetra_Comm & Comm() const;
00119
00121 const Epetra_Map & OperatorDomainMap() const;
00122
00124 const Epetra_Map & OperatorRangeMap() const;
00126
00127
00128 protected:
00129
00130 Epetra_CrsMatrix* K11;
00131 Epetra_CrsMatrix* TMatrix11;
00132 Epetra_CrsMatrix* NodeMatrix11;
00133 Epetra_CrsMatrix* K12;
00134 Epetra_CrsMatrix* K22;
00135 const Epetra_Map& DomainMap;
00136 const Epetra_Map& RangeMap;
00137
00138 Amesos_BaseSolver* Abase;
00139 Epetra_LinearProblem* ProblemL;
00140 Teuchos::ParameterList* ParamList;
00141
00142 AztecOO* solver22_;
00145 Epetra_Operator *operator22_;
00148 Epetra_Operator *operator11_;
00149
00150 const Epetra_Comm& _Comm;
00151
00152 bool _useTranspose;
00153 mutable bool isFactorized;
00154
00155 private:
00156 Teuchos::ParameterList& params_;
00157
00158 };
00159
00160 #endif