1 SUBROUTINE pzheevr( JOBZ, RANGE, UPLO, N, A, IA, JA,
2 $ DESCA, VL, VU, IL, IU, M, NZ, W, Z, IZ,
4 $ WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK,
14 CHARACTER JOBZ, RANGE, UPLO
16 INTEGER IA, IL, INFO, IU, IZ, JA, JZ, LIWORK, LRWORK,
18 DOUBLE PRECISION VL, VU
21 INTEGER DESCA( * ), DESCZ( * ), IWORK( * )
22 DOUBLE PRECISION W( * ), ( * )
23 COMPLEX*16 A( * ), WORK( * ), Z( * )
321 INTEGER CTXT_, M_, N_,
322 $ MB_, NB_, RSRC_, CSRC_
323 PARAMETER ( CTXT_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
324 $ rsrc_ = 7, csrc_ = 8 )
325 DOUBLE PRECISION ZERO
326 PARAMETER ( ZERO = 0.0d0 )
329 LOGICAL , COLBRT, DOBCST, FINISH, FIRST, INDEIG,
330 $ lower, lquery, valeig, vstart, wantz
331 INTEGER ANB, DOL, DOU, , DSTROW, EIGCNT, FRSTCL,
332 $ I, , ICTXT, IIL, IINDERR, IINDWLC, IINFO,
333 $ iiu, im, indd, indd2, inde, inde2, inderr,
334 $ indilu, indrtau, indrw, indrwork, indtau,
335 $ indwlc, indwork, ipil, ipiu, iproc, izrow,
336 $ lastcl, lengthi, lengthi2, liwmin, llrwork,
337 $ llwork, lrwmin, lrwopt, lwmin, lwopt, maxcls,
338 $ mq00, mycol, myil, myiu, myproc, myrow, mz, nb
339 $ ndepth, needil, neediu, nhetrd_lwopt, nnp,
340 $ np00, npcol, nprocs, nprow, nps, nsplit,
341 $ offset, parity, rlengthi, rlengthi2, rstarti,
342 $ size1, size2, sqnpc, srccol, srcrow, starti,
345 DOUBLE PRECISION PIVMIN, SAFMIN
349 INTEGER IDUM1( 4 ), IDUM2( 4 )
353 INTEGER ICEIL, INDXG2P, NUMROC, PJLAENV
354 DOUBLE PRECISION PDLAMCH
355 EXTERNAL ICEIL, INDXG2P, , NUMROC, PDLAMCH,
362 $ igebs2d, igerv2d, igesd2d, igsum2d,
pchk1mat,
367 INTRINSIC abs, dble, dcmplx, ichar, int,
max,
min, mod,
380 wantz = lsame( jobz,
'V' )
381 lower = lsame( uplo, 'l
' )
382 ALLEIG = LSAME( RANGE, 'a
' )
383 VALEIG = LSAME( RANGE, 'v
' )
384 INDEIG = LSAME( RANGE, 'i
' )
385.EQ..OR..EQ..OR..EQ.
LQUERY = ( LWORK-1 LRWORK-1 LIWORK-1 )
392 ICTXT = DESCA( CTXT_ )
393 SAFMIN = PDLAMCH( ICTXT, 'safe minimum
' )
402 LLWORK = LWORK - INDWORK + 1
415 LLRWORK = LRWORK - INDRWORK + 1
422 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
425 NPROCS = NPROW * NPCOL
426 MYPROC = MYROW * NPCOL + MYCOL
427.EQ.
IF( NPROW-1 ) THEN
428 INFO = -( 800+CTXT_ )
429 ELSE IF( WANTZ ) THEN
430.NE.
IF( ICTXTDESCZ( CTXT_ ) ) THEN
431 INFO = -( 2100+CTXT_ )
442 ELSE IF ( INDEIG ) THEN
450 NP00 = NUMROC( N, NB, 0, 0, NPROW )
451 MQ00 = NUMROC( MZ, NB, 0, 0, NPCOL )
453 INDRW = INDRWORK + MAX(18*N, NP00*MQ00 + 2*NB*NB)
454 LRWMIN = INDRW - 1 + (ICEIL(MZ, NPROCS) + 2)*N
455 LWMIN = N + MAX((NP00 + MQ00 + NB) * NB, 3 * NB)
457 INDRW = INDRWORK + 12*N
459 LWMIN = N + MAX( NB*( NP00 + 1 ), 3 * NB )
463 LRWMIN = MAX(3, LRWMIN)
465 LWMIN = MAX(3, LWMIN)
468 ANB = PJLAENV( ICTXT, 3, 'pzhettrd', 'l
', 0, 0, 0, 0 )
469 SQNPC = INT( SQRT( DBLE( NPROCS ) ) )
470 NPS = MAX( NUMROC( N, 1, 0, 0, SQNPC ), 2*ANB )
471 NHETRD_LWOPT = 2*( ANB+1 )*( 4*NPS+2 ) + ( NPS+4 )*NPS
472 LWOPT = MAX( LWOPT, N+NHETRD_LWOPT )
474 SIZE1 = INDRW - INDRWORK
481 NNP = MAX( N, NPROCS+1, 4 )
483 LIWMIN = 12*NNP + 2*N
485 LIWMIN = 10*NNP + 2*N
494 INDILU = LIWMIN - 2*NPROCS + 1
504 CALL CHK1MAT( N, 4, N, 4, IA, JA, DESCA, 8, INFO )
506 $ CALL CHK1MAT( N, 4, N, 4, IZ, JZ, DESCZ, 21, INFO )
509.NOT..OR.
IF( ( WANTZ LSAME( JOBZ, 'n
' ) ) ) THEN
511.NOT..OR..OR.
ELSE IF( ( ALLEIG VALEIG INDEIG ) ) THEN
513.NOT..OR.
ELSE IF( ( LOWER LSAME( UPLO, 'u
' ) ) ) THEN
515.NE.
ELSE IF( MOD( IA-1, DESCA( MB_ ) )0 ) THEN
517.AND..GT..AND..LE.
ELSE IF( VALEIG N0 VUVL ) THEN
519.AND..LT..OR..GT.
ELSE IF( INDEIG ( IL1 ILMAX( 1, N ) ) )
522.AND..LT..OR..GT.
ELSE IF( INDEIG ( IUMIN( N, IL ) IUN ))
525.LT..AND..NOT.
ELSE IF( LWORKLWMIN LQUERY ) THEN
527.LT..AND..NOT.
ELSE IF( LRWORKLRWMIN LQUERY ) THEN
529.LT..AND..NOT.
ELSE IF( LIWORKLIWMIN LQUERY ) THEN
531.NE.
ELSE IF( DESCA( MB_ )DESCA( NB_ ) ) THEN
535 IAROW = INDXG2P( 1, DESCA( NB_ ), MYROW,
536 $ DESCA( RSRC_ ), NPROW )
537 IZROW = INDXG2P( 1, DESCA( NB_ ), MYROW,
538 $ DESCZ( RSRC_ ), NPROW )
539.NE.
IF( IAROWIZROW ) THEN
541.NE.
ELSE IF( MOD( IA-1, DESCA( MB_ ) )
542 $ MOD( IZ-1, DESCZ( MB_ ) ) ) THEN
544.NE.
ELSE IF( DESCA( M_ )DESCZ( M_ ) ) THEN
546.NE.
ELSE IF( DESCA( N_ )DESCZ( N_ ) ) THEN
548.NE.
ELSE IF( DESCA( MB_ )DESCZ( MB_ ) ) THEN
550.NE.
ELSE IF( DESCA( NB_ )DESCZ( NB_ ) ) THEN
552.NE.
ELSE IF( DESCA( RSRC_ )DESCZ( RSRC_ ) ) THEN
553 INFO = -( 2100+RSRC_ )
554.NE.
ELSE IF( DESCA( CSRC_ )DESCZ( CSRC_ ) ) THEN
555 INFO = -( 2100+CSRC_ )
556.NE.
ELSE IF( ICTXTDESCZ( CTXT_ ) ) THEN
557 INFO = -( 2100+CTXT_ )
563 IDUM1( 2 ) = ICHAR( 'l
' )
565 IDUM1( 2 ) = ICHAR( 'u
' )
569 IDUM1( 3 ) = ICHAR( 'a
' )
570 ELSE IF( INDEIG ) THEN
571 IDUM1( 3 ) = ICHAR( 'i
' )
573 IDUM1( 3 ) = ICHAR( 'v
' )
583 IDUM1( 1 ) = ICHAR( 'v
' )
584 CALL PCHK2MAT( N, 4, N, 4, IA, JA, DESCA, 8, N, 4, N, 4,IZ,
585 $ JZ, DESCZ, 21, 4, IDUM1, IDUM2, INFO )
587 IDUM1( 1 ) = ICHAR( 'n
' )
588 CALL PCHK1MAT( N, 4, N, 4, IA, JA, DESCA, 8, 4, IDUM1,
591 WORK( 1 ) = DCMPLX( LWOPT )
592 RWORK( 1 ) = DBLE( LRWOPT )
597 CALL PXERBLA( ICTXT, 'pzheevr', -INFO )
599 ELSE IF( LQUERY ) THEN
613 WORK( 1 ) = DCMPLX( LWOPT )
614 RWORK( 1 ) = DBLE( LRWOPT )
637 CALL PZHENTRD( UPLO, N, A, IA, JA, DESCA, RWORK( INDD ),
638 $ RWORK( INDE ), WORK( INDTAU ), WORK( INDWORK ),
639 $ LLWORK, RWORK( INDRWORK ), LLRWORK,IINFO )
642.NE.
IF (IINFO 0) THEN
643 CALL PXERBLA( ICTXT, 'pzhentrd', -IINFO )
653.EQ..AND..EQ..AND.
IF( IA1 JA1
654.EQ..AND..EQ.
$ DESCA( RSRC_ )0 DESCA( CSRC_ )0 )
656 CALL PDLARED1D( N, IA, JA, DESCA, RWORK( INDD ),
657 $ RWORK( INDD2 ), RWORK( INDRWORK ), LLRWORK )
659 CALL PDLARED1D( N, IA, JA, DESCA, RWORK( INDE ),
660 $ RWORK( INDE2 ), RWORK( INDRWORK ), LLRWORK )
665 CALL PZELGET( 'a
', ' ', WORK( INDWORK ), A,
666 $ I+IA-1, I+JA-1, DESCA )
667 RWORK( INDD2+I-1 ) = DBLE( WORK( INDWORK ) )
669 IF( LSAME( UPLO, 'u
' ) ) THEN
671 CALL PZELGET( 'a
', ' ', WORK( INDWORK ), A,
672 $ I+IA-1, I+JA, DESCA )
673 RWORK( INDE2+I-1 ) = DBLE( WORK( INDWORK ) )
677 CALL PZELGET( 'a
', ' ', WORK( INDWORK ), A,
678 $ I+IA, I+JA-1, DESCA )
679 RWORK( INDE2+I-1 ) = DBLE( WORK( INDWORK ) )
695 ELSE IF ( INDEIG ) THEN
698 ELSE IF ( VALEIG ) THEN
699 CALL DLARRC('t
', N, VLL, VUU, RWORK( INDD2 ),
700 $ RWORK( INDE2 + OFFSET ), SAFMIN, EIGCNT, IIL, IIU, INFO)
711 WORK( 1 ) = DBLE( LWOPT )
730 CALL PMPIM2( IIL, IIU, NPROCS,
731 $ IWORK(INDILU), IWORK(INDILU+NPROCS) )
735 MYIL = IWORK(INDILU+MYPROC)
736 MYIU = IWORK(INDILU+NPROCS+MYPROC)
739 ZOFFSET = MAX(0, MYIL - IIL - 1)
740.EQ.
FIRST = ( MYIL IIL )
753.GT.
IF ( MYIL0 ) THEN
755 DOU = MYIU - MYIL + 1
756 CALL DSTEGR2( JOBZ, 'i
', N, RWORK( INDD2 ),
757 $ RWORK( INDE2+OFFSET ), VLL, VUU, MYIL, MYIU,
758 $ IM, W( 1 ), RWORK( INDRW ), N,
760 $ IWORK( 1 ), RWORK( INDRWORK ), SIZE1,
761 $ IWORK( 2*N+1 ), SIZE2,
762 $ DOL, DOU, ZOFFSET, IINFO )
767 W( MYIL-IIL+I ) = W( I )
772.NE.
IF (IINFO 0) THEN
773 CALL PXERBLA( ICTXT, 'dstegr2', -IINFO )
776.AND..EQ.
ELSEIF ( WANTZ NPROCS1 ) THEN
781.GT.
IF ( MYIL0 ) THEN
784 CALL DSTEGR2( JOBZ, 'i
', N, RWORK( INDD2 ),
785 $ RWORK( INDE2+OFFSET ), VLL, VUU, IIL, IIU,
786 $ IM, W( 1 ), RWORK( INDRW ), N,
788 $ IWORK( 1 ), RWORK( INDRWORK ), SIZE1,
789 $ IWORK( 2*N+1 ), SIZE2, DOL, DOU,
792.NE.
IF (IINFO 0) THEN
793 CALL PXERBLA( ICTXT, 'dstegr2', -IINFO )
796 ELSEIF ( WANTZ ) THEN
802.GT.
IF ( MYIL0 ) THEN
805 CALL DSTEGR2A( JOBZ, 'i
', N, RWORK( INDD2 ),
806 $ RWORK( INDE2+OFFSET ), VLL, VUU, IIL, IIU,
807 $ IM, W( 1 ), RWORK( INDRW ), N,
808 $ N, RWORK( INDRWORK ), SIZE1,
809 $ IWORK( 2*N+1 ), SIZE2, DOL,
810 $ DOU, NEEDIL, NEEDIU,
811 $ INDERR, NSPLIT, PIVMIN, SCALE, WL, WU,
814.NE.
IF (IINFO 0) THEN
815 CALL PXERBLA( ICTXT, 'dstegr2a', -IINFO )
827 IINDERR = INDRWORK + INDERR - 1
847.EQ.
IF (MYPROC (I - 1)) THEN
853 LENGTHI = MYIU - MYIL + 1
858 CALL IGESD2D( ICTXT, 2, 1, IWORK, 2,
860.GE..AND..GE.
IF (( STARTI1 ) ( LENGTHI1 )) THEN
863 CALL DCOPY(LENGTHI,W( STARTI ),1,
866 CALL DCOPY(LENGTHI,RWORK(IINDERR+STARTI-1),1,
867 $ RWORK( INDD+LENGTHI ), 1)
869 CALL DGESD2D( ICTXT, LENGTHI2,
870 $ 1, RWORK( INDD ), LENGTHI2,
873.EQ.
ELSE IF (MYPROC 0) THEN
874 SRCROW = (I-1) / NPCOL
875 SRCCOL = MOD(I-1, NPCOL)
876 CALL IGERV2D( ICTXT, 2, 1, IWORK, 2,
880.GE..AND..GE.
IF (( STARTI1 ) ( LENGTHI1 )) THEN
883 CALL DGERV2D( ICTXT, LENGTHI2, 1,
884 $ RWORK(INDD), LENGTHI2, SRCROW, SRCCOL )
886 CALL DCOPY( LENGTHI, RWORK(INDD), 1,
889 CALL DCOPY(LENGTHI,RWORK(INDD+LENGTHI),1,
890 $ RWORK( IINDERR+STARTI-1 ), 1)
894 LENGTHI = IIU - IIL + 1
895 LENGTHI2 = LENGTHI * 2
896.EQ.
IF (MYPROC 0) THEN
898 CALL DCOPY(LENGTHI,W ,1, RWORK( INDD ), 1)
899 CALL DCOPY(LENGTHI,RWORK( IINDERR ),1,
900 $ RWORK( INDD+LENGTHI ), 1)
901 CALL DGEBS2D( ICTXT, 'a
', ' ', LENGTHI2, 1,
902 $ RWORK(INDD), LENGTHI2 )
906 CALL DGEBR2D( ICTXT, 'a
', ' ', LENGTHI2, 1,
907 $ RWORK(INDD), LENGTHI2, SRCROW, SRCCOL )
908 CALL DCOPY( LENGTHI, RWORK(INDD), 1, W, 1)
909 CALL DCOPY(LENGTHI,RWORK(INDD+LENGTHI),1,
910 $ RWORK( IINDERR ), 1)
916.GT..AND..GT.
IF( (NPROCS1)(MYIL0) ) THEN
917 CALL PMPCOL( MYPROC, NPROCS, IIL, NEEDIL, NEEDIU,
918 $ IWORK(INDILU), IWORK(INDILU+NPROCS),
919 $ COLBRT, FRSTCL, LASTCL )
927 DO 47 IPROC = FRSTCL, LASTCL
928.EQ.
IF (MYPROC IPROC) THEN
931 LENGTHI = MYIU - MYIL + 1
934.GE..AND..GE.
IF ((STARTI1) (LENGTHI1)) THEN
936 CALL DCOPY(LENGTHI,W( STARTI ),1,
940 $ RWORK( IINDERR+STARTI-1 ),1,
941 $ RWORK(INDD+LENGTHI), 1)
944 DO 46 I = FRSTCL, LASTCL
945.EQ.
IF(IMYPROC) GOTO 46
947 DSTCOL = MOD(I, NPCOL)
948 CALL IGESD2D( ICTXT, 2, 1, IWORK, 2,
950.GE..AND..GE.
IF ((STARTI1) (LENGTHI1)) THEN
953 CALL DGESD2D( ICTXT, LENGTHI2,
954 $ 1, RWORK(INDD), LENGTHI2,
959 SRCROW = IPROC / NPCOL
960 SRCCOL = MOD(IPROC, NPCOL)
961 CALL IGERV2D( ICTXT, 2, 1, IWORK, 2,
965.GE..AND..GE.
IF ((RSTARTI1 ) (RLENGTHI1 )) THEN
966 RLENGTHI2 = 2*RLENGTHI
967 CALL DGERV2D( ICTXT, RLENGTHI2, 1,
968 $ RWORK(INDE), RLENGTHI2,
971 CALL DCOPY( RLENGTHI,RWORK(INDE), 1,
974 CALL DCOPY(RLENGTHI,RWORK(INDE+RLENGTHI),1,
975 $ RWORK( IINDERR+RSTARTI-1 ), 1)
989.GT.
IF ( MYIL0 ) THEN
990 CALL DSTEGR2B( JOBZ, N, RWORK( INDD2 ),
991 $ RWORK( INDE2+OFFSET ),
992 $ IM, W( 1 ), RWORK( INDRW ), N, N,
993 $ IWORK( 1 ), RWORK( INDRWORK ), SIZE1,
994 $ IWORK( 2*N+1 ), SIZE2, DOL,
995 $ DOU, NEEDIL, NEEDIU, INDWLC,
996 $ PIVMIN, SCALE, WL, WU,
998 $ MAXCLS, NDEPTH, PARITY, ZOFFSET, IINFO )
999 IINDWLC = INDRWORK + INDWLC - 1
1000.NOT.
IF(FINISH) THEN
1001.LT..OR..GT.
IF((NEEDILDOL)(NEEDIUDOU)) THEN
1002 CALL PMPCOL( MYPROC, NPROCS, IIL, NEEDIL, NEEDIU,
1003 $ IWORK(INDILU), IWORK(INDILU+NPROCS),
1004 $ COLBRT, FRSTCL, LASTCL )
1015 DO 147 IPROC = FRSTCL, LASTCL
1016.EQ.
IF (MYPROC IPROC) THEN
1020 LENGTHI = MYIU - MYIL + 1
1025.GE..AND..GE.
IF ((STARTI1)(LENGTHI1)) THEN
1028 $ RWORK( IINDWLC+STARTI-1 ),1,
1032 $ RWORK( IINDERR+STARTI-1 ),1,
1033 $ RWORK(INDD+LENGTHI), 1)
1036 DO 146 I = FRSTCL, LASTCL
1037.EQ.
IF(IMYPROC) GOTO 146
1039 DSTCOL = MOD(I, NPCOL)
1040 CALL IGESD2D( ICTXT, 2, 1, IWORK, 2,
1042.GE..AND..GE.
IF ((STARTI1)(LENGTHI1)) THEN
1043 LENGTHI2 = 2*LENGTHI
1045 CALL DGESD2D( ICTXT, LENGTHI2,
1046 $ 1, RWORK(INDD), LENGTHI2,
1051 SRCROW = IPROC / NPCOL
1052 SRCCOL = MOD(IPROC, NPCOL)
1053 CALL IGERV2D( ICTXT, 2, 1, IWORK, 2,
1057.GE..AND..GE.
IF ((RSTARTI1)(RLENGTHI1)) THEN
1058 RLENGTHI2 = 2*RLENGTHI
1059 CALL DGERV2D( ICTXT,RLENGTHI2, 1,
1060 $ RWORK(INDE),RLENGTHI2,
1063 CALL DCOPY(RLENGTHI,RWORK(INDE), 1,
1064 $ RWORK( IINDWLC+RSTARTI-1 ), 1)
1066 CALL DCOPY(RLENGTHI,RWORK(INDE+RLENGTHI),
1067 $ 1,RWORK( IINDERR+RSTARTI-1 ), 1)
1075.NE.
IF (IINFO 0) THEN
1076 CALL PXERBLA( ICTXT, 'dstegr2b', -IINFO )
1098.EQ.
IF (MYPROC (I - 1)) THEN
1101 STARTI = MYIL - IIL + 1
1104 LENGTHI = MYIU - MYIL + 1
1109 CALL IGESD2D( ICTXT, 2, 1, IWORK, 2,
1111.GE..AND..GE.
IF ((STARTI1)(LENGTHI1)) THEN
1112 CALL DGESD2D( ICTXT, LENGTHI,
1113 $ 1, W( STARTI ), LENGTHI,
1116.EQ.
ELSE IF (MYPROC 0) THEN
1117 SRCROW = (I-1) / NPCOL
1118 SRCCOL = MOD(I-1, NPCOL)
1119 CALL IGERV2D( ICTXT, 2, 1, IWORK, 2,
1123.GE..AND..GE.
IF ((STARTI1)(LENGTHI1)) THEN
1124 CALL DGERV2D( ICTXT, LENGTHI, 1,
1125 $ W( STARTI ), LENGTHI, SRCROW, SRCCOL )
1132 CALL IGSUM2D( ICTXT, 'a
', ' ', 1, 1, M, 1, -1, -1 )
1135.EQ.
IF (MYPROC 0) THEN
1137 CALL DGEBS2D( ICTXT, 'a
', ' ', M, 1, W, M )
1141 CALL DGEBR2D( ICTXT, 'a
', ' ', M, 1,
1142 $ W, M, SRCROW, SRCCOL )
1149 IWORK( NPROCS+1+I ) = I
1151 CALL DLASRT2( 'i
', M, W, IWORK( NPROCS+2 ), IINFO )
1152.NE.
IF (IINFO0) THEN
1153 CALL PXERBLA( ICTXT, 'dlasrt2', -IINFO )
1164 IWORK( M+NPROCS+1+IWORK( NPROCS+1+I ) ) = I
1168 DO 180 I = 1, NPROCS
1171 IPIL = IWORK(INDILU+I-1)
1172 IPIU = IWORK(INDILU+NPROCS+I-1)
1173.EQ.
IF (IPIL 0) THEN
1174 IWORK( I + 1 ) = IWORK( I )
1176 IWORK( I + 1 ) = IWORK( I ) + IPIU - IPIL + 1
1181 CALL PZLAEVSWP(N, RWORK( INDRW ), N, Z, IZ, JZ,
1182 $ DESCZ, IWORK( 1 ), IWORK( NPROCS+M+2 ), RWORK( INDRWORK ),
1185 CALL PZLAEVSWP(N, RWORK( INDRW + N ), N, Z, IZ, JZ,
1186 $ DESCZ, IWORK( 1 ), IWORK( NPROCS+M+2 ), RWORK( INDRWORK ),
1199 CALL PZUNMTR( 'l
', UPLO, 'n
', N, NZ, A, IA, JA, DESCA,
1200 $ WORK( INDTAU ), Z, IZ, JZ, DESCZ,
1201 $ WORK( INDWORK ), LLWORK, IINFO )
1203.NE.
IF (IINFO0) THEN
1204 CALL PXERBLA( ICTXT, 'pzunmtr', -IINFO )
1211 WORK( 1 ) = DCMPLX( LWOPT )
1212 RWORK( 1 ) = DBLE( LRWOPT )
subroutine dlasrt2(id, n, d, key, info)
subroutine dstegr2(jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, work, lwork, iwork, liwork, dol, dou, zoffset, info)
subroutine dstegr2a(jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, work, lwork, iwork, liwork, dol, dou, needil, neediu, inderr, nsplit, pivmin, scale, wl, wu, info)
subroutine dstegr2b(jobz, n, d, e, m, w, z, ldz, nzc, isuppz, work, lwork, iwork, liwork, dol, dou, needil, neediu, indwlc, pivmin, scale, wl, wu, vstart, finish, maxcls, ndepth, parity, zoffset, info)
subroutine dlarrc(jobt, n, vl, vu, d, e, pivmin, eigcnt, lcnt, rcnt, info)
DLARRC computes the number of eigenvalues of the symmetric tridiagonal matrix.
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dgebs2d(contxt, scope, top, m, n, a, lda)
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine pxerbla(contxt, srname, info)
subroutine dgebr2d(contxt, scope, top, m, n, a, lda)
subroutine pchk2mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, mb, mbpos0, nb, nbpos0, ib, jb, descb, descbpos0, nextra, ex, expos, info)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
subroutine pchk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, nextra, ex, expos, info)
subroutine pdlared1d(n, ia, ja, desc, bycol, byall, work, lwork)
subroutine pzelget(scope, top, alpha, a, ia, ja, desca)
subroutine pzheevr(jobz, range, uplo, n, a, ia, ja, desca, vl, vu, il, iu, m, nz, w, z, iz, jz, descz, work, lwork, rwork, lrwork, iwork, liwork, info)
subroutine pzhentrd(uplo, n, a, ia, ja, desca, d, e, tau, work, lwork, rwork, lrwork, info)
subroutine pzhettrd(uplo, n, a, ia, ja, desca, d, e, tau, work, lwork, info)
subroutine pzlaevswp(n, zin, ldzi, z, iz, jz, descz, nvs, key, rwork, lrwork)
subroutine pzunmtr(side, uplo, trans, m, n, a, ia, ja, desca, tau, c, ic, jc, descc, work, lwork, info)