LINEAR++ library: AFF to LAPACK
sybfd.h
Go to the documentation of this file.
1 // LAPACK++ (V. 1.1)
2 // (C) 1992-1996 All Rights Reserved.
3 // Copyright (c) 1992 by J. J. Dongarra, E. Greaser, R. Pozo, D. Walker
4 // see file README.lapack++
5 
6 
7 #ifndef _LA_SYMM_BAND_FACT_DOUBLE_H_
8 #define _LA_SYMM_BAND_FACT_DOUBLE_H_
9 
10 #include LA_VECTOR_INT_H
11 #include LA_UNIT_LOWER_TRIANG_MAT_DOUBLE_H
12 #include LA_SYMM_BAND_MAT_DOUBLE_H
13 #include "lapack.h"
14 
16 {
17  LaSymmBandMatDouble S_;
18  int info_;
19  char uplo_;
20 
21 public:
22 
23  // constructor
24 
25  inline LaSymmBandFactDouble();
26  inline LaSymmBandFactDouble(int,int);
28  inline ~LaSymmBandFactDouble();
29 
30  // extraction functions for components
31 
32  inline LaSymmBandMatDouble& S();
33  inline int& info();
34  inline char& uplo();
35 
36  // operators
37 
39  inline LaSymmBandFactDouble ref(LaSymmBandMatDouble &);
41  inline LaSymmBandFactDouble& copy(LaSymmBandMatDouble &);
42 
43 };
44 
45 
46 
47  // constructor/destructor functions
48 
50  info_(0),uplo_('L')
51 {}
52 
53 
54 inline LaSymmBandFactDouble::LaSymmBandFactDouble(int n, int m):S_(n,m),
55  info_(0),uplo_('L')
56 {}
57 
58 
60 {
61  S_.ref(F.S_);
62  info_ = F.info_;
63  uplo_ = F.uplo_;
64 }
65 
67 {}
68 
69  // member functions
70 
71 inline LaSymmBandMatDouble& LaSymmBandFactDouble::S()
72 {
73  return S_;
74 }
75 
77 {
78  return info_;
79 }
80 
82 {
83  return uplo_;
84 }
85 
86 
87  // operators
88 
89 
91 {
92  S_.ref(F.S_);
93  info_ = F.info_;
94  uplo_ = F.uplo_;
95 
96  return *this;
97 }
98 
99 inline LaSymmBandFactDouble LaSymmBandFactDouble::ref(LaSymmBandMatDouble &G)
100 {
101  S_.ref(G);
102  info_ = 0;
103  uplo_ = 'L';
104 
105  return *this;
106 }
107 
109 {
110  S_.copy(F.S_);
111  info_ = F.info_;
112  uplo_ = F.uplo_;
113 
114  return *this;
115 }
116 
117 inline LaSymmBandFactDouble& LaSymmBandFactDouble::copy(LaSymmBandMatDouble &G)
118 {
119  S_.copy(G);
120  info_ = 0;
121  uplo_ = 'L';
122 
123  return *this;
124 }
125 
126 inline void LaSymmBandMatFactorize(const LaSymmBandMatDouble &A,
128 {
129  char uplo = 'L';
130  integer n = A.size(0), kd = A.subdiags(), lda = A.gdim(0),
131  info = 0;
132 
133  AF.S().copy(A);
134  F77NAME(dpbtrf)(&uplo, &n, &kd, &(AF.S()(0,0)), &lda, &info);
135 }
136 
137 
138 inline void LaLinearSolve(LaSymmBandFactDouble &AF, LaGenMatDouble &X,
139  LaGenMatDouble &B)
140 {
141  char uplo = 'L';
142  integer n = AF.S().size(1), kd = AF.S().subdiags(), ldaf = AF.S().gdim(0),
143  info = 0, nrhs = X.size(1), ldb = B.size(0);
144 
145  X.inject(B);
146  F77NAME(dpbtrs)(&uplo, &n, &kd, &nrhs, &(AF.S()(0,0)), &ldaf,
147  &X(0,0), &ldb, &info);
148 }
149 
150 #endif
151 // _LA_SYMM_BAND_FACT_DOUBLE_H_
char & uplo()
Definition: sybfd.h:81
long int integer
Definition: f77lapack.h:61
void LaLinearSolve(LaSymmBandFactDouble &AF, LaGenMatDouble &X, LaGenMatDouble &B)
Definition: sybfd.h:138
void LaSymmBandMatFactorize(const LaSymmBandMatDouble &A, LaSymmBandFactDouble &AF)
Definition: sybfd.h:126
int & info()
Definition: sybfd.h:76
void F77NAME() dpbtrf(char *UPLO, integer *N, integer *KD, doublereal *SBM, integer *LDSM, integer *info)
LaSymmBandMatDouble & S()
Definition: sybfd.h:71
#define F77NAME(x)
Definition: arch.h:17
void F77NAME() dpbtrs(char *UPLO, integer *N, integer *KD, integer *nrhs, doublereal *AB, integer *LDAB, doublereal *b, integer *ldb, integer *info)
LaSymmBandFactDouble ref(LaSymmBandFactDouble &)
Definition: sybfd.h:90
LaSymmBandMatDouble S_
Definition: sybfd.h:17
LaSymmBandFactDouble & copy(LaSymmBandFactDouble &)
Definition: sybfd.h:108