00001 #ifndef IFPACK_PRECONDITIONER_H
00002 #define IFPACK_PRECONDITIONER_H
00003
00004 #include "Ifpack_ConfigDefs.h"
00005 #include "Ifpack_CondestType.h"
00006 #include "Epetra_Object.h"
00007 #include "Epetra_Operator.h"
00008 #ifdef HAVE_IFPACK_TEUCHOS
00009 #include "Teuchos_ParameterList.hpp"
00010 #endif
00011 class Epetra_RowMatrix;
00012
00014
00096 class Ifpack_Preconditioner : public Epetra_Operator {
00097
00098 public:
00099
00100 #ifdef HAVE_IFPACK_TEUCHOS
00101
00102 virtual int SetParameters(Teuchos::ParameterList& List) = 0;
00103 #endif
00104
00106 virtual int Initialize() = 0;
00107
00109 virtual bool IsInitialized() const = 0;
00110
00112 virtual int Compute() = 0;
00113
00115 virtual bool IsComputed() const = 0;
00116
00118 virtual double Condest(const Ifpack_CondestType CT = Ifpack_Cheap,
00119 const int MaxIters = 1550,
00120 const double Tol = 1e-9,
00121 Epetra_RowMatrix* Matrix = 0) = 0;
00122
00124 virtual double Condest() const = 0;
00125
00127 virtual int ApplyInverse(const Epetra_MultiVector& X,
00128 Epetra_MultiVector& Y) const = 0;
00129
00131 virtual const Epetra_RowMatrix& Matrix() const = 0;
00132
00134 virtual int NumInitialize() const = 0;
00135
00137 virtual int NumCompute() const = 0;
00138
00140 virtual int NumApplyInverse() const = 0;
00141
00143 virtual double InitializeTime() const = 0;
00144
00146 virtual double ComputeTime() const = 0;
00147
00149 virtual double ApplyInverseTime() const = 0;
00150
00152 virtual double InitializeFlops() const = 0;
00153
00155 virtual double ComputeFlops() const = 0;
00156
00158 virtual double ApplyInverseFlops() const = 0;
00159
00161 virtual ostream& Print(std::ostream& os) const = 0;
00162
00163 };
00164
00165 inline ostream& operator<<(ostream& os, const Ifpack_Preconditioner& obj)
00166 {
00167 return(obj.Print(os));
00168 }
00169
00170 #endif // IFPACK_PRECONDITIONER_H