--- rpl/lapack/lapack/zgesdd.f 2016/08/27 15:27:12 1.15 +++ rpl/lapack/lapack/zgesdd.f 2023/08/07 08:39:19 1.20 @@ -2,25 +2,25 @@ * * =========== DOCUMENTATION =========== * -* Online html documentation available at -* http://www.netlib.org/lapack/explore-html/ +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ * *> \htmlonly -*> Download ZGESDD + dependencies -*> -*> [TGZ] -*> -*> [ZIP] -*> +*> Download ZGESDD + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> *> [TXT] -*> \endhtmlonly +*> \endhtmlonly * * Definition: * =========== * * SUBROUTINE ZGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, * WORK, LWORK, RWORK, IWORK, INFO ) -* +* * .. Scalar Arguments .. * CHARACTER JOBZ * INTEGER INFO, LDA, LDU, LDVT, LWORK, M, N @@ -31,7 +31,7 @@ * COMPLEX*16 A( LDA, * ), U( LDU, * ), VT( LDVT, * ), * $ WORK( * ) * .. -* +* * *> \par Purpose: * ============= @@ -199,20 +199,19 @@ *> \param[out] INFO *> \verbatim *> INFO is INTEGER -*> = 0: successful exit. -*> < 0: if INFO = -i, the i-th argument had an illegal value. -*> > 0: The updating process of DBDSDC did not converge. +*> < 0: if INFO = -i, the i-th argument had an illegal value. +*> = -4: if A had a NAN entry. +*> > 0: The updating process of DBDSDC did not converge. +*> = 0: successful exit. *> \endverbatim * * Authors: * ======== * -*> \author Univ. of Tennessee -*> \author Univ. of California Berkeley -*> \author Univ. of Colorado Denver -*> \author NAG Ltd. -* -*> \date June 2016 +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. * *> \ingroup complex16GEsing * @@ -222,16 +221,14 @@ *> Ming Gu and Huan Ren, Computer Science Division, University of *> California at Berkeley, USA *> -*> @precisions fortran z -> c * ===================================================================== SUBROUTINE ZGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT, $ WORK, LWORK, RWORK, IWORK, INFO ) implicit none * -* -- LAPACK driver routine (version 3.6.1) -- +* -- LAPACK driver routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* June 2016 * * .. Scalar Arguments .. CHARACTER JOBZ @@ -282,9 +279,10 @@ $ ZLASET, ZUNGBR, ZUNGLQ, ZUNGQR, ZUNMBR * .. * .. External Functions .. - LOGICAL LSAME - DOUBLE PRECISION DLAMCH, ZLANGE - EXTERNAL LSAME, DLAMCH, ZLANGE + LOGICAL LSAME, DISNAN + DOUBLE PRECISION DLAMCH, ZLANGE, DROUNDUP_LWORK + EXTERNAL LSAME, DLAMCH, ZLANGE, DISNAN, + $ DROUNDUP_LWORK * .. * .. Intrinsic Functions .. INTRINSIC INT, MAX, MIN, SQRT @@ -331,8 +329,10 @@ * real workspace. NB refers to the optimal block size for the * immediately following subroutine, as returned by ILAENV.) * - IF( INFO.EQ.0 .AND. M.GT.0 .AND. N.GT.0 ) THEN - IF( M.GE.N ) THEN + IF( INFO.EQ.0 ) THEN + MINWRK = 1 + MAXWRK = 1 + IF( M.GE.N .AND. MINMN.GT.0 ) THEN * * There is no complex work space needed for bidiagonal SVD * The real work space needed for bidiagonal SVD (dbdsdc) is @@ -473,7 +473,7 @@ MAXWRK = MAX( MAXWRK, 2*N + LWORK_ZUNMBR_PRC_NN ) END IF END IF - ELSE + ELSE IF( MINMN.GT.0 ) THEN * * There is no complex work space needed for bidiagonal SVD * The real work space needed for bidiagonal SVD (dbdsdc) is @@ -618,7 +618,7 @@ MAXWRK = MAX( MAXWRK, MINWRK ) END IF IF( INFO.EQ.0 ) THEN - WORK( 1 ) = MAXWRK + WORK( 1 ) = DROUNDUP_LWORK( MAXWRK ) IF( LWORK.LT.MINWRK .AND. .NOT. LQUERY ) THEN INFO = -12 END IF @@ -646,6 +646,10 @@ * Scale A if max element outside range [SMLNUM,BIGNUM] * ANRM = ZLANGE( 'M', M, N, A, LDA, DUM ) + IF( DISNAN( ANRM ) ) THEN + INFO = -4 + RETURN + END IF ISCL = 0 IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN ISCL = 1 @@ -2210,7 +2214,7 @@ * * Return optimal workspace in WORK(1) * - WORK( 1 ) = MAXWRK + WORK( 1 ) = DROUNDUP_LWORK( MAXWRK ) * RETURN *