Fix workspace calculation (Reference-LAPACK PR690)
This commit is contained in:
parent
8c99d5d1b6
commit
cb48c29b6f
|
@ -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
|
ELSE IF ( .NOT.LQUERY ) THEN
|
||||||
INFO = -7
|
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
|
ELSE IF ( .NOT.LQUERY ) THEN
|
||||||
INFO = -7
|
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
|
ELSE IF ( .NOT.LQUERY ) THEN
|
||||||
INFO = -7
|
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
|
ELSE IF ( .NOT.LQUERY ) THEN
|
||||||
INFO = -7
|
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
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue