PlayaEigensolverBase.hpp
Go to the documentation of this file.
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

Site Contact