PlayaSimpleBlockOpDecl.hpp
Go to the documentation of this file.
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 
00021 /**
00022  * Array-based block operator
00023  *
00024  * @author Kevin Long (kevin.long@ttu.edu)
00025  */
00026 template <class Scalar>
00027 class SimpleBlockOp : public LinearOpWithSpaces<Scalar>,
00028                       public SetableBlockOperatorBase<Scalar>
00029 {
00030 public:
00031   /** */
00032   SimpleBlockOp(const VectorSpace<Scalar>& domain,
00033     const VectorSpace<Scalar>& range);
00034 
00035   /** */
00036   int numBlockRows() const  ;
00037 
00038   /** */
00039   int numBlockCols() const ;
00040 
00041   /** */
00042   const LinearOperator<Scalar>& getBlock(int i, int j) const ;
00043 
00044   /** */
00045   LinearOperator<Scalar> getNonconstBlock(int i, int j) ;
00046 
00047   /** */
00048   void setBlock(int i, int j, const LinearOperator<Scalar>& Aij) ; 
00049 
00050   /** */
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 
00061 /** \relates SimpleBlockOp Nonmember function to create a SimpleBlockOp */
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

Site Contact