PlayaSimpleDiagonalOpImpl.hpp
00001
00002
00003
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
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