My Project
dblas.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 drot_( const long &N, double *x, const long &incx, double *y,
5  const long &incy, const double &c, const double &s );
6  /* x <--> y */
7  void dswap_( const long &N, double *x, const long &incx, double *y,
8  const long &incy );
9  /* x := alpha * x */
10  void dscal_( const long &N, const double &alpha, double *x,
11  const long &incx );
12  /* y := x */
13  void dcopy_( const long &N, const double *x, const long &incx,
14  double *y, const long &incy );
15  /* y := alpha * x + y */
16  void daxpy_( const long &N, const double &alpha, const double *x,
17  const long &incx, double *y, const long &incy );
18  /* return x^T y */
19  double ddot_( const long &N, const double *x, const long &incx,
20  const double *y, const long &incy );
21  /* return N2 norm */
22  double dnrm2_( const long &N, const double *x, const long &incx );
23  /* return sum of abs(x[i]) */
24  double dasum_( const long &N, const double *x, const long &incx );
25  /* return the index of element having the largest absolute value */
26  long idamax_( const long &N, const double *x, const long &incx );
27 
28  // Level 2 BLAS
29  /* y := alpha * A * x + beta * y for General M by N Matrix */
30  void dgemv_( const char &trans, const long &M, const long &N,
31  const double &alpha, const double *a, const long &lda,
32  const double *x, const long &incx, const double &beta,
33  double *y, const long &incy );
34  /* y := alpha * A * x + beta * y for General M by N Band Matrix */
35  void dgbmv_( const char &trans, const long &M, const long &N,
36  const long &KL, const long &KU, const double &alpha,
37  const double *a, const long &lda, const double *x,
38  const long &incx, const double &beta, double *y,
39  const long &incy );
40  /* y := alpha * A * x + beta * y for Symmetric Matrix */
41  void dsymv_( const char &uplo, const long &N, const double &alpha,
42  const double *a, const long &lda, const double *x,
43  const long &incx, const double &beta, double *y,
44  const long &incy );
45  /* y := alpha * A * x + beta * y for Symmetric Band Matrix */
46  void dsbmv_( const char &uplo, const long &N, const long &k,
47  const double &alpha, const double *a, const long &lda,
48  const double *x, const long &incx, const double &beta,
49  double *y, const long &incy );
50  /* y := alpha * A * x + beta * y for Symmetric Packed Matrix */
51  void dspmv_( const char &uplo, const long &N, const double &alpha,
52  const double *ap, const double *x, const long &incx,
53  const double &beta, double *y, const long &incy );
54 
55  /* x := A * x for Triangular Matrix */
56  void dtrmv_( const char &uplo, const char &trans, const char &diag,
57  const long &N, const double *a, const long &lda,
58  double *x, const long &incx );
59  /* x := A * x for Triangular (Banded Storage) Matrix */
60  void dtbmv_( const char &uplo, const char &trans, const char &diag,
61  const long &N, const long &k, const double *a,
62  const long &lda, double *x, const long &incx );
63  /* x := A * x for Triangular (Packed Storage) Matrix */
64  void dtpmv_( const char &uplo, const char &trans, const char &diag,
65  const long &N, const double *ap, double *x,
66  const long &incx );
67 
68  /* Solve A * x = b for Triangular Matrix */
69  void dtrsv_( const char &uplo, const char &trans, const char &diag,
70  const long &N, const double *a, const long &lda, double *x,
71  const long &incx );
72  /* Solve A * x = b for Triangular (Banded Storage) Matrix */
73  void dtbsv_( const char &uplo, const char &trans, const char &diag,
74  const long &N, const long &k, const double *a,
75  const long &lda, double *x, const long &incx );
76  /* Solve A * x = b for Triangular (Packed Storage) Matrix */
77  void dtpsv_( const char &uplo, const char &trans, const char &diag,
78  const long &N, const double *ap, double *x,
79  const long &incx );
80 
81  /* A := alpha * x * y' + A (A: M by N Matrix) */
82  void dger_( const long &M, const long &N, const double &alpha,
83  const double *x, const long &incx, const double *y,
84  const long &incy, double *a, const long &lda );
85  /* A := alpha * x * x' + A (A: Symmetric N by N Matrix) */
86  void dsyr_( const char &uplo, const long &N, const double &alpha,
87  const double *x, const long &incx, double *a,
88  const long &lda );
89  /* A := alpha * x * x' + A
90  (A: Symmetric N by N Packed Storage Matrix) */
91  void dspr_( const char &uplo, const long &N, const double &alpha,
92  const double *x, const long &incx, double *ap );
93  /* A := alpha * x * y' + alpha * y * x' + A
94  (A: Symmetric N by N Matrix) */
95  void dsyr2_( const char &uplo, const long &N, const double &alpha,
96  const double *x, const long &incx, const double *y,
97  const long &incy, double *a, const long &lda );
98  /* A := alpha * x * y' + alpha * y * x' + A
99  (A: Symmetric N by N Packed Storage Matrix) */
100  void dspr2_( const char &uplo, const long &N, const double &alpha,
101  const double *x, const long &incx, const double *y,
102  const long &incy, double *ap );
103 
104  // Level 3 BLAS
105  /* C := alpha * A * B + beta * C (C: M by N Matrix) */
106  void dgemm_( const char &transa, const char &transb, const long &M,
107  const long &N, const long &k, const double &alpha,
108  const double *a, const long &lda, const double *b,
109  const long &ldb, const double &beta, double *c,
110  const long &ldc );
111  /* C := alpha * A * B + beta * C
112  (A: Symmetric Matrix, B, C: M by N Matrices) */
113  void dsymm_( const char &side, const char &uplo, const long &M,
114  const long &N, const double &alpha, const double *a,
115  const long &lda, const double *b, const long &ldb,
116  const double &beta, double *c, const long &ldc );
117  /* C:= alpha * A * A' + beta * C
118  (A: N by k Matrix, C: Symmetric Matrix) */
119  void dsyrk_( const char &uplo, const char &trans, const long &N,
120  const long &k, const double &alpha, const double *a,
121  const long &lda, const double &beta, double *c,
122  const long &ldc );
123  /* C := alpha * A * B' + alpha * B * A' + beta * C
124  (A, B: N by k Marices, C: Symmetric Matrix ) */
125  void dsyr2k_( const char &uplo, const char &trans, const long &N,
126  const long &k, const double &alpha, const double *a,
127  const long &lda, const double *b, const long &ldb,
128  const double &beta, double *c, const long &ldc );
129  /* B := alpha * A * B (A: Triangular Matrix, B: M by N Matrix) */
130  void dtrmm_( const char &side, const char &uplo, const char &transa,
131  const char &diag, const long &M, const long &N,
132  const double &alpha, const double *a, const long &lda,
133  double *b, const long &ldb );
134  /* Solve A * X = alpha * B
135  (A: Triangular Matrix, X, B: M by N Matrices) */
136  void dtrsm_( const char &side, const char &uplo, const char &transa,
137  const char &diag, const long &M, const long &N,
138  const double &alpha, const double *a, const long &lda,
139  double *b, const long &ldb );
140 }