00001 00002 00003 #ifndef CH_MATRIX_CLASSES__LANCZOS_HXX 00004 #define CH_MATRIX_CLASSES__LANCZOS_HXX 00005 00014 #ifndef CH_MATRIX_CLASSES__MATRIX_HXX 00015 #include "matrix.hxx" 00016 #endif 00017 00018 namespace CH_Matrix_Classes { 00019 00024 00033 class Lanczosmatrix 00034 { 00035 public: 00036 virtual ~Lanczosmatrix(){} 00037 00039 virtual Integer lanczosdim() const=0; 00040 00042 virtual Integer lanczosflops() const=0; 00043 00045 virtual int lanczosmult(const Matrix& A,Matrix& B) const=0; 00046 }; 00047 00048 00053 class Lanczos 00054 { 00055 public: 00057 virtual ~Lanczos(){} 00058 00065 00067 virtual void set_mineig(Real ie)=0; 00069 virtual void set_maxmult(Integer mop)=0; 00071 virtual void set_maxiter(Integer mi)=0; 00073 virtual void set_relprec(Real relprec)=0; 00075 virtual void set_nblockmult(Integer nb)=0; 00077 virtual void set_nchebit(Integer nc)=0; 00079 virtual void enable_stop_above(Real ub)=0; 00081 virtual void disable_stop_above()=0; 00082 00084 virtual void set_retlanvecs(Integer nl)=0; 00085 00087 virtual int get_lanczosvecs(Matrix& val,Matrix& vecs) const=0; 00088 00090 virtual Real get_relprec(void)=0; 00091 00093 virtual int get_err() const=0; 00094 00096 virtual Integer get_iter() const=0; 00097 00099 virtual Integer get_nmult() const=0; 00100 00102 00104 virtual int compute(const Lanczosmatrix* bigmat, 00105 Matrix& eigval, 00106 Matrix& eigvec, 00107 Integer nreig, 00108 Integer in_blocksz=0, 00109 Integer maxcol=0 00110 )=0; 00111 00116 00118 virtual void set_out(std::ostream* out=0,int print_level=1)=0; 00119 00121 virtual std::ostream& save(std::ostream& out) const =0; 00122 00124 virtual std::istream& restore(std::istream& in) =0; 00125 00127 }; 00128 00130 00131 } 00132 00133 #endif 00134