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_CONTAINER_H
00031 #define IFPACK_CONTAINER_H
00032
00033 class Epetra_RowMatrix;
00034 class Ifpack_Partitioner;
00035 namespace Teuchos {
00036 class ParameterList;
00037 }
00038
00040
00085 class Ifpack_Container {
00086
00087 public:
00088
00090 virtual ~Ifpack_Container() {};
00091
00093 virtual int NumRows() const = 0;
00094
00096 virtual int NumVectors() const = 0;
00097
00099 virtual int SetNumVectors(const int i) = 0;
00100
00102 virtual double& LHS(const int i, const int Vector = 0) = 0;
00103
00105 virtual double& RHS(const int i, const int Vector = 0) = 0;
00106
00108
00117 virtual int& ID(const int i) = 0;
00118
00120 virtual int SetMatrixElement(const int row, const int col,
00121 const double value) = 0;
00122
00124 virtual int Initialize() = 0;
00125
00127 virtual int Compute(const Epetra_RowMatrix& A) = 0;
00128
00130 virtual int SetParameters(Teuchos::ParameterList& List) = 0;
00131
00133 virtual bool IsInitialized() const = 0;
00134
00136 virtual bool IsComputed() const = 0;
00137
00139 virtual int Apply() = 0;
00140
00142 virtual int ApplyInverse() = 0;
00143
00145 virtual const char* Label() const = 0;
00146
00148 virtual double InitializeFlops() const = 0;
00149
00151 virtual double ComputeFlops() const = 0;
00152
00154 virtual double ApplyFlops() const = 0;
00155
00157 virtual double ApplyInverseFlops() const = 0;
00158
00160 virtual ostream& Print(std::ostream& os) const = 0;
00161 };
00162
00163 inline ostream& operator<<(ostream& os, const Ifpack_Container& obj)
00164 {
00165 return(obj.Print(os));
00166 }
00167
00168 #endif // IFPACK_CONTAINER_H