00001 #ifndef __F_BiCgLS_ShiftedLS_H__
00002 #define __F_BiCgLS_ShiftedLS_H__
00003 
00004 
00029 #include <stdio.h>
00030 #include "F_IterativeShiftedLS.hpp"
00031 
00032 
00033 class F_BiCgLS_ShiftedLS : public F_IterativeShiftedLS
00034 {
00035 private:
00036 
00037 double                  alpha;
00038 double                  beta;
00039 double                  rho;
00040 double                  piLambda;
00041 double                  pi_1Lambda;
00042         
00043 FloatVector*            r;
00044 FloatVector*            p;
00045 FloatVector*            ap;                     
00046 
00047 FloatVector*            rbar;
00048 FloatVector*            pbar;   
00049 FloatVector*            apbar;
00050 
00051 FloatVector*            pLambda;
00052 FloatVector*            xLambda;
00053 
00054 protected:
00055 
00056 virtual FloatVector* singleSolve(AFloatMatrix*  A, FloatVector* b, FloatVector* x=0);
00057 
00058 public:
00059 F_BiCgLS_ShiftedLS(int maxIterations, double alambda=1.0, double adelta=0.01, double epsilon=1.0e-4)
00060         :F_IterativeShiftedLS(maxIterations, alambda, adelta, epsilon)
00061                 { r=p=ap=rbar=pbar=apbar= 0;}
00062 virtual ~F_BiCgLS_ShiftedLS(){} 
00063 
00064 virtual FloatVector* solve(AFloatMatrix*        m, FloatVector* b, FloatVector* dest);
00065 };
00066 
00067 #endif
00068 
00069 
00070 
00071