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;              
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