00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_SIMPLE_COMPOSED_OP_DECL_HPP 00006 #define PLAYA_SIMPLE_COMPOSED_OP_DECL_HPP 00007 00008 00009 #include "PlayaDefs.hpp" 00010 #include "PlayaLinearOpWithSpacesDecl.hpp" 00011 #include "PlayaLinearOperatorDecl.hpp" 00012 00013 00014 namespace Playa 00015 { 00016 using namespace Teuchos; 00017 00018 00019 00020 00021 /** 00022 * Represent a composed operator A_0 * A_1 * ... * A_n. 00023 */ 00024 template <class Scalar> 00025 class SimpleComposedOp : public LinearOpWithSpaces<Scalar>, 00026 public Printable 00027 { 00028 public: 00029 /** */ 00030 SimpleComposedOp(const Array<LinearOperator<Scalar> >& ops); 00031 00032 /** */ 00033 void apply(Teuchos::ETransp transApplyType, 00034 const Vector<Scalar>& in, 00035 Vector<Scalar> out) const; 00036 00037 00038 /** */ 00039 std::string description() const ; 00040 00041 /** */ 00042 void print(std::ostream& os) const ; 00043 00044 private: 00045 Array<LinearOperator<Scalar> > ops_; 00046 }; 00047 00048 00049 template <class Scalar> 00050 LinearOperator<Scalar> composedOperator( 00051 const Array<LinearOperator<Scalar> >& ops); 00052 00053 00054 template <class Scalar> 00055 LinearOperator<Scalar> operator*(const LinearOperator<Scalar>& A, 00056 const LinearOperator<Scalar>& B); 00057 00058 } 00059 00060 #endif