13 #include "common_magma.h"
17 # define lapackf77_ieeeck ieeeck_
18 #elif defined NOCHANGE
19 # define lapackf77_ieeeck ieeeck
26 cuFloatComplex *a,
magma_int_t lda,
float vl,
float vu,
237 char uplo_[2] = {
uplo, 0};
238 char jobz_[2] = {jobz, 0};
239 char range_[2] = {range, 0};
243 static float szero = 0.;
244 static float sone = 1.;
262 static float eps, tmp1;
264 static float sigma, d__1;
265 static float rmin, rmax;
272 lquery = lwork == -1 || lrwork == -1 || liwork == -1;
277 }
else if (! (alleig || valeig || indeig)) {
283 }
else if (lda <
max(1,n)) {
285 }
else if (ldz < 1 || wantz && ldz < n) {
289 if (n > 0 && vu <= vl) {
293 if (il < 1 || il >
max(1,n)) {
295 }
else if (iu <
min(n,il) || iu > n) {
303 lwmin = n * (nb + 1);
311 if (lwork < lwmin && ! lquery) {
313 }
else if ((lrwork < lrwmin) && ! lquery) {
315 }
else if ((liwork < liwmin) && ! lquery) {
335 if (alleig || indeig) {
338 if (vl < w[0] && vu >= w[0]) {
357 smlnum = safmin / eps;
358 bignum = 1. / smlnum;
367 if (anrm > 0. && anrm < rmin) {
370 }
else if (anrm > rmax) {
398 llwork = lwork - indwk + 1;
399 llrwork = lrwork - indrwk + 1;
406 magma_chetrd(uplo, n, a, lda, &rwork[indrd], &rwork[indre], &work[indtau], &work[indwk], llwork, &iinfo);
422 if ((alleig || indeig && il == 1 && iu == n)){
427 &rwork[indrd], &rwork[indre], m,
428 &nsplit, &w[1], &iwork[indibl], &iwork[indisp],
429 &rwork[indrwk], &iwork[indiwo], info);
434 }
else if (ieeeok==1){
437 blasf77_scopy(&i__1, &rwork[indre], &ione, &rwork[indree], &ione);
438 blasf77_scopy(&n, &rwork[indrd], &ione, &rwork[indrdd], &ione);
440 if (abstol < 2*n*eps)
445 lapackf77_cstemr(jobz_, range_, &n, &rwork[indrdd], &rwork[indree], &vl, &vu, &il,
446 &iu, m, &w[1], z, &ldz, &n, &isuppz[1], &tryrac, &rwork[indrwk],
447 &llrwork, &iwork[1], &liwork, info);
449 if (*info == 0 && wantz) {
451 z, ldz, &work[indwk], llwork, &iinfo);
457 if (wantz && (ieeeok ==0 || *info != 0)) {
460 lapackf77_sstebz(range_,
"B", &n, &vl, &vu, &il, &iu, &abstol, &rwork[indrd], &rwork[indre], m,
461 &nsplit, &w[1], &iwork[indibl], &iwork[indisp], &rwork[indrwk], &iwork[indiwo], info);
463 lapackf77_cstein(&n, &rwork[indrd], &rwork[indre], m, &w[1], &iwork[indibl], &iwork[indisp],
464 z, &ldz, &rwork[indrwk], &iwork[indiwo], &iwork[indifl], info);
469 z, ldz, &work[indwk], llwork, &iinfo);
480 sscal_(&imax, &d__1, &w[1], &ione);
486 for (j = 1; j <= *m-1; ++j) {
489 for (jj = j + 1; jj <= *m; ++jj) {
497 itmp1 = iwork[indibl + i - 1];
499 iwork[indibl + i - 1] = iwork[indibl + j - 1];
501 iwork[indibl + j - 1] = itmp1;
502 blasf77_cswap(&n, z + (i-1)*ldz, &ione, z + (j-1)*ldz, &ione);
510 rwork[1] = (float) lrwmin;