version 1.17, 2016/08/27 15:34:22
|
version 1.22, 2023/08/07 08:38:49
|
Line 2
|
Line 2
|
* |
* |
* =========== DOCUMENTATION =========== |
* =========== DOCUMENTATION =========== |
* |
* |
* Online html documentation available at |
* Online html documentation available at |
* http://www.netlib.org/lapack/explore-html/ |
* http://www.netlib.org/lapack/explore-html/ |
* |
* |
*> \htmlonly |
*> \htmlonly |
*> Download DGESDD + dependencies |
*> Download DGESDD + dependencies |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgesdd.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgesdd.f"> |
*> [TGZ]</a> |
*> [TGZ]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgesdd.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgesdd.f"> |
*> [ZIP]</a> |
*> [ZIP]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesdd.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgesdd.f"> |
*> [TXT]</a> |
*> [TXT]</a> |
*> \endhtmlonly |
*> \endhtmlonly |
* |
* |
* Definition: |
* Definition: |
* =========== |
* =========== |
* |
* |
* SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, |
* SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, |
* WORK, LWORK, IWORK, INFO ) |
* WORK, LWORK, IWORK, INFO ) |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
* CHARACTER JOBZ |
* CHARACTER JOBZ |
* INTEGER INFO, LDA, LDU, LDVT, LWORK, M, N |
* INTEGER INFO, LDA, LDU, LDVT, LWORK, M, N |
Line 30
|
Line 30
|
* DOUBLE PRECISION A( LDA, * ), S( * ), U( LDU, * ), |
* DOUBLE PRECISION A( LDA, * ), S( * ), U( LDU, * ), |
* $ VT( LDVT, * ), WORK( * ) |
* $ VT( LDVT, * ), WORK( * ) |
* .. |
* .. |
* |
* |
* |
* |
*> \par Purpose: |
*> \par Purpose: |
* ============= |
* ============= |
Line 191
|
Line 191
|
*> \param[out] INFO |
*> \param[out] INFO |
*> \verbatim |
*> \verbatim |
*> INFO is INTEGER |
*> INFO is INTEGER |
*> = 0: successful exit. |
*> < 0: if INFO = -i, the i-th argument had an illegal value. |
*> < 0: if INFO = -i, the i-th argument had an illegal value. |
*> = -4: if A had a NAN entry. |
*> > 0: DBDSDC did not converge, updating process failed. |
*> > 0: DBDSDC did not converge, updating process failed. |
|
*> = 0: successful exit. |
*> \endverbatim |
*> \endverbatim |
* |
* |
* Authors: |
* Authors: |
* ======== |
* ======== |
* |
* |
*> \author Univ. of Tennessee |
*> \author Univ. of Tennessee |
*> \author Univ. of California Berkeley |
*> \author Univ. of California Berkeley |
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
|
*> \date June 2016 |
|
* |
* |
*> \ingroup doubleGEsing |
*> \ingroup doubleGEsing |
* |
* |
Line 214
|
Line 213
|
*> Ming Gu and Huan Ren, Computer Science Division, University of |
*> Ming Gu and Huan Ren, Computer Science Division, University of |
*> California at Berkeley, USA |
*> California at Berkeley, USA |
*> |
*> |
*> @precisions fortran d -> s |
|
* ===================================================================== |
* ===================================================================== |
SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, |
SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, |
$ WORK, LWORK, IWORK, INFO ) |
$ WORK, LWORK, IWORK, INFO ) |
implicit none |
implicit none |
* |
* |
* -- LAPACK driver routine (version 3.6.1) -- |
* -- LAPACK driver routine -- |
* -- 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..-- |
* June 2016 |
|
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER JOBZ |
CHARACTER JOBZ |
Line 247
|
Line 244
|
$ IR, ISCL, ITAU, ITAUP, ITAUQ, IU, IVT, LDWKVT, |
$ IR, ISCL, ITAU, ITAUP, ITAUQ, IU, IVT, LDWKVT, |
$ LDWRKL, LDWRKR, LDWRKU, MAXWRK, MINMN, MINWRK, |
$ LDWRKL, LDWRKR, LDWRKU, MAXWRK, MINMN, MINWRK, |
$ MNTHR, NWORK, WRKBL |
$ MNTHR, NWORK, WRKBL |
INTEGER LWORK_DGEBRD_MN, LWORK_DGEBRD_MM, |
INTEGER LWORK_DGEBRD_MN, LWORK_DGEBRD_MM, |
$ LWORK_DGEBRD_NN, LWORK_DGELQF_MN, |
$ LWORK_DGEBRD_NN, LWORK_DGELQF_MN, |
$ LWORK_DGEQRF_MN, |
$ LWORK_DGEQRF_MN, |
$ LWORK_DORGBR_P_MM, LWORK_DORGBR_Q_NN, |
$ LWORK_DORGBR_P_MM, LWORK_DORGBR_Q_NN, |
Line 268
|
Line 265
|
$ XERBLA |
$ XERBLA |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
LOGICAL LSAME |
LOGICAL LSAME, DISNAN |
DOUBLE PRECISION DLAMCH, DLANGE |
DOUBLE PRECISION DLAMCH, DLANGE, DROUNDUP_LWORK |
EXTERNAL DLAMCH, DLANGE, LSAME |
EXTERNAL DLAMCH, DLANGE, LSAME, DISNAN, |
|
$ DROUNDUP_LWORK |
* .. |
* .. |
* .. Intrinsic Functions .. |
* .. Intrinsic Functions .. |
INTRINSIC INT, MAX, MIN, SQRT |
INTRINSIC INT, MAX, MIN, SQRT |
Line 323
|
Line 321
|
* |
* |
IF( WNTQN ) THEN |
IF( WNTQN ) THEN |
* dbdsdc needs only 4*N (or 6*N for uplo=L for LAPACK <= 3.6) |
* dbdsdc needs only 4*N (or 6*N for uplo=L for LAPACK <= 3.6) |
* keep 7*N for backwards compatability. |
* keep 7*N for backwards compatibility. |
BDSPAC = 7*N |
BDSPAC = 7*N |
ELSE |
ELSE |
BDSPAC = 3*N*N + 4*N |
BDSPAC = 3*N*N + 4*N |
Line 449
|
Line 447
|
* |
* |
IF( WNTQN ) THEN |
IF( WNTQN ) THEN |
* dbdsdc needs only 4*N (or 6*N for uplo=L for LAPACK <= 3.6) |
* dbdsdc needs only 4*N (or 6*N for uplo=L for LAPACK <= 3.6) |
* keep 7*N for backwards compatability. |
* keep 7*N for backwards compatibility. |
BDSPAC = 7*M |
BDSPAC = 7*M |
ELSE |
ELSE |
BDSPAC = 3*M*M + 4*M |
BDSPAC = 3*M*M + 4*M |
Line 569
|
Line 567
|
END IF |
END IF |
END IF |
END IF |
END IF |
END IF |
|
|
MAXWRK = MAX( MAXWRK, MINWRK ) |
MAXWRK = MAX( MAXWRK, MINWRK ) |
WORK( 1 ) = MAXWRK |
WORK( 1 ) = DROUNDUP_LWORK( MAXWRK ) |
* |
* |
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN |
IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN |
INFO = -12 |
INFO = -12 |
Line 600
|
Line 598
|
* Scale A if max element outside range [SMLNUM,BIGNUM] |
* Scale A if max element outside range [SMLNUM,BIGNUM] |
* |
* |
ANRM = DLANGE( 'M', M, N, A, LDA, DUM ) |
ANRM = DLANGE( 'M', M, N, A, LDA, DUM ) |
|
IF( DISNAN( ANRM ) ) THEN |
|
INFO = -4 |
|
RETURN |
|
END IF |
ISCL = 0 |
ISCL = 0 |
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN |
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN |
ISCL = 1 |
ISCL = 1 |
Line 1540
|
Line 1542
|
* |
* |
* Return optimal workspace in WORK(1) |
* Return optimal workspace in WORK(1) |
* |
* |
WORK( 1 ) = MAXWRK |
WORK( 1 ) = DROUNDUP_LWORK( MAXWRK ) |
* |
* |
RETURN |
RETURN |
* |
* |