00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef EPETRA_PLAYA_OPERATOR_HPP 00006 #define EPETRA_PLAYA_OPERATOR_HPP 00007 00008 #include "PlayaLinearOperatorDecl.hpp" 00009 #include "PlayaLinearSolverDecl.hpp" 00010 #include "Epetra_Operator.h" 00011 00012 namespace Epetra 00013 { 00014 using namespace Teuchos; 00015 using namespace Playa; 00016 00017 00018 00019 /** */ 00020 class Epetra_PlayaOperator : public Epetra_Operator 00021 { 00022 public: 00023 /** */ 00024 Epetra_PlayaOperator(const LinearOperator<double>& A, 00025 const LinearSolver<double>& solver=LinearSolver<double>()); 00026 00027 /** */ 00028 int SetUseTranspose(bool useTrans) {useTranspose_ = useTrans; return 0;} 00029 00030 /** */ 00031 int Apply(const Epetra_MultiVector& in, Epetra_MultiVector& out) const ; 00032 00033 /** */ 00034 int ApplyInverse(const Epetra_MultiVector& in, Epetra_MultiVector& out) const ; 00035 00036 /** */ 00037 double NormInf() const ; 00038 00039 /** */ 00040 const char* Label() const ; 00041 00042 /** */ 00043 bool UseTranspose() const {return useTranspose_;} 00044 00045 /** */ 00046 bool HasNormInf() const {return false;} 00047 00048 /** */ 00049 const Epetra_Comm& Comm() const {return *comm_;} 00050 00051 /** */ 00052 const Epetra_Map& OperatorDomainMap() const {return *domain_;} 00053 00054 /** */ 00055 const Epetra_Map& OperatorRangeMap() const {return *range_;} 00056 00057 00058 00059 private: 00060 LinearOperator<double> A_; 00061 LinearSolver<double> solver_; 00062 bool useTranspose_; 00063 RCP<Epetra_Comm> comm_; 00064 RCP<const Epetra_Map> domain_; 00065 RCP<const Epetra_Map> range_; 00066 bool isNativeEpetra_; 00067 bool isCompoundEpetra_; 00068 std::string label_; 00069 }; 00070 } 00071 00072 #endif