00001 #ifndef __F_SSOR_BB_LS_H__ 00002 #define __F_SSOR_BB_LS_H__ 00003 00004 00042 #include <stdio.h> 00043 #include "F_IterativeLS.hpp" 00044 00045 class AFProductSeqSMatrix; 00046 00047 class F_SSOR_BB_LS : public F_IterativeLS 00048 { 00049 private: 00050 00051 double alpha; 00052 int variant; 00053 00054 bool fixedOmega; 00055 double omega; 00056 AFProductSeqSMatrix* C; // SSOR factorisation 00057 00058 FloatVector* g; 00059 FloatVector* p; 00060 00061 FloatVector* h; 00062 00063 protected: 00064 00065 virtual AFProductSeqSMatrix* factorize(AFSymMatrix* A); 00066 00067 virtual FloatVector* singleSolve(AFloatMatrix* A, FloatVector* b, FloatVector* x=0); 00068 00069 public: 00070 F_SSOR_BB_LS(int maxIterations, double epsilon, int type=0):F_IterativeLS(maxIterations, epsilon) 00071 { g=p=h= 0; C=0; variant= type; fixedOmega= false; omega=1.0;} 00072 F_SSOR_BB_LS(int maxIterations, double anOmega, double epsilon, int type=0):F_IterativeLS(maxIterations, epsilon) 00073 { g=p=h= 0; C=0; variant= type; fixedOmega= true; omega=anOmega;} 00074 virtual ~F_SSOR_BB_LS(){} 00075 00076 virtual FloatVector* solve(AFloatMatrix* m, FloatVector* b, FloatVector* dest); 00077 }; 00078 00079 #endif 00080 00081 00082