Go to the documentation of this file.00001 #pragma once
00002
00003 #define HAVE_CONFIG_H
00004
00005 #include "AnasaziOperator.hpp"
00006 #include <AnasaziMultiVec.hpp>
00007 #include "operator.hh"
00008 #include <Teuchos_SerialDenseMatrix.hpp>
00009
00010 namespace concepts {
00011
00012 template <class ScalarT>
00013 class AnasaziOp : public Anasazi::Operator<ScalarT> {
00014 public:
00016
00017
00019 AnasaziOp(Teuchos::RCP<Operator<ScalarT> > op)
00020 : op(op)
00021 { }
00022
00024 virtual ~AnasaziOp() {};
00026
00028
00029
00033 virtual void Apply ( const Anasazi::MultiVec<ScalarT>& x, Anasazi::MultiVec<ScalarT>& y ) const;
00034
00036
00037 const Operator<ScalarT>& getOp() {
00038 return *op;
00039 }
00040
00041 private:
00042 Teuchos::RCP<Operator<ScalarT> > op;
00043
00044 };
00045
00046 template <class ScalarT>
00047 class AnasaziMV : public Anasazi::MultiVec<ScalarT> {
00048 public:
00049 static const bool NO_ALLOCATE = false;
00050 typedef Vector<ScalarT> VectorT;
00051
00052 AnasaziMV(int dim = 0, int nvecs = 0, bool allocate = true);
00053 virtual ~AnasaziMV();
00054
00055 private:
00056 AnasaziMV(const AnasaziMV<ScalarT>& other);
00057 AnasaziMV<ScalarT>& operator=(const AnasaziMV<ScalarT> other);
00058
00059
00060 public:
00061
00065 virtual AnasaziMV<ScalarT>* Clone( const int numvecs ) const;
00066
00071 virtual AnasaziMV<ScalarT>* CloneCopy() const;
00072
00078 virtual AnasaziMV<ScalarT>* CloneCopy ( const std::vector<int>& index ) const;
00079
00085 virtual AnasaziMV<ScalarT>* CloneView ( const std::vector<int>& index );
00087
00089
00090
00092 int GetVecLength () const { return dim; }
00093
00095 virtual int GetNumberVecs () const { return nvecs; }
00096
00098
00100
00101
00104 virtual void MvTimesMatAddMv ( ScalarT alpha, const Anasazi::MultiVec<ScalarT>& A,
00105 const Teuchos::SerialDenseMatrix<int,ScalarT>& B, ScalarT beta );
00106
00109 virtual void MvAddMv ( ScalarT alpha,const Anasazi::MultiVec<ScalarT>& A,
00110 ScalarT beta, const Anasazi::MultiVec<ScalarT>& B );
00111
00115 virtual void MvTransMv ( ScalarT alpha, const Anasazi::MultiVec<ScalarT>& A,
00116 Teuchos::SerialDenseMatrix<int,ScalarT>& B
00117 #ifdef HAVE_ANASAZI_EXPERIMENTAL
00118 , ConjType conj = Anasazi::CONJ
00119 #endif
00120 ) const;
00121
00125 virtual void MvDot ( const Anasazi::MultiVec<ScalarT>& A, std::vector<ScalarT> & b
00126 #ifdef HAVE_ANASAZI_EXPERIMENTAL
00127 , ConjType conj = Anasazi::CONJ
00128 #endif
00129 ) const;
00130
00132
00133
00134
00138 virtual void MvNorm (
00139 std::vector<typename Teuchos::ScalarTraits<ScalarT>::magnitudeType> & normvec
00140 ) const;
00141
00143
00145
00146
00151 virtual void SetBlock ( const Anasazi::MultiVec<ScalarT>& A, const std::vector<int>& index );
00152
00155 virtual void MvScale ( ScalarT alpha );
00156
00159 virtual void MvScale ( const std::vector<ScalarT>& alpha );
00160
00163 virtual void MvRandom ();
00164
00167 virtual void MvInit ( ScalarT alpha );
00168
00170
00171
00172
00174 virtual void MvPrint ( std::ostream& os ) const;
00176
00177 VectorT* getVec(int i)
00178 {
00179 return vecs[i];
00180 }
00181
00182 const VectorT* getVec(int i) const
00183 {
00184 return vecs[i];
00185 }
00186
00187 private:
00188 const int dim;
00189 int nvecs;
00190 VectorT** vecs;
00191 bool allocate;
00192 };
00193
00194 }