version 1.5, 2020/05/21 21:46:05
|
version 1.6, 2023/08/07 08:39:20
|
Line 154
|
Line 154
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date June 2017 |
|
* |
|
*> \ingroup complex16GEsolve |
*> \ingroup complex16GEsolve |
* |
* |
* ===================================================================== |
* ===================================================================== |
SUBROUTINE ZGETSLS( TRANS, M, N, NRHS, A, LDA, B, LDB, |
SUBROUTINE ZGETSLS( TRANS, M, N, NRHS, A, LDA, B, LDB, |
$ WORK, LWORK, INFO ) |
$ WORK, LWORK, INFO ) |
* |
* |
* -- LAPACK driver routine (version 3.7.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 2017 |
|
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER TRANS |
CHARACTER TRANS |
Line 186
|
Line 183
|
* .. |
* .. |
* .. Local Scalars .. |
* .. Local Scalars .. |
LOGICAL LQUERY, TRAN |
LOGICAL LQUERY, TRAN |
INTEGER I, IASCL, IBSCL, J, MINMN, MAXMN, BROW, |
INTEGER I, IASCL, IBSCL, J, MAXMN, BROW, |
$ SCLLEN, MNK, TSZO, TSZM, LWO, LWM, LW1, LW2, |
$ SCLLEN, TSZO, TSZM, LWO, LWM, LW1, LW2, |
$ WSIZEO, WSIZEM, INFO2 |
$ WSIZEO, WSIZEM, INFO2 |
DOUBLE PRECISION ANRM, BIGNUM, BNRM, SMLNUM, DUM( 1 ) |
DOUBLE PRECISION ANRM, BIGNUM, BNRM, SMLNUM, DUM( 1 ) |
COMPLEX*16 TQ( 5 ), WORKQ( 1 ) |
COMPLEX*16 TQ( 5 ), WORKQ( 1 ) |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
LOGICAL LSAME |
LOGICAL LSAME |
INTEGER ILAENV |
|
DOUBLE PRECISION DLAMCH, ZLANGE |
DOUBLE PRECISION DLAMCH, ZLANGE |
EXTERNAL LSAME, ILAENV, DLABAD, DLAMCH, ZLANGE |
EXTERNAL LSAME, DLABAD, DLAMCH, ZLANGE |
* .. |
* .. |
* .. External Subroutines .. |
* .. External Subroutines .. |
EXTERNAL ZGEQR, ZGEMQR, ZLASCL, ZLASET, |
EXTERNAL ZGEQR, ZGEMQR, ZLASCL, ZLASET, |
Line 210
|
Line 206
|
* Test the input arguments. |
* Test the input arguments. |
* |
* |
INFO = 0 |
INFO = 0 |
MINMN = MIN( M, N ) |
|
MAXMN = MAX( M, N ) |
MAXMN = MAX( M, N ) |
MNK = MAX( MINMN, NRHS ) |
|
TRAN = LSAME( TRANS, 'C' ) |
TRAN = LSAME( TRANS, 'C' ) |
* |
* |
LQUERY = ( LWORK.EQ.-1 .OR. LWORK.EQ.-2 ) |
LQUERY = ( LWORK.EQ.-1 .OR. LWORK.EQ.-2 ) |
Line 233
|
Line 227
|
* |
* |
IF( INFO.EQ.0 ) THEN |
IF( INFO.EQ.0 ) THEN |
* |
* |
* Determine the block size and minimum LWORK |
* Determine the optimum and minimum LWORK |
* |
* |
IF( M.GE.N ) THEN |
IF( M.GE.N ) THEN |
CALL ZGEQR( M, N, A, LDA, TQ, -1, WORKQ, -1, INFO2 ) |
CALL ZGEQR( M, N, A, LDA, TQ, -1, WORKQ, -1, INFO2 ) |
Line 261
|
Line 255
|
TSZM = INT( TQ( 1 ) ) |
TSZM = INT( TQ( 1 ) ) |
LWM = INT( WORKQ( 1 ) ) |
LWM = INT( WORKQ( 1 ) ) |
CALL ZGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, |
CALL ZGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ, |
$ TSZO, B, LDB, WORKQ, -1, INFO2 ) |
$ TSZM, B, LDB, WORKQ, -1, INFO2 ) |
LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) |
LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) |
WSIZEO = TSZO + LWO |
WSIZEO = TSZO + LWO |
WSIZEM = TSZM + LWM |
WSIZEM = TSZM + LWM |
Line 271
|
Line 265
|
INFO = -10 |
INFO = -10 |
END IF |
END IF |
* |
* |
|
WORK( 1 ) = DBLE( WSIZEO ) |
|
* |
END IF |
END IF |
* |
* |
IF( INFO.NE.0 ) THEN |
IF( INFO.NE.0 ) THEN |
CALL XERBLA( 'ZGETSLS', -INFO ) |
CALL XERBLA( 'ZGETSLS', -INFO ) |
WORK( 1 ) = DBLE( WSIZEO ) |
|
RETURN |
RETURN |
END IF |
END IF |
IF( LQUERY ) THEN |
IF( LQUERY ) THEN |
IF( LWORK.EQ.-1 ) WORK( 1 ) = REAL( WSIZEO ) |
IF( LWORK.EQ.-2 ) WORK( 1 ) = DBLE( WSIZEM ) |
IF( LWORK.EQ.-2 ) WORK( 1 ) = REAL( WSIZEM ) |
|
RETURN |
RETURN |
END IF |
END IF |
IF( LWORK.LT.WSIZEO ) THEN |
IF( LWORK.LT.WSIZEO ) THEN |