--- rpl/lapack/lapack/zgetsls.f 2017/06/17 11:02:53 1.1 +++ rpl/lapack/lapack/zgetsls.f 2023/08/07 08:39:20 1.6 @@ -1,3 +1,5 @@ +*> \brief \b ZGETSLS +* * Definition: * =========== * @@ -53,7 +55,7 @@ *> \verbatim *> TRANS is CHARACTER*1 *> = 'N': the linear system involves A; -*> = 'C': the linear system involves A**C. +*> = 'C': the linear system involves A**H. *> \endverbatim *> *> \param[in] M @@ -152,18 +154,15 @@ *> \author Univ. of Colorado Denver *> \author NAG Ltd. * -*> \date December 2016 -* *> \ingroup complex16GEsolve * * ===================================================================== SUBROUTINE ZGETSLS( TRANS, M, N, NRHS, A, LDA, B, LDB, $ WORK, LWORK, INFO ) * -* -- LAPACK driver routine (version 3.7.0) -- +* -- LAPACK driver routine -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* December 2016 * * .. Scalar Arguments .. CHARACTER TRANS @@ -184,17 +183,16 @@ * .. * .. Local Scalars .. LOGICAL LQUERY, TRAN - INTEGER I, IASCL, IBSCL, J, MINMN, MAXMN, BROW, - $ SCLLEN, MNK, TSZO, TSZM, LWO, LWM, LW1, LW2, + INTEGER I, IASCL, IBSCL, J, MAXMN, BROW, + $ SCLLEN, TSZO, TSZM, LWO, LWM, LW1, LW2, $ WSIZEO, WSIZEM, INFO2 - DOUBLE PRECISION ANRM, BIGNUM, BNRM, SMLNUM - COMPLEX*16 TQ( 5 ), WORKQ + DOUBLE PRECISION ANRM, BIGNUM, BNRM, SMLNUM, DUM( 1 ) + COMPLEX*16 TQ( 5 ), WORKQ( 1 ) * .. * .. External Functions .. LOGICAL LSAME - INTEGER ILAENV DOUBLE PRECISION DLAMCH, ZLANGE - EXTERNAL LSAME, ILAENV, DLABAD, DLAMCH, ZLANGE + EXTERNAL LSAME, DLABAD, DLAMCH, ZLANGE * .. * .. External Subroutines .. EXTERNAL ZGEQR, ZGEMQR, ZLASCL, ZLASET, @@ -208,9 +206,7 @@ * Test the input arguments. * INFO = 0 - MINMN = MIN( M, N ) MAXMN = MAX( M, N ) - MNK = MAX( MINMN, NRHS ) TRAN = LSAME( TRANS, 'C' ) * LQUERY = ( LWORK.EQ.-1 .OR. LWORK.EQ.-2 ) @@ -231,36 +227,36 @@ * IF( INFO.EQ.0 ) THEN * -* Determine the block size and minimum LWORK +* Determine the optimum and minimum LWORK * IF( M.GE.N ) THEN CALL ZGEQR( M, N, A, LDA, TQ, -1, WORKQ, -1, INFO2 ) TSZO = INT( TQ( 1 ) ) - LWO = INT( WORKQ ) + LWO = INT( WORKQ( 1 ) ) CALL ZGEMQR( 'L', TRANS, M, NRHS, N, A, LDA, TQ, $ TSZO, B, LDB, WORKQ, -1, INFO2 ) - LWO = MAX( LWO, INT( WORKQ ) ) + LWO = MAX( LWO, INT( WORKQ( 1 ) ) ) CALL ZGEQR( M, N, A, LDA, TQ, -2, WORKQ, -2, INFO2 ) TSZM = INT( TQ( 1 ) ) - LWM = INT( WORKQ ) + LWM = INT( WORKQ( 1 ) ) CALL ZGEMQR( 'L', TRANS, M, NRHS, N, A, LDA, TQ, $ TSZM, B, LDB, WORKQ, -1, INFO2 ) - LWM = MAX( LWM, INT( WORKQ ) ) + LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) WSIZEO = TSZO + LWO WSIZEM = TSZM + LWM ELSE CALL ZGELQ( M, N, A, LDA, TQ, -1, WORKQ, -1, INFO2 ) TSZO = INT( TQ( 1 ) ) - LWO = INT( WORKQ ) + LWO = INT( WORKQ( 1 ) ) CALL ZGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, $ TSZO, B, LDB, WORKQ, -1, INFO2 ) - LWO = MAX( LWO, INT( WORKQ ) ) + LWO = MAX( LWO, INT( WORKQ( 1 ) ) ) CALL ZGELQ( M, N, A, LDA, TQ, -2, WORKQ, -2, INFO2 ) TSZM = INT( TQ( 1 ) ) - LWM = INT( WORKQ ) + LWM = INT( WORKQ( 1 ) ) CALL ZGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, - $ TSZO, B, LDB, WORKQ, -1, INFO2 ) - LWM = MAX( LWM, INT( WORKQ ) ) + $ TSZM, B, LDB, WORKQ, -1, INFO2 ) + LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) WSIZEO = TSZO + LWO WSIZEM = TSZM + LWM END IF @@ -269,16 +265,16 @@ INFO = -10 END IF * + WORK( 1 ) = DBLE( WSIZEO ) +* END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'ZGETSLS', -INFO ) - WORK( 1 ) = DBLE( WSIZEO ) RETURN END IF IF( LQUERY ) THEN - IF( LWORK.EQ.-1 ) WORK( 1 ) = REAL( WSIZEO ) - IF( LWORK.EQ.-2 ) WORK( 1 ) = REAL( WSIZEM ) + IF( LWORK.EQ.-2 ) WORK( 1 ) = DBLE( WSIZEM ) RETURN END IF IF( LWORK.LT.WSIZEO ) THEN @@ -305,7 +301,7 @@ * * Scale A, B if max element outside range [SMLNUM,BIGNUM] * - ANRM = ZLANGE( 'M', M, N, A, LDA, WORK ) + ANRM = ZLANGE( 'M', M, N, A, LDA, DUM ) IASCL = 0 IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN * @@ -331,7 +327,7 @@ IF ( TRAN ) THEN BROW = N END IF - BNRM = ZLANGE( 'M', BROW, NRHS, B, LDB, WORK ) + BNRM = ZLANGE( 'M', BROW, NRHS, B, LDB, DUM ) IBSCL = 0 IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN *