Exemple #1
0
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

}