Merge pull request #2845 from martin-frbg/lapack443
Fix workspace query in LAPACK xGELQ (Reference-LAPACK 443)
This commit is contained in:
commit
992d7ca63d
|
@ -26,7 +26,7 @@
|
||||||
*> where:
|
*> where:
|
||||||
*>
|
*>
|
||||||
*> Q is a N-by-N orthogonal matrix;
|
*> Q is a N-by-N orthogonal matrix;
|
||||||
*> L is an lower-triangular M-by-M matrix;
|
*> L is a lower-triangular M-by-M matrix;
|
||||||
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
||||||
*>
|
*>
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
|
@ -243,20 +243,32 @@
|
||||||
*
|
*
|
||||||
* Determine if the workspace size satisfies minimal size
|
* Determine if the workspace size satisfies minimal size
|
||||||
*
|
*
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWMIN = MAX( 1, N )
|
||||||
|
LWOPT = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWMIN = MAX( 1, M )
|
||||||
|
LWOPT = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
LMINWS = .FALSE.
|
LMINWS = .FALSE.
|
||||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
NB = N
|
NB = N
|
||||||
END IF
|
END IF
|
||||||
IF( LWORK.LT.MB*M ) THEN
|
IF( LWORK.LT.LWOPT ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWREQ = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWREQ = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
*
|
*
|
||||||
IF( M.LT.0 ) THEN
|
IF( M.LT.0 ) THEN
|
||||||
INFO = -1
|
INFO = -1
|
||||||
|
@ -267,7 +279,7 @@
|
||||||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -6
|
INFO = -6
|
||||||
ELSE IF( ( LWORK.LT.MAX( 1, M*MB ) ) .AND .( .NOT.LQUERY )
|
ELSE IF( ( LWORK.LT.LWREQ ) .AND .( .NOT.LQUERY )
|
||||||
$ .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -8
|
INFO = -8
|
||||||
END IF
|
END IF
|
||||||
|
@ -281,9 +293,9 @@
|
||||||
T( 2 ) = MB
|
T( 2 ) = MB
|
||||||
T( 3 ) = NB
|
T( 3 ) = NB
|
||||||
IF( MINW ) THEN
|
IF( MINW ) THEN
|
||||||
WORK( 1 ) = MAX( 1, N )
|
WORK( 1 ) = LWMIN
|
||||||
ELSE
|
ELSE
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -308,7 +320,7 @@
|
||||||
$ LWORK, INFO )
|
$ LWORK, INFO )
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
*
|
*
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
|
|
|
@ -261,7 +261,7 @@
|
||||||
TSZM = INT( TQ( 1 ) )
|
TSZM = INT( TQ( 1 ) )
|
||||||
LWM = INT( WORKQ( 1 ) )
|
LWM = INT( WORKQ( 1 ) )
|
||||||
CALL CGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ,
|
CALL CGEMLQ( '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
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
*> where:
|
*> where:
|
||||||
*>
|
*>
|
||||||
*> Q is a N-by-N orthogonal matrix;
|
*> Q is a N-by-N orthogonal matrix;
|
||||||
*> L is an lower-triangular M-by-M matrix;
|
*> L is a lower-triangular M-by-M matrix;
|
||||||
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
||||||
*>
|
*>
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
|
@ -243,20 +243,32 @@
|
||||||
*
|
*
|
||||||
* Determine if the workspace size satisfies minimal size
|
* Determine if the workspace size satisfies minimal size
|
||||||
*
|
*
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWMIN = MAX( 1, N )
|
||||||
|
LWOPT = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWMIN = MAX( 1, M )
|
||||||
|
LWOPT = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
LMINWS = .FALSE.
|
LMINWS = .FALSE.
|
||||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
NB = N
|
NB = N
|
||||||
END IF
|
END IF
|
||||||
IF( LWORK.LT.MB*M ) THEN
|
IF( LWORK.LT.LWOPT ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWREQ = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWREQ = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
*
|
*
|
||||||
IF( M.LT.0 ) THEN
|
IF( M.LT.0 ) THEN
|
||||||
INFO = -1
|
INFO = -1
|
||||||
|
@ -267,7 +279,7 @@
|
||||||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -6
|
INFO = -6
|
||||||
ELSE IF( ( LWORK.LT.MAX( 1, M*MB ) ) .AND .( .NOT.LQUERY )
|
ELSE IF( ( LWORK.LT.LWREQ ) .AND .( .NOT.LQUERY )
|
||||||
$ .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -8
|
INFO = -8
|
||||||
END IF
|
END IF
|
||||||
|
@ -281,9 +293,9 @@
|
||||||
T( 2 ) = MB
|
T( 2 ) = MB
|
||||||
T( 3 ) = NB
|
T( 3 ) = NB
|
||||||
IF( MINW ) THEN
|
IF( MINW ) THEN
|
||||||
WORK( 1 ) = MAX( 1, N )
|
WORK( 1 ) = LWMIN
|
||||||
ELSE
|
ELSE
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -308,7 +320,7 @@
|
||||||
$ LWORK, INFO )
|
$ LWORK, INFO )
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
*
|
*
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
|
|
|
@ -258,7 +258,7 @@
|
||||||
TSZM = INT( TQ( 1 ) )
|
TSZM = INT( TQ( 1 ) )
|
||||||
LWM = INT( WORKQ( 1 ) )
|
LWM = INT( WORKQ( 1 ) )
|
||||||
CALL DGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ,
|
CALL DGEMLQ( '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
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
*> where:
|
*> where:
|
||||||
*>
|
*>
|
||||||
*> Q is a N-by-N orthogonal matrix;
|
*> Q is a N-by-N orthogonal matrix;
|
||||||
*> L is an lower-triangular M-by-M matrix;
|
*> L is a lower-triangular M-by-M matrix;
|
||||||
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
||||||
*>
|
*>
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
|
@ -243,20 +243,32 @@
|
||||||
*
|
*
|
||||||
* Determine if the workspace size satisfies minimal size
|
* Determine if the workspace size satisfies minimal size
|
||||||
*
|
*
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWMIN = MAX( 1, N )
|
||||||
|
LWOPT = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWMIN = MAX( 1, M )
|
||||||
|
LWOPT = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
LMINWS = .FALSE.
|
LMINWS = .FALSE.
|
||||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
NB = N
|
NB = N
|
||||||
END IF
|
END IF
|
||||||
IF( LWORK.LT.MB*M ) THEN
|
IF( LWORK.LT.LWOPT ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWREQ = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWREQ = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
*
|
*
|
||||||
IF( M.LT.0 ) THEN
|
IF( M.LT.0 ) THEN
|
||||||
INFO = -1
|
INFO = -1
|
||||||
|
@ -267,7 +279,7 @@
|
||||||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -6
|
INFO = -6
|
||||||
ELSE IF( ( LWORK.LT.MAX( 1, M*MB ) ) .AND .( .NOT.LQUERY )
|
ELSE IF( ( LWORK.LT.LWREQ ) .AND .( .NOT.LQUERY )
|
||||||
$ .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -8
|
INFO = -8
|
||||||
END IF
|
END IF
|
||||||
|
@ -281,9 +293,9 @@
|
||||||
T( 2 ) = MB
|
T( 2 ) = MB
|
||||||
T( 3 ) = NB
|
T( 3 ) = NB
|
||||||
IF( MINW ) THEN
|
IF( MINW ) THEN
|
||||||
WORK( 1 ) = MAX( 1, N )
|
WORK( 1 ) = LWMIN
|
||||||
ELSE
|
ELSE
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -308,7 +320,7 @@
|
||||||
$ LWORK, INFO )
|
$ LWORK, INFO )
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
* End of SGELQ
|
* End of SGELQ
|
||||||
|
|
|
@ -258,7 +258,7 @@
|
||||||
TSZM = INT( TQ( 1 ) )
|
TSZM = INT( TQ( 1 ) )
|
||||||
LWM = INT( WORKQ( 1 ) )
|
LWM = INT( WORKQ( 1 ) )
|
||||||
CALL SGEMLQ( 'L', TRANS, N, NRHS, M, A, LDA, TQ,
|
CALL SGEMLQ( '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
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
*> where:
|
*> where:
|
||||||
*>
|
*>
|
||||||
*> Q is a N-by-N orthogonal matrix;
|
*> Q is a N-by-N orthogonal matrix;
|
||||||
*> L is an lower-triangular M-by-M matrix;
|
*> L is a lower-triangular M-by-M matrix;
|
||||||
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
*> 0 is a M-by-(N-M) zero matrix, if M < N.
|
||||||
*>
|
*>
|
||||||
*> \endverbatim
|
*> \endverbatim
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||||
* ..
|
* ..
|
||||||
* .. External Functions ..
|
* .. External Functions ..
|
||||||
LOGICAL LSAME
|
LOGICAL LSAME
|
||||||
|
@ -243,20 +243,32 @@
|
||||||
*
|
*
|
||||||
* Determine if the workspace size satisfies minimal size
|
* Determine if the workspace size satisfies minimal size
|
||||||
*
|
*
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWMIN = MAX( 1, N )
|
||||||
|
LWOPT = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWMIN = MAX( 1, M )
|
||||||
|
LWOPT = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
LMINWS = .FALSE.
|
LMINWS = .FALSE.
|
||||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
NB = N
|
NB = N
|
||||||
END IF
|
END IF
|
||||||
IF( LWORK.LT.MB*M ) THEN
|
IF( LWORK.LT.LWOPT ) THEN
|
||||||
LMINWS = .TRUE.
|
LMINWS = .TRUE.
|
||||||
MB = 1
|
MB = 1
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
IF( ( N.LE.M ) .OR. ( NB.LE.M ) .OR. ( NB.GE.N ) ) THEN
|
||||||
|
LWREQ = MAX( 1, MB*N )
|
||||||
|
ELSE
|
||||||
|
LWREQ = MAX( 1, MB*M )
|
||||||
|
END IF
|
||||||
*
|
*
|
||||||
IF( M.LT.0 ) THEN
|
IF( M.LT.0 ) THEN
|
||||||
INFO = -1
|
INFO = -1
|
||||||
|
@ -267,7 +279,7 @@
|
||||||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -6
|
INFO = -6
|
||||||
ELSE IF( ( LWORK.LT.MAX( 1, M*MB ) ) .AND .( .NOT.LQUERY )
|
ELSE IF( ( LWORK.LT.LWREQ ) .AND .( .NOT.LQUERY )
|
||||||
$ .AND. ( .NOT.LMINWS ) ) THEN
|
$ .AND. ( .NOT.LMINWS ) ) THEN
|
||||||
INFO = -8
|
INFO = -8
|
||||||
END IF
|
END IF
|
||||||
|
@ -281,9 +293,9 @@
|
||||||
T( 2 ) = MB
|
T( 2 ) = MB
|
||||||
T( 3 ) = NB
|
T( 3 ) = NB
|
||||||
IF( MINW ) THEN
|
IF( MINW ) THEN
|
||||||
WORK( 1 ) = MAX( 1, N )
|
WORK( 1 ) = LWMIN
|
||||||
ELSE
|
ELSE
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
IF( INFO.NE.0 ) THEN
|
IF( INFO.NE.0 ) THEN
|
||||||
|
@ -308,7 +320,7 @@
|
||||||
$ LWORK, INFO )
|
$ LWORK, INFO )
|
||||||
END IF
|
END IF
|
||||||
*
|
*
|
||||||
WORK( 1 ) = MAX( 1, MB*M )
|
WORK( 1 ) = LWREQ
|
||||||
*
|
*
|
||||||
RETURN
|
RETURN
|
||||||
*
|
*
|
||||||
|
|
|
@ -261,7 +261,7 @@
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue