00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef THYRA_DIAGONAL_LINEAR_OP_DECL_HPP
00030 #define THYRA_DIAGONAL_LINEAR_OP_DECL_HPP
00031
00032 #include "Thyra_DiagonalLinearOpBase.hpp"
00033 #include "Thyra_SingleRhsLinearOpBaseDecl.hpp"
00034 #include "Teuchos_ConstNonconstObjectContainer.hpp"
00035
00036 namespace Thyra {
00037
00067 template<class Scalar>
00068 class DefaultDiagonalLinearOp
00069 : virtual public DiagonalLinearOpBase<Scalar>
00070 , virtual protected SingleRhsLinearOpBase<Scalar>
00071 {
00072 public:
00073
00076
00083 DefaultDiagonalLinearOp();
00084
00087 DefaultDiagonalLinearOp(
00088 const Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> > &space
00089 );
00090
00094 DefaultDiagonalLinearOp(
00095 const Teuchos::RefCountPtr<VectorBase<Scalar> > &diag
00096 );
00097
00101 DefaultDiagonalLinearOp(
00102 const Teuchos::RefCountPtr<const VectorBase<Scalar> > &diag
00103 );
00104
00120 void initialize(
00121 const Teuchos::RefCountPtr<const VectorSpaceBase<Scalar> > &space
00122 );
00123
00139 void initialize(
00140 const Teuchos::RefCountPtr<VectorBase<Scalar> > &diag
00141 );
00142
00158 void initialize(
00159 const Teuchos::RefCountPtr<const VectorBase<Scalar> > &diag
00160 );
00161
00176 void uninitialize();
00177
00179
00182
00184 bool isDiagConst() const;
00186 Teuchos::RefCountPtr<VectorBase<Scalar> > getNonconstDiag();
00188 Teuchos::RefCountPtr<const VectorBase<Scalar> > getDiag() const;
00189
00191
00200 Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > range() const;
00207 Teuchos::RefCountPtr< const VectorSpaceBase<Scalar> > domain() const;
00209 Teuchos::RefCountPtr<const LinearOpBase<Scalar> > clone() const;
00211
00212 protected:
00213
00217 bool opSupported(ETransp M_trans) const;
00219
00223 void apply(
00224 const ETransp M_trans
00225 ,const VectorBase<Scalar> &x
00226 ,VectorBase<Scalar> *y
00227 ,const Scalar alpha
00228 ,const Scalar beta
00229 ) const;
00231
00232 private:
00233
00234 Teuchos::ConstNonconstObjectContainer<VectorBase<Scalar> > diag_;
00235
00236 };
00237
00238 }
00239
00240 #endif // THYRA_DIAGONAL_LINEAR_OP_DECL_HPP