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