EpetraPlayaOperator.hpp

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 
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

doxygen