170170* > vectors, stored columnwise) as specified by RANGE; if
171171* > JOBU = 'N', U is not referenced.
172172* > Note: The user must ensure that UCOL >= NS; if RANGE = 'V',
173- * > the exact value of NS is not known in advance and an upper
173+ * > the exact value of NS is not known ILQFin advance and an upper
174174* > bound must be used.
175175* > \endverbatim
176176* >
@@ -294,8 +294,8 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
294294 CHARACTER JOBZ, RNGTGK
295295 LOGICAL ALLS, INDS, LQUERY, VALS, WANTU, WANTVT
296296 INTEGER I, ID, IE, IERR, ILQF, ILTGK, IQRF, ISCL,
297- $ ITAU, ITAUP, ITAUQ, ITEMP, ITEMPR, ITGKZ,
298- $ IUTGK, J, K, MAXWRK, MINMN, MINWRK, MNTHR
297+ $ ITAU, ITAUP, ITAUQ, ITEMP, ITGKZ, IUTGK,
298+ $ J, K, MAXWRK, MINMN, MINWRK, MNTHR
299299 REAL ABSTOL, ANRM, BIGNUM, EPS, SMLNUM
300300* ..
301301* .. Local Arrays ..
@@ -367,14 +367,8 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
367367 IF ( INFO.EQ. 0 ) THEN
368368 IF ( WANTU .AND. LDU.LT. M ) THEN
369369 INFO = - 15
370- ELSE IF ( WANTVT ) THEN
371- IF ( INDS ) THEN
372- IF ( LDVT.LT. IU- IL+1 ) THEN
373- INFO = - 17
374- END IF
375- ELSE IF ( LDVT.LT. MINMN ) THEN
376- INFO = - 17
377- END IF
370+ ELSE IF ( WANTVT .AND. LDVT.LT. MINMN ) THEN
371+ INFO = - 16
378372 END IF
379373 END IF
380374 END IF
@@ -396,50 +390,37 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
396390*
397391* Path 1 (M much larger than N)
398392*
399- MINWRK = N* (N+5 )
400- MAXWRK = N + N* ILAENV(1 ,' CGEQRF' ,' ' ,M,N,- 1 ,- 1 )
401- MAXWRK = MAX (MAXWRK,
402- $ N* N+2 * N+2 * N* ILAENV(1 ,' CGEBRD' ,' ' ,N,N,- 1 ,- 1 ))
403- IF (WANTU .OR. WANTVT) THEN
404- MAXWRK = MAX (MAXWRK,
405- $ N* N+2 * N+ N* ILAENV(1 ,' CUNMQR' ,' LN' ,N,N,N,- 1 ))
406- END IF
393+ MAXWRK = N + N*
394+ $ ILAENV( 1 , ' SGEQRF' , ' ' , M, N, - 1 , - 1 )
395+ MAXWRK = MAX ( MAXWRK, N* N + N + 2 * N*
396+ $ ILAENV( 1 , ' SGEBRD' , ' ' , N, N, - 1 , - 1 ) )
397+ MINWRK = N* (N+4 )
407398 ELSE
408399*
409400* Path 2 (M at least N, but not much larger)
410401*
411- MINWRK = 3 * N + M
412- MAXWRK = 2 * N + (M+ N)* ILAENV(1 ,' CGEBRD' ,' ' ,M,N,- 1 ,- 1 )
413- IF (WANTU .OR. WANTVT) THEN
414- MAXWRK = MAX (MAXWRK,
415- $ 2 * N+ N* ILAENV(1 ,' CUNMQR' ,' LN' ,N,N,N,- 1 ))
416- END IF
402+ MAXWRK = 2 * N + ( M+ N )*
403+ $ ILAENV( 1 , ' CGEBRD' , ' ' , M, N, - 1 , - 1 )
404+ MINWRK = 2 * N + M
417405 END IF
418406 ELSE
419407 MNTHR = ILAENV( 6 , ' CGESVD' , JOBU // JOBVT, M, N, 0 , 0 )
420408 IF ( N.GE. MNTHR ) THEN
421409*
422410* Path 1t (N much larger than M)
423411*
424- MINWRK = M* (M+5 )
425- MAXWRK = M + M* ILAENV(1 ,' CGELQF' ,' ' ,M,N,- 1 ,- 1 )
426- MAXWRK = MAX (MAXWRK,
427- $ M* M+2 * M+2 * M* ILAENV(1 ,' CGEBRD' ,' ' ,M,M,- 1 ,- 1 ))
428- IF (WANTU .OR. WANTVT) THEN
429- MAXWRK = MAX (MAXWRK,
430- $ M* M+2 * M+ M* ILAENV(1 ,' CUNMQR' ,' LN' ,M,M,M,- 1 ))
431- END IF
412+ MAXWRK = M + M*
413+ $ ILAENV( 1 , ' CGELQF' , ' ' , M, N, - 1 , - 1 )
414+ MAXWRK = MAX ( MAXWRK, M* M + M + 2 * M*
415+ $ ILAENV( 1 , ' CGEBRD' , ' ' , M, M, - 1 , - 1 ) )
416+ MINWRK = M* (M+4 )
432417 ELSE
433418*
434419* Path 2t (N greater than M, but not much larger)
435420*
436- *
437- MINWRK = 3 * M + N
438- MAXWRK = 2 * M + (M+ N)* ILAENV(1 ,' CGEBRD' ,' ' ,M,N,- 1 ,- 1 )
439- IF (WANTU .OR. WANTVT) THEN
440- MAXWRK = MAX (MAXWRK,
441- $ 2 * M+ M* ILAENV(1 ,' CUNMQR' ,' LN' ,M,M,M,- 1 ))
442- END IF
421+ MAXWRK = M* (M* 2+19 ) + ( M+ N )*
422+ $ ILAENV( 1 , ' CGEBRD' , ' ' , M, N, - 1 , - 1 )
423+ MINWRK = 2 * M + N
443424 END IF
444425 END IF
445426 END IF
@@ -537,14 +518,14 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
537518 CALL CGEBRD( N, N, WORK( IQRF ), N, RWORK( ID ),
538519 $ RWORK( IE ), WORK( ITAUQ ), WORK( ITAUP ),
539520 $ WORK( ITEMP ), LWORK- ITEMP+1 , INFO )
540- ITEMPR = ITGKZ + N* (N* 2+1 )
521+ ITEMP = ITGKZ + N* (N* 2+1 )
541522*
542523* Solve eigenvalue problem TGK*Z=Z*S.
543524* (Workspace: need 2*N*N+14*N)
544525*
545526 CALL SBDSVDX( ' U' , JOBZ, RNGTGK, N, RWORK( ID ),
546527 $ RWORK( IE ), VL, VU, ILTGK, IUTGK, NS, S,
547- $ RWORK( ITGKZ ), N* 2 , RWORK( ITEMPR ),
528+ $ RWORK( ITGKZ ), N* 2 , RWORK( ITEMP ),
548529 $ IWORK, INFO)
549530*
550531* If needed, compute left singular vectors.
@@ -558,7 +539,7 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
558539 END DO
559540 K = K + N
560541 END DO
561- CALL CLASET( ' A' , M- N, NS , CZERO, CZERO, U( N+1 ,1 ), LDU)
542+ CALL CLASET( ' A' , M- N, N , CZERO, CZERO, U( N+1 ,1 ), LDU )
562543*
563544* Call CUNMBR to compute QB*UB.
564545* (Workspace in WORK( ITEMP ): need N, prefer N*NB)
@@ -613,14 +594,14 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
613594 CALL CGEBRD( M, N, A, LDA, RWORK( ID ), RWORK( IE ),
614595 $ WORK( ITAUQ ), WORK( ITAUP ), WORK( ITEMP ),
615596 $ LWORK- ITEMP+1 , INFO )
616- ITEMPR = ITGKZ + N* (N* 2+1 )
597+ ITEMP = ITGKZ + N* (N* 2+1 )
617598*
618599* Solve eigenvalue problem TGK*Z=Z*S.
619600* (Workspace: need 2*N*N+14*N)
620601*
621602 CALL SBDSVDX( ' U' , JOBZ, RNGTGK, N, RWORK( ID ),
622603 $ RWORK( IE ), VL, VU, ILTGK, IUTGK, NS, S,
623- $ RWORK( ITGKZ ), N* 2 , RWORK( ITEMPR ),
604+ $ RWORK( ITGKZ ), N* 2 , RWORK( ITEMP ),
624605 $ IWORK, INFO)
625606*
626607* If needed, compute left singular vectors.
@@ -634,7 +615,7 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
634615 END DO
635616 K = K + N
636617 END DO
637- CALL CLASET( ' A' , M- N, NS , CZERO, CZERO, U( N+1 ,1 ), LDU)
618+ CALL CLASET( ' A' , M- N, N , CZERO, CZERO, U( N+1 ,1 ), LDU )
638619*
639620* Call CUNMBR to compute QB*UB.
640621* (Workspace in WORK( ITEMP ): need N, prefer N*NB)
@@ -700,14 +681,14 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
700681 CALL CGEBRD( M, M, WORK( ILQF ), M, RWORK( ID ),
701682 $ RWORK( IE ), WORK( ITAUQ ), WORK( ITAUP ),
702683 $ WORK( ITEMP ), LWORK- ITEMP+1 , INFO )
703- ITEMPR = ITGKZ + M* (M* 2+1 )
684+ ITEMP = ITGKZ + M* (M* 2+1 )
704685*
705686* Solve eigenvalue problem TGK*Z=Z*S.
706687* (Workspace: need 2*M*M+14*M)
707688*
708689 CALL SBDSVDX( ' U' , JOBZ, RNGTGK, M, RWORK( ID ),
709690 $ RWORK( IE ), VL, VU, ILTGK, IUTGK, NS, S,
710- $ RWORK( ITGKZ ), M* 2 , RWORK( ITEMPR ),
691+ $ RWORK( ITGKZ ), M* 2 , RWORK( ITEMP ),
711692 $ IWORK, INFO)
712693*
713694* If needed, compute left singular vectors.
@@ -741,7 +722,7 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
741722 END DO
742723 K = K + M
743724 END DO
744- CALL CLASET( ' A' , NS , N- M, CZERO, CZERO,
725+ CALL CLASET( ' A' , M , N- M, CZERO, CZERO,
745726 $ VT( 1 ,M+1 ), LDVT )
746727*
747728* Call CUNMBR to compute (VB**T)*(PB**T)
@@ -777,14 +758,14 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
777758 CALL CGEBRD( M, N, A, LDA, RWORK( ID ), RWORK( IE ),
778759 $ WORK( ITAUQ ), WORK( ITAUP ), WORK( ITEMP ),
779760 $ LWORK- ITEMP+1 , INFO )
780- ITEMPR = ITGKZ + M* (M* 2+1 )
761+ ITEMP = ITGKZ + M* (M* 2+1 )
781762*
782763* Solve eigenvalue problem TGK*Z=Z*S.
783764* (Workspace: need 2*M*M+14*M)
784765*
785766 CALL SBDSVDX( ' L' , JOBZ, RNGTGK, M, RWORK( ID ),
786767 $ RWORK( IE ), VL, VU, ILTGK, IUTGK, NS, S,
787- $ RWORK( ITGKZ ), M* 2 , RWORK( ITEMPR ),
768+ $ RWORK( ITGKZ ), M* 2 , RWORK( ITEMP ),
788769 $ IWORK, INFO)
789770*
790771* If needed, compute left singular vectors.
@@ -818,7 +799,7 @@ SUBROUTINE CGESVDX( JOBU, JOBVT, RANGE, M, N, A, LDA, VL, VU,
818799 END DO
819800 K = K + M
820801 END DO
821- CALL CLASET( ' A' , NS , N- M, CZERO, CZERO,
802+ CALL CLASET( ' A' , M , N- M, CZERO, CZERO,
822803 $ VT( 1 ,M+1 ), LDVT )
823804*
824805* Call CUNMBR to compute VB**T * PB**T
0 commit comments