00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef IFPACK_PRECONDITIONER_H
00031 #define IFPACK_PRECONDITIONER_H
00032
00033 #include "Ifpack_ConfigDefs.h"
00034 #include "Ifpack_CondestType.h"
00035 #include "Epetra_Object.h"
00036 #include "Epetra_Operator.h"
00037 #include "Teuchos_ParameterList.hpp"
00038 class Epetra_RowMatrix;
00039
00041
00123 class Ifpack_Preconditioner : public Epetra_Operator {
00124
00125 public:
00126
00128 virtual int SetParameters(Teuchos::ParameterList& List) = 0;
00129
00131 virtual int Initialize() = 0;
00132
00134 virtual bool IsInitialized() const = 0;
00135
00137 virtual int Compute() = 0;
00138
00140 virtual bool IsComputed() const = 0;
00141
00143 virtual double Condest(const Ifpack_CondestType CT = Ifpack_Cheap,
00144 const int MaxIters = 1550,
00145 const double Tol = 1e-9,
00146 Epetra_RowMatrix* Matrix = 0) = 0;
00147
00149 virtual double Condest() const = 0;
00150
00152 virtual int ApplyInverse(const Epetra_MultiVector& X,
00153 Epetra_MultiVector& Y) const = 0;
00154
00156 virtual const Epetra_RowMatrix& Matrix() const = 0;
00157
00159 virtual int NumInitialize() const = 0;
00160
00162 virtual int NumCompute() const = 0;
00163
00165 virtual int NumApplyInverse() const = 0;
00166
00168 virtual double InitializeTime() const = 0;
00169
00171 virtual double ComputeTime() const = 0;
00172
00174 virtual double ApplyInverseTime() const = 0;
00175
00177 virtual double InitializeFlops() const = 0;
00178
00180 virtual double ComputeFlops() const = 0;
00181
00183 virtual double ApplyInverseFlops() const = 0;
00184
00186 virtual ostream& Print(std::ostream& os) const = 0;
00187
00188 };
00189
00190 inline ostream& operator<<(ostream& os, const Ifpack_Preconditioner& obj)
00191 {
00192 return(obj.Print(os));
00193 }
00194
00195 #endif // IFPACK_PRECONDITIONER_H