1#ifndef __ACML_TO_STDLAPACK__
2#define __ACML_TO_STDLAPACK__
10#if defined(Darwin) || defined(Atlas)
13#if defined(Cygwin) || defined(Atlas)
14#include "lapack/lapacke_utils.h"
15#define __CLPK_integer int
16int ilaenv_(
int*,
char*,
int,
char*,
int,
int*,
int*,
int*,
int*);
25void dgemm(
char transa,
char transb,
int m,
int n,
int k,
double alpha,
double *a,
int lda,
double *b,
int ldb,
double beta,
double *c,
int ldc)
27 enum CBLAS_TRANSPOSE ntransa=CblasNoTrans, ntransb=CblasNoTrans;
28 if ( transa ==
't' ) ntransa=CblasTrans;
29 if ( transb ==
't' ) ntransb=CblasTrans;
30 if (
VDEBUG) printf(
"***entering cblas_dgemm ***\n");
31 cblas_dgemm(CblasColMajor,ntransa,ntransb,m,n,k,alpha,a,lda,b,ldb,beta,c,ldc);
32 if (
VDEBUG) printf(
"***dgemm finished***\n");
35void dgemv(
char transa,
int m,
int n,
double alpha,
double *a,
int lda,
double *x,
int incx,
double beta,
double *y,
int incy)
37 enum CBLAS_TRANSPOSE ntransa=CblasNoTrans;
38 if ( transa ==
't' ) ntransa=CblasTrans;
39 if (
VDEBUG) printf(
"*** entering cblas_dgemv***\n");
40 cblas_dgemv(CblasColMajor,ntransa,m,n,alpha,a,lda,x,incx,beta,y,incy);
41 if (
VDEBUG) printf(
"***dgemv finished***\n");
44void dgels(
char trans,
int mA,
int nA,
int nrhsA,
double *a,
int ldaA,
double *b,
int ldbA,
int *infoA)
46 __CLPK_integer m=mA, n=nA, nrhs=nrhsA, lda=ldaA, ldb=ldbA, info=*infoA;
49 double *work = (
double*) malloc(lwork*
sizeof(
double));
50 if (
VDEBUG) printf(
"*** entering dgels ***\n");
51 dgels_(&trans,&m,&n,&nrhs,a,&lda,b,&ldb,work,&lwork,&info);
54 if (
VDEBUG) printf(
"***dgels finished***\n");
57void dsyevd(
char jobz,
char uplo,
int nA,
double *a,
int ldaA,
double *w,
int *infoA)
59 __CLPK_integer n=nA, lda=ldaA, info=*infoA;
60 __CLPK_integer lwork=1+5*n+5*n*n, liwork=3+5*n;
61 double *work = (
double*) malloc(lwork*
sizeof(
double));
62 __CLPK_integer *iwork = (__CLPK_integer*) malloc(liwork*
sizeof(
int));
63 if (
VDEBUG) printf(
"*** entering dsyevd***\n");
64 dsyevd_(&jobz,&uplo,&n,a,&lda,w,work,&lwork,iwork,&liwork,&info);
66 free(work); free(iwork);
67 if (
VDEBUG) printf(
"***dsyevd finished***\n");
70void dgelsy(
int mA,
int nA,
int nrhsA,
double *a,
int ldaA,
double *b,
int ldbA,
int *jpvtA,
double rcond,
int *rankA,
int *infoA)
72 __CLPK_integer m=mA, n=nA, nrhs=nrhsA, lda=ldaA, ldb=ldbA, *jpvt,
73 rank=*rankA, info=*infoA;
75 __CLPK_integer lwork =
std::max( mn+2*n+n*(n+1), 2*mn+n*nrhs );
77 double *work = (
double*) malloc(lwork*
sizeof(
double));
78 jpvt = (__CLPK_integer*)malloc(n*
sizeof(__CLPK_integer));
79 for (i=0;i<n;i++) jpvt[i]=jpvtA[i];
80 if (
VDEBUG) printf(
"*** entering dgelsy ***\n");
81 dgelsy_(&m,&n,&nrhs,a,&lda,b,&ldb,jpvt,&rcond,&
rank,work,&lwork,&info);
82 for (i=0;i<n;i++) jpvtA[i]=jpvt[i];
85 free(work); free(jpvt);
86 if (
VDEBUG) printf(
"***dgelsy finished***\n");
89void dgesv(
int nA,
int nrhsA,
double *a,
int ldaA,
int *pivA,
double *b,
int ldbA,
int *infoA)
91 __CLPK_integer n=nA, nrhs=nrhsA, lda=ldaA, *ipiv=pivA, ldb=ldbA;
94 if (
VDEBUG) printf(
"*** entering dgesv ***\n");
95 dgesv_(&n,&nrhs,a,&lda,ipiv,b,&ldb,&info);
97 if (
VDEBUG) printf(
"***dgesv finished***\n");
100void dgesvd(
char jobu,
char jobvt,
int mA,
int nA,
double *a,
int ldaA,
double *sing,
double *u,
int lduA,
double *vt,
int ldvtA,
int *infoA)
102 __CLPK_integer m=mA, n=nA, lda=ldaA, ldu=lduA, ldvt=ldvtA,info=*infoA;
104 double *work = (
double*) malloc(lwork*
sizeof(
double));
105 if (
VDEBUG) printf(
"*** entering dgesvd ***\n");
106 dgesvd_(&jobu,&jobvt,&m,&n,a,&lda,sing,u,&ldu,vt,&ldvt,work,&lwork,&info);
109 if (
VDEBUG) printf(
"***dgesvd finished***\n");
112void dstev(
char jobz,
int nA,
double *
diag,
double *offd,
double *z,
int ldzA,
int *infoA)
114 __CLPK_integer n=nA, ldz=ldzA, info=*infoA;
115 __CLPK_integer lwork =
std::max(1,2*n-2);
116 double *work = (
double*) malloc(lwork*
sizeof(
double));
117 if (
VDEBUG) printf(
"*** entering dstev ***\n");
118 dstev_(&jobz,&n,
diag,offd,z,&ldz,work,&info);
121 if (
VDEBUG) printf(
"***dstev finished***\n");
124void dgetrf(
int mA,
int nA,
double *a,
int ldaA,
int *ipiv,
int *infoA)
126 __CLPK_integer m=mA, n=nA, lda=ldaA,info=*infoA;
127 dgetrf_( &m, &n, a, &lda, ipiv, &info );
131void dgetri(
int nA,
double *a,
int ldaA,
int *ipiv,
int *infoA)
133 __CLPK_integer n=nA, lda=ldaA, info=*infoA;
134 int minusOne=-1, one=1;
135#if defined(Cygwin) || defined(Atlas)
136 __CLPK_integer lwork = n* (__CLPK_integer) ilaenv_( &one,
"dgetri",6,
"",0, (
int*) &n, &minusOne, &minusOne, &minusOne );
138 __CLPK_integer lwork = n* (__CLPK_integer) ilaenv_( &one,
"dgetri",
"", (
int*) &n, &minusOne, &minusOne, &minusOne );
140 double *work = (
double*) malloc(lwork*
sizeof(
double));
141 if (
VDEBUG) printf(
"*** entering dgetri ***\n");
142 dgetri_( &n, a, &lda, ipiv, work, &lwork, &info );
145 if (
VDEBUG) printf(
"***dgetri finished***\n");
148void sgetrf(
int mA,
int nA,
float *a,
int ldaA,
int *ipiv,
int *infoA)
150 __CLPK_integer m=mA, n=nA, lda=ldaA,info=*infoA;
151 sgetrf_( &m, &n, a, &lda, ipiv, &info );
155void sgetri(
int nA,
float *a,
int ldaA,
int *ipiv,
int *infoA)
157 __CLPK_integer n=nA, lda=ldaA, info=*infoA;
158 int minusOne=-1, one=1;
159#if defined(Cygwin) || defined(Atlas)
160 __CLPK_integer lwork = n* (__CLPK_integer) ilaenv_( &one,
"sgetri",6,
"",0, (
int*) &n, &minusOne, &minusOne, &minusOne );
162 __CLPK_integer lwork = n* (__CLPK_integer) ilaenv_( &one,
"sgetri",
"", (
int*) &n, &minusOne, &minusOne, &minusOne );
164 float *work = (
float*) malloc(lwork*
sizeof(
float));
165 if (
VDEBUG) printf(
"*** entering sgetri ***\n");
166 sgetri_( &n, a, &lda, ipiv, work, &lwork, &info );
169 if (
VDEBUG) printf(
"***sgetri finished***\n");
172void sgemv(
char transa,
int m,
int n,
float alpha,
float *a,
int lda,
float *x,
int incx,
float beta,
float *y,
int incy)
174 enum CBLAS_TRANSPOSE ntransa=CblasNoTrans;
175 if ( transa ==
't' ) ntransa=CblasTrans;
176 if (
VDEBUG) printf(
"*** entering cblas_sgemv***\n");
177 cblas_sgemv(CblasColMajor,ntransa,m,n,alpha,a,lda,x,incx,beta,y,incy);
178 if (
VDEBUG) printf(
"***sgemv finished***\n");
void dgetrf(int mA, int nA, double *a, int ldaA, int *ipiv, int *infoA)
void dsyevd(char jobz, char uplo, int nA, double *a, int ldaA, double *w, int *infoA)
void sgemv(char transa, int m, int n, float alpha, float *a, int lda, float *x, int incx, float beta, float *y, int incy)
void dgemm(char transa, char transb, int m, int n, int k, double alpha, double *a, int lda, double *b, int ldb, double beta, double *c, int ldc)
void dgesvd(char jobu, char jobvt, int mA, int nA, double *a, int ldaA, double *sing, double *u, int lduA, double *vt, int ldvtA, int *infoA)
void sgetrf(int mA, int nA, float *a, int ldaA, int *ipiv, int *infoA)
void dgemv(char transa, int m, int n, double alpha, double *a, int lda, double *x, int incx, double beta, double *y, int incy)
void dgelsy(int mA, int nA, int nrhsA, double *a, int ldaA, double *b, int ldbA, int *jpvtA, double rcond, int *rankA, int *infoA)
void dstev(char jobz, int nA, double *diag, double *offd, double *z, int ldzA, int *infoA)
void dgetri(int nA, double *a, int ldaA, int *ipiv, int *infoA)
void dgesv(int nA, int nrhsA, double *a, int ldaA, int *pivA, double *b, int ldbA, int *infoA)
void dgels(char trans, int mA, int nA, int nrhsA, double *a, int ldaA, double *b, int ldbA, int *infoA)
void sgetri(int nA, float *a, int ldaA, int *ipiv, int *infoA)
Dune::FieldVector< T, n > max(Dune::FieldVector< T, n > x, Dune::FieldVector< T, n > const &y)
Componentwise maximum.
Dune::FieldVector< T, n > diag(Dune::FieldMatrix< T, n, n > const &A)
Matrix diagonal as a vector.
constexpr int rank
Reports the rank of vector, matrix, and tensor types of static size.
Dune::FieldVector< T, n > min(Dune::FieldVector< T, n > x, Dune::FieldVector< T, n > const &y)
Componentwise minimum.
void dgetrf_(int *m, int *n, double *a, int *lda, int *ipiv, int *info)