LINEAR++ library: AFF to LAPACK
fmd.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 #ifndef _LA_FACTORIZE_MAT_DOUBLE_H
7 #define _LA_FACTORIZE_MAT_DOUBLE_H
8 
9 #include "lapack.h"
10 
11 #include "lafnames.h"
12 #include LA_GEN_MAT_DOUBLE_H
13 #include LA_GEN_FACT_DOUBLE_H
14 #include LA_BAND_MAT_DOUBLE_H
15 #include LA_BAND_FACT_DOUBLE_H
16 #include LA_TRIDIAG_MAT_DOUBLE_H
17 #include LA_TRIDIAG_FACT_DOUBLE_H
18 #include LA_SPD_MAT_DOUBLE_H
19 #include LA_SYMM_MAT_DOUBLE_H
20 #include LA_SYMM_FACT_DOUBLE_H
21 #include LA_SYMM_TRIDIAG_MAT_DOUBLE_H
22 #include LA_SYMM_BAND_MAT_DOUBLE_H
23 
24 
25 
26 inline void LaGenMatFactorize(LaGenMatDouble &GM, LaGenFactDouble &GF)
27 {
28  integer m = GM.size(0), n = GM.size(1), lda = GM.gdim(0);
29  integer info=0;
30 
31  F77NAME(dgetrf)(&m, &n, &GM(0,0), &lda, &(GF.pivot()(0)), &info);
32 }
33 
34 
35 inline void LaGenMatSolve(LaGenMatDouble &A, LaVectorDouble &b,
36  LaVectorLongInt &piv)
37 {
38  char trans = 'N';
39  integer n = A.size(1), lda = A.gdim(0), nrhs = 1,
40  ldb = b.size(), info = 0;
41 
42  F77NAME(dgetrs)(&trans, &n, &nrhs, &A(0,0), &lda, &piv(0),
43  &b(0), &ldb, &info);
44 }
45 
46 #if 0
47 inline int LaBandMatFactorize(LaBandMatDouble &A, LaBandFactDouble &AF)
48 {
49  integer n = A.size(1), m = n, LDA = A.gdim(0);
50  integer KL = A.subdiags(), KU = A.superdiags(), info=0;
51 
52  F77NAME(dgbtrf)(&m, &n, &KL, &KU, &A(0,0), &LDA, &(AF.pivot())(0), &info);
53  return 1;
54 }
55 
56 
57 inline void LaBandMatSolve(LaBandMatDouble &AB, LaVectorDouble &b,
58  LaVectorLongInt &piv)
59 {
60  char trans = 'N';
61  integer n = AB.size(1), ldab = AB.gdim(0), nrhs = 1, ldb = b.size();
62  integer kl = AB.subdiags(), ku = AB.superdiags(), info=0;
63 
64  F77NAME(dgbtrs)(&trans, &n, &kl, &ku, &nrhs, &AB(0,0), &ldab, &piv(0),
65  &b(0), &ldb, &info);
66 }
67 
68 
69 inline void LaTridiagMatFactorize(LaTridiagMatDouble &TD,
71 {
72  integer N = TD.size(), info = 0;
73  double *DL = & TD.diag(-1)(0), *D = &TD.diag(0)(0),
74  *DU = &TD.diag(1)(0), *DU2 = &TD.diag(2)(0);
75 
76  F77NAME(dgttrf)(&N, DL, D, DU, DU2, &(TDF.pivot())(0), &info);
77 }
78 
79 
80 inline void LaTridiagMatSolve(LaTridiagMatDouble &TD, LaVectorDouble &b,
81  LaVectorLongInt &piv)
82 {
83  char trans = 'N';
84  integer N = TD.size(), nrhs = 1, ldb = b.size(), info = 0;
85  double *DL = &TD.diag(-1)(0), *D = &TD.diag(0)(0),
86  *DU = &TD.diag(1)(0), *DU2 = &TD.diag(2)(0);
87 
88  F77NAME(dgttrs)(&trans, &N, &nrhs, DL, D, DU, DU2, &piv(0),
89  &b(0), &ldb, &info);
90 }
91 
92 
93 inline void LaSpdMatFactorize(LaSpdMatDouble &SPD)
94 {
95  char UPLO = 'L';
96  integer N = SPD.size(0), LDSPD = SPD.gdim(0), info = 0;
97 
98  F77NAME(dpotrf)(&UPLO, &N, &SPD(0,0), &LDSPD, &info);
99 }
100 
101 
102 inline void LaSpdMatSolve(LaSpdMatDouble &SPD, LaVectorDouble &b)
103 {
104  char UPLO = 'L';
105  integer N = SPD.size(0), nrhs = 1, ldspd = SPD.gdim(0), ldb = b.size(),
106  info = 0;
107 
108  F77NAME(dpotrs)(&UPLO, &N, &nrhs, &SPD(0,0), &ldspd, &b(0),
109  &ldb, &info);
110 }
111 
112 
113 inline void LaSymmMatFactorize(LaSymmMatDouble &A, LaSymmFactDouble &AF)
114 {
115  char UPLO = 'L';
116  integer N = A.size(0), LDA = A.gdim(0), info = 0;
117  integer M = DSYTRF;
118  int NB = F77NAME(get_nb)(&N,&M);
119 
120  integer LWORK = N*NB;
121  double *WORK = new double[LWORK];
122 
123  F77NAME(dsytrf)(&UPLO, &N, &A(0,0), &LDA, &(AF.pivot()(0)), WORK,
124  &LWORK, &info);
125 
126  delete [] WORK;
127 }
128 
129 
130 inline void LaSymmMatSolve(LaSymmMatDouble &A, LaVectorDouble &b,
131  LaVectorLongInt &piv)
132 {
133  char uplo = 'L';
134  integer N = A.size(1), nrhs = 1, lda = A.gdim(0),
135  ldb = b.size(), info = 0;
136 
137  F77NAME(dsytrs)(&uplo, &N, &nrhs, &A(0,0), &lda,
138  &piv(0), &b(0), &ldb, &info);
139 
140 }
141 
142 inline int LaSymmBandMatFactorize(LaSymmBandMatDouble &AB)
143 {
144  char UPLO = 'L';
145  integer N = AB.size(0), KD = AB.subdiags(), LDAB = AB.gdim(0),
146  info = 0;
147 
148  F77NAME(dpbtrf)(&UPLO, &N, &KD, &AB(0,0), &LDAB, &info);
149  return 1;
150 }
151 
152 
153 inline void LaSymmBandMatSolve(LaSymmBandMatDouble &AB, LaVectorDouble &b)
154 {
155  char UPLO = 'L';
156  integer N = AB.size(0), KD = AB.subdiags(), LDAB = AB.gdim(0),
157  info = 0, nrhs = 1, ldb = b.size();
158 
159  F77NAME(dpbtrs)(&UPLO, &N, &KD, &nrhs, &AB(0,0), &LDAB, &b(0),
160  &ldb, &info);
161 }
162 
163 
164 inline int LaSymmTridiagMatFactorize(LaSymmTridiagMatDouble &STD)
165 {
166  integer N = STD.size(), info = 0;
167  double *D = (double*) STD.diag(0), *E = (double*) STD.diag(-1);
168 
169  F77NAME(dpttrf)(&N, D, E, &info);
170  return 1;
171 }
172 
173 
174 inline void LaSymmTridiagMatSolve(LaSymmTridiagMatDouble &STD,
175  LaVectorDouble &b)
176 {
177  integer N = STD.size(), nrhs = 1, ldb = b.size(), info = 0;
178  double *D = (double*) STD.diag(0), *E = (double*) STD.diag(-1);
179 
180  F77NAME(dpttrs)(&N, &nrhs, D, E, &b(0), &ldb, &info);
181 }
182 
183 
184 inline void LaSwap(LaGenMatDouble &A, LaVectorLongInt &ipiv)
185 {
186  integer lda = A.gdim(0), n = A.size(1);
187  integer k1 = ipiv.start(), k2 = ipiv.end(), incx = ipiv.inc();
188 
189  F77NAME(dlaswp)(&n, &A(0,0), &lda, &k1, &k2, ipiv, &incx);
190 }
191 
192 
193 inline void LaSwap_Trans(LaGenMatDouble &A, LaVectorLongInt &ipiv)
194 {
195  integer lda = A.gdim(0), n = A.size(1);
196  integer k1 = ipiv.start(), k2 = ipiv.end(), incx = -(ipiv.inc());
197 
198  F77NAME(dlaswp)(&n, &A(0,0), &lda, &k1, &k2, ipiv, &incx);
199 }
200 
201 
202 inline int LaLUFactorDoubleUnblocked(LaGenMatDouble &A, LaGenFactDouble &F)
203 {
204  integer m = A.size(0), n=A.size(1), lda = A.gdim(0);
205  integer info=0;
206 
207  F77NAME(dgetf2)(&m, &n, &A(0,0), &lda, &(F.pivot()(0)), &info);
208  return 1;
209 }
210 
211 
212 inline double LaDopla(char *subname, int m, int n, int kl, int ku, int nb)
213 {
214  return F77NAME(dopla)(subname, &m, &n, &kl, &ku, &nb);
215 }
216 
217 #endif
218 #endif
void F77NAME() dgttrs(char *trans, integer *N, integer *nrhs, doublereal *DL, doublereal *D, doublereal *DU, doublereal *DU2, integer *ipiv, doublereal *b, integer *ldb, integer *info)
void LaTridiagMatFactorize(LaTridiagMatDouble &A, LaTridiagFactDouble &AF)
Definition: trfd.h:107
LaVectorLongInt & pivot()
Definition: gfd.h:97
void F77NAME() dpttrs(integer *N, integer *nrhs, doublereal *D, doublereal *E, doublereal *b, integer *ldb, integer *info)
void F77NAME() dsytrs(char *uplo, integer *N, integer *nrhs, doublereal *A, integer *lda, integer *ipiv, doublereal *b, integer *ldb, integer *info)
void F77NAME() dpotrf(char *UPLO, integer *N, doublereal *SM, integer *LDSM, integer *info)
LaVectorLongInt & pivot()
Definition: syfd.h:38
LaVectorLongInt & pivot()
Definition: trfd.h:30
void LaGenMatSolve(LaGenMatDouble &A, LaVectorDouble &b, LaVectorLongInt &piv)
Definition: fmd.h:35
long int integer
Definition: f77lapack.h:61
LaVectorLongInt & pivot()
Definition: bfd.h:105
void LaSymmBandMatFactorize(const LaSymmBandMatDouble &A, LaSymmBandFactDouble &AF)
Definition: sybfd.h:126
void LaGenMatFactorize(LaGenMatDouble &GM, LaGenFactDouble &GF)
Definition: fmd.h:26
void F77NAME() dpotrs(char *UPLO, integer *N, integer *nrhs, doublereal *A, integer *LDA, doublereal *b, integer *ldb, integer *info)
void F77NAME() dgetrs(char *trans, integer *N, integer *nrhs, doublereal *A, integer *lda, integer *ipiv, doublereal *b, integer *ldb, integer *info)
void F77NAME() dgbtrs(char *trans, integer *N, integer *kl, integer *ku, integer *nrhs, doublereal *AB, integer *ldab, integer *ipiv, doublereal *b, integer *ldb, integer *info)
void LaBandMatFactorize(LaBandMatDouble &A, LaBandFactDouble &AF)
Definition: bfd.h:140
void F77NAME() dpbtrf(char *UPLO, integer *N, integer *KD, doublereal *SBM, integer *LDSM, integer *info)
void LaSpdMatFactorize(LaSpdMatDouble &A, LaSpdFactDouble &AF)
Definition: spdfd.h:90
void F77NAME() dlaswp(integer *n, doublereal *A, integer *lda, integer *k1, integer *k2, integer *ipiv, integer *incx)
void F77NAME() dgetrf(integer *m, integer *n, doublereal *A, integer *lda, integer *ipiv, integer *info)
void F77NAME() dgetf2(integer *m, integer *n, doublereal *A, integer *lda, integer *ipiv, integer *info)
doublereal F77NAME() dopla(char *subname, integer *m, integer *n, integer *kl, integer *ku, integer *nb)
void F77NAME() dgttrf(integer *N, doublereal *DL, doublereal *D, doublereal *DU, doublereal *DU2, integer *ipiv, integer *info)
#define F77NAME(x)
Definition: arch.h:17
void F77NAME() dsytrf(char *UPLO, integer *N, doublereal *SM, integer *LDSM, integer *ipiv, doublereal *WORK, integer *LWORK, integer *info)
void F77NAME() dgbtrf(integer *m, integer *n, integer *KL, integer *KU, doublereal *BM, integer *LDBM, integer *ipiv, integer *info)
void F77NAME() dpbtrs(char *UPLO, integer *N, integer *KD, integer *nrhs, doublereal *AB, integer *LDAB, doublereal *b, integer *ldb, integer *info)
void F77NAME() dpttrf(integer *N, doublereal *D, doublereal *E, integer *info)