00001 #ifndef __ThomasLS_H__ 00002 #define __ThomasLS_H__ 00003 00004 00005 00030 #include "AbsTriDiagonalLS.hpp" 00031 00032 00033 class ThomasLS : public AbsTriDiagonalLS 00034 { 00035 private: 00036 00037 RealVector* uOut; 00038 RealVector* dOut; 00039 RealVector* lOut; 00040 00041 RealVector* y; 00042 00043 protected: 00044 00046 void computeLRdecomposition(); 00047 00049 void forwardSubstitution(); 00051 void backwardSubstitution(); 00052 00053 public: 00054 00055 ThomasLS(int asize):AbsTriDiagonalLS(asize) 00056 { 00057 uOut= new RealVector(N-1); 00058 dOut= new RealVector(N); 00059 lOut= new RealVector(N-1); 00060 00061 y= new RealVector(N); 00062 } 00063 00064 virtual ~ThomasLS(){delete uOut; delete dOut; delete lOut; delete y;} 00065 00066 virtual void loadA(RTriDiagonalMatrix* m); 00067 virtual void loadMatrix(RealVector* u1, RealVector* d1, RealVector* l1); 00068 virtual void loadX(RealVector* data); 00069 virtual void loadB(RealVector* data); 00070 00071 00072 virtual bool solve(); // SOLVING to define later 00073 00074 00075 virtual void output() 00076 { 00077 printf("Thomas "); 00078 AbsTriDiagonalLS::output(); 00079 } 00080 00081 virtual void output(FILE* file) 00082 { 00083 fprintf(file, "Thomas "); 00084 AbsTriDiagonalLS::output(file); 00085 } 00086 }; 00087 00088 #endif 00089 00090