Lapack++
trfd.h
Go to the documentation of this file.
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_