MADNESS  version 0.9
clapack.h
Go to the documentation of this file.
1 /*
2  This file is part of MADNESS.
3 
4  Copyright (C) 2007,2010 Oak Ridge National Laboratory
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 
20  For more information please contact:
21 
22  Robert J. Harrison
23  Oak Ridge National Laboratory
24  One Bethel Valley Road
25  P.O. Box 2008, MS-6367
26 
27  email: harrisonrj@ornl.gov
28  tel: 865-241-3937
29  fax: 865-572-0680
30 
31 
32  $Id$
33 */
34 
35 
36 #ifndef MADNESS_LINALG_CLAPACK_H__INCLUDED
37 #define MADNESS_LINALG_CLAPACK_H__INCLUDED
38 
41 
42 #include <madness/fortran_ctypes.h>
44 
45 #ifdef FORTRAN_LINKAGE_LC
46 # define sgesvd_ sgesvd
47 # define dgesvd_ dgesvd
48 # define cgesvd_ cgesvd
49 # define zgesvd_ zgesvd
50 
51 # define sgesv_ sgesv
52 # define dgesv_ dgesv
53 # define cgesv_ cgesv
54 # define zgesv_ zgesv
55 
56 # define sgelss_ sgelss
57 # define dgelss_ dgelss
58 # define cgelss_ cgelss
59 # define zgelss_ zgelss
60 
61 # define ssyev_ ssyev
62 # define dsyev_ dsyev
63 # define cheev_ cheev
64 # define zheev_ zheev
65 
66 #ifndef MADNESS_HAS_ELEMENTAL
67 # define ssygv_ ssygv
68 # define dsygv_ dsygv
69 # define chegv_ chegv
70 # define zhegv_ zhegv
71 #endif
72 
73 # define dpotrf_ dpotrf
74 
75 # define dtrsm_ dtrsm
76 
77 # define dlamch_ dlamch
78 # define slamch_ slamch
79 #else
80  // only lowercase with zero and one underscores are handled -- if detected another convention complain loudly
81 # ifndef FORTRAN_LINKAGE_LCU
82 # error "clapack.h does not support the current Fortran symbol convention -- please, edit and check in the changes."
83 # endif
84 #endif
85 
86 extern "C"
87  double dlamch_(const char* mode, int modelen);
88 
89 extern "C"
90  float slamch_(const char* mode, int modelen);
91 
92 
93 extern "C"
94  void sgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n,
95  real4 *a, integer *lda, real4 *s, real4 *u, integer *ldu,
96  real4 *vt, integer *ldvt, real4 *work, integer *lwork,
97  integer *info, char_len jobulen, char_len jobvtlen);
98 
99 extern "C"
100  void dgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n,
101  real8 *a, integer *lda, real8 *s, real8 *u, integer *ldu,
102  real8 *vt, integer *ldvt, real8 *work, integer *lwork,
103  integer *info, char_len jobulen, char_len jobvtlen);
104 
105 extern "C"
106  void cgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n,
107  complex_real4 *a, integer *lda, real4 *s, complex_real4 *u,
108  integer *ldu, complex_real4 *vt, integer *ldvt, complex_real4 *work,
109  integer *lwork, real4 *rwork,
110  integer *info, char_len jobulen, char_len jobvtlen);
111 
112 extern "C"
113  void zgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n,
114  complex_real8 *a, integer *lda, real8 *s, complex_real8 *u,
115  integer *ldu, complex_real8 *vt, integer *ldvt, complex_real8 *work,
116  integer *lwork, real8 *rwork,
117  integer *info, char_len jobulen, char_len jobvtlen);
118 
119 extern "C"
120  void sgesv_(integer* n, integer* nrhs, real4* AT, integer* lda,
121  integer* piv, real4* x, integer* ldx, integer* info);
122 
123 extern "C"
124  void dgesv_(integer* n, integer* nrhs, real8* AT, integer* lda,
125  integer* piv, real8* x, integer* ldx, integer* info);
126 
127 extern "C"
128  void cgesv_(integer* n, integer* nrhs, complex_real4* AT, integer* lda,
129  integer* piv, complex_real4* x, integer* ldx, integer* info);
130 
131 extern "C"
132  void zgesv_(integer* n, integer* nrhs, complex_real8* AT, integer* lda,
133  integer* piv, complex_real8* x, integer* ldx, integer* info);
134 
135 
136 extern "C"
137  void sgelss_(integer *m, integer *n, integer *nrhs,
138  real4 *a, integer *lda, real4 *b, integer *ldb, real4 *sOUT,
139  real4 *rcondIN, integer *rankOUT, real4 *work,
140  integer *lwork, integer *infoOUT);
141 
142 extern "C"
143  void dgelss_(integer *m, integer *n, integer *nrhs,
144  real8 *a, integer *lda, real8 *b, integer *ldb, real8 *sOUT,
145  real8 *rcondIN, integer *rankOUT, real8 *work,
146  integer *lwork, integer *infoOUT);
147 
148 extern "C"
149  void cgelss_(integer *m, integer *n, integer *nrhs,
150  complex_real4 *a, integer *lda, complex_real4 *b, integer *ldb,
151  real4 *sOUT,
152  real4 *rcondIN, integer *rankOUT, complex_real4 *work,
153  integer *lwork, real4 *rwork, integer *infoOUT);
154 
155 extern "C"
156  void zgelss_(integer *m, integer *n, integer *nrhs,
157  complex_real8 *a, integer *lda, complex_real8 *b, integer *ldb,
158  real8 *sOUT,
159  real8 *rcondIN, integer *rankOUT, complex_real8 *work,
160  integer *lwork, real8 *rwork, integer *infoOUT);
161 
162 extern "C"
163  void ssyev_(const char* jobz, const char* uplo, integer *n,
164  real4 *a, integer *lda, real4 *w, real4 *work, integer *lwork,
165  integer *info, char_len jobzlen, char_len uplo_len );
166 
167 extern "C"
168  void dsyev_(const char* jobz, const char* uplo, integer *n,
169  real8 *a, integer *lda, real8 *w, real8 *work, integer *lwork,
170  integer *info, char_len jobzlen, char_len uplo_len );
171 
172 extern "C"
173  void cheev_(const char* jobz, const char* uplo, integer *n,
174  complex_real4 *a, integer *lda, real4 *w, complex_real4 *work,
175  integer *lwork, real4 *rwork,
176  integer *info, char_len jobzlen, char_len uplo_len );
177 
178 extern "C"
179  void zheev_(const char* jobz, const char* uplo, integer *n,
180  complex_real8 *a, integer *lda, real8 *w, complex_real8 *work,
181  integer *lwork, real8 *rwork,
182  integer *info, char_len jobzlen, char_len uplo_len );
183 
184 extern "C"
185  void ssygv_(integer *itype, const char* jobz, const char* uplo, integer *n,
186  real4 *a, integer *lda, real4 *b, integer *ldb,
187  real4 *w, real4 *work, integer *lwork,
188  integer *info, char_len jobzlen, char_len uplo_len );
189 
190 extern "C"
191  void dsygv_(integer *itype, const char* jobz, const char* uplo, integer *n,
192  real8 *a, integer *lda, real8 *b, integer *ldb,
193  real8 *w, real8 *work, integer *lwork,
194  integer *info, char_len jobzlen, char_len uplo_len );
195 
196 extern "C"
197  void chegv_(integer *itype, const char* jobz, const char* uplo, integer *n,
198  complex_real4 *a, integer *lda, complex_real4 *b, integer *ldb,
199  real4 *w, complex_real4 *work, integer *lwork, real4 *rwork,
200  integer *info, char_len jobzlen, char_len uplo_len );
201 
202 extern "C"
203  void zhegv_(integer *itype, const char* jobz, const char* uplo, integer *n,
204  complex_real8 *a, integer *lda, complex_real8 *b, integer *ldb,
205  real8 *w, complex_real8 *work, integer *lwork, real8 *rwork,
206  integer *info, char_len jobzlen, char_len uplo_len );
207 // dgeqrf (M, N, A, LDA, TAU, WORK, LWORK, INFO)
208 //
209 // DGEQRF computes a QR factorization of a real M-by-N matrix A:
210 // A = Q * R.
211 
212 extern "C"
213  void sgeqrf_(integer *m, integer *n,
214  real4 *a, integer *lda, real4 *tau,
215  real4 *work, integer *lwork, integer *infoOUT);
216 
217 extern "C"
218  void dgeqrf_(integer *m, integer *n,
219  real8 *a, integer *lda, real8 *tau,
220  real8 *work, integer *lwork, integer *infoOUT);
221 
222 // dgeqp3(M, N, A, LDA, JPVT, TAU, WORK, LWORK, INFO );
223 
224 // PURPOSE
225 // DGEQP3 computes a QR factorization with column pivoting of a
226 // matrix A: A*P = Q*R using Level 3 BLAS.
227 
228 extern "C"
229  void sgeqp3_(integer *m, integer *n,
230  real4 *a, integer *lda, integer *jpvt, real4 *tau,
231  real4 *work, integer *lwork, integer *infoOUT);
232 
233 extern "C"
234  void dgeqp3_(integer *m, integer *n,
235  real8 *a, integer *lda, integer *jpvt, real8 *tau,
236  real8 *work, integer *lwork, integer *infoOUT);
237 
238 extern "C"
239  void cgeqp3_(integer *m, integer *n, complex_real4 *a,
240  integer *lda, integer *jpvt, complex_real4 *tau,
241  complex_real4 *work, integer *lwork, real4 *rwork,
242  integer *infoOUT);
243 
244 extern "C"
245  void zgeqp3_(integer *m, integer *n, complex_real8 *a,
246  integer *lda, integer *jpvt, complex_real8 *tau,
247  complex_real8 *work, integer *lwork, real8 *rwork,
248  integer *infoOUT);
249 
250 // SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
251 // SUBROUTINE ZUNGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
252 
253 // PURPOSE
254 // DORGQR generates an M-by-N real matrix Q with orthonormal
255 // columns, which is defined as the first N columns of a pro-
256 // duct of K elementary reflectors of order M
257 
258 extern "C"
259  void sorgqr_(integer *m, integer *n, integer *k,
260  real4 *a, integer *lda, real4 *tau,
261  real4 *work, integer *lwork, integer *info);
262 
263 extern "C"
264  void dorgqr_(integer *m, integer *n, integer *k,
265  real8 *a, integer *lda, real8 *tau,
266  real8 *work, integer *lwork, integer *info);
267 
268 extern "C"
269  void cungqr_(integer *m, integer *n, integer *k,
270  complex_real4 *a, integer *lda, complex_real4 *tau,
271  complex_real4 *work, integer *lwork, integer *info);
272 
273 extern "C"
274  void zungqr_(integer *m, integer *n, integer *k,
275  complex_real8 *a, integer *lda, complex_real8 *tau,
276  complex_real8 *work, integer *lwork, integer *info);
277 
278 extern "C"
279 void dpotrf_(const char *uplo, const integer* n, real8 *a, const integer *lda, integer *info, char_len uplo_len);
280 
281 extern "C"
282 void dtrsm_(const char* side, const char* uplo, const char* transa, const char* diag,
283  const integer* m, const integer* n, const real8* alpha,
284  const real8* a, const integer* lda, real8* b, const integer* ldb,
285  char_len sidelen, char_len uplolen, char_len transalen, char_len diaglen);
286 
287 // SUBROUTINE DTRTRI( UPLO, DIAG, N, A, LDA, INFO )
288 extern "C"
289 void dtrtri_(const char* uplo, const char* diag, const integer* n, const real8* a,
290  const integer* lda, integer *info);
291 
292 #endif // MADNESS_LINALG_CLAPACK_H__INCLUDED
void sgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n, real4 *a, integer *lda, real4 *s, real4 *u, integer *ldu, real4 *vt, integer *ldvt, real4 *work, integer *lwork, integer *info, char_len jobulen, char_len jobvtlen)
Corresponding C and Fortran types.
void sgeqp3_(integer *m, integer *n, real4 *a, integer *lda, integer *jpvt, real4 *tau, real4 *work, integer *lwork, integer *infoOUT)
void dsygv_(integer *itype, const char *jobz, const char *uplo, integer *n, real8 *a, integer *lda, real8 *b, integer *ldb, real8 *w, real8 *work, integer *lwork, integer *info, char_len jobzlen, char_len uplo_len)
void cgeqp3_(integer *m, integer *n, complex_real4 *a, integer *lda, integer *jpvt, complex_real4 *tau, complex_real4 *work, integer *lwork, real4 *rwork, integer *infoOUT)
void ssyev_(const char *jobz, const char *uplo, integer *n, real4 *a, integer *lda, real4 *w, real4 *work, integer *lwork, integer *info, char_len jobzlen, char_len uplo_len)
void zheev_(const char *jobz, const char *uplo, integer *n, complex_real8 *a, integer *lda, real8 *w, complex_real8 *work, integer *lwork, real8 *rwork, integer *info, char_len jobzlen, char_len uplo_len)
void dsyev_(const char *jobz, const char *uplo, integer *n, real8 *a, integer *lda, real8 *w, real8 *work, integer *lwork, integer *info, char_len jobzlen, char_len uplo_len)
double dlamch_(const char *mode, int modelen)
void sgesv_(integer *n, integer *nrhs, real4 *AT, integer *lda, integer *piv, real4 *x, integer *ldx, integer *info)
void cungqr_(integer *m, integer *n, integer *k, complex_real4 *a, integer *lda, complex_real4 *tau, complex_real4 *work, integer *lwork, integer *info)
void dgeqp3_(integer *m, integer *n, real8 *a, integer *lda, integer *jpvt, real8 *tau, real8 *work, integer *lwork, integer *infoOUT)
void dpotrf_(const char *uplo, const integer *n, real8 *a, const integer *lda, integer *info, char_len uplo_len)
void zungqr_(integer *m, integer *n, integer *k, complex_real8 *a, integer *lda, complex_real8 *tau, complex_real8 *work, integer *lwork, integer *info)
void zgeqp3_(integer *m, integer *n, complex_real8 *a, integer *lda, integer *jpvt, complex_real8 *tau, complex_real8 *work, integer *lwork, real8 *rwork, integer *infoOUT)
float real4
Fortran single precision.
Definition: fortran_ctypes.h:78
std::complex< float > complex_real4
Fortran single complex.
Definition: fortran_ctypes.h:86
void zgelss_(integer *m, integer *n, integer *nrhs, complex_real8 *a, integer *lda, complex_real8 *b, integer *ldb, real8 *sOUT, real8 *rcondIN, integer *rankOUT, complex_real8 *work, integer *lwork, real8 *rwork, integer *infoOUT)
void cheev_(const char *jobz, const char *uplo, integer *n, complex_real4 *a, integer *lda, real4 *w, complex_real4 *work, integer *lwork, real4 *rwork, integer *info, char_len jobzlen, char_len uplo_len)
void ssygv_(integer *itype, const char *jobz, const char *uplo, integer *n, real4 *a, integer *lda, real4 *b, integer *ldb, real4 *w, real4 *work, integer *lwork, integer *info, char_len jobzlen, char_len uplo_len)
void zgesv_(integer *n, integer *nrhs, complex_real8 *AT, integer *lda, integer *piv, complex_real8 *x, integer *ldx, integer *info)
void dgeqrf_(integer *m, integer *n, real8 *a, integer *lda, real8 *tau, real8 *work, integer *lwork, integer *infoOUT)
void cgelss_(integer *m, integer *n, integer *nrhs, complex_real4 *a, integer *lda, complex_real4 *b, integer *ldb, real4 *sOUT, real4 *rcondIN, integer *rankOUT, complex_real4 *work, integer *lwork, real4 *rwork, integer *infoOUT)
void sgelss_(integer *m, integer *n, integer *nrhs, real4 *a, integer *lda, real4 *b, integer *ldb, real4 *sOUT, real4 *rcondIN, integer *rankOUT, real4 *work, integer *lwork, integer *infoOUT)
void dgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n, real8 *a, integer *lda, real8 *s, real8 *u, integer *ldu, real8 *vt, integer *ldvt, real8 *work, integer *lwork, integer *info, char_len jobulen, char_len jobvtlen)
void cgesv_(integer *n, integer *nrhs, complex_real4 *AT, integer *lda, integer *piv, complex_real4 *x, integer *ldx, integer *info)
FLOAT a(int j, FLOAT z)
Definition: y1.cc:86
void chegv_(integer *itype, const char *jobz, const char *uplo, integer *n, complex_real4 *a, integer *lda, complex_real4 *b, integer *ldb, real4 *w, complex_real4 *work, integer *lwork, real4 *rwork, integer *info, char_len jobzlen, char_len uplo_len)
std::complex< double > complex_real8
Fortran double complex.
Definition: fortran_ctypes.h:82
void dgesv_(integer *n, integer *nrhs, real8 *AT, integer *lda, integer *piv, real8 *x, integer *ldx, integer *info)
void dtrsm_(const char *side, const char *uplo, const char *transa, const char *diag, const integer *m, const integer *n, const real8 *alpha, const real8 *a, const integer *lda, real8 *b, const integer *ldb, char_len sidelen, char_len uplolen, char_len transalen, char_len diaglen)
void cgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n, complex_real4 *a, integer *lda, real4 *s, complex_real4 *u, integer *ldu, complex_real4 *vt, integer *ldvt, complex_real4 *work, integer *lwork, real4 *rwork, integer *info, char_len jobulen, char_len jobvtlen)
void dtrtri_(const char *uplo, const char *diag, const integer *n, const real8 *a, const integer *lda, integer *info)
int integer
Definition: DFcode/fci/crayio.c:25
const double m
Definition: gfit.cc:199
double real8
Fortran double precision.
Definition: fortran_ctypes.h:74
void sgeqrf_(integer *m, integer *n, real4 *a, integer *lda, real4 *tau, real4 *work, integer *lwork, integer *infoOUT)
void sorgqr_(integer *m, integer *n, integer *k, real4 *a, integer *lda, real4 *tau, real4 *work, integer *lwork, integer *info)
float slamch_(const char *mode, int modelen)
void dorgqr_(integer *m, integer *n, integer *k, real8 *a, integer *lda, real8 *tau, real8 *work, integer *lwork, integer *info)
void dgelss_(integer *m, integer *n, integer *nrhs, real8 *a, integer *lda, real8 *b, integer *ldb, real8 *sOUT, real8 *rcondIN, integer *rankOUT, real8 *work, integer *lwork, integer *infoOUT)
void zgesvd_(const char *jobu, const char *jobvt, integer *m, integer *n, complex_real8 *a, integer *lda, real8 *s, complex_real8 *u, integer *ldu, complex_real8 *vt, integer *ldvt, complex_real8 *work, integer *lwork, real8 *rwork, integer *info, char_len jobulen, char_len jobvtlen)
void zhegv_(integer *itype, const char *jobz, const char *uplo, integer *n, complex_real8 *a, integer *lda, complex_real8 *b, integer *ldb, real8 *w, complex_real8 *work, integer *lwork, real8 *rwork, integer *info, char_len jobzlen, char_len uplo_len)
FLOAT b(int j, FLOAT z)
Definition: y1.cc:79
int char_len
Type of variable appended to argument list for length of fortran character strings.
Definition: fortran_ctypes.h:90