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:
|
||||
*>
|
||||
*> 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.
|
||||
*>
|
||||
*> \endverbatim
|
||||
|
@ -187,7 +187,7 @@
|
|||
* ..
|
||||
* .. Local Scalars ..
|
||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||
* ..
|
||||
* .. External Functions ..
|
||||
LOGICAL LSAME
|
||||
|
@ -243,20 +243,32 @@
|
|||
*
|
||||
* 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.
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
NB = N
|
||||
END IF
|
||||
IF( LWORK.LT.MB*M ) THEN
|
||||
IF( LWORK.LT.LWOPT ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
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
|
||||
INFO = -1
|
||||
|
@ -267,7 +279,7 @@
|
|||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||
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
|
||||
INFO = -8
|
||||
END IF
|
||||
|
@ -281,9 +293,9 @@
|
|||
T( 2 ) = MB
|
||||
T( 3 ) = NB
|
||||
IF( MINW ) THEN
|
||||
WORK( 1 ) = MAX( 1, N )
|
||||
WORK( 1 ) = LWMIN
|
||||
ELSE
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
END IF
|
||||
END IF
|
||||
IF( INFO.NE.0 ) THEN
|
||||
|
@ -308,7 +320,7 @@
|
|||
$ LWORK, INFO )
|
||||
END IF
|
||||
*
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
*
|
||||
RETURN
|
||||
*
|
||||
|
|
|
@ -261,7 +261,7 @@
|
|||
TSZM = INT( TQ( 1 ) )
|
||||
LWM = INT( WORKQ( 1 ) )
|
||||
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 ) ) )
|
||||
WSIZEO = TSZO + LWO
|
||||
WSIZEM = TSZM + LWM
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
*> where:
|
||||
*>
|
||||
*> 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.
|
||||
*>
|
||||
*> \endverbatim
|
||||
|
@ -187,7 +187,7 @@
|
|||
* ..
|
||||
* .. Local Scalars ..
|
||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||
* ..
|
||||
* .. External Functions ..
|
||||
LOGICAL LSAME
|
||||
|
@ -243,20 +243,32 @@
|
|||
*
|
||||
* 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.
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
NB = N
|
||||
END IF
|
||||
IF( LWORK.LT.MB*M ) THEN
|
||||
IF( LWORK.LT.LWOPT ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
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
|
||||
INFO = -1
|
||||
|
@ -267,7 +279,7 @@
|
|||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||
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
|
||||
INFO = -8
|
||||
END IF
|
||||
|
@ -281,9 +293,9 @@
|
|||
T( 2 ) = MB
|
||||
T( 3 ) = NB
|
||||
IF( MINW ) THEN
|
||||
WORK( 1 ) = MAX( 1, N )
|
||||
WORK( 1 ) = LWMIN
|
||||
ELSE
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
END IF
|
||||
END IF
|
||||
IF( INFO.NE.0 ) THEN
|
||||
|
@ -308,7 +320,7 @@
|
|||
$ LWORK, INFO )
|
||||
END IF
|
||||
*
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
*
|
||||
RETURN
|
||||
*
|
||||
|
|
|
@ -258,7 +258,7 @@
|
|||
TSZM = INT( TQ( 1 ) )
|
||||
LWM = INT( WORKQ( 1 ) )
|
||||
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 ) ) )
|
||||
WSIZEO = TSZO + LWO
|
||||
WSIZEM = TSZM + LWM
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
*> where:
|
||||
*>
|
||||
*> 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.
|
||||
*>
|
||||
*> \endverbatim
|
||||
|
@ -187,7 +187,7 @@
|
|||
* ..
|
||||
* .. Local Scalars ..
|
||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||
* ..
|
||||
* .. External Functions ..
|
||||
LOGICAL LSAME
|
||||
|
@ -243,20 +243,32 @@
|
|||
*
|
||||
* 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.
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
NB = N
|
||||
END IF
|
||||
IF( LWORK.LT.MB*M ) THEN
|
||||
IF( LWORK.LT.LWOPT ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
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
|
||||
INFO = -1
|
||||
|
@ -267,7 +279,7 @@
|
|||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||
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
|
||||
INFO = -8
|
||||
END IF
|
||||
|
@ -281,9 +293,9 @@
|
|||
T( 2 ) = MB
|
||||
T( 3 ) = NB
|
||||
IF( MINW ) THEN
|
||||
WORK( 1 ) = MAX( 1, N )
|
||||
WORK( 1 ) = LWMIN
|
||||
ELSE
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
END IF
|
||||
END IF
|
||||
IF( INFO.NE.0 ) THEN
|
||||
|
@ -308,7 +320,7 @@
|
|||
$ LWORK, INFO )
|
||||
END IF
|
||||
*
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
RETURN
|
||||
*
|
||||
* End of SGELQ
|
||||
|
|
|
@ -258,7 +258,7 @@
|
|||
TSZM = INT( TQ( 1 ) )
|
||||
LWM = INT( WORKQ( 1 ) )
|
||||
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 ) ) )
|
||||
WSIZEO = TSZO + LWO
|
||||
WSIZEM = TSZM + LWM
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
*> where:
|
||||
*>
|
||||
*> 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.
|
||||
*>
|
||||
*> \endverbatim
|
||||
|
@ -187,7 +187,7 @@
|
|||
* ..
|
||||
* .. Local Scalars ..
|
||||
LOGICAL LQUERY, LMINWS, MINT, MINW
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS
|
||||
INTEGER MB, NB, MINTSZ, NBLCKS, LWMIN, LWOPT, LWREQ
|
||||
* ..
|
||||
* .. External Functions ..
|
||||
LOGICAL LSAME
|
||||
|
@ -243,20 +243,32 @@
|
|||
*
|
||||
* 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.
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.MB*M )
|
||||
$ .AND. ( LWORK.GE.M ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
IF( ( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) .OR. LWORK.LT.LWOPT )
|
||||
$ .AND. ( LWORK.GE.LWMIN ) .AND. ( TSIZE.GE.MINTSZ )
|
||||
$ .AND. ( .NOT.LQUERY ) ) THEN
|
||||
IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 ) ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
NB = N
|
||||
END IF
|
||||
IF( LWORK.LT.MB*M ) THEN
|
||||
IF( LWORK.LT.LWOPT ) THEN
|
||||
LMINWS = .TRUE.
|
||||
MB = 1
|
||||
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
|
||||
INFO = -1
|
||||
|
@ -267,7 +279,7 @@
|
|||
ELSE IF( TSIZE.LT.MAX( 1, MB*M*NBLCKS + 5 )
|
||||
$ .AND. ( .NOT.LQUERY ) .AND. ( .NOT.LMINWS ) ) THEN
|
||||
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
|
||||
INFO = -8
|
||||
END IF
|
||||
|
@ -281,9 +293,9 @@
|
|||
T( 2 ) = MB
|
||||
T( 3 ) = NB
|
||||
IF( MINW ) THEN
|
||||
WORK( 1 ) = MAX( 1, N )
|
||||
WORK( 1 ) = LWMIN
|
||||
ELSE
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
END IF
|
||||
END IF
|
||||
IF( INFO.NE.0 ) THEN
|
||||
|
@ -308,7 +320,7 @@
|
|||
$ LWORK, INFO )
|
||||
END IF
|
||||
*
|
||||
WORK( 1 ) = MAX( 1, MB*M )
|
||||
WORK( 1 ) = LWREQ
|
||||
*
|
||||
RETURN
|
||||
*
|
||||
|
|
|
@ -261,7 +261,7 @@
|
|||
TSZM = INT( TQ( 1 ) )
|
||||
LWM = INT( WORKQ( 1 ) )
|
||||
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 ) ) )
|
||||
WSIZEO = TSZO + LWO
|
||||
WSIZEM = TSZM + LWM
|
||||
|
|
Loading…
Reference in New Issue