PlayaInverseOperatorDecl.hpp

00001 /* @HEADER@ */
00002 //
00003  /* @HEADER@ */
00004 
00005 #ifndef PLAYA_INVERSEOPERATOR_DECL_HPP
00006 #define PLAYA_INVERSEOPERATOR_DECL_HPP
00007 
00008 #include "PlayaDefs.hpp"
00009 #include "PlayaLinearOperatorDecl.hpp"
00010 #include "PlayaLinearOpWithSpacesDecl.hpp"
00011 #include "Teuchos_RCP.hpp"
00012 #include "PlayaLinearSolverDecl.hpp"
00013 #include "PlayaSolverState.hpp"
00014 
00015 namespace Playa
00016 {
00017 using Teuchos::RCP;
00018 
00028 template <class Scalar> 
00029 class InverseOperator : public LinearOpWithSpaces<Scalar>,
00030                         public Printable
00031 {
00032 public:
00036   InverseOperator(const LinearOperator<Scalar>& op, 
00037     const LinearSolver<Scalar>& solver);
00038 
00040   virtual ~InverseOperator(){;}
00041 
00052   virtual void apply(
00053     Teuchos::ETransp applyType,
00054     const Vector<Scalar>& in,
00055     Vector<Scalar> out) const ;
00056 
00057 
00058   
00060   void print(std::ostream& os) const ;
00061 
00063   LinearOperator<Scalar> op() const {return op_;}
00064 
00065 
00066 private:
00067   const LinearOperator<Scalar> op_;
00068   const LinearSolver<Scalar> solver_;  
00069   std::string msg_;
00070 };
00071 
00072 
00074 template <class Scalar> 
00075 LinearOperator<Scalar> 
00076 inverse(const LinearOperator<Scalar>& op, 
00077   const LinearSolver<Scalar>& solver);
00078   
00079 
00080 }
00081 
00082 #endif

doxygen