00001 #ifndef __F_QmrCgStabLS_H__ 00002 #define __F_QmrCgStabLS_H__ 00003 00004 00035 #include <stdio.h> 00036 #include "F_IterativeLS.hpp" 00037 00038 00039 class F_QmrCgStabLS : public F_IterativeLS 00040 { 00041 protected: 00042 00043 double alpha; 00044 double beta; 00045 double rho; 00046 double omega; 00047 double tau; 00048 double theta; 00049 double eta; 00050 00051 FloatVector* r; 00052 FloatVector* p; 00053 00054 FloatVector* rbar0; 00055 FloatVector* v; 00056 FloatVector* d; 00057 FloatVector* dt; 00058 FloatVector* s; 00059 FloatVector* t; 00060 FloatVector* xt; 00061 00062 protected: 00063 00064 virtual FloatVector* singleSolve(AFloatMatrix* A, FloatVector* b, FloatVector* x=0); 00065 00066 public: 00067 F_QmrCgStabLS(int maxIterations, double epsilon=1.0e-4):F_IterativeLS(maxIterations, epsilon) 00068 { r=p= rbar0=s=v=d=dt=t= 0;} 00069 virtual ~F_QmrCgStabLS(){} 00070 00071 virtual FloatVector* solve(AFloatMatrix* m, FloatVector* b, FloatVector* dest); 00072 }; 00073 00074 #endif 00075 00076 00077