00001 #ifndef IFPACK_CONTAINER_H
00002 #define IFPACK_CONTAINER_H
00003
00004 class Epetra_RowMatrix;
00005 class Ifpack_Partitioner;
00006 namespace Teuchos {
00007 class ParameterList;
00008 }
00009
00011
00056 class Ifpack_Container {
00057
00058 public:
00059
00061 virtual ~Ifpack_Container() {};
00062
00064 virtual int NumRows() const = 0;
00065
00067 virtual int NumVectors() const = 0;
00068
00070 virtual int SetNumVectors(const int i) = 0;
00071
00073 virtual double& LHS(const int i, const int Vector = 0) = 0;
00074
00076 virtual double& RHS(const int i, const int Vector = 0) = 0;
00077
00079
00088 virtual int& ID(const int i) = 0;
00089
00091 virtual int SetMatrixElement(const int row, const int col,
00092 const double value) = 0;
00093
00095 virtual int Initialize() = 0;
00096
00098 virtual int Compute(const Epetra_RowMatrix& A) = 0;
00099
00101 virtual int SetParameters(Teuchos::ParameterList& List) = 0;
00102
00104 virtual bool IsInitialized() const = 0;
00105
00107 virtual bool IsComputed() const = 0;
00108
00110 virtual int Apply() = 0;
00111
00113 virtual int ApplyInverse() = 0;
00114
00116 virtual const char* Label() const = 0;
00117
00119 virtual double InitializeFlops() const = 0;
00120
00122 virtual double ComputeFlops() const = 0;
00123
00125 virtual double ApplyFlops() const = 0;
00126
00128 virtual double ApplyInverseFlops() const = 0;
00129
00131 virtual ostream& Print(std::ostream& os) const = 0;
00132 };
00133
00134 inline ostream& operator<<(ostream& os, const Ifpack_Container& obj)
00135 {
00136 return(obj.Print(os));
00137 }
00138
00139 #endif // IFPACK_CONTAINER_H