00001
00002
00003
00004
00005 #ifndef PLAYA_ANASAZIEIGENSOLVER_DECL_HPP
00006 #define PLAYA_ANASAZIEIGENSOLVER_DECL_HPP
00007
00008 #include "PlayaDefs.hpp"
00009 #include "PlayaVectorDecl.hpp"
00010 #include "PlayaSolverState.hpp"
00011 #include "Teuchos_ParameterList.hpp"
00012 #include "PlayaEigensolverBase.hpp"
00013
00014 namespace Playa
00015 {
00016 using Teuchos::ParameterList;
00017
00018
00019
00020
00021 template <class Scalar>
00022 class AnasaziEigensolver
00023 : public EigensolverBase<Scalar>,
00024 public Playa::Handleable<EigensolverBase<Scalar> >
00025 {
00026 public:
00027
00028 AnasaziEigensolver(const ParameterList& params)
00029 : EigensolverBase<Scalar>(params) {;}
00030
00031
00032
00033
00034 virtual void solve(
00035 const LinearOperator<Scalar>& K,
00036 const LinearOperator<Scalar>& M,
00037 Array<Vector<Scalar> >& ev,
00038 Array<std::complex<Scalar> >& ew) const ;
00039
00040
00041
00042
00043 virtual RCP<EigensolverBase<Scalar> > getRcp()
00044 {return rcp(this);}
00045
00046
00047 private:
00048
00049 static Time& solveTimer()
00050 {
00051 static RCP<Time> rtn
00052 = TimeMonitor::getNewTimer("AnasaziEigensolver solve()");
00053 return *rtn;
00054 }
00055
00056 static Time& precondBuildTimer()
00057 {
00058 static RCP<Time> rtn
00059 = TimeMonitor::getNewTimer("AnasaziEigensolver building preconditioner");
00060 return *rtn;
00061 }
00062
00063 };
00064
00065
00066
00067
00068 }
00069
00070
00071 #endif