--- rpl/lapack/lapack/dgelsd.f 2010/08/06 15:32:23 1.4 +++ rpl/lapack/lapack/dgelsd.f 2010/08/07 13:18:06 1.5 @@ -1,10 +1,10 @@ SUBROUTINE DGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK, $ WORK, LWORK, IWORK, INFO ) * -* -- LAPACK driver routine (version 3.2) -- +* -- LAPACK driver routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* November 2006 +* June 2010 * * .. Scalar Arguments .. INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK @@ -114,8 +114,9 @@ * message related to LWORK is issued by XERBLA. * * IWORK (workspace) INTEGER array, dimension (MAX(1,LIWORK)) -* LIWORK >= 3 * MINMN * NLVL + 11 * MINMN, +* LIWORK >= max(1, 3 * MINMN * NLVL + 11 * MINMN), * where MINMN = MIN( M,N ). +* On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK. * * INFO (output) INTEGER * = 0: successful exit @@ -141,8 +142,8 @@ * .. Local Scalars .. LOGICAL LQUERY INTEGER IASCL, IBSCL, IE, IL, ITAU, ITAUP, ITAUQ, - $ LDWORK, MAXMN, MAXWRK, MINMN, MINWRK, MM, - $ MNTHR, NLVL, NWORK, SMLSIZ, WLALSD + $ LDWORK, LIWORK, MAXMN, MAXWRK, MINMN, MINWRK, + $ MM, MNTHR, NLVL, NWORK, SMLSIZ, WLALSD DOUBLE PRECISION ANRM, BIGNUM, BNRM, EPS, SFMIN, SMLNUM * .. * .. External Subroutines .. @@ -188,12 +189,14 @@ * following subroutine, as returned by ILAENV.) * MINWRK = 1 + LIWORK = 1 MINMN = MAX( 1, MINMN ) NLVL = MAX( INT( LOG( DBLE( MINMN ) / DBLE( SMLSIZ+1 ) ) / $ LOG( TWO ) ) + 1, 0 ) * IF( INFO.EQ.0 ) THEN MAXWRK = 0 + LIWORK = 3*MINMN*NLVL + 11*MINMN MM = M IF( M.GE.N .AND. M.GE.MNTHR ) THEN * @@ -261,6 +264,8 @@ END IF MINWRK = MIN( MINWRK, MAXWRK ) WORK( 1 ) = MAXWRK + IWORK( 1 ) = LIWORK + IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN INFO = -12 END IF @@ -526,6 +531,7 @@ * 10 CONTINUE WORK( 1 ) = MAXWRK + IWORK( 1 ) = LIWORK RETURN * * End of DGELSD