--- 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
*