PlayaSimpleDiagonalOpImpl.hpp

00001 /* @HEADER@ */
00002 //   
00003  /* @HEADER@ */
00004 
00005 #ifndef PLAYA_SIMPLE_DIAGONAL_OP_IMPL_HPP
00006 #define PLAYA_SIMPLE_DIAGONAL_OP_IMPL_HPP
00007 
00008 
00009 
00010 #include "PlayaSimpleDiagonalOpDecl.hpp"
00011 #include "PlayaOut.hpp"
00012 #include "PlayaTabs.hpp"
00013 
00014 #ifndef HAVE_TEUCHOS_EXPLICIT_INSTANTIATION
00015 #include "PlayaVectorImpl.hpp"
00016 #endif
00017 
00018 
00019 namespace Playa
00020 {
00021 using namespace Teuchos;
00022 
00023 
00024 
00025 
00026 /*
00027  * --- scaled op
00028  */
00029 
00030 template <class Scalar> inline
00031 SimpleDiagonalOp<Scalar>::SimpleDiagonalOp(
00032   const Vector<Scalar>& diag)
00033   : LinearOpWithSpaces<Scalar>(
00034     diag.space(), diag.space()
00035     ), diag_(diag)
00036 {}
00037   
00038 /* */
00039 template <class Scalar> inline
00040 void SimpleDiagonalOp<Scalar>::apply(Teuchos::ETransp transApplyType,
00041   const Vector<Scalar>& in,
00042   Vector<Scalar> out) const
00043 {
00044   Tabs tab(0);
00045   PLAYA_MSG2(this->verb(), tab << "SimpleDiagonalOp::apply()");
00046 
00047   Vector<Scalar> tmp = in.dotStar(diag_);
00048   out.acceptCopyOf(tmp);
00049 
00050   PLAYA_MSG2(this->verb(), tab << "done SimpleDiagonalOp::apply()");
00051 }
00052   
00053 /* */
00054 template <class Scalar> inline
00055 std::string SimpleDiagonalOp<Scalar>::description() const 
00056 {
00057   return "DiagonalOp[diag=" + diag_.description() + "]";
00058 }
00059 
00060 
00061 /* */
00062 template <class Scalar> inline
00063 void SimpleDiagonalOp<Scalar>::print(std::ostream& os) const 
00064 {
00065   Tabs tab(0);
00066   os << tab << "DiagonalOp[" << std::endl;
00067   Tabs tab1;
00068   os << tab1 << "diag = " << diag_ << std::endl;
00069   os << tab << "]" << std::endl;
00070 }
00071 
00072 
00073 
00074 template <class Scalar> inline
00075 LinearOperator<Scalar> diagonalOperator(
00076   const Vector<Scalar>& diag)
00077 {
00078   RCP<LinearOperatorBase<Scalar> > A 
00079     = rcp(new SimpleDiagonalOp<Scalar>(diag));
00080 
00081   return A;
00082 }
00083 
00084 
00085 
00086 }
00087 
00088 #endif

doxygen