Fix workspace calculation in the left-looking variant of GEQRF (Reference-LAPACK PR690)tags/v0.3.22^2
| @@ -81,7 +81,8 @@ C> \verbatim | |||||
| C> LWORK is INTEGER | C> LWORK is INTEGER | ||||
| C> \endverbatim | C> \endverbatim | ||||
| C> \verbatim | 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> \endverbatim | ||||
| C> \verbatim | C> \verbatim | ||||
| C> 1) The part for the triangular factor T. If the very last T is not bigger | 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 = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) | ||||
| LLWORK = SCEIL(REAL(LLWORK)/REAL(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 | LBWORK = K-NT | ||||
| * | * | ||||
| @@ -239,8 +246,9 @@ C> | |||||
| INFO = -2 | INFO = -2 | ||||
| ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ||||
| INFO = -4 | 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 | END IF | ||||
| IF( INFO.NE.0 ) THEN | IF( INFO.NE.0 ) THEN | ||||
| CALL XERBLA( 'CGEQRF', -INFO ) | CALL XERBLA( 'CGEQRF', -INFO ) | ||||
| @@ -252,7 +260,6 @@ C> | |||||
| * Quick return if possible | * Quick return if possible | ||||
| * | * | ||||
| IF( K.EQ.0 ) THEN | IF( K.EQ.0 ) THEN | ||||
| WORK( 1 ) = 1 | |||||
| RETURN | RETURN | ||||
| END IF | END IF | ||||
| * | * | ||||
| @@ -81,7 +81,8 @@ C> \verbatim | |||||
| C> LWORK is INTEGER | C> LWORK is INTEGER | ||||
| C> \endverbatim | C> \endverbatim | ||||
| C> \verbatim | 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> \endverbatim | ||||
| C> \verbatim | C> \verbatim | ||||
| C> 1) The part for the triangular factor T. If the very last T is not bigger | 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 = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) | ||||
| LLWORK = SCEIL(REAL(LLWORK)/REAL(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 | LBWORK = K-NT | ||||
| * | * | ||||
| @@ -239,8 +246,9 @@ C> | |||||
| INFO = -2 | INFO = -2 | ||||
| ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ||||
| INFO = -4 | 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 | END IF | ||||
| IF( INFO.NE.0 ) THEN | IF( INFO.NE.0 ) THEN | ||||
| CALL XERBLA( 'DGEQRF', -INFO ) | CALL XERBLA( 'DGEQRF', -INFO ) | ||||
| @@ -252,7 +260,6 @@ C> | |||||
| * Quick return if possible | * Quick return if possible | ||||
| * | * | ||||
| IF( K.EQ.0 ) THEN | IF( K.EQ.0 ) THEN | ||||
| WORK( 1 ) = 1 | |||||
| RETURN | RETURN | ||||
| END IF | END IF | ||||
| * | * | ||||
| @@ -81,7 +81,8 @@ C> \verbatim | |||||
| C> LWORK is INTEGER | C> LWORK is INTEGER | ||||
| C> \endverbatim | C> \endverbatim | ||||
| C> \verbatim | 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> \endverbatim | ||||
| C> \verbatim | C> \verbatim | ||||
| C> 1) The part for the triangular factor T. If the very last T is not bigger | 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 = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) | ||||
| LLWORK = SCEIL(REAL(LLWORK)/REAL(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 | LBWORK = K-NT | ||||
| * | * | ||||
| @@ -239,8 +246,9 @@ C> | |||||
| INFO = -2 | INFO = -2 | ||||
| ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ||||
| INFO = -4 | 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 | END IF | ||||
| IF( INFO.NE.0 ) THEN | IF( INFO.NE.0 ) THEN | ||||
| CALL XERBLA( 'SGEQRF', -INFO ) | CALL XERBLA( 'SGEQRF', -INFO ) | ||||
| @@ -252,7 +260,6 @@ C> | |||||
| * Quick return if possible | * Quick return if possible | ||||
| * | * | ||||
| IF( K.EQ.0 ) THEN | IF( K.EQ.0 ) THEN | ||||
| WORK( 1 ) = 1 | |||||
| RETURN | RETURN | ||||
| END IF | END IF | ||||
| * | * | ||||
| @@ -81,7 +81,8 @@ C> \verbatim | |||||
| C> LWORK is INTEGER | C> LWORK is INTEGER | ||||
| C> \endverbatim | C> \endverbatim | ||||
| C> \verbatim | 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> \endverbatim | ||||
| C> \verbatim | C> \verbatim | ||||
| C> 1) The part for the triangular factor T. If the very last T is not bigger | 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 = MAX (MAX((N-M)*K, (N-M)*NB), MAX(K*NB, NB*NB)) | ||||
| LLWORK = SCEIL(REAL(LLWORK)/REAL(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 | LBWORK = K-NT | ||||
| * | * | ||||
| @@ -239,8 +246,9 @@ C> | |||||
| INFO = -2 | INFO = -2 | ||||
| ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ELSE IF( LDA.LT.MAX( 1, M ) ) THEN | ||||
| INFO = -4 | 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 | END IF | ||||
| IF( INFO.NE.0 ) THEN | IF( INFO.NE.0 ) THEN | ||||
| CALL XERBLA( 'ZGEQRF', -INFO ) | CALL XERBLA( 'ZGEQRF', -INFO ) | ||||
| @@ -252,7 +260,6 @@ C> | |||||
| * Quick return if possible | * Quick return if possible | ||||
| * | * | ||||
| IF( K.EQ.0 ) THEN | IF( K.EQ.0 ) THEN | ||||
| WORK( 1 ) = 1 | |||||
| RETURN | RETURN | ||||
| END IF | END IF | ||||
| * | * | ||||