Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

eigensolver/anasaziHelper.h
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 }

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)