version 1.2, 2017/06/17 11:06:45
|
version 1.3, 2018/05/29 06:55:22
|
Line 53
|
Line 53
|
*> \verbatim |
*> \verbatim |
*> TRANS is CHARACTER*1 |
*> TRANS is CHARACTER*1 |
*> = 'N': the linear system involves A; |
*> = 'N': the linear system involves A; |
*> = 'C': the linear system involves A**C. |
*> = 'C': the linear system involves A**H. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] M |
*> \param[in] M |
Line 152
|
Line 152
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date December 2016 |
*> \date June 2017 |
* |
* |
*> \ingroup complex16GEsolve |
*> \ingroup complex16GEsolve |
* |
* |
Line 160
|
Line 160
|
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.0) -- |
* -- LAPACK driver routine (version 3.7.1) -- |
* -- 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..-- |
* December 2016 |
* June 2017 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER TRANS |
CHARACTER TRANS |
Line 187
|
Line 187
|
INTEGER I, IASCL, IBSCL, J, MINMN, MAXMN, BROW, |
INTEGER I, IASCL, IBSCL, J, MINMN, MAXMN, BROW, |
$ SCLLEN, MNK, TSZO, TSZM, LWO, LWM, LW1, LW2, |
$ SCLLEN, MNK, TSZO, TSZM, LWO, LWM, LW1, LW2, |
$ WSIZEO, WSIZEM, INFO2 |
$ WSIZEO, WSIZEM, INFO2 |
DOUBLE PRECISION ANRM, BIGNUM, BNRM, SMLNUM |
DOUBLE PRECISION ANRM, BIGNUM, BNRM, SMLNUM, DUM( 1 ) |
COMPLEX*16 TQ( 5 ), WORKQ |
COMPLEX*16 TQ( 5 ), WORKQ( 1 ) |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
LOGICAL LSAME |
LOGICAL LSAME |
Line 236
|
Line 236
|
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 ) |
TSZO = INT( TQ( 1 ) ) |
TSZO = INT( TQ( 1 ) ) |
LWO = INT( WORKQ ) |
LWO = INT( WORKQ( 1 ) ) |
CALL ZGEMQR( 'L', TRANS, M, NRHS, N, A, LDA, TQ, |
CALL ZGEMQR( 'L', TRANS, M, NRHS, N, A, LDA, TQ, |
$ TSZO, B, LDB, WORKQ, -1, INFO2 ) |
$ 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 ) |
CALL ZGEQR( M, N, A, LDA, TQ, -2, WORKQ, -2, INFO2 ) |
TSZM = INT( TQ( 1 ) ) |
TSZM = INT( TQ( 1 ) ) |
LWM = INT( WORKQ ) |
LWM = INT( WORKQ( 1 ) ) |
CALL ZGEMQR( 'L', TRANS, M, NRHS, N, A, LDA, TQ, |
CALL ZGEMQR( 'L', TRANS, M, NRHS, N, A, LDA, TQ, |
$ TSZM, B, LDB, WORKQ, -1, INFO2 ) |
$ TSZM, B, LDB, WORKQ, -1, INFO2 ) |
LWM = MAX( LWM, INT( WORKQ ) ) |
LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) |
WSIZEO = TSZO + LWO |
WSIZEO = TSZO + LWO |
WSIZEM = TSZM + LWM |
WSIZEM = TSZM + LWM |
ELSE |
ELSE |
CALL ZGELQ( M, N, A, LDA, TQ, -1, WORKQ, -1, INFO2 ) |
CALL ZGELQ( M, N, A, LDA, TQ, -1, WORKQ, -1, INFO2 ) |
TSZO = INT( TQ( 1 ) ) |
TSZO = INT( TQ( 1 ) ) |
LWO = INT( WORKQ ) |
LWO = 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 ) |
$ 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 ) |
CALL ZGELQ( M, N, A, LDA, TQ, -2, WORKQ, -2, INFO2 ) |
TSZM = INT( TQ( 1 ) ) |
TSZM = INT( TQ( 1 ) ) |
LWM = INT( WORKQ ) |
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 ) |
$ TSZO, B, LDB, WORKQ, -1, INFO2 ) |
LWM = MAX( LWM, INT( WORKQ ) ) |
LWM = MAX( LWM, INT( WORKQ( 1 ) ) ) |
WSIZEO = TSZO + LWO |
WSIZEO = TSZO + LWO |
WSIZEM = TSZM + LWM |
WSIZEM = TSZM + LWM |
END IF |
END IF |
Line 305
|
Line 305
|
* |
* |
* Scale A, B if max element outside range [SMLNUM,BIGNUM] |
* 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 |
IASCL = 0 |
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN |
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN |
* |
* |
Line 331
|
Line 331
|
IF ( TRAN ) THEN |
IF ( TRAN ) THEN |
BROW = N |
BROW = N |
END IF |
END IF |
BNRM = ZLANGE( 'M', BROW, NRHS, B, LDB, WORK ) |
BNRM = ZLANGE( 'M', BROW, NRHS, B, LDB, DUM ) |
IBSCL = 0 |
IBSCL = 0 |
IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN |
IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN |
* |
* |