Diff for /rpl/lapack/lapack/dgesvdx.f between versions 1.1 and 1.2

version 1.1, 2015/11/26 11:44:15 version 1.2, 2016/08/27 15:27:08
Line 123 Line 123
 *> \param[in] VL  *> \param[in] VL
 *> \verbatim  *> \verbatim
 *>          VL is DOUBLE PRECISION  *>          VL is DOUBLE PRECISION
 *>          VL >=0.  *>          If RANGE='V', the lower bound of the interval to
   *>          be searched for singular values. VU > VL.
   *>          Not referenced if RANGE = 'A' or 'I'.
 *> \endverbatim  *> \endverbatim
 *>  *>
 *> \param[in] VU  *> \param[in] VU
 *> \verbatim  *> \verbatim
 *>          VU is DOUBLE PRECISION  *>          VU is DOUBLE PRECISION
 *>          If RANGE='V', the lower and upper bounds of the interval to  *>          If RANGE='V', the upper bound of the interval to
 *>          be searched for singular values. VU > VL.  *>          be searched for singular values. VU > VL.
 *>          Not referenced if RANGE = 'A' or 'I'.  *>          Not referenced if RANGE = 'A' or 'I'.
 *> \endverbatim  *> \endverbatim
Line 137 Line 139
 *> \param[in] IL  *> \param[in] IL
 *> \verbatim  *> \verbatim
 *>          IL is INTEGER  *>          IL is INTEGER
   *>          If RANGE='I', the index of the
   *>          smallest singular value to be returned.
   *>          1 <= IL <= IU <= min(M,N), if min(M,N) > 0.
   *>          Not referenced if RANGE = 'A' or 'V'.
 *> \endverbatim  *> \endverbatim
 *>  *>
 *> \param[in] IU  *> \param[in] IU
 *> \verbatim  *> \verbatim
 *>          IU is INTEGER  *>          IU is INTEGER
 *>          If RANGE='I', the indices (in ascending order) of the  *>          If RANGE='I', the index of the
 *>          smallest and largest singular values to be returned.  *>          largest singular value to be returned.
 *>          1 <= IL <= IU <= min(M,N), if min(M,N) > 0.  *>          1 <= IL <= IU <= min(M,N), if min(M,N) > 0.
 *>          Not referenced if RANGE = 'A' or 'V'.  *>          Not referenced if RANGE = 'A' or 'V'.
 *> \endverbatim  *> \endverbatim
Line 169 Line 175
 *>          vectors, stored columnwise) as specified by RANGE; if   *>          vectors, stored columnwise) as specified by RANGE; if 
 *>          JOBU = 'N', U is not referenced.  *>          JOBU = 'N', U is not referenced.
 *>          Note: The user must ensure that UCOL >= NS; if RANGE = 'V',   *>          Note: The user must ensure that UCOL >= NS; if RANGE = 'V', 
 *>          the exact value of NS is not known ILQFin advance and an upper   *>          the exact value of NS is not known in advance and an upper
 *>          bound must be used.  *>          bound must be used.
 *> \endverbatim  *> \endverbatim
 *>  *>
Line 248 Line 254
 *> \author Univ. of Colorado Denver   *> \author Univ. of Colorado Denver 
 *> \author NAG Ltd.   *> \author NAG Ltd. 
 *  *
 *> \date November 2015  *> \date June 2016
 *  *
 *> \ingroup doubleGEsing  *> \ingroup doubleGEsing
 *  *
Line 257 Line 263
      $                    IL, IU, NS, S, U, LDU, VT, LDVT, WORK,        $                    IL, IU, NS, S, U, LDU, VT, LDVT, WORK, 
      $                    LWORK, IWORK, INFO )       $                    LWORK, IWORK, 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..--
 *     November 2015  *     June 2016
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          JOBU, JOBVT, RANGE        CHARACTER          JOBU, JOBVT, RANGE
Line 357 Line 363
          IF( INFO.EQ.0 ) THEN           IF( INFO.EQ.0 ) THEN
             IF( WANTU .AND. LDU.LT.M ) THEN              IF( WANTU .AND. LDU.LT.M ) THEN
                INFO = -15                 INFO = -15
             ELSE IF( WANTVT .AND. LDVT.LT.MINMN ) THEN              ELSE IF( WANTVT ) THEN
                INFO = -16                 IF( INDS ) THEN
                      IF( LDVT.LT.IU-IL+1 ) THEN
                          INFO = -17
                      END IF
                  ELSE IF( LDVT.LT.MINMN ) THEN
                      INFO = -17
                  END IF
             END IF              END IF
          END IF           END IF
       END IF        END IF
Line 380 Line 392
 *  *
 *                 Path 1 (M much larger than N)  *                 Path 1 (M much larger than N)
 *  *
                   MAXWRK = N*(N*2+16) +                     MAXWRK = N + 
      $                     N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 )       $                     N*ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 )
                   MAXWRK = MAX( MAXWRK, N*(N*2+20) + 2*N*                    MAXWRK = MAX( MAXWRK, N*(N+5) + 2*N*
      $                     ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) )       $                     ILAENV( 1, 'DGEBRD', ' ', N, N, -1, -1 ) )
                   MINWRK = N*(N*2+21)                    IF (WANTU) THEN
                         MAXWRK = MAX(MAXWRK,N*(N*3+6)+N*
        $                     ILAENV( 1, 'DORMQR', ' ', N, N, -1, -1 ) )
                     END IF
                     IF (WANTVT) THEN
                         MAXWRK = MAX(MAXWRK,N*(N*3+6)+N*
        $                     ILAENV( 1, 'DORMLQ', ' ', N, N, -1, -1 ) )
                     END IF
                     MINWRK = N*(N*3+20)
                ELSE                 ELSE
 *  *
 *                 Path 2 (M at least N, but not much larger)  *                 Path 2 (M at least N, but not much larger)
 *  *
                   MAXWRK = N*(N*2+19) + ( M+N )*                    MAXWRK = 4*N + ( M+N )*
      $                     ILAENV( 1, 'DGEBRD', ' ', M, N, -1, -1 )       $                     ILAENV( 1, 'DGEBRD', ' ', M, N, -1, -1 )
                   MINWRK = N*(N*2+20) + M                    IF (WANTU) THEN
                         MAXWRK = MAX(MAXWRK,N*(N*2+5)+N*
        $                     ILAENV( 1, 'DORMQR', ' ', N, N, -1, -1 ) )
                     END IF
                     IF (WANTVT) THEN
                         MAXWRK = MAX(MAXWRK,N*(N*2+5)+N*
        $                     ILAENV( 1, 'DORMLQ', ' ', N, N, -1, -1 ) )
                     END IF
                     MINWRK = MAX(N*(N*2+19),4*N+M)
                END IF                 END IF
             ELSE              ELSE
                MNTHR = ILAENV( 6, 'DGESVD', JOBU // JOBVT, M, N, 0, 0 )                 MNTHR = ILAENV( 6, 'DGESVD', JOBU // JOBVT, M, N, 0, 0 )
Line 399 Line 427
 *  *
 *                 Path 1t (N much larger than M)  *                 Path 1t (N much larger than M)
 *  *
                   MAXWRK = M*(M*2+16) +                     MAXWRK = M + 
      $                     M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 )       $                     M*ILAENV( 1, 'DGELQF', ' ', M, N, -1, -1 )
                   MAXWRK = MAX( MAXWRK, M*(M*2+20) + 2*M*                    MAXWRK = MAX( MAXWRK, M*(M+5) + 2*M*
      $                     ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) )       $                     ILAENV( 1, 'DGEBRD', ' ', M, M, -1, -1 ) )
                   MINWRK = M*(M*2+21)                    IF (WANTU) THEN
                         MAXWRK = MAX(MAXWRK,M*(M*3+6)+M*
        $                     ILAENV( 1, 'DORMQR', ' ', M, M, -1, -1 ) )
                     END IF
                     IF (WANTVT) THEN
                         MAXWRK = MAX(MAXWRK,M*(M*3+6)+M*
        $                     ILAENV( 1, 'DORMLQ', ' ', M, M, -1, -1 ) )
                     END IF
                     MINWRK = M*(M*3+20)
                ELSE                 ELSE
 *  *
 *                 Path 2t (N greater than M, but not much larger)  *                 Path 2t (N at least M, but not much larger)
 *  *
                   MAXWRK = M*(M*2+19) + ( M+N )*                    MAXWRK = 4*M + ( M+N )*
      $                     ILAENV( 1, 'DGEBRD', ' ', M, N, -1, -1 )       $                     ILAENV( 1, 'DGEBRD', ' ', M, N, -1, -1 )
                   MINWRK = M*(M*2+20) + N                    IF (WANTU) THEN
                         MAXWRK = MAX(MAXWRK,M*(M*2+5)+M*
        $                     ILAENV( 1, 'DORMQR', ' ', M, M, -1, -1 ) )
                     END IF
                     IF (WANTVT) THEN
                         MAXWRK = MAX(MAXWRK,M*(M*2+5)+M*
        $                     ILAENV( 1, 'DORMLQ', ' ', M, M, -1, -1 ) )
                     END IF
                     MINWRK = MAX(M*(M*2+19),4*M+N)
                END IF                 END IF
             END IF              END IF
          END IF           END IF
Line 522 Line 566
                   CALL DCOPY( N, WORK( J ), 1, U( 1,I ), 1 )                    CALL DCOPY( N, WORK( J ), 1, U( 1,I ), 1 )
                   J = J + N*2                    J = J + N*2
                END DO                 END DO
                CALL DLASET( 'A', M-N, N, ZERO, ZERO, U( N+1,1 ), LDU )                 CALL DLASET( 'A', M-N, NS, ZERO, ZERO, U( N+1,1 ), LDU )
 *  *
 *              Call DORMBR to compute QB*UB.  *              Call DORMBR to compute QB*UB.
 *              (Workspace in WORK( ITEMP ): need N, prefer N*NB)  *              (Workspace in WORK( ITEMP ): need N, prefer N*NB)
Line 591 Line 635
                   CALL DCOPY( N, WORK( J ), 1, U( 1,I ), 1 )                    CALL DCOPY( N, WORK( J ), 1, U( 1,I ), 1 )
                   J = J + N*2                    J = J + N*2
                END DO                 END DO
                CALL DLASET( 'A', M-N, N, ZERO, ZERO, U( N+1,1 ), LDU )                 CALL DLASET( 'A', M-N, NS, ZERO, ZERO, U( N+1,1 ), LDU )
 *  *
 *              Call DORMBR to compute QB*UB.  *              Call DORMBR to compute QB*UB.
 *              (Workspace in WORK( ITEMP ): need N, prefer N*NB)  *              (Workspace in WORK( ITEMP ): need N, prefer N*NB)
Line 687 Line 731
                   CALL DCOPY( M, WORK( J ), 1, VT( I,1 ), LDVT )                    CALL DCOPY( M, WORK( J ), 1, VT( I,1 ), LDVT )
                   J = J + M*2                    J = J + M*2
                END DO                 END DO
                CALL DLASET( 'A', M, N-M, ZERO, ZERO, VT( 1,M+1 ), LDVT )                 CALL DLASET( 'A', NS, N-M, ZERO, ZERO, VT( 1,M+1 ), LDVT)
 *  *
 *              Call DORMBR to compute (VB**T)*(PB**T)  *              Call DORMBR to compute (VB**T)*(PB**T)
 *              (Workspace in WORK( ITEMP ): need M, prefer M*NB)  *              (Workspace in WORK( ITEMP ): need M, prefer M*NB)
Line 756 Line 800
                   CALL DCOPY( M, WORK( J ), 1, VT( I,1 ), LDVT )                    CALL DCOPY( M, WORK( J ), 1, VT( I,1 ), LDVT )
                   J = J + M*2                    J = J + M*2
                END DO                 END DO
                CALL DLASET( 'A', M, N-M, ZERO, ZERO, VT( 1,M+1 ), LDVT )                 CALL DLASET( 'A', NS, N-M, ZERO, ZERO, VT( 1,M+1 ), LDVT)
 *  *
 *              Call DORMBR to compute VB**T * PB**T  *              Call DORMBR to compute VB**T * PB**T
 *              (Workspace in WORK( ITEMP ): need M, prefer M*NB)  *              (Workspace in WORK( ITEMP ): need M, prefer M*NB)

Removed from v.1.1  
changed lines
  Added in v.1.2


CVSweb interface <joel.bertrand@systella.fr>