13 #include "common_magma.h"
22 lapackf77_zstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info);
32 d, e, m, nsplit, w, iblock, isplit, work, iwork,info);
38 cuDoubleComplex *da,
magma_int_t ldda,
double vl,
double vu,
193 char uplo_[2] = {
uplo, 0};
194 char jobz_[2] = {jobz, 0};
195 char range_[2] = {range, 0};
199 static char order[1];
212 static double safmin;
213 static double bignum;
214 static double smlnum;
215 static double eps, tmp1;
217 static double sigma, d__1;
218 static double rmin, rmax;
228 lquery = lwork == -1;
233 }
else if (! (alleig || valeig || indeig)) {
239 }
else if (ldda <
max(1,n)) {
241 }
else if (lddz < 1 || wantz && lddz < n) {
243 }
else if (ldwa <
max(1,n)) {
245 }
else if (ldwz < 1 || wantz && ldwz < n) {
249 if (n > 0 && vu <= vl) {
253 if (il < 1 || il >
max(1,n)) {
255 }
else if (iu <
min(n,il) || iu > n) {
268 if (lwork < lopt && ! lquery) {
289 if (alleig || indeig) {
292 if (vl < w[0] && vu >= w[0]) {
304 fprintf (stderr,
"!!!! device memory allocation error (magma_zheevx_gpu)\n");
318 smlnum = safmin / eps;
319 bignum = 1. / smlnum;
326 if (anrm > 0. && anrm < rmin) {
329 }
else if (anrm > rmax) {
354 llwork = lwork - indwrk + 1;
358 &work[indtau], wa, ldwa, &work[indwrk], llwork, dz, lddz*n, &iinfo);
361 &work[indtau], wa, ldwa, &work[indwrk], llwork, &iinfo);
370 if ((alleig || indeig && il == 1 && iu == n) && abstol <= 0.) {
372 indee = indrwk + 2*n;
375 blasf77_dcopy(&i__1, &rwork[inde], &ione, &rwork[indee], &ione);
379 lapackf77_zungtr(uplo_, &n, wz, &ldwz, &work[indtau], &work[indwrk], &llwork, &iinfo);
381 blasf77_dcopy(&i__1, &rwork[inde], &ione, &rwork[indee], &ione);
382 lapackf77_zsteqr(jobz_, &n, &w[1], &rwork[indee], wz, &ldwz, &rwork[indrwk], info);
384 for (i = 1; i <= n; ++i) {
399 *(
unsigned char *)order =
'B';
401 *(
unsigned char *)order =
'E';
407 Mylapackf77_dstebz(range_, order, &n, &vl, &vu, &il, &iu, &abstol, &rwork[indd], &rwork[inde], m,
408 &nsplit, &w[1], &iwork[indibl], &iwork[indisp], &rwork[indrwk], &iwork[indiwk], info);
412 Mylapackf77_zstein(&n, &rwork[indd], &rwork[inde], m, &w[1], &iwork[indibl], &iwork[indisp],
413 wz, &ldwz, &rwork[indrwk], &iwork[indiwk], &ifail[1], info);
420 dz, lddz, wa, ldwa, &iinfo);
431 dscal_(&imax, &d__1, &w[1], &ione);
438 for (j = 1; j <= *m-1; ++j) {
441 for (jj = j + 1; jj <= *m; ++jj) {
449 itmp1 = iwork[indibl + i - 1];
451 iwork[indibl + i - 1] = iwork[indibl + j - 1];
453 iwork[indibl + j - 1] = itmp1;
454 magma_zswap(n, dz + (i-1)*lddz, ione, dz + (j-1)*lddz, ione);