EpetraPlayaOperator.hpp
00001
00002
00003
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
00020 class Epetra_PlayaOperator : public Epetra_Operator
00021 {
00022 public:
00024 Epetra_PlayaOperator(const LinearOperator<double>& A,
00025 const LinearSolver<double>& solver=LinearSolver<double>());
00026
00028 int SetUseTranspose(bool useTrans) {useTranspose_ = useTrans; return 0;}
00029
00031 int Apply(const Epetra_MultiVector& in, Epetra_MultiVector& out) const ;
00032
00034 int ApplyInverse(const Epetra_MultiVector& in, Epetra_MultiVector& out) const ;
00035
00037 double NormInf() const ;
00038
00040 const char* Label() const ;
00041
00043 bool UseTranspose() const {return useTranspose_;}
00044
00046 bool HasNormInf() const {return false;}
00047
00049 const Epetra_Comm& Comm() const {return *comm_;}
00050
00052 const Epetra_Map& OperatorDomainMap() const {return *domain_;}
00053
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