15 #ifndef SFCSORTBENCH_LAPAC_H 16 #define SFCSORTBENCH_LAPAC_H 22 extern "C" void dgesv_(
int* n,
int* nrhs,
double* a,
int* lda,
int* ipiv,
double* b,
int* ldb,
int* info );
23 extern "C" void dsyev_(
char* jobz,
char* uplo,
int* n,
double* a,
int* lda,
double* w,
double* work,
int* lwork,
int* info);
26 extern "C" void dgetrf_(
int* M,
int *N,
double* A,
int* lda,
int* IPIV,
int* INFO);
29 extern "C" void dgetri_(
int* N,
double* A,
int* lda,
int* IPIV,
double* WORK,
int* lwork,
int* INFO);
46 inline void lapack_DGESV(
int n ,
int nrhs,
const double * A,
int lda,
double * B,
double * X,
int ldb,
int info)
48 int * ipiv =
new int [n] ;
51 for(
unsigned int i=0;i<nrhs;i++)
52 for(
unsigned int j=0;j<n;j++)
55 double * L=
new double[n*n];
57 for(
unsigned int i=0;i<n;i++)
58 for(
unsigned int j=0;j<n;j++)
61 dgesv_(&n,&nrhs,L,&lda,ipiv,X,&lda,&info);
64 printf(
"The diagonal element of the triangular factor of A,\n" );
65 printf(
"U(%i,%i) is zero, so that A is singular;\n", info, info );
66 printf(
"the solution could not be computed.\n" );
70 memcpy(L,X,
sizeof(
double)*n*nrhs);
72 for(
unsigned int i=0;i<nrhs;i++)
73 for(
unsigned int j=0;j<n;j++)
74 X[i*nrhs+j] = L[j*n+i];
86 if (info <0) {printf(
" lapack linear solve failed. \n"); }
104 inline void lapack_DSYEV(
int n,
const double * A,
int lda,
double * wr,
double * vs,
int info )
108 double * L=
new double[n*n];
110 for(
unsigned int i=0;i<n;i++)
111 for(
unsigned int j=0;j<n;j++)
117 dsyev_((
char*)
"Vectors", (
char*)
"Upper", (
int*)&n, L, (
int*)&lda, wr, &wkopt, &lwork,(
int*)&info );
119 work =
new double[lwork];
121 dsyev_( (
char*)
"Vectors", (
char*)
"Upper", (
int*)&n, L, (
int*)&lda, wr, work, &lwork, (
int*)&info );
124 for(
unsigned int i=0;i<n;i++)
125 for(
unsigned int j=0;j<n;j++)
161 if(info!=0) std::cout<<
"lapack eigen solve failed. "<<std::endl;
172 inline void inverse(
double* A,
int N)
174 int *IPIV =
new int[N+1];
176 double *WORK =
new double[LWORK];
179 dgetrf_(&N,&N,A,&N,IPIV,&INFO);
180 dgetri_(&N,A,&N,IPIV,WORK,&LWORK,&INFO);
193 #endif //SFCSORTBENCH_LAPAC_H