void mexFunction(int nlhs_m, mxArray *plhs_m[], int nrhs_m, const mxArray *prhs_m[]) { int i; char * jobz; char * range; char * uplo; int * n; double * a; int * lda; double * vl; double * vu; int * il; int * iu; double * abstol; int * m; double * w; double * z; int * ldz; double * work; int * lwork; int * iwork; int * ifail; int * info; plhs_m[3]=mxDuplicateArray(prhs_m[3]); n=(int *)mxGetPr(plhs_m[3]); plhs_m[5]=mxDuplicateArray(prhs_m[5]); lda=(int *)mxGetPr(plhs_m[5]); plhs_m[8]=mxDuplicateArray(prhs_m[8]); il=(int *)mxGetPr(plhs_m[8]); plhs_m[9]=mxDuplicateArray(prhs_m[9]); iu=(int *)mxGetPr(plhs_m[9]); plhs_m[11]=mxDuplicateArray(prhs_m[11]); m=(int *)mxGetPr(plhs_m[11]); plhs_m[14]=mxDuplicateArray(prhs_m[14]); ldz=(int *)mxGetPr(plhs_m[14]); plhs_m[16]=mxDuplicateArray(prhs_m[16]); lwork=(int *)mxGetPr(plhs_m[16]); plhs_m[19]=mxDuplicateArray(prhs_m[19]); info=(int *)mxGetPr(plhs_m[19]); plhs_m[0] = mxDuplicateArray(prhs_m[0]); jobz = (char*) mxArrayToString(plhs_m[0]); plhs_m[1] = mxDuplicateArray(prhs_m[1]); range = (char*) mxArrayToString(plhs_m[1]); plhs_m[2] = mxDuplicateArray(prhs_m[2]); uplo = (char*) mxArrayToString(plhs_m[2]); plhs_m[4]=mxDuplicateArray(prhs_m[4]); a = mxGetPr(plhs_m[4]); plhs_m[6]=mxDuplicateArray(prhs_m[6]); vl = mxGetPr(plhs_m[6]); plhs_m[7]=mxDuplicateArray(prhs_m[7]); vu = mxGetPr(plhs_m[7]); plhs_m[10]=mxDuplicateArray(prhs_m[10]); abstol = mxGetPr(plhs_m[10]); plhs_m[12]=mxDuplicateArray(prhs_m[12]); w = mxGetPr(plhs_m[12]); plhs_m[13]=mxDuplicateArray(prhs_m[13]); z = mxGetPr(plhs_m[13]); plhs_m[15]=mxDuplicateArray(prhs_m[15]); work = mxGetPr(plhs_m[15]); plhs_m[17]=mxDuplicateArray(prhs_m[17]); iwork = (int *) mxGetPr(plhs_m[17]); plhs_m[18]=mxDuplicateArray(prhs_m[18]); ifail = (int *) mxGetPr(plhs_m[18]); #ifdef F77_INT F77_INT* F77_n = n , F77_lda = lda , F77_il = il , F77_iu = iu , F77_m = m , F77_ldz = ldz , F77_lwork = lwork , F77_iwork = iwork , F77_ifail = ifail , F77_info = info ; #else #define F77_n n #define F77_lda lda #define F77_il il #define F77_iu iu #define F77_m m #define F77_ldz ldz #define F77_lwork lwork #define F77_iwork iwork #define F77_ifail ifail #define F77_info info #endif #ifdef F77_CHAR F77_CHAR* F77_jobz = jobz , F77_range = range , F77_uplo = uplo ; #else #define F77_jobz jobz #define F77_range range #define F77_uplo uplo #endif f77_dsyevx(F77_jobz, F77_range, F77_uplo, F77_n, a, F77_lda, vl, vu, F77_il, F77_iu, abstol, F77_m, w, z, F77_ldz, work, F77_lwork, F77_iwork, F77_ifail, F77_info); return; }
void lapack_dsyevx(const enum lapack_compute_vectors_type jobz, const enum lapack_range_type range, const enum lapack_uplo_type uplo, const int n, double * a, const int lda, const double vl, const double vu, const int il, const int iu, const double abstol, int * m, double * w, double * z, const int ldz, double * work, const int lwork, int * iwork, int * ifail, int * info ) { #ifdef F77_INT F77_INT F77_n=n, F77_lda=lda, F77_il=il, F77_iu=iu, F77_ldz=ldz, F77_lwork=lwork; int i_local; F77_INT F77_m[1]; #define F77_iwork iwork F77_INT F77_ifail[n*1]; for(i_local=0; i_local<n*1; i_local++) { F77_ifail[i_local]=(F77_INT) ifail[i_local]; } F77_INT F77_info[1]; #else #define F77_n n #define F77_lda lda #define F77_il il #define F77_iu iu #define F77_m m #define F77_ldz ldz #define F77_lwork lwork #define F77_iwork iwork #define F77_ifail ifail #define F77_info info #endif #ifdef F77_CHAR F77_CHAR F77_jobz, F77_range, F77_uplo; #else #define F77_jobz C_jobz #define F77_range C_range #define F77_uplo C_uplo #endif char C_jobz=' '; if (jobz == lapack_no_compute_vectors) { C_jobz = 'N'; } else if (jobz == lapack_compute_vectors) { C_jobz = 'V'; } char C_range=' '; if (range == lapack_range_all) { C_range = 'A'; } else if (range == lapack_interval) { C_range = 'V'; } else if (range == lapack_order) { C_range = 'I'; } char C_uplo=' '; if (uplo == lapack_upper) { C_uplo = 'U'; } else if (uplo == lapack_lower) { C_uplo = 'L'; } #ifdef F77_CHAR F77_jobz = C2F_CHAR(&C_jobz) F77_range = C2F_CHAR(&C_range) F77_uplo = C2F_CHAR(&C_uplo) #endif f77_dsyevx(&F77_jobz, &F77_range, &F77_uplo, &F77_n, a, &F77_lda, &vl, &vu, &F77_il, &F77_iu, &abstol, F77_m, w, z, &F77_ldz, work, &F77_lwork, F77_iwork, F77_ifail, F77_info); #ifdef F77_INT m[0]=(int) F77_m[0]; for(i_local=0; i_local<n*1; i_local++) { ifail[i_local]=(int) F77_ifail[i_local]; } info[0]=(int) F77_info[0]; #endif }