version 1.9, 2011/11/21 22:19:28
|
version 1.13, 2014/01/27 09:24:34
|
Line 175
|
Line 175
|
*> LWORK >= 3*min(M,N) + |
*> LWORK >= 3*min(M,N) + |
*> max(max(M,N),5*min(M,N)*min(M,N)+4*min(M,N)). |
*> max(max(M,N),5*min(M,N)*min(M,N)+4*min(M,N)). |
*> If JOBZ = 'S' or 'A' |
*> If JOBZ = 'S' or 'A' |
*> LWORK >= 3*min(M,N) + |
*> LWORK >= min(M,N)*(6+4*min(M,N))+max(M,N) |
*> max(max(M,N),4*min(M,N)*min(M,N)+4*min(M,N)). |
|
*> For good performance, LWORK should generally be larger. |
*> For good performance, LWORK should generally be larger. |
*> If LWORK = -1 but other input arguments are legal, WORK(1) |
*> If LWORK = -1 but other input arguments are legal, WORK(1) |
*> returns the optimal LWORK. |
*> returns the optimal LWORK. |
Line 203
|
Line 202
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date November 2011 |
*> \date November 2013 |
* |
* |
*> \ingroup doubleGEsing |
*> \ingroup doubleGEsing |
* |
* |
Line 217
|
Line 216
|
SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, |
SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, |
$ LWORK, IWORK, INFO ) |
$ LWORK, IWORK, INFO ) |
* |
* |
* -- LAPACK driver routine (version 3.4.0) -- |
* -- LAPACK driver routine (version 3.5.0) -- |
* -- 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 2011 |
* November 2013 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER JOBZ |
CHARACTER JOBZ |
Line 372
|
Line 371
|
$ ILAENV( 1, 'DORMBR', 'PRT', N, N, N, -1 ) ) |
$ ILAENV( 1, 'DORMBR', 'PRT', N, N, N, -1 ) ) |
WRKBL = MAX( WRKBL, BDSPAC+3*N ) |
WRKBL = MAX( WRKBL, BDSPAC+3*N ) |
MAXWRK = WRKBL + N*N |
MAXWRK = WRKBL + N*N |
MINWRK = BDSPAC + N*N + 3*N |
MINWRK = BDSPAC + N*N + 2*N + M |
END IF |
END IF |
ELSE |
ELSE |
* |
* |
Line 766
|
Line 765
|
NWORK = ITAU + N |
NWORK = ITAU + N |
* |
* |
* Compute A=Q*R, copying result to U |
* Compute A=Q*R, copying result to U |
* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) |
* (Workspace: need N*N+N+M, prefer N*N+N+M*NB) |
* |
* |
CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), WORK( NWORK ), |
CALL DGEQRF( M, N, A, LDA, WORK( ITAU ), WORK( NWORK ), |
$ LWORK-NWORK+1, IERR ) |
$ LWORK-NWORK+1, IERR ) |
CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) |
CALL DLACPY( 'L', M, N, A, LDA, U, LDU ) |
* |
* |
* Generate Q in U |
* Generate Q in U |
* (Workspace: need N*N+2*N, prefer N*N+N+N*NB) |
* (Workspace: need N*N+N+M, prefer N*N+N+M*NB) |
CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), |
CALL DORGQR( M, M, N, U, LDU, WORK( ITAU ), |
$ WORK( NWORK ), LWORK-NWORK+1, IERR ) |
$ WORK( NWORK ), LWORK-NWORK+1, IERR ) |
* |
* |