version 1.4, 2010/08/06 15:32:23
|
version 1.5, 2010/08/07 13:18:06
|
Line 1
|
Line 1
|
SUBROUTINE DGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK, |
SUBROUTINE DGELSD( M, N, NRHS, A, LDA, B, LDB, S, RCOND, RANK, |
$ WORK, LWORK, IWORK, INFO ) |
$ 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, -- |
* -- 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 2006 |
* June 2010 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK |
INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK |
Line 114
|
Line 114
|
* message related to LWORK is issued by XERBLA. |
* message related to LWORK is issued by XERBLA. |
* |
* |
* IWORK (workspace) INTEGER array, dimension (MAX(1,LIWORK)) |
* 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 ). |
* where MINMN = MIN( M,N ). |
|
* On exit, if INFO = 0, IWORK(1) returns the minimum LIWORK. |
* |
* |
* INFO (output) INTEGER |
* INFO (output) INTEGER |
* = 0: successful exit |
* = 0: successful exit |
Line 141
|
Line 142
|
* .. Local Scalars .. |
* .. Local Scalars .. |
LOGICAL LQUERY |
LOGICAL LQUERY |
INTEGER IASCL, IBSCL, IE, IL, ITAU, ITAUP, ITAUQ, |
INTEGER IASCL, IBSCL, IE, IL, ITAU, ITAUP, ITAUQ, |
$ LDWORK, MAXMN, MAXWRK, MINMN, MINWRK, MM, |
$ LDWORK, LIWORK, MAXMN, MAXWRK, MINMN, MINWRK, |
$ MNTHR, NLVL, NWORK, SMLSIZ, WLALSD |
$ MM, MNTHR, NLVL, NWORK, SMLSIZ, WLALSD |
DOUBLE PRECISION ANRM, BIGNUM, BNRM, EPS, SFMIN, SMLNUM |
DOUBLE PRECISION ANRM, BIGNUM, BNRM, EPS, SFMIN, SMLNUM |
* .. |
* .. |
* .. External Subroutines .. |
* .. External Subroutines .. |
Line 188
|
Line 189
|
* following subroutine, as returned by ILAENV.) |
* following subroutine, as returned by ILAENV.) |
* |
* |
MINWRK = 1 |
MINWRK = 1 |
|
LIWORK = 1 |
MINMN = MAX( 1, MINMN ) |
MINMN = MAX( 1, MINMN ) |
NLVL = MAX( INT( LOG( DBLE( MINMN ) / DBLE( SMLSIZ+1 ) ) / |
NLVL = MAX( INT( LOG( DBLE( MINMN ) / DBLE( SMLSIZ+1 ) ) / |
$ LOG( TWO ) ) + 1, 0 ) |
$ LOG( TWO ) ) + 1, 0 ) |
* |
* |
IF( INFO.EQ.0 ) THEN |
IF( INFO.EQ.0 ) THEN |
MAXWRK = 0 |
MAXWRK = 0 |
|
LIWORK = 3*MINMN*NLVL + 11*MINMN |
MM = M |
MM = M |
IF( M.GE.N .AND. M.GE.MNTHR ) THEN |
IF( M.GE.N .AND. M.GE.MNTHR ) THEN |
* |
* |
Line 261
|
Line 264
|
END IF |
END IF |
MINWRK = MIN( MINWRK, MAXWRK ) |
MINWRK = MIN( MINWRK, MAXWRK ) |
WORK( 1 ) = MAXWRK |
WORK( 1 ) = MAXWRK |
|
IWORK( 1 ) = LIWORK |
|
|
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN |
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN |
INFO = -12 |
INFO = -12 |
END IF |
END IF |
Line 526
|
Line 531
|
* |
* |
10 CONTINUE |
10 CONTINUE |
WORK( 1 ) = MAXWRK |
WORK( 1 ) = MAXWRK |
|
IWORK( 1 ) = LIWORK |
RETURN |
RETURN |
* |
* |
* End of DGELSD |
* End of DGELSD |