bfd.h

Go to the documentation of this file.
00001 //      LAPACK++ (V. 1.1)
00002 //      (C) 1992-1996 All Rights Reserved.
00003 
00004 
00005 #ifndef _LA_BAND_FACT_DOUBLE_H
00006 #define _LA_BAND_FACT_DOUBLE_H
00007 
00019 #include "lafnames.h"
00020 #include LA_VECTOR_LONG_INT_H
00021 #include LA_BAND_MAT_DOUBLE_H
00022 #include "lapack.h"
00023 
00024 
00032 class LaBandFactDouble
00033 {
00034     LaBandMatDouble         B_;
00035     LaVectorLongInt         pivot_;
00036     int                  info_;
00037 
00038 public:
00039 
00040     // constructor
00041 
00042     inline LaBandFactDouble();
00043     inline LaBandFactDouble(int,int,int);
00044     inline LaBandFactDouble(LaBandMatDouble &);
00045     inline LaBandFactDouble(LaBandFactDouble &);
00046     inline ~LaBandFactDouble();
00047 
00048     // extraction functions for components
00049 
00050     inline LaBandMatDouble& B();
00051     inline LaVectorLongInt& pivot();
00052     inline int& info();
00053 
00054     // operators
00055 
00056     inline LaBandFactDouble& ref(LaBandFactDouble &);
00057     inline LaBandFactDouble& ref(LaBandMatDouble &);
00058 
00059 };
00060 
00061 
00062 
00063     // constructor/destructor functions
00064 
00065 inline LaBandFactDouble::LaBandFactDouble():B_(),pivot_()
00066 {
00067 #ifdef BandFactDouble_DEBUG 
00068     std::cout << " called LaBandFactDouble::LaBandFactDouble() " << std::endl; 
00069 #endif 
00070 
00071     info_ = 0;
00072 }
00073 
00074 
00075 inline LaBandFactDouble::LaBandFactDouble(int N, int kl, int ku)
00076     : B_(N,kl,ku),pivot_(kl+ku+1)
00077 {
00078 #ifdef BandFactDouble_DEBUG 
00079     std::cout << " called LaBandFactDouble::LaBandFactDouble(int,int,int) " << std::endl; 
00080 #endif 
00081 
00082     info_ = 0;
00083 }
00084 
00085 
00086 inline LaBandFactDouble::LaBandFactDouble(LaBandMatDouble &G):pivot_()
00087 {
00088 #ifdef BandFactDouble_DEBUG 
00089     std::cout << " called LaBandFactDouble::LaBandFactDouble(LaBandMatDouble &)"
00090         <<std::endl; 
00091 #endif 
00092 
00093   B_.ref(G);
00094   info_ = 0;
00095 }
00096 
00097 
00098 inline LaBandFactDouble::LaBandFactDouble(LaBandFactDouble &F)
00099 {
00100 #ifdef BandFactDouble_DEBUG 
00101     std::cout << " called LaBandFactDouble::LaBandFactDouble(LaBandFactDouble &) " << std::endl; 
00102 #endif 
00103 
00104   B_.ref(F.B_);
00105   pivot_.ref(F.pivot_);
00106   info_ = F.info_;
00107 }
00108 
00109 inline LaBandFactDouble::~LaBandFactDouble()
00110 {
00111 }
00112 
00113     // member functions
00114 
00115 inline LaBandMatDouble& LaBandFactDouble::B()
00116 {
00117 
00118     return B_;
00119 }
00120 
00121 inline LaVectorLongInt& LaBandFactDouble::pivot()
00122 {
00123 
00124     return pivot_;
00125 }
00126 
00127 inline int& LaBandFactDouble::info()
00128 {
00129 
00130     return info_;
00131 }
00132 
00133     
00134     // operators
00135 
00136 
00137 inline LaBandFactDouble& LaBandFactDouble::ref(LaBandFactDouble& F)
00138 {
00139 
00140     B_.ref(F.B_);
00141     pivot_.ref(F.pivot_);
00142     info_ = F.info_;
00143     
00144     return *this;
00145 }
00146 
00147 
00148 inline LaBandFactDouble& LaBandFactDouble::ref(LaBandMatDouble& F)
00149 {
00150     B_.ref(F);
00151 
00152     return *this;
00153 }
00154 
00178 inline void LaBandMatFactorize(LaBandMatDouble &A, LaBandFactDouble &AF)
00179 {
00180     integer n = A.size(1), m = n, LDA = A.gdim(0);
00181     integer KL = A.subdiags(), KU = A.superdiags(), info=0;
00182 
00183     F77NAME(dgbtrf)(&m, &n, &KL, &KU, &A(0,0), &LDA, &(AF.pivot()(0)), &info);
00184 }
00185 
00186 inline void LaLinearSolve(LaBandFactDouble &AF, LaGenMatDouble &X,
00187                         LaGenMatDouble &B)
00188 {
00189     char trans = 'N';
00190     integer n = AF.B().size(1), lda = AF.B().gdim(0), nrhs = X.size(1), 
00191             ldb = B.size(0), kl = AF.B().subdiags(), 
00192             ku = AF.B().superdiags(), info=0;
00193 
00194     X.inject(B);
00195     F77NAME(dgbtrs)(
00196         &trans, 
00197         &n, 
00198         &kl, &ku, &nrhs, &(AF.B()(-kl,0)), 
00199             &lda, &(AF.pivot()(0)), &X(0,0), &ldb, &info);
00200 }
00201 
00202 
00203 #endif

Generated on Sat Jul 14 11:40:36 2007 for Lapack++ by  doxygen 1.5.0