Diff for /rpl/lapack/lapack/zgesvd.f between versions 1.14 and 1.15

version 1.14, 2015/11/26 11:44:21 version 1.15, 2016/08/27 15:27:12
Line 214 Line 214
       SUBROUTINE ZGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU,         SUBROUTINE ZGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, 
      $                   VT, LDVT, WORK, LWORK, RWORK, INFO )       $                   VT, LDVT, WORK, LWORK, RWORK, INFO )
 *  *
 *  -- LAPACK driver routine (version 3.6.0) --  *  -- LAPACK driver routine (version 3.6.1) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 *     April 2012  *     April 2012
Line 322 Line 322
             MNTHR = ILAENV( 6, 'ZGESVD', JOBU // JOBVT, M, N, 0, 0 )              MNTHR = ILAENV( 6, 'ZGESVD', JOBU // JOBVT, M, N, 0, 0 )
 *           Compute space needed for ZGEQRF  *           Compute space needed for ZGEQRF
             CALL ZGEQRF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )              CALL ZGEQRF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
             LWORK_ZGEQRF=CDUM(1)              LWORK_ZGEQRF = INT( CDUM(1) )
 *           Compute space needed for ZUNGQR  *           Compute space needed for ZUNGQR
             CALL ZUNGQR( M, N, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )              CALL ZUNGQR( M, N, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
             LWORK_ZUNGQR_N=CDUM(1)              LWORK_ZUNGQR_N = INT( CDUM(1) )
             CALL ZUNGQR( M, M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )              CALL ZUNGQR( M, M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
             LWORK_ZUNGQR_M=CDUM(1)              LWORK_ZUNGQR_M = INT( CDUM(1) )
 *           Compute space needed for ZGEBRD  *           Compute space needed for ZGEBRD
             CALL ZGEBRD( N, N, A, LDA, S, DUM(1), CDUM(1),              CALL ZGEBRD( N, N, A, LDA, S, DUM(1), CDUM(1),
      $                   CDUM(1), CDUM(1), -1, IERR )       $                   CDUM(1), CDUM(1), -1, IERR )
             LWORK_ZGEBRD=CDUM(1)              LWORK_ZGEBRD = INT( CDUM(1) )
 *           Compute space needed for ZUNGBR  *           Compute space needed for ZUNGBR
             CALL ZUNGBR( 'P', N, N, N, A, LDA, CDUM(1),              CALL ZUNGBR( 'P', N, N, N, A, LDA, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
             LWORK_ZUNGBR_P=CDUM(1)              LWORK_ZUNGBR_P = INT( CDUM(1) )
             CALL ZUNGBR( 'Q', N, N, N, A, LDA, CDUM(1),              CALL ZUNGBR( 'Q', N, N, N, A, LDA, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
             LWORK_ZUNGBR_Q=CDUM(1)              LWORK_ZUNGBR_Q = INT( CDUM(1) )
 *  *
             IF( M.GE.MNTHR ) THEN              IF( M.GE.MNTHR ) THEN
                IF( WNTUN ) THEN                 IF( WNTUN ) THEN
Line 445 Line 445
 *  *
                CALL ZGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),                 CALL ZGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),
      $                   CDUM(1), CDUM(1), -1, IERR )       $                   CDUM(1), CDUM(1), -1, IERR )
                LWORK_ZGEBRD=CDUM(1)                 LWORK_ZGEBRD = INT( CDUM(1) )
                MAXWRK = 2*N + LWORK_ZGEBRD                 MAXWRK = 2*N + LWORK_ZGEBRD
                IF( WNTUS .OR. WNTUO ) THEN                 IF( WNTUS .OR. WNTUO ) THEN
                   CALL ZUNGBR( 'Q', M, N, N, A, LDA, CDUM(1),                    CALL ZUNGBR( 'Q', M, N, N, A, LDA, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
                   LWORK_ZUNGBR_Q=CDUM(1)                    LWORK_ZUNGBR_Q = INT( CDUM(1) )
                   MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_Q )                    MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_Q )
                END IF                 END IF
                IF( WNTUA ) THEN                 IF( WNTUA ) THEN
                   CALL ZUNGBR( 'Q', M, M, N, A, LDA, CDUM(1),                    CALL ZUNGBR( 'Q', M, M, N, A, LDA, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
                   LWORK_ZUNGBR_Q=CDUM(1)                    LWORK_ZUNGBR_Q = INT( CDUM(1) )
                   MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_Q )                    MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_Q )
                END IF                 END IF
                IF( .NOT.WNTVN ) THEN                 IF( .NOT.WNTVN ) THEN
                   MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_P )                    MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_P )
                MINWRK = 2*N + M  
                END IF                 END IF
                  MINWRK = 2*N + M
             END IF              END IF
          ELSE IF( MINMN.GT.0 ) THEN           ELSE IF( MINMN.GT.0 ) THEN
 *  *
Line 471 Line 471
             MNTHR = ILAENV( 6, 'ZGESVD', JOBU // JOBVT, M, N, 0, 0 )              MNTHR = ILAENV( 6, 'ZGESVD', JOBU // JOBVT, M, N, 0, 0 )
 *           Compute space needed for ZGELQF  *           Compute space needed for ZGELQF
             CALL ZGELQF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )              CALL ZGELQF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
             LWORK_ZGELQF=CDUM(1)              LWORK_ZGELQF = INT( CDUM(1) )
 *           Compute space needed for ZUNGLQ  *           Compute space needed for ZUNGLQ
             CALL ZUNGLQ( N, N, M, CDUM(1), N, CDUM(1), CDUM(1), -1,              CALL ZUNGLQ( N, N, M, CDUM(1), N, CDUM(1), CDUM(1), -1,
      $                   IERR )       $                   IERR )
             LWORK_ZUNGLQ_N=CDUM(1)              LWORK_ZUNGLQ_N = INT( CDUM(1) )
             CALL ZUNGLQ( M, N, M, A, LDA, CDUM(1), CDUM(1), -1, IERR )              CALL ZUNGLQ( M, N, M, A, LDA, CDUM(1), CDUM(1), -1, IERR )
             LWORK_ZUNGLQ_M=CDUM(1)              LWORK_ZUNGLQ_M = INT( CDUM(1) )
 *           Compute space needed for ZGEBRD  *           Compute space needed for ZGEBRD
             CALL ZGEBRD( M, M, A, LDA, S, DUM(1), CDUM(1),              CALL ZGEBRD( M, M, A, LDA, S, DUM(1), CDUM(1),
      $                   CDUM(1), CDUM(1), -1, IERR )       $                   CDUM(1), CDUM(1), -1, IERR )
             LWORK_ZGEBRD=CDUM(1)              LWORK_ZGEBRD = INT( CDUM(1) )
 *            Compute space needed for ZUNGBR P  *            Compute space needed for ZUNGBR P
             CALL ZUNGBR( 'P', M, M, M, A, N, CDUM(1),              CALL ZUNGBR( 'P', M, M, M, A, N, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
             LWORK_ZUNGBR_P=CDUM(1)              LWORK_ZUNGBR_P = INT( CDUM(1) )
 *           Compute space needed for ZUNGBR Q  *           Compute space needed for ZUNGBR Q
             CALL ZUNGBR( 'Q', M, M, M, A, N, CDUM(1),              CALL ZUNGBR( 'Q', M, M, M, A, N, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
             LWORK_ZUNGBR_Q=CDUM(1)              LWORK_ZUNGBR_Q = INT( CDUM(1) )
             IF( N.GE.MNTHR ) THEN              IF( N.GE.MNTHR ) THEN
                IF( WNTVN ) THEN                 IF( WNTVN ) THEN
 *  *
Line 595 Line 595
 *  *
                CALL ZGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),                 CALL ZGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),
      $                   CDUM(1), CDUM(1), -1, IERR )       $                   CDUM(1), CDUM(1), -1, IERR )
                LWORK_ZGEBRD=CDUM(1)                 LWORK_ZGEBRD = INT( CDUM(1) )
                MAXWRK = 2*M + LWORK_ZGEBRD                 MAXWRK = 2*M + LWORK_ZGEBRD
                IF( WNTVS .OR. WNTVO ) THEN                 IF( WNTVS .OR. WNTVO ) THEN
 *                Compute space needed for ZUNGBR P  *                Compute space needed for ZUNGBR P
                  CALL ZUNGBR( 'P', M, N, M, A, N, CDUM(1),                   CALL ZUNGBR( 'P', M, N, M, A, N, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
                  LWORK_ZUNGBR_P=CDUM(1)                   LWORK_ZUNGBR_P = INT( CDUM(1) )
                  MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_P )                   MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_P )
                END IF                 END IF
                IF( WNTVA ) THEN                 IF( WNTVA ) THEN
                  CALL ZUNGBR( 'P', N,  N, M, A, N, CDUM(1),                   CALL ZUNGBR( 'P', N,  N, M, A, N, CDUM(1),
      $                   CDUM(1), -1, IERR )       $                   CDUM(1), -1, IERR )
                  LWORK_ZUNGBR_P=CDUM(1)                   LWORK_ZUNGBR_P = INT( CDUM(1) )
                  MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_P )                   MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_P )
                END IF                 END IF
                IF( .NOT.WNTUN ) THEN                 IF( .NOT.WNTUN ) THEN
                   MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_Q )                    MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_Q )
                MINWRK = 2*M + N  
                END IF                 END IF
                  MINWRK = 2*M + N
             END IF              END IF
          END IF           END IF
          MAXWRK = MAX( MAXWRK, MINWRK )           MAXWRK = MAX( MAXWRK, MINWRK )
Line 680 Line 680
 *  *
 *              Zero out below R  *              Zero out below R
 *  *
                CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO, A( 2, 1 ),                 IF( N .GT. 1 ) THEN
      $                      LDA )                    CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO, A( 2, 1 ),
        $                         LDA )
                  END IF
                IE = 1                 IE = 1
                ITAUQ = 1                 ITAUQ = 1
                ITAUP = ITAUQ + N                 ITAUP = ITAUQ + N
Line 1144 Line 1146
 *  *
 *                    Zero out below R in A  *                    Zero out below R in A
 *  *
                      CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,                       IF( N .GT. 1 ) THEN
      $                            A( 2, 1 ), LDA )                          CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,
        $                               A( 2, 1 ), LDA )
                        END IF
 *  *
 *                    Bidiagonalize R in A  *                    Bidiagonalize R in A
 *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)  *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)
Line 1321 Line 1325
 *  *
 *                    Zero out below R in A  *                    Zero out below R in A
 *  *
                      CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,                       IF( N .GT. 1 ) THEN
      $                            A( 2, 1 ), LDA )                          CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,
        $                               A( 2, 1 ), LDA )
                        END IF
 *  *
 *                    Bidiagonalize R in A  *                    Bidiagonalize R in A
 *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)  *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)
Line 1649 Line 1655
 *  *
 *                    Zero out below R in A  *                    Zero out below R in A
 *  *
                      CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,                       IF( N .GT. 1 ) THEN
      $                            A( 2, 1 ), LDA )                          CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,
        $                               A( 2, 1 ), LDA )
                        END IF
 *  *
 *                    Bidiagonalize R in A  *                    Bidiagonalize R in A
 *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)  *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)
Line 1830 Line 1838
 *  *
 *                    Zero out below R in A  *                    Zero out below R in A
 *  *
                      CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,                       IF( N .GT. 1 ) THEN
      $                            A( 2, 1 ), LDA )                          CALL ZLASET( 'L', N-1, N-1, CZERO, CZERO,
        $                               A( 2, 1 ), LDA )
                        END IF
 *  *
 *                    Bidiagonalize R in A  *                    Bidiagonalize R in A
 *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)  *                    (CWorkspace: need 3*N, prefer 2*N+2*N*NB)

Removed from v.1.14  
changed lines
  Added in v.1.15


CVSweb interface <joel.bertrand@systella.fr>