Lapack++
|
00001 // -*-c++-*- 00002 // LAPACK++ (V. 1.1) 00003 // (C) 1992-1996 All Rights Reserved. 00004 00005 #ifndef _LA_TRIDIAG_FACT_DOUBLE_H_ 00006 #define _LA_TRIDIAG_FACT_DOUBLE_H_ 00007 00018 #include LA_VECTOR_LONG_INT_H 00019 #include LA_TRIDIAG_MAT_DOUBLE_H 00020 00021 #include "lapack.h" 00022 00047 class LaTridiagFactDouble 00048 { 00049 LaTridiagMatDouble T_; 00050 LaVectorLongInt pivot_; 00051 int size_; 00052 00053 public: 00054 00055 // constructor 00056 00057 LaTridiagFactDouble(); 00058 LaTridiagFactDouble(int); 00059 LaTridiagFactDouble(LaTridiagFactDouble &); 00060 ~LaTridiagFactDouble(); 00061 00062 LaTridiagMatDouble& T() 00063 { 00064 return T_; 00065 } 00066 LaVectorLongInt& pivot() 00067 { 00068 return pivot_; 00069 } 00070 int size() 00071 { 00072 return size_; 00073 } 00074 00075 LaVectorDouble& diag(int); 00076 const LaVectorDouble& diag(int k) const; 00077 00078 // operators 00079 00080 LaTridiagFactDouble& ref(LaTridiagMatDouble &); 00081 LaTridiagFactDouble& ref(LaTridiagFactDouble &); 00082 LaTridiagFactDouble& copy(const LaTridiagMatDouble &); 00083 LaTridiagFactDouble& copy(const LaTridiagFactDouble &); 00084 00085 }; 00086 00087 00088 00089 // constructor/destructor functions 00090 00091 inline LaTridiagFactDouble::LaTridiagFactDouble(): T_(), pivot_(), size_(0) 00092 {} 00093 00094 00095 inline LaTridiagFactDouble::LaTridiagFactDouble(int N): T_(N), pivot_(N), size_(N) 00096 {} 00097 00098 00099 inline LaTridiagFactDouble::LaTridiagFactDouble(LaTridiagFactDouble &F) 00100 { 00101 T_.copy(F.T_); 00102 pivot_.copy(F.pivot_); 00103 size_ = F.size_; 00104 } 00105 00106 inline LaTridiagFactDouble::~LaTridiagFactDouble() 00107 {} 00108 00109 // member functions 00110 00111 inline LaVectorDouble& LaTridiagFactDouble::diag(int k) 00112 { 00113 return T_.diag(k); 00114 } 00115 00116 inline const LaVectorDouble& LaTridiagFactDouble::diag(int k) const 00117 { 00118 return T_.diag(k); 00119 } 00120 00121 // operators 00122 00123 00124 inline LaTridiagFactDouble& LaTridiagFactDouble::ref(LaTridiagFactDouble& F) 00125 { 00126 T_.ref(F.T_); 00127 pivot_.ref(F.pivot_); 00128 size_ = F.size_; 00129 00130 return *this; 00131 } 00132 00133 inline LaTridiagFactDouble& LaTridiagFactDouble::ref(LaTridiagMatDouble& A) 00134 { 00135 T_.ref(A); 00136 size_ = A.size(); 00137 pivot_.resize(size_, 1); 00138 00139 return *this; 00140 } 00141 00142 inline LaTridiagFactDouble& LaTridiagFactDouble::copy(const LaTridiagFactDouble& F) 00143 { 00144 T_.copy(F.T_); 00145 pivot_.copy(F.pivot_); 00146 size_ = F.size_; 00147 00148 return *this; 00149 } 00150 00151 inline LaTridiagFactDouble& LaTridiagFactDouble::copy(const LaTridiagMatDouble& A) 00152 { 00153 T_.copy(A); 00154 size_ = A.size(); 00155 pivot_.resize(size_, 1); 00156 00157 return *this; 00158 } 00159 00168 void DLLIMPORT LaTridiagMatFactorize(const LaTridiagMatDouble &A, 00169 LaTridiagFactDouble &AF); 00170 00179 void DLLIMPORT LaLinearSolve(LaTridiagFactDouble &AF, LaGenMatDouble &X, 00180 const LaGenMatDouble &B); 00181 00182 #endif 00183 // _LA_TRIDIAG_FACT_DOUBLE_H_