35#ifndef NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP
36#define NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP
47 void F77NAME(
daxpy)(
const int &n,
const double &alpha,
const double *x,
48 const int &incx,
const double *y,
const int &incy);
54 const double &alpha,
const double *a,
const int &lda,
55 const double *x,
const int &incx,
const double &beta,
56 double *y,
const int &incy);
58 const float &alpha,
const float *a,
const int &lda,
59 const float *x,
const int &incx,
const float &beta,
60 float *y,
const int &incy);
63 const int &kl,
const int &ku,
const double &alpha,
64 const double *a,
const int &lda,
const double *x,
65 const int &incx,
const double &beta,
double *y,
68 const int &kl,
const int &ku,
const float &alpha,
69 const float *a,
const int &lda,
const float *x,
70 const int &incx,
const float &beta,
float *y,
73 void F77NAME(
dspmv)(
const char &uplo,
const int &n,
const double &alpha,
74 const double *a,
const double *x,
const int &incx,
75 const double &beta,
double *y,
const int &incy);
76 void F77NAME(
sspmv)(
const char &uplo,
const int &n,
const float &alpha,
77 const float *a,
const float *x,
const int &incx,
78 const float &beta,
float *y,
const int &incy);
81 const double &alpha,
const double *a,
const int &lda,
82 const double *x,
const int &incx,
const double &beta,
83 double *y,
const int &incy);
85 const float &alpha,
const float *a,
const int &lda,
86 const float *x,
const int &incx,
const float &beta,
87 float *y,
const int &incy);
89 void F77NAME(
dtpmv)(
const char &uplo,
const char &trans,
const char &diag,
90 const int &n,
const double *ap,
double *x,
92 void F77NAME(
stpmv)(
const char &uplo,
const char &trans,
const char &diag,
93 const int &n,
const float *ap,
float *x,
96 void F77NAME(
dger)(
const int &m,
const int &n,
const double &alpha,
97 const double *x,
const int &incx,
const double *y,
98 const int &incy,
double *a,
const int &lda);
99 void F77NAME(
sger)(
const int &m,
const int &n,
const float &alpha,
100 const float *x,
const int &incx,
const float *y,
101 const int &incy,
float *a,
const int &lda);
104 void F77NAME(
dgemm)(
const char &trans,
const char &transb,
const int &m1,
105 const int &n,
const int &k,
const double &alpha,
106 const double *a,
const int &lda,
const double *b,
107 const int &ldb,
const double &beta,
double *c,
109 void F77NAME(
sgemm)(
const char &trans,
const char &transb,
const int &m1,
110 const int &n,
const int &k,
const float &alpha,
111 const float *a,
const int &lda,
const float *b,
112 const int &ldb,
const float &beta,
float *c,
117static inline void Daxpy(
const int &n,
const double &alpha,
const double *x,
118 const int &incx,
const double *y,
const int &incy)
124static inline void Dscal(
const int &n,
const double &alpha,
double *x,
132static inline void Gemv(
const char &trans,
const int &m,
const int &n,
133 const double &alpha,
const double *a,
const int &lda,
134 const double *x,
const int &incx,
const double &beta,
135 double *y,
const int &incy)
137 F77NAME(
dgemv)(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
142static inline void Gemv(
const char &trans,
const int &m,
const int &n,
143 const float &alpha,
const float *a,
const int &lda,
144 const float *x,
const int &incx,
const float &beta,
145 float *y,
const int &incy)
147 F77NAME(
sgemv)(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
152static inline void Dgemv(
const char &trans,
const int &m,
const int &n,
153 const double &alpha,
const double *a,
const int &lda,
154 const double *x,
const int &incx,
const double &beta,
155 double *y,
const int &incy)
157 F77NAME(
dgemv)(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
162static inline void Gbmv(
const char &trans,
const int &m,
const int &n,
163 const int &kl,
const int &ku,
const double &alpha,
164 const double *a,
const int &lda,
const double *x,
165 const int &incx,
const double &beta,
double *y,
168 F77NAME(
dgbmv)(trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy);
173static inline void Gbmv(
const char &trans,
const int &m,
const int &n,
174 const int &kl,
const int &ku,
const float &alpha,
175 const float *a,
const int &lda,
const float *x,
176 const int &incx,
const float &beta,
float *y,
179 F77NAME(
sgbmv)(trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy);
184static inline void Dgbmv(
const char &trans,
const int &m,
const int &n,
185 const int &kl,
const int &ku,
const double &alpha,
186 const double *a,
const int &lda,
const double *x,
187 const int &incx,
const double &beta,
double *y,
190 F77NAME(
dgbmv)(trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy);
195static inline void Spmv(
const char &uplo,
const int &n,
const double &alpha,
196 const double *a,
const double *x,
const int &incx,
197 const double &beta,
double *y,
const int &incy)
199 F77NAME(
dspmv)(uplo, n, alpha, a, x, incx, beta, y, incy);
204static inline void Spmv(
const char &uplo,
const int &n,
const float &alpha,
205 const float *a,
const float *x,
const int &incx,
206 const float &beta,
float *y,
const int &incy)
208 F77NAME(
sspmv)(uplo, n, alpha, a, x, incx, beta, y, incy);
213static inline void Dspmv(
const char &uplo,
const int &n,
const double &alpha,
214 const double *a,
const double *x,
const int &incx,
215 const double &beta,
double *y,
const int &incy)
217 F77NAME(
dspmv)(uplo, n, alpha, a, x, incx, beta, y, incy);
222static inline void Sbmv(
const char &uplo,
const int &m,
const int &k,
223 const double &alpha,
const double *a,
const int &lda,
224 const double *x,
const int &incx,
const double &beta,
225 double *y,
const int &incy)
227 F77NAME(
dsbmv)(uplo, m, k, alpha, a, lda, x, incx, beta, y, incy);
232static inline void Sbmv(
const char &uplo,
const int &m,
const int &k,
233 const float &alpha,
const float *a,
const int &lda,
234 const float *x,
const int &incx,
const float &beta,
235 float *y,
const int &incy)
237 F77NAME(
ssbmv)(uplo, m, k, alpha, a, lda, x, incx, beta, y, incy);
242static inline void Dsbmv(
const char &uplo,
const int &m,
const int &k,
243 const double &alpha,
const double *a,
const int &lda,
244 const double *x,
const int &incx,
const double &beta,
245 double *y,
const int &incy)
247 F77NAME(
dsbmv)(uplo, m, k, alpha, a, lda, x, incx, beta, y, incy);
251static inline void Tpmv(
const char &uplo,
const char &trans,
const char &diag,
252 const int &n,
const double *ap,
double *x,
259static inline void Tpmv(
const char &uplo,
const char &trans,
const char &diag,
260 const int &n,
const float *ap,
float *x,
267static inline void Dtpmv(
const char &uplo,
const char &trans,
const char &diag,
268 const int &n,
const double *ap,
double *x,
276static inline void Ger(
const int &m,
const int &n,
const double &alpha,
277 const double *x,
const int &incx,
const double *y,
278 const int &incy,
double *a,
const int &lda)
280 F77NAME(
dger)(m, n, alpha, x, incx, y, incy, a, lda);
285static inline void Ger(
const int &m,
const int &n,
const float &alpha,
286 const float *x,
const int &incx,
const float *y,
287 const int &incy,
float *a,
const int &lda)
289 F77NAME(
sger)(m, n, alpha, x, incx, y, incy, a, lda);
296static inline void Gemm(
const char &transa,
const char &transb,
const int &m,
297 const int &n,
const int &k,
const double &alpha,
298 const double *a,
const int &lda,
const double *b,
299 const int &ldb,
const double &beta,
double *c,
303 (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
310static inline void Gemm(
const char &transa,
const char &transb,
const int &m,
311 const int &n,
const int &k,
const float &alpha,
312 const float *a,
const int &lda,
const float *b,
313 const int &ldb,
const float &beta,
float *c,
317 (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
324static inline void Dgemm(
const char &transa,
const char &transb,
const int &m,
325 const int &n,
const int &k,
const double &alpha,
326 const double *a,
const int &lda,
const double *b,
327 const int &ldb,
const double &beta,
double *c,
331 (transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
336static inline void Cdgemm(
const int M,
const int N,
const int K,
const double a,
337 const double *
A, [[maybe_unused]]
const int ldA,
338 const double *B, [[maybe_unused]]
const int ldB,
339 const double b,
double *C,
340 [[maybe_unused]]
const int ldC)
342 Dgemm(
'N',
'N', N, M, K, a, B, N,
A, K, b, C, N);
#define F77NAME(x)
Fortran routines need an underscore.
static void Dgemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[m x n].
static void Dgbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[m x n] is banded.
void F77NAME() daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
static void Sbmv(const char &uplo, const int &m, const int &k, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[m x m] is symmetric banded.
static void Gemm(const char &transa, const char &transb, const int &m, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k], op(B)[k x n], C[m x n] DGEMM perfo...
void F77NAME() dtpmv(const char &uplo, const char &trans, const char &diag, const int &n, const double *ap, double *x, const int &incx)
void F77NAME() stpmv(const char &uplo, const char &trans, const char &diag, const int &n, const float *ap, float *x, const int &incx)
static void Gemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[m x n].
void F77NAME() dspmv(const char &uplo, const int &n, const double &alpha, const double *a, const double *x, const int &incx, const double &beta, double *y, const int &incy)
void F77NAME() dscal(const int &n, const double &alpha, double *x, const int &incx)
static void Gbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[m x n] is banded.
static void Dsbmv(const char &uplo, const int &m, const int &k, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[m x m] is symmetric banded.
void F77NAME() ssbmv(const char &uplo, const int &m, const int &k, const float &alpha, const float *a, const int &lda, const float *x, const int &incx, const float &beta, float *y, const int &incy)
void F77NAME() dsbmv(const char &uplo, const int &m, const int &k, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
void F77NAME() sspmv(const char &uplo, const int &n, const float &alpha, const float *a, const float *x, const int &incx, const float &beta, float *y, const int &incy)
void F77NAME() sgbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const float &alpha, const float *a, const int &lda, const float *x, const int &incx, const float &beta, float *y, const int &incy)
void F77NAME() sger(const int &m, const int &n, const float &alpha, const float *x, const int &incx, const float *y, const int &incy, float *a, const int &lda)
void F77NAME() sgemv(const char &trans, const int &m, const int &n, const float &alpha, const float *a, const int &lda, const float *x, const int &incx, const float &beta, float *y, const int &incy)
void F77NAME() dgbmv(const char &trans, const int &m, const int &n, const int &kl, const int &ku, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
void F77NAME() dgemm(const char &trans, const char &transb, const int &m1, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
void F77NAME() dgemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
static void Cdgemm(const int M, const int N, const int K, const double a, const double *A, const int ldA, const double *B, const int ldB, const double b, double *C, const int ldC)
static void Dgemm(const char &transa, const char &transb, const int &m, const int &n, const int &k, const double &alpha, const double *a, const int &lda, const double *b, const int &ldb, const double &beta, double *c, const int &ldc)
BLAS level 3: Matrix-matrix multiply C = A x B where op(A)[m x k], op(B)[k x n], C[m x n] DGEMM perfo...
void F77NAME() sgemm(const char &trans, const char &transb, const int &m1, const int &n, const int &k, const float &alpha, const float *a, const int &lda, const float *b, const int &ldb, const float &beta, float *c, const int &ldc)
static void Tpmv(const char &uplo, const char &trans, const char &diag, const int &n, const double *ap, double *x, const int &incx)
BLAS level 2: Matrix vector multiply x = alpha A x where A[n x n].
static void Dspmv(const char &uplo, const int &n, const double &alpha, const double *a, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[n x n] is symmetric packed.
void F77NAME() dger(const int &m, const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy, double *a, const int &lda)
static void Daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: y = alpha x plus y.
static void Ger(const int &m, const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy, double *a, const int &lda)
BLAS level 2: Matrix vector multiply A = alpha*x*y**T + A where A[m x n].
static void Spmv(const char &uplo, const int &n, const double &alpha, const double *a, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = alpha A x plus beta y where A[n x n] is symmetric packed.
static void Dtpmv(const char &uplo, const char &trans, const char &diag, const int &n, const double *ap, double *x, const int &incx)
BLAS level 2: Matrix vector multiply x = alpha A x where A[n x n].