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; // sometimes called q 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