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