Handle corner cases of LWORK (Reference-LAPACK PR 942)
This commit is contained in:
@@ -89,7 +89,7 @@
|
||||
*>
|
||||
*> \param[out] WORK
|
||||
*> \verbatim
|
||||
*> WORK is COMPLEX array, dimension (LWORK)
|
||||
*> WORK is COMPLEX array, dimension (MAX(1,LWORK))
|
||||
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
|
||||
*> \endverbatim
|
||||
*>
|
||||
@@ -222,13 +222,19 @@
|
||||
INFO = -8
|
||||
END IF
|
||||
*
|
||||
NH = IHI - ILO + 1
|
||||
IF( INFO.EQ.0 ) THEN
|
||||
*
|
||||
* Compute the workspace requirements
|
||||
*
|
||||
NB = MIN( NBMAX, ILAENV( 1, 'CGEHRD', ' ', N, ILO, IHI, -1 ) )
|
||||
LWKOPT = N*NB + TSIZE
|
||||
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
|
||||
IF( NH.LE.1 ) THEN
|
||||
LWKOPT = 1
|
||||
ELSE
|
||||
NB = MIN( NBMAX, ILAENV( 1, 'DGEHRD', ' ', N, ILO, IHI,
|
||||
$ -1 ) )
|
||||
LWKOPT = N*NB + TSIZE
|
||||
END IF
|
||||
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
|
||||
END IF
|
||||
*
|
||||
IF( INFO.NE.0 ) THEN
|
||||
@@ -249,7 +255,6 @@
|
||||
*
|
||||
* Quick return if possible
|
||||
*
|
||||
NH = IHI - ILO + 1
|
||||
IF( NH.LE.1 ) THEN
|
||||
WORK( 1 ) = 1
|
||||
RETURN
|
||||
@@ -269,7 +274,7 @@
|
||||
*
|
||||
* Determine if workspace is large enough for blocked code
|
||||
*
|
||||
IF( LWORK.LT.N*NB+TSIZE ) THEN
|
||||
IF( LWORK.LT.LWKOPT ) THEN
|
||||
*
|
||||
* Not enough workspace to use optimal NB: determine the
|
||||
* minimum value of NB, and reduce NB or force use of
|
||||
@@ -345,7 +350,8 @@
|
||||
* Use unblocked code to reduce the rest of the matrix
|
||||
*
|
||||
CALL CGEHD2( N, I, IHI, A, LDA, TAU, WORK, IINFO )
|
||||
WORK( 1 ) = SROUNDUP_LWORK(LWKOPT)
|
||||
*
|
||||
WORK( 1 ) = SROUNDUP_LWORK( LWKOPT )
|
||||
*
|
||||
RETURN
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user