|
272 | 272 | *> \param[in] LWORK |
273 | 273 | *> \verbatim |
274 | 274 | *> LWORK is INTEGER |
275 | | -*> The length of the array WORK. LWORK >= max(1,2*N). |
| 275 | +*> The length of the array WORK. |
| 276 | +*> If N <= 1, LWORK >= 1, else LWORK >= 2*N. |
276 | 277 | *> For optimal efficiency, LWORK >= (NB+1)*N, |
277 | 278 | *> where NB is the max of the blocksize for CHETRD and for |
278 | 279 | *> CUNMTR as returned by ILAENV. |
|
294 | 295 | *> \param[in] LRWORK |
295 | 296 | *> \verbatim |
296 | 297 | *> LRWORK is INTEGER |
297 | | -*> The length of the array RWORK. LRWORK >= max(1,24*N). |
| 298 | +*> The length of the array RWORK. |
| 299 | +*> If N <= 1, LRWORK >= 1, else LRWORK >= 24*N. |
298 | 300 | *> |
299 | 301 | *> If LRWORK = -1, then a workspace query is assumed; the |
300 | 302 | *> routine only calculates the optimal sizes of the WORK, RWORK |
|
313 | 315 | *> \param[in] LIWORK |
314 | 316 | *> \verbatim |
315 | 317 | *> LIWORK is INTEGER |
316 | | -*> The dimension of the array IWORK. LIWORK >= max(1,10*N). |
| 318 | +*> The dimension of the array IWORK. |
| 319 | +*> If N <= 1, LIWORK >= 1, else LIWORK >= 10*N. |
317 | 320 | *> |
318 | 321 | *> If LIWORK = -1, then a workspace query is assumed; the |
319 | 322 | *> routine only calculates the optimal sizes of the WORK, RWORK |
@@ -417,9 +420,15 @@ SUBROUTINE CHEEVR( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, |
417 | 420 | LQUERY = ( ( LWORK.EQ.-1 ) .OR. ( LRWORK.EQ.-1 ) .OR. |
418 | 421 | $ ( LIWORK.EQ.-1 ) ) |
419 | 422 | * |
420 | | - LRWMIN = MAX( 1, 24*N ) |
421 | | - LIWMIN = MAX( 1, 10*N ) |
422 | | - LWMIN = MAX( 1, 2*N ) |
| 423 | + IF( N.LE.1 ) THEN |
| 424 | + LWMIN = 1 |
| 425 | + LRWMIN = 1 |
| 426 | + LIWMIN = 1 |
| 427 | + ELSE |
| 428 | + LWMIN = 2*N |
| 429 | + LRWMIN = 24*N |
| 430 | + LIWMIN = 10*N |
| 431 | + END IF |
423 | 432 | * |
424 | 433 | INFO = 0 |
425 | 434 | IF( .NOT.( WANTZ .OR. LSAME( JOBZ, 'N' ) ) ) THEN |
@@ -454,8 +463,8 @@ SUBROUTINE CHEEVR( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, |
454 | 463 | NB = ILAENV( 1, 'CHETRD', UPLO, N, -1, -1, -1 ) |
455 | 464 | NB = MAX( NB, ILAENV( 1, 'CUNMTR', UPLO, N, -1, -1, -1 ) ) |
456 | 465 | LWKOPT = MAX( ( NB+1 )*N, LWMIN ) |
457 | | - WORK( 1 ) = SROUNDUP_LWORK(LWKOPT) |
458 | | - RWORK( 1 ) = LRWMIN |
| 466 | + WORK( 1 ) = SROUNDUP_LWORK( LWKOPT ) |
| 467 | + RWORK( 1 ) = SROUNDUP_LWORK( LRWMIN ) |
459 | 468 | IWORK( 1 ) = LIWMIN |
460 | 469 | * |
461 | 470 | IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN |
@@ -483,7 +492,7 @@ SUBROUTINE CHEEVR( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, |
483 | 492 | END IF |
484 | 493 | * |
485 | 494 | IF( N.EQ.1 ) THEN |
486 | | - WORK( 1 ) = 2 |
| 495 | + WORK( 1 ) = 1 |
487 | 496 | IF( ALLEIG .OR. INDEIG ) THEN |
488 | 497 | M = 1 |
489 | 498 | W( 1 ) = REAL( A( 1, 1 ) ) |
@@ -710,8 +719,8 @@ SUBROUTINE CHEEVR( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, |
710 | 719 | * |
711 | 720 | * Set WORK(1) to optimal workspace size. |
712 | 721 | * |
713 | | - WORK( 1 ) = SROUNDUP_LWORK(LWKOPT) |
714 | | - RWORK( 1 ) = LRWMIN |
| 722 | + WORK( 1 ) = SROUNDUP_LWORK( LWKOPT ) |
| 723 | + RWORK( 1 ) = SROUNDUP_LWORK( LRWMIN ) |
715 | 724 | IWORK( 1 ) = LIWMIN |
716 | 725 | * |
717 | 726 | RETURN |
|
0 commit comments