00001
00002
00003
00004
00005 #ifndef PLAYA_EIGENSOLVER_HPP
00006 #define PLAYA_EIGENSOLVER_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 Eigensolver : public Playa::Handle<EigensolverBase<Scalar> >
00023 {
00024 public:
00025
00026 Eigensolver() : Handle<EigensolverBase<Scalar> >() {;}
00027
00028 Eigensolver( Playa::Handleable<EigensolverBase<Scalar> >* rawPtr)
00029 : Handle<EigensolverBase<Scalar> >(rawPtr) {;}
00030
00031 Eigensolver(const RCP<EigensolverBase<Scalar> >& smartPtr)
00032 : Handle<EigensolverBase<Scalar> >(smartPtr) {;}
00033
00034
00035
00036 void solve(
00037 const LinearOperator<Scalar>& K,
00038 const LinearOperator<Scalar>& M,
00039 Array<Vector<Scalar> >& ev,
00040 Array<std::complex<Scalar> >& ew) const
00041 {
00042 this->ptr()->solve(K, M, ev, ew);
00043 }
00044
00045
00046 void solve(
00047 const LinearOperator<Scalar>& K,
00048 Array<Vector<Scalar> >& ev,
00049 Array<std::complex<Scalar> >& ew) const
00050 {
00051 this->ptr()->solve(K, ev, ew);
00052 }
00053
00054
00055 const ParameterList& params() const
00056 {
00057 TEUCHOS_TEST_FOR_EXCEPTION(this->ptr().get()==0, std::runtime_error,
00058 "null pointer in Eigensolver::parameters()");
00059 return this->ptr()->params();
00060 }
00061
00062
00063 ParameterList& params()
00064 {
00065 TEUCHOS_TEST_FOR_EXCEPTION(this->ptr().get()==0, std::runtime_error,
00066 "null pointer in Eigensolver::parameters()");
00067 return this->ptr()->params();
00068 }
00069
00070
00071 static FancyOStream& os()
00072 {
00073 return Out::os();
00074 }
00075 };
00076
00077
00078
00079 }
00080
00081
00082 #endif