35 #ifndef NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP 36 #define NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP 38 #include <boost/core/ignore_unused.hpp> 49 void F77NAME(
dcopy) (
const int& n,
const double *x,
const int& incx,
50 double *y,
const int& incy);
51 void F77NAME(
daxpy) (
const int& n,
const double& alpha,
const double *x,
52 const int& incx,
const double *y,
const int& incy);
53 void F77NAME(
dswap) (
const int& n,
double *x,
const int& incx,
54 double *y,
const int& incy);
55 void F77NAME(
dscal) (
const int& n,
const double& alpha,
double *x,
57 void F77NAME(
drot) (
const int& n,
double *x,
const int& incx,
58 double *y,
const int& incy,
const double& c,
60 double F77NAME(
ddot) (
const int& n,
const double *x,
const int& incx,
61 const double *y,
const int& incy);
62 double F77NAME(
dnrm2) (
const int& n,
const double *x,
const int& incx);
63 double F77NAME(
dasum) (
const int& n,
const double *x,
const int& incx);
64 int F77NAME(
idamax)(
const int& n,
const double *x,
const int& incx);
68 const int& n,
const double& alpha,
69 const double* a,
const int& lda,
70 const double* x,
const int& incx,
71 const double& beta,
double* y,
const int& incy);
74 const int& n,
const int& kl,
const int& ku,
76 const double* a,
const int& lda,
77 const double* x,
const int& incx,
78 const double& beta,
double* y,
const int& incy);
80 void F77NAME(
dtpmv) (
const char& uplo,
const char& trans,
const char& diag,
81 const int& n,
const double* ap,
double* x,
const int& incx);
83 void F77NAME(
dspmv) (
const char& uplo,
const int& n,
const double& alpha,
84 const double* a,
const double* x,
const int& incx,
85 const double& beta,
double* y,
const int& incy);
88 const int& k,
const double& alpha,
89 const double* a,
const int& lda,
90 const double* x,
const int& incx,
91 const double& beta,
double* y,
const int& incy);
94 void F77NAME(
dgemm) (
const char& trans,
const char& transb,
95 const int& m1,
const int& n,
96 const int& k,
const double& alpha,
97 const double* a,
const int& lda,
98 const double* b,
const int& ldb,
99 const double& beta,
double* c,
const int& ldc);
103 static inline void Dcopy (
const int& n,
const double *x,
const int& incx,
104 double *y,
const int& incy)
110 static inline void Daxpy (
const int& n,
const double& alpha,
const double *x,
111 const int& incx,
const double *y,
const int& incy)
118 static inline void Dswap (
const int& n,
double *x,
const int& incx,
119 double *y,
const int& incy)
125 static inline void Dscal (
const int& n,
const double& alpha,
double *x,
132 static inline void Drot (
const int& n,
double *x,
const int& incx,
133 double *y,
const int& incy,
const double& c,
140 static inline double Ddot (
const int& n,
const double *x,
const int& incx,
141 const double *y,
const int& incy)
148 static inline double Dnrm2 (
const int& n,
const double *x,
const int& incx)
154 static inline double Dasum (
const int& n,
const double *x,
const int& incx)
162 static inline int Idamax (
const int& n,
const double *x,
const int& incx)
168 static inline void Dgemv (
const char& trans,
const int& m,
const int& n,
169 const double& alpha,
const double* a,
const int& lda,
170 const double* x,
const int& incx,
const double& beta,
171 double* y,
const int& incy)
173 F77NAME(
dgemv) (trans,m,n,alpha,a,lda,x,incx,beta,y,incy);
176 static inline void Dgbmv (
const char& trans,
const int& m,
177 const int& n,
const int& kl,
const int& ku,
179 const double* a,
const int& lda,
180 const double* x,
const int& incx,
181 const double& beta,
double* y,
const int& incy)
183 F77NAME(
dgbmv) (trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy);
187 static inline void Dtpmv(
const char& uplo,
const char& trans,
const char& diag,
188 const int& n,
const double* ap,
double* x,
const int& incx)
195 static inline void Dspmv (
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)
202 static inline void Dsbmv (
const char& uplo,
const int& m,
const int& k,
203 const double& alpha,
const double* a,
const int& lda,
204 const double* x,
const int& incx,
const double& beta,
205 double* y,
const int& incy)
207 F77NAME(
dsbmv) (uplo,m,k,alpha,a,lda,x,incx,beta,y,incy);
213 static inline void Dgemm (
const char& transa,
const char& transb,
const int& m,
214 const int& n,
const int& k,
const double& alpha,
215 const double* a,
const int& lda,
const double* b,
216 const int& ldb,
const double& beta,
double* c,
219 F77NAME(
dgemm) (transa,transb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc);
224 static inline void Cdgemm(
const int M,
const int N,
const int K,
const double a,
225 const double *
A,
const int ldA,
const double * B,
const int ldB,
226 const double b,
double *C,
const int ldC)
228 boost::ignore_unused(ldA, ldB, ldC);
229 Dgemm(
'N',
'N',N,M,K,a,B,N,A,K,b,C,N) ;
232 #endif //NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLAS_HPP void F77NAME() dscal(const int &n, const double &alpha, double *x, const int &incx)
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)
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)
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)
int F77NAME() idamax(const int &n, const double *x, const int &incx)
static double Dasum(const int &n, const double *x, const int &incx)
BLAS level 1: output = .
double F77NAME() dnrm2(const int &n, const double *x, const int &incx)
void F77NAME() dcopy(const int &n, const double *x, const int &incx, double *y, const int &incy)
void F77NAME() drot(const int &n, double *x, const int &incx, double *y, const int &incy, const double &c, const double &s)
#define F77NAME(x)
Fortran routines need an underscore.
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)
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 A[m x n], B[n x k], C[m x k].
static double Dnrm2(const int &n, const double *x, const int &incx)
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 = A x where A is symmetric packed.
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)
static int Idamax(const int &n, const double *x, const int &incx)
BLAS level 1: output = 1st value where Note it is modified to return a value between (0...
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() dswap(const int &n, double *x, const int &incx, double *y, const int &incy)
double F77NAME() ddot(const int &n, const double *x, const int &incx, const double *y, const int &incy)
void F77NAME() daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
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 = A x where A[m x n].
double F77NAME() dasum(const int &n, const double *x, const int &incx)
static void Dtpmv(const char &uplo, const char &trans, const char &diag, const int &n, const double *ap, double *x, const int &incx)
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
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 Dswap(const int &n, double *x, const int &incx, double *y, const int &incy)
BLAS level 1: Swap x with y.
static double Ddot(const int &n, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: output = .
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() 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)
static void Drot(const int &n, double *x, const int &incx, double *y, const int &incy, const double &c, const double &s)
BLAS level 1: Plane rotation by c = cos(theta), s = sin(theta)
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 Dcopy(const int &n, const double *x, const int &incx, double *y, const int &incy)
BLAS level 1: Copy x to y.