PlayaSimpleBlockOpDecl.hpp

00001 /* @HEADER@ */
00002 //   
00003  /* @HEADER@ */
00004 
00005 #ifndef PLAYA_SIMPLEBLOCKOP_DECL_HPP
00006 #define PLAYA_SIMPLEBLOCKOP_DECL_HPP
00007 
00008 
00009 #include "PlayaDefs.hpp"
00010 #include "Teuchos_Array.hpp"
00011 #include "PlayaBlockOperatorBaseDecl.hpp"
00012 #include "PlayaLinearOperatorDecl.hpp"
00013 #include "PlayaLinearOpWithSpacesDecl.hpp"
00014 
00015 
00016 
00017 namespace Playa
00018 {
00019 using namespace Teuchos;
00020 
00026 template <class Scalar>
00027 class SimpleBlockOp : public LinearOpWithSpaces<Scalar>,
00028                       public SetableBlockOperatorBase<Scalar>
00029 {
00030 public:
00032   SimpleBlockOp(const VectorSpace<Scalar>& domain,
00033     const VectorSpace<Scalar>& range);
00034 
00036   int numBlockRows() const  ;
00037 
00039   int numBlockCols() const ;
00040 
00042   const LinearOperator<Scalar>& getBlock(int i, int j) const ;
00043 
00045   LinearOperator<Scalar> getNonconstBlock(int i, int j) ;
00046 
00048   void setBlock(int i, int j, const LinearOperator<Scalar>& Aij) ; 
00049 
00051   void apply(Teuchos::ETransp transApplyType,
00052     const Vector<Scalar>& in,
00053     Vector<Scalar> out) const ;
00054 
00055 private:
00056   Array<Array<LinearOperator<Scalar> > > blocks_;
00057 
00058 }; 
00059 
00060 
00062 template <class Scalar>
00063 LinearOperator<Scalar> makeBlockOperator(
00064   const VectorSpace<Scalar>& domain,
00065   const VectorSpace<Scalar>& range
00066   );
00067 
00068 
00069 
00070 
00071 
00072 }
00073 
00074 #endif

doxygen