lanczpol.hxx

Go to the documentation of this file.
00001 
00002 
00003 #ifndef CH_MATRIX_CLASSES__LANCZPOL_HXX
00004 #define CH_MATRIX_CLASSES__LANCZPOL_HXX
00005 
00015 #ifndef CH_MATRIX_CLASSES__LANCZOS_HXX
00016 #include "lanczos.hxx"
00017 #endif
00018 #include "clock.hxx"
00019 
00020 namespace CH_Matrix_Classes {
00021 
00022 
00026 
00027 
00035 class Lanczpol:public Lanczos,protected Memarrayuser
00036 {
00037 private:
00038   int     ierr;        
00039   Integer maxop;       
00040   Integer maxiter;     
00041   Integer maxguessiter;
00042   Integer guessmult;   
00043   Integer choicencheb; 
00044   Integer nchebit;     
00045   Integer choicenbmult;
00046   Integer nblockmult;  
00047   Integer nlanczvecs;  
00048   Integer retlanvecs;  
00049   
00050   //--- global variables to allow reastarting
00051   Integer neigfound;  
00052   Integer blocksz;    
00053   Integer iter;       
00054   Integer nmult;      
00055   
00056   Real errc;   
00057   Real eps;    
00058   Real mcheps; 
00059   Real maxval; 
00060   Real minval; 
00061   Real polval; 
00062   
00063   Matrix X; 
00064   Matrix C; 
00065   Matrix d; 
00066   Matrix e; 
00067   Matrix Xqr; 
00068   Matrix u; 
00069   Matrix v; 
00070   Matrix w; 
00071   Matrix minvec;  
00072   
00073   const Lanczosmatrix* bigmatrix; 
00074     
00075   int stop_above;    
00076   Real upper_bound;  
00077   
00078   Integer ncalls;    
00079   Integer mymaxj;    
00080 
00081   CH_Tools::GB_rand randgen;  
00082 
00083   CH_Tools::Clock myclock;           
00084   CH_Tools::Microseconds time_mult;  
00085   CH_Tools::Microseconds time_mult_sum;  
00086   CH_Tools::Microseconds time_iter; 
00087   CH_Tools::Microseconds time_sum; 
00088 
00089   int print_level;   
00090   std::ostream* myout;   
00091 
00093   void error(const char *s){
00094     if (myout) 
00095       (*myout)<<"Lanczos Error: "<<s<<std::endl;
00096   }
00097 
00099   int guess_extremes(Integer nproposed);
00100     
00102   int dhua(Integer nreig,Integer nproposed, Integer maxmult);
00103     
00105   int bklanc(Integer neigfound,Integer blocksz,Integer s,
00106                const Matrix &d,Matrix &C,Matrix &X,
00107                Matrix &e,Matrix &u,Matrix &v);
00108 
00110   int bkqrlanc(Integer neigfound,Integer blocksz,Integer s,
00111                const Matrix &d,Matrix &C,Matrix &X,
00112                Matrix &e,Matrix &u,Matrix &v);
00113 
00115   int bklanccheb(Integer neigfound,Integer blocksz,Integer s,
00116                     Matrix &C,Matrix &X,Matrix &e,Matrix &v);
00117 
00119   int bkqrlanccheb(Integer neigfound,Integer blocksz,Integer s,
00120                     Matrix &C,Matrix &X,Matrix &e,Matrix &v);
00121   
00122   int pch(Integer q,Integer neigfound,Integer nreig,Integer nconv,
00123           Integer &blocksz,Integer &s,Integer iter,Integer sbs,const Matrix& d);
00124 
00126   int err(Integer neigfound,Integer blocksz,const Matrix& X,Matrix &e);
00127 
00129   int cnvtst(Integer neigfound,Integer blocksz,Real& errc,Real eps,
00130                const Matrix& d,const Matrix &e,Integer &nconv);
00131     
00133   int eigen(Integer neigfound,Integer blocksz,Integer sbsz,Matrix& C,
00134             Matrix& d,Matrix& u,Matrix& v,Real& af);
00135 
00137   int sectn(Matrix& X,Integer neigfound,Integer blocksz,
00138             Matrix& C,Matrix& d,Matrix& u,Matrix& v,
00139             Real& af);
00140 
00142   int rotate_extremes(Integer neigfound,Integer sbs,Matrix& d,
00143                       const Matrix& C,Matrix &X,Matrix& v);
00144   
00146   int rotate(Integer neigfound,Integer sbs,Integer l,
00147              const Matrix& C,Matrix &X,Matrix& v);
00148 
00150   int random(Matrix& X,Integer j);
00151 
00153   Integer orthog(Integer offset,Integer blocksz,Matrix &X,Matrix& B);
00154 
00156   int blockcheby(Integer col_offset,const Matrix& X,Matrix& v);
00157 
00159   Real scalarcheby(Real xval);
00160 
00162   int tred2(Integer n,const Matrix& C,Matrix& u,Matrix& v,Matrix& Z);
00163 
00165   int tql2(Integer n,Matrix &u,Matrix &v, Matrix& Z);
00166 
00167 public:
00169   Lanczpol();
00171   ~Lanczpol();
00172 
00173 
00180   
00182   void set_mineig(Real ie){minval=ie;}
00184   void set_maxmult(Integer mop){maxop=mop;}
00186   void set_maxiter(Integer mi){maxiter=mi;}
00188   void set_relprec(Real relprec){eps=relprec;}  
00190   void set_nchebit(Integer cheb){choicencheb=cheb;} 
00192   void set_nblockmult(Integer nb){choicenbmult=nb;}
00193   
00195   void enable_stop_above(Real ub){stop_above=1; upper_bound=ub;}
00197   void disable_stop_above(){stop_above=0;}
00198   
00200   void set_retlanvecs(Integer nl){retlanvecs=nl;} 
00201   
00203   int get_lanczosvecs(Matrix& val,Matrix& vecs) const;
00204   
00206   Real get_relprec(void){return eps;} //relative precision
00207   
00209   int get_err() const{return ierr;}
00211   Integer get_iter() const{return iter;}
00213   Integer get_nmult() const{return nmult;}
00214 
00216     
00218     int compute(const Lanczosmatrix* bigmat, 
00219                 Matrix& eigval,        
00220                 Matrix& eigvec,        
00221                 Integer nreig,         
00222                 Integer in_blocksz=0,  
00223                 Integer maxcol=0       
00224                 );
00225 
00226 
00227 
00232   
00234   void set_out(std::ostream* o=0,int pril=1)
00235   {myout=o; print_level=pril;}
00236 
00237 
00239   std::ostream& save(std::ostream& out) const;
00240   
00242   std::istream& restore(std::istream& in);
00244 };
00245 
00247 
00248 }
00249 
00250 #endif
00251 

Generated on Tue May 3 16:52:53 2011 for ConicBundle by  doxygen 1.5.6