VERB_code_2.3
zblas.h
1 extern "C" {
2  // Level 1 BLAS
3  /* Vector rotation: x := c*x[i] + s*y[i], y[i] := - s*x[i] + c*y[i] */
4  void zdrot_( const long &N, std::complex<double> *x, const long &incx,
5  std::complex<double> *y, const long &incy,
6  const double &c, const double &s );
7  /* x <--> y */
8  void zswap_( const long &N, std::complex<double> *x, const long &incx,
9  std::complex<double> *y, const long &incy );
10  /* x := alpha * x (alpha: double) */
11  void zdscal_( const long &N, const double &alpha,
12  std::complex<double> *x, const long &incx );
13  /* x := alpha * x (alpha: double complex) */
14  void zscal_( const long &N, const std::complex<double> &alpha,
15  std::complex<double> *x, const long &incx );
16  /* y := x */
17  void zcopy_( const long &N, const std::complex<double> *x, const long &incx,
18  std::complex<double> *y, const long &incy );
19  /* y := alpha * x + y */
20  void zaxpy_( const long &N, const std::complex<double> &alpha,
21  const std::complex<double> *x, const long &incx,
22  std::complex<double> *y, const long &incy );
23  /* return x^T y */
24  std::complex<double> zdotu_( const long &N, const std::complex<double> *x,
25  const long &incx, const std::complex<double> *y,
26  const long &incy );
27  /* return conjg(x)^T y */
28  std::complex<double> zdotc_( const long &N, const std::complex<double> *x,
29  const long &incx, const std::complex<double> *y,
30  const long &incy );
31  /* return N2 norm */
32  double dznrm2_( const long &N, const std::complex<double> *x,
33  const long &incx );
34  /* return sum of abs(x[i]) */
35  double dzasum_( const long &N, const std::complex<double> *x,
36  const long &incx );
37  /* return the index of element having the largest absolute value */
38  long izamax_( const long &N, const std::complex<double> *x, const long &incx );
39 
40  // Level 2 BLAS
41  /* y := alpha * A * x + beta * y for General M by N Matrix */
42  void zgemv_( const char &trans, const long &M, const long &N,
43  const std::complex<double> &alpha, const std::complex<double> *a,
44  const long &lda, const std::complex<double> *x, const long &incx,
45  const std::complex<double> &beta, std::complex<double> *y,
46  const long &incy );
47  /* y := alpha * A * x + beta * y for General M by N Band Matrix */
48  void zgbmv_( const char &trans, const long &M, const long &N,
49  const long &KL, const long &KU,
50  const std::complex<double> &alpha, const std::complex<double> *a,
51  const long &lda, const std::complex<double> *x, const long &incx,
52  const std::complex<double> &beta, std::complex<double> *y,
53  const long &incy );
54  /* y := alpha * A * x + beta * y for Hermitian Matrix */
55  void zhemv_( const char &uplo, const long &N,
56  const std::complex<double> &alpha, const std::complex<double> *a,
57  const long &lda, const std::complex<double> *x, const long &incx,
58  const std::complex<double> &beta, std::complex<double> *y,
59  const long &incy );
60  /* y := alpha * A * x + beta * y for Hermitian Band Matrix */
61  void zhbmv_( const char &uplo, const long &N, const long &k,
62  const std::complex<double> &alpha, const std::complex<double> *a,
63  const long &lda, const std::complex<double> *x, const long &incx,
64  const std::complex<double> &beta, std::complex<double> *y,
65  const long &incy );
66  /* y := alpha * A * x + beta * y for Hermitian Packed Matrix */
67  void zhpmv_( const char &uplo, const long &N,
68  const std::complex<double> &alpha, const std::complex<double> *ap,
69  const std::complex<double> *x, const long &incx,
70  const std::complex<double> &beta, std::complex<double> *y,
71  const long &incy );
72 
73  /* x := A * x for Triangular Matrix */
74  void ztrmv_( const char &uplo, const char &trans, const char &diag,
75  const long &N, const std::complex<double> *a, const long &lda,
76  std::complex<double> *x, const long &incx );
77  /* x := A * x for Triangular (Banded Storage) Matrix */
78  void ztbmv_( const char &uplo, const char &trans, const char &diag,
79  const long &N, const long &k, const std::complex<double> *a,
80  const long &lda, std::complex<double> *x, const long &incx );
81  /* x := A * x for Triangular (Packed Storage) Matrix */
82  void ztpmv_( const char &uplo, const char &trans, const char &diag,
83  const long &N, const std::complex<double> *ap,
84  std::complex<double> *x, const long &incx );
85 
86  /* Solve A * x = b for Triangular Matrix */
87  void ztrsv_( const char &uplo, const char &trans, const char &diag,
88  const long &N, const std::complex<double> *a, const long &lda,
89  std::complex<double> *x, const long &incx );
90  /* Solve A * x = b for Triangular (Banded Storage) Matrix */
91  void ztbsv_( const char &uplo, const char &trans, const char &diag,
92  const long &N, const long &k, const std::complex<double> *a,
93  const long &lda, std::complex<double> *x, const long &incx );
94  /* Solve A * x = b for Triangular (Packed Storage) Matrix */
95  void ztpsv_( const char &uplo, const char &trans, const char &diag,
96  const long &N, const std::complex<double> *ap,
97  std::complex<double> *x, const long &incx );
98 
99  /* A := alpha * x * y' + A (A: M by N Matrix) */
100  void zgeru_( const long &M, const long &N, const std::complex<double> &alpha,
101  const std::complex<double> *x, const long &incx,
102  const std::complex<double> *y, const long &incy,
103  std::complex<double> *a, const long &lda );
104  /* A := alpha * x * conjg(y') + A (A: M by N Matrix) */
105  void zgerc_( const long &M, const long &N, const std::complex<double> &alpha,
106  const std::complex<double> *x, const long &incx,
107  const std::complex<double> *y, const long &incy,
108  std::complex<double> *a, const long &lda );
109  /* A := alpha * x * conjg(x') + A (A: Hermitian N by N Matrix) */
110  void zher_( const char &uplo, const long &N, const double &alpha,
111  const std::complex<double> *x, const long &incx,
112  std::complex<double> *a, const long &lda );
113  /* A := alpha * x * conjg(x') + A
114  (A: Hermitian N by N Packed Storage Matrix) */
115  void zhpr_( const char &uplo, const long &N, const double &alpha,
116  const std::complex<double> *x, const long &incx,
117  std::complex<double> *ap );
118  /* A := alpha * x * conjg(y') + conjg(alpha) * y * conjg(x') + A
119  (A: Hermitian N by N Matrix) */
120  void zher2_( const char &uplo, const long &N,
121  const std::complex<double> &alpha, const std::complex<double> *x,
122  const long &incx, const std::complex<double> *y,
123  const long &incy, std::complex<double> *a, const long &lda );
124  /* A := alpha * x * conjg(y') + conjg(alpha) * y * conjg(x') + A
125  (A: Hermitian N by N Packed Matrix) */
126  void zhpr2_( const char &uplo, const long &N,
127  const std::complex<double> &alpha, const std::complex<double> *x,
128  const long &incx, const std::complex<double> *y,
129  const long &incy, std::complex<double> *ap );
130 
131  // Level 3 BLAS
132  /* C := alpha * A * B + beta * C (C: M by N Matrix) */
133  void zgemm_( const char &transa, const char &transb, const long &M,
134  const long &N, const long &k, const std::complex<double> &alpha,
135  const std::complex<double> *a, const long &lda,
136  const std::complex<double> *b, const long &ldb,
137  const std::complex<double> &beta, std::complex<double> *c,
138  const long &ldc );
139  /* C := alpha * A * B + beta * C
140  (A: Symmetric Matrix, B, C: M by N Matrices) */
141  void zsymm_( const char &side, const char &uplo, const long &M,
142  const long &N, const std::complex<double> &alpha,
143  const std::complex<double> *a, const long &lda,
144  const std::complex<double> *b, const long &ldb,
145  const std::complex<double> &beta, std::complex<double> *c,
146  const long &ldc );
147  /* C := alpha * A * B + beta * C
148  (A: Hermitian Matrix, B, C: M by N Matrices) */
149  void zhemm_( const char &side, const char &uplo, const long &M,
150  const long &N, const std::complex<double> &alpha,
151  const std::complex<double> *a, const long &lda,
152  const std::complex<double> *b, const long &ldb,
153  const std::complex<double> &beta, std::complex<double> *c,
154  const long &ldc );
155  /* C:= alpha * A * A' + beta * C
156  (A: N by k Matrix, C: Symmetric Matrix) */
157  void zsyrk_( const char &uplo, const char &trans, const long &N,
158  const long &k, const std::complex<double> &alpha,
159  const std::complex<double> *a, const long &lda,
160  const std::complex<double> &beta, std::complex<double> *c,
161  const long &ldc );
162  /* C:= alpha * A * conjg(A') + beta * C
163  (A: N by k Matrix, C: Hermirian Matrix) */
164  void zherk_( const char &uplo, const char &trans, const long &N,
165  const long &k, const double &alpha,
166  const std::complex<double> *a, const long &lda,
167  const double &beta, std::complex<double> *c, const long &ldc );
168  /* C := alpha * A * B' + alpha * B * A' + beta * C
169  (A, B: N by k Marices, C: Symmetric Matrix ) */
170  void zsyr2k_( const char &uplo, const char &trans, const long &N,
171  const long &k, const std::complex<double> &alpha,
172  const std::complex<double> *a, const long &lda,
173  const std::complex<double> *b, const long &ldb,
174  const std::complex<double> &beta, std::complex<double> *c,
175  const long &ldc );
176  /* C := alpha * A * conjg(B') + conjg(alpha) * B * conjg(A') + beta * C
177  (A, B: N by k Marices, C: Hermitian Matrix ) */
178  void zher2k_( const char &uplo, const char &trans, const long &N,
179  const long &k, const std::complex<double> &alpha,
180  const std::complex<double> *a, const long &lda,
181  const std::complex<double> *b, const long &ldb,
182  const double &beta, std::complex<double> *c, const long &ldc );
183  /* B := alpha * A * B (A: Triangular Matrix, B: M by N Matrix) */
184  void ztrmm_( const char &side, const char &uplo, const char &transa,
185  const char &diag, const long &M, const long &N,
186  const std::complex<double> &alpha, const std::complex<double> *a,
187  const long &lda, std::complex<double> *b, const long &ldb );
188  /* Solve A * X = alpha * B
189  (A: Triangular Matrix, X, B: M by N Matrices) */
190  void ztrsm_( const char &side, const char &uplo, const char &transa,
191  const char &diag, const long &M, const long &N,
192  const std::complex<double> &alpha, const std::complex<double> *a,
193  const long &lda, std::complex<double> *b, const long &ldb );
194 }