00001 #ifndef __F_GmresStar_LS_H__ 00002 #define __F_GmresStar_LS_H__ 00003 00004 00038 #include <stdio.h> 00039 #include "F_IterativeLS.hpp" 00040 00041 00042 class F_GmresStar_LS : public F_IterativeLS 00043 { 00044 private: 00045 00046 int m; 00047 AbsFLinearSolver* iterativeSolver; 00048 00049 00050 int k; // counter to move in Krylov spaces 00051 00052 FloatVector* r; 00053 FloatVector* ap; 00054 FloatVector* z; 00055 00056 FloatVector** u; 00057 FloatVector** c; 00058 00059 protected: 00060 00061 virtual FloatVector* singleSolve(AFloatMatrix* A, FloatVector* b, FloatVector* x=0); 00062 00063 public: 00064 F_GmresStar_LS(int maxIterations, int l, int solverModel, int innerIter, int m, double epsilon=1.0e-4); 00065 F_GmresStar_LS(int maxIterations, int l, char* solverName, int innerIter, int m, double epsilon=1.0e-4); 00066 F_GmresStar_LS(int maxIterations, int l, AbsFLinearSolver* innerSolver, double epsilon=1.0e-4); 00067 virtual ~F_GmresStar_LS(){delete[] c; delete[] u;} 00068 00069 virtual FloatVector* solve(AFloatMatrix* m, FloatVector* b, FloatVector* dest); 00070 }; 00071 00072 #endif 00073