Go to the documentation of this file.00001
00002
00003 #ifndef ArPackSymmdsymm_hh
00004 #define ArPackSymmdsymm_hh
00005
00006 #include <cfloat>
00007 #include "eigens.hh"
00008
00009 namespace concepts {
00010
00011 template<typename F>
00012 class Operator;
00013 }
00014
00015 namespace eigensolver {
00016
00017 using concepts::Real;
00018
00019
00020
00062 class ArPackSymm : public EigenSolver<Real> {
00063 public:
00067 enum which { LA, SA, LM, SM, BE };
00084 enum modus { NORMAL = 1, REGINV = 2, SHIFTINV = 3, BUCKLING = 4,
00085 CAYLEY = 5 };
00118 ArPackSymm(concepts::Operator<Real>& OP,
00119 concepts::Operator<Real>& A,
00120 concepts::Operator<Real>& B,
00121 const int kmax = 1, const Real tol = 0.0,
00122 const int maxiter = 300,
00123 enum which target = SM, enum modus mode = REGINV,
00124 const Real sigma = 0.0,
00125 const concepts::Vector<Real>* start = 0);
00126 virtual ~ArPackSymm();
00127 virtual const concepts::Array<Real>& getEV();
00128 virtual const concepts::Array<concepts::Vector<Real>*>& getEF();
00129 virtual uint iterations() const { return (uint)iter_; }
00130 virtual uint converged() const { return (uint)k_conv_; }
00131 protected:
00132 virtual std::ostream& info(std::ostream& os) const;
00133 private:
00135 concepts::Operator<Real>& OP_;
00137 concepts::Operator<Real>& A_;
00139 concepts::Operator<Real>& B_;
00141 int kmax_;
00143 int maxiter_;
00145 Real tol_;
00146 int numop_, numopb_, numreo_, k_conv_, iter_;
00148 concepts::Array<Real> eigenvalues_;
00150 concepts::Array<Real> eigenvectors_;
00152 concepts::Array<concepts::Vector<Real>*> ev_;
00154 enum which target_;
00156 enum modus mode_;
00158 const Real sigma_;
00160 const concepts::Vector<Real>* start_;
00161 bool computed_;
00162 void compute_();
00163 };
00164
00165 }
00166
00167 #endif // ArPackSymm_hh