My Project
zlapack.h
1 extern "C" {
2  // Solve Linear Equations A * x = b
3  /* for General Matrix */
4  void zgesv_( const long &N, const long &nrhs, std::complex<double> *a,
5  const long &lda, long *ipiv, std::complex<double> *b,
6  const long &ldb, long &info );
7  /* for General Band Matrix */
8  void zgbsv_( const long &N, const long &KL, const long &KU,
9  const long &nrhs, std::complex<double> *ab, const long &ldab,
10  long *ipiv, std::complex<double> *b, const long &ldb,
11  long &info );
12  /* for Tridiagonal Matrix */
13  void zgtsv_( const long &N, const long &nrhs, std::complex<double> *dl,
14  std::complex<double> *d, std::complex<double> *du,
15  std::complex<double> *b, const long &ldb, long &info );
16  /* for Hermitian Positive Definite Matrix */
17  void zposv_( const char &uplo, const long &N, const long &nrhs,
18  std::complex<double> *a, const long &lda, std::complex<double> *b,
19  const long &ldb, long &info );
20  /* for Hermitian Positive Definite (Packed Storage) Matrix */
21  void zppsv_( const char &uplo, const long &N, const long &nrhs,
22  std::complex<double> *ap, std::complex<double> *b, const long &ldb,
23  long &info );
24  /* for Hermitian Positive Definite Band Matrix */
25  void zpbsv_( const char &uplo, const long &N, const long &kd,
26  const long &nrhs, std::complex<double> *ab, const long &ldab,
27  std::complex<double> *b, const long &ldb, long &info );
28  /* for Hermitian Positive Definite Tridiagonal Matrix */
29  void zptsv_( const long &N, const long &nrhs, double *d,
30  std::complex<double> *e, std::complex<double> *b, const long &ldb,
31  long &info );
32  /* for Hermitian Indefinite Matrix */
33  void zhesv_( const char &uplo, const long &N, const long &nrhs,
34  std::complex<double> *a, const long &lda, long *ipiv,
35  std::complex<double> *b, const long &ldb, std::complex<double> *work,
36  const long &lwork, long &info );
37  /* for Symmetric Indefinite Matrix */
38  void zsysv_( const char &uplo, const long &N, const long &nrhs,
39  std::complex<double> *a, const long &lda, long *ipiv,
40  std::complex<double> *b, const long &ldb, std::complex<double> *work,
41  const long &lwork, long &info );
42  /* for Hermitian Indefinite (Packed Storage) Matrix */
43  void zhpsv_( const char &uplo, const long &N, const long &nrhs,
44  std::complex<double> *ap, long *ipiv, std::complex<double> *b,
45  const long &ldb, long &info );
46  /* for Symmetric Indefinite (Packed Storage) Matrix */
47  void zspsv_( const char &uplo, const long &N, const long &nrhs,
48  std::complex<double> *ap, long *ipiv, std::complex<double> *b,
49  const long &ldb, long &info );
50 
51  // Linear Least Square Problems
52  // Solve Overdetermined or Underdetermined Linear Equations
53  /* Using Orthogonal Factorization, Assuming Full Rank */
54  void zgels_( const char &trans, const long &M, const long &N,
55  const long &nrhs, std::complex<double> *a, const long &lda,
56  std::complex<double> *b, const long &ldb,
57  std::complex<double> *work, const long &lwork, long &info );
58  /* Compute Minimum-Norm Solution using Orthogonal Factorization */
59  void zgelsy_( const long &M, const long &N, const long &nrhs,
60  std::complex<double> *a, const long &lda, std::complex<double> *b,
61  const long &ldb, long *jpvt, const double &rcond,
62  long &rank, std::complex<double> *work, const long &lwork,
63  double *rwork, long &info );
64  /* Compulte Minimum-Norm Solution using Singular Value Decomposition */
65  void zgelss_( const long &M, const long &N, const long &nrhs,
66  std::complex<double> *a, const long &lda, std::complex<double> *b,
67  const long &ldb, double *s, const double &rcond,
68  long &rank, std::complex<double> *work, const long &lwork,
69  double *rwork, long &info );
70  /* Solve Linear Equality-Constrained Least Squares (LSE) Problem */
71  void zgglse_( const long &M, const long &N, const long &p,
72  std::complex<double> *a, const long &lda, std::complex<double> *b,
73  const long &ldb, std::complex<double> *c, std::complex<double> *d,
74  std::complex<double> *x, std::complex<double> *work,
75  const long &lwork, long &info );
76  /* Solve Gauss-Markov Linear Model (GLM) Problem */
77  void zggglm_( const long &N, const long &M, const long &p,
78  std::complex<double> *a, const long &lda, std::complex<double> *b,
79  const long &ldb, std::complex<double> *d, std::complex<double> *x,
80  std::complex<double> *y, std::complex<double> *work,
81  const long &lwork, long &info );
82 
83  // Standard Eigenvalue and Singular Value Problems
84  // Divide and Conquer routines are more fast, but need more memory.
85  /* Eigenvalues/Eigenvectors for General Matrix */
86  void zgeev_( const char &jobvl, const char &jobvr, const long &N,
87  std::complex<double> *a, const long &lda, std::complex<double> *w,
88  std::complex<double> *vl, const long &ldvl, std::complex<double> *vr,
89  const long &ldvr, std::complex<double> *work, const long &lwork,
90  double *rwork, long &info );
91  /* Eigenvalues/Eigenvectors for Hermitian Matrix */
92  void zheev_( const char &jobz, const char &uplo, const long &N,
93  std::complex<double> *a, const long &lda, double *w,
94  std::complex<double> *work, const long &lwork, double *rwork,
95  long &info );
96  void zheevd_( const char &jobz, const char &uplo, const long &N,
97  std::complex<double> *a, const long &lda, double *w,
98  std::complex<double> *work, const long &lwork, double *rwork,
99  const long &lrwork, long *iwork, const long &liwork,
100  long &info ); /* Divide and Conqure */
101  /* Eigenvalues/Eigenvectors for Hermitian (Packed Storage) Matrix */
102  void zhpev_( const char &jobz, const char &uplo, const long &N,
103  std::complex<double> *ap, double *w, std::complex<double> *z,
104  const long &ldz, std::complex<double> *work, double *rwork,
105  long &info );
106  void zhpevd_( const char &jobz, const char &uplo, const long &N,
107  std::complex<double> *ap, double *w, std::complex<double> *z,
108  const long &ldz, std::complex<double> *work, const long &lwork,
109  double *rwork, const long &lrwork, long *iwork,
110  const long &liwork, long &info ); /* Divide and Conqure */
111  /* Eigenvalues/Eigenvectors for Hermitian Band Matrix */
112  void zhbev_( const char &jobz, const char &uplo, const long &N,
113  const long &kd, std::complex<double> *ab, const long &ldab,
114  double *w, std::complex<double> *z, const long &ldz,
115  std::complex<double> *work, double *rwork, long &info );
116  void zhbevd_( const char &jobz, const char &uplo, const long &N,
117  const long &kd, std::complex<double> *ab, const long &ldab,
118  double *w, std::complex<double> *z, const long &ldz,
119  std::complex<double> *work, const long &lwork, double *rwork,
120  const long &lrwork, long *iwork, const long &liwork,
121  long &info ); /* Divide and Conqure */
122  /* Schur Factorization for General Matrix */
123  void zgees_( const char &jobvs, const char &sort,
124  bool (*select)( std::complex<double> *, std::complex<double> * ),
125  const long &N, std::complex<double> *a, const long &lda,
126  long &sdim, std::complex<double> *w, std::complex<double> *vs,
127  const long &ldvs, std::complex<double> *work, const long &lwork,
128  double *rwork, bool *bwork, long &info );
129  /* Singular Value Decomposition for General Matrix */
130  void zgesvd_( const char &jobu, const char &jobvt, const long &M,
131  const long &N, std::complex<double> *a, const long &lda,
132  double *s, std::complex<double> *u, const long &ldu,
133  std::complex<double> *vt, const long &ldvt,
134  std::complex<double> *work, const long &lwork, double *rwork,
135  long &info );
136  void zgesdd_( const char &jobz, const long &M, const long &N,
137  std::complex<double> *a, const long &lda, double *s,
138  std::complex<double> *u, const long &ldu, std::complex<double> *vt,
139  const long &ldvt, std::complex<double> *work, const long &lwork,
140  double *rwork, long *iwork,
141  long &info ); /* Divide and Conqure */
142 
143  // Generalized Eigenvalue and Sigular Value Problems
144  /* Generalized Eigenvalues/Eigenvectors for General Matrix */
145  void zggev_( const char &jobvl, const char &jobvr, const long &N,
146  std::complex<double> *a, const long &lda, std::complex<double> *b,
147  const long &ldb, std::complex<double> *alpha,
148  std::complex<double> *beta, std::complex<double> *vl,
149  const long &ldvl, std::complex<double> *vr, const long &ldvr,
150  std::complex<double> *work, const long &lwork, double *rwork,
151  long &info );
152  /* Generalized Eigenvalues/Eigenvectors
153  for Hermitian-definite Matrix */
154  void zhegv_( const long &itype, const char &jobz, const char &uplo,
155  const long &N, std::complex<double> *a, const long &lda,
156  std::complex<double> *b, const long &ldb, double *w,
157  std::complex<double> *work, const long &lwork, double *rwork,
158  long &info );
159  void zhegvd_( const long &itype, const char &jobz, const char &uplo,
160  const long &N, std::complex<double> *a, const long &lda,
161  std::complex<double> *b, const long &ldb, double *w,
162  std::complex<double> *work, const long &lwork, double *rwork,
163  const long &lrwork, long *iwork, const long &liwork,
164  long &info ); /* Divide and Conqure */
165  /* Generalized Eigenvalues/Eigenvectors
166  for Hermitian-definite (Packed Storage) Matrix */
167  void zhpgv_( const long &itype, const char &jobz, const char &uplo,
168  const long &N, std::complex<double> *ap, std::complex<double> *bp,
169  double *w, std::complex<double> *z, const long &ldz,
170  std::complex<double> *work, double *rwork, long &info );
171  void zhpgvd_( const long &itype, const char &jobz, const char &uplo,
172  const long &N, std::complex<double> *ap, std::complex<double> *bp,
173  double *w, std::complex<double> *z, const long &ldz,
174  std::complex<double> *work, const long &lwork, double *rwork,
175  const long &lrwork, long *iwork, const long &liwork,
176  long &info ); /* Divide and Conqure */
177  /* Generalized Eigenvalues/Eigenvectors
178  for Hermitian-definite Band Matrix */
179  void zhbgv_( const char &jobz, const char &uplo, const long &N,
180  const long &ka, const long &kb, std::complex<double> *ab,
181  const long &ldab, std::complex<double> *bb, const long &ldbb,
182  double *w, std::complex<double> *z, const long &ldz,
183  std::complex<double> *work, double *rwork, long &info );
184  void zhbgvd_( const char &jobz, const char &uplo, const long &N,
185  const long &ka, const long &kb, std::complex<double> *ab,
186  const long &ldab, std::complex<double> *bb, const long &ldbb,
187  double *w, std::complex<double> *z, const long &ldz,
188  std::complex<double> *work, const long &lwork, double *rwork,
189  const long &lrwork, long *iwork, const long &liwork,
190  long &info ); /* Divide and Conqure */
191  /* Generalized Schur Factrization for General Matrix */
192  void zgges_( const char &jobvsl, const char &jobvsr, const char &sort,
193  bool (*delctg)( std::complex<double> *, std::complex<double> * ),
194  const long &N, std::complex<double> *a, const long &lda,
195  std::complex<double> *b, const long &ldb, long &sdim,
196  std::complex<double> *alpha, std::complex<double> *beta,
197  std::complex<double> *vsl, const long &ldvsl,
198  std::complex<double> *vsr, const long &ldvsr,
199  std::complex<double> *work, const long &lwork, double *rwork,
200  bool *bwork, long &info );
201  /* Generailized Singular Value Decomposition for General Matrix */
202  void zggsvd_( const char &jobu, const char &jobv, const char &jobq,
203  const long &M, const long &N, const long &p, long &k,
204  long &L, std::complex<double> *a, const long &lda,
205  std::complex<double> *b, const long &ldb, double *alpha,
206  double *beta, std::complex<double> *u, const long &ldu,
207  std::complex<double> *v, const long &ldv, std::complex<double> *q,
208  const long &ldq, std::complex<double> *work, double *rwork,
209  long *iwork, long &info );
210 }
long L
vector size
Definition: _drovector.hpp:7