00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_EIGENSOLVERBASE_HPP 00006 #define PLAYA_EIGENSOLVERBASE_HPP 00007 00008 #include "PlayaDefs.hpp" 00009 #include "PlayaVectorDecl.hpp" 00010 #include "PlayaSolverState.hpp" 00011 #include "Teuchos_ParameterList.hpp" 00012 #include "PlayaLinearOperatorImpl.hpp" 00013 00014 namespace Playa 00015 { 00016 using Teuchos::ParameterList; 00017 00018 /** 00019 * Base class for eigensolvers for linear eigenvalue problems 00020 * \f[ 00021 * K x = \lambda M x. 00022 * \f] 00023 */ 00024 template <class Scalar> 00025 class EigensolverBase 00026 { 00027 public: 00028 /** */ 00029 EigensolverBase() : params_() {;} 00030 00031 /** */ 00032 EigensolverBase(const ParameterList& params) : params_(params) {;} 00033 00034 /** */ 00035 virtual ~EigensolverBase(){;} 00036 00037 /** 00038 * Solve a generalized eigensystem \f$K x = \lambda M x.\f$ 00039 */ 00040 virtual void solve( 00041 const LinearOperator<Scalar>& K, 00042 const LinearOperator<Scalar>& M, 00043 Array<Vector<Scalar> >& ev, 00044 Array<std::complex<Scalar> >& ew) const = 0 ; 00045 00046 /** 00047 * Solve an eigensystem \f$K x = \lambda x.\f$ 00048 */ 00049 virtual void solve( 00050 const LinearOperator<Scalar>& K, 00051 Array<Vector<Scalar> >& ev, 00052 Array<std::complex<Scalar> >& ew) const 00053 { 00054 LinearOperator<Scalar> M; 00055 solve(K,M,ev,ew); 00056 }; 00057 00058 /** 00059 * Return the parameter list that was used to define this object. 00060 */ 00061 const ParameterList& params() const {return params_;} 00062 00063 private: 00064 ParameterList params_; 00065 }; 00066 00067 } 00068 00069 00070 #endif