Fix workspace calculation (Reference-LAPACK PR690)

This commit is contained in:
Martin Kroeker 2022-11-13 12:49:59 +01:00 committed by GitHub
parent 8c99d5d1b6
commit cb48c29b6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 20 deletions

View File

@ -81,7 +81,8 @@ C> \verbatim
C> LWORK is INTEGER
C> \endverbatim
C> \verbatim
C> The dimension of the array WORK. The dimension can be divided into three parts.
C> The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0,
C> otherwise the dimension can be divided into three parts.
C> \endverbatim
C> \verbatim
C> 1) The part for the triangular factor T. If the very last T is not bigger
@ -212,7 +213,13 @@ C>
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
IF ( NT.GT.NB ) THEN
IF( K.EQ.0 ) THEN
LBWORK = 0
LWKOPT = 1
WORK( 1 ) = LWKOPT
ELSE IF ( NT.GT.NB ) THEN
LBWORK = K-NT
*
@ -239,8 +246,9 @@ C>
INFO = -2
ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
INFO = -4
ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN
INFO = -7
ELSE IF ( .NOT.LQUERY ) THEN
IF( LWORK.LE.0 .OR. ( M.GT.0 .AND. LWORK.LT.MAX( 1, N ) ) )
$ INFO = -7
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'CGEQRF', -INFO )
@ -252,7 +260,6 @@ C>
* Quick return if possible
*
IF( K.EQ.0 ) THEN
WORK( 1 ) = 1
RETURN
END IF
*

View File

@ -81,7 +81,8 @@ C> \verbatim
C> LWORK is INTEGER
C> \endverbatim
C> \verbatim
C> The dimension of the array WORK. The dimension can be divided into three parts.
C> The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0,
C> otherwise the dimension can be divided into three parts.
C> \endverbatim
C> \verbatim
C> 1) The part for the triangular factor T. If the very last T is not bigger
@ -212,7 +213,13 @@ C>
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
IF ( NT.GT.NB ) THEN
IF( K.EQ.0 ) THEN
LBWORK = 0
LWKOPT = 1
WORK( 1 ) = LWKOPT
ELSE IF ( NT.GT.NB ) THEN
LBWORK = K-NT
*
@ -239,8 +246,9 @@ C>
INFO = -2
ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
INFO = -4
ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN
INFO = -7
ELSE IF ( .NOT.LQUERY ) THEN
IF( LWORK.LE.0 .OR. ( M.GT.0 .AND. LWORK.LT.MAX( 1, N ) ) )
$ INFO = -7
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'DGEQRF', -INFO )
@ -252,7 +260,6 @@ C>
* Quick return if possible
*
IF( K.EQ.0 ) THEN
WORK( 1 ) = 1
RETURN
END IF
*

View File

@ -81,7 +81,8 @@ C> \verbatim
C> LWORK is INTEGER
C> \endverbatim
C> \verbatim
C> The dimension of the array WORK. The dimension can be divided into three parts.
C> The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0,
C> otherwise the dimension can be divided into three parts.
C> \endverbatim
C> \verbatim
C> 1) The part for the triangular factor T. If the very last T is not bigger
@ -212,7 +213,13 @@ C>
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
IF ( NT.GT.NB ) THEN
IF( K.EQ.0 ) THEN
LBWORK = 0
LWKOPT = 1
WORK( 1 ) = LWKOPT
ELSE IF ( NT.GT.NB ) THEN
LBWORK = K-NT
*
@ -239,8 +246,9 @@ C>
INFO = -2
ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
INFO = -4
ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN
INFO = -7
ELSE IF ( .NOT.LQUERY ) THEN
IF( LWORK.LE.0 .OR. ( M.GT.0 .AND. LWORK.LT.MAX( 1, N ) ) )
$ INFO = -7
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'SGEQRF', -INFO )
@ -252,7 +260,6 @@ C>
* Quick return if possible
*
IF( K.EQ.0 ) THEN
WORK( 1 ) = 1
RETURN
END IF
*

View File

@ -81,7 +81,8 @@ C> \verbatim
C> LWORK is INTEGER
C> \endverbatim
C> \verbatim
C> The dimension of the array WORK. The dimension can be divided into three parts.
C> The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0,
C> otherwise the dimension can be divided into three parts.
C> \endverbatim
C> \verbatim
C> 1) The part for the triangular factor T. If the very last T is not bigger
@ -212,7 +213,13 @@ C>
LLWORK = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB))
LLWORK = SCEIL(REAL(LLWORK)/REAL(NB))
IF ( NT.GT.NB ) THEN
IF( K.EQ.0 ) THEN
LBWORK = 0
LWKOPT = 1
WORK( 1 ) = LWKOPT
ELSE IF ( NT.GT.NB ) THEN
LBWORK = K-NT
*
@ -239,8 +246,9 @@ C>
INFO = -2
ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
INFO = -4
ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN
INFO = -7
ELSE IF ( .NOT.LQUERY ) THEN
IF( LWORK.LE.0 .OR. ( M.GT.0 .AND. LWORK.LT.MAX( 1, N ) ) )
$ INFO = -7
END IF
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'ZGEQRF', -INFO )
@ -252,7 +260,6 @@ C>
* Quick return if possible
*
IF( K.EQ.0 ) THEN
WORK( 1 ) = 1
RETURN
END IF
*