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