00001 #ifndef PROJECTOR_H
00002 #define PROJECTOR_H
00003
00004 #include "Epetra_Operator.h"
00005
00006
00007 class Projector : public virtual Epetra_Operator {
00008
00009 public:
00010
00011 Projector(Epetra_Operator* Y, const Epetra_Operator* H, Epetra_Operator* C);
00012
00014
00015 ~Projector();
00017
00019
00021
00030 int SetUseTranspose(bool UseTranspose);
00032
00034
00036
00044 int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00045
00047
00058 int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00059
00061
00062
00063
00064
00065
00066 double NormInf() const;
00068
00070
00072 const char * Label() const;
00073
00075 bool UseTranspose() const;
00076
00078 bool HasNormInf() const;
00079
00081 const Epetra_Comm & Comm() const;
00082
00084 const Epetra_Map & OperatorDomainMap() const;
00085
00087 const Epetra_Map & OperatorRangeMap() const;
00089
00090
00091 protected:
00092
00093 Epetra_Operator* _Y;
00094 const Epetra_Operator* _H;
00095 Epetra_Operator* _C;
00096
00097 bool _useTranspose;
00098
00099 Epetra_Vector* _vector1;
00100 Epetra_Vector* _vector2;
00101 Epetra_Vector* _vector3;
00102 const Epetra_Comm& _Comm;
00103
00104 private:
00105
00106 };
00107
00108 #endif