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