Fix small problem detected by user Yao Toa. sent to the LAPACK mailing list on April...
authorjulie <julielangou@users.noreply.github.com>
Wed, 25 Apr 2012 05:14:31 +0000 (05:14 +0000)
committerjulie <julielangou@users.noreply.github.com>
Wed, 25 Apr 2012 05:14:31 +0000 (05:14 +0000)
It seems that this one has been around forever

============

hi.

i found a subtle difference between dsyevd.f and ssyevd.f when using lapack 3.4.1.

dsyevd updates LOPT after calling dsytrd and dlacpy. but those codes are not visible in ssyevd.f, cheevd.f and zheevd.f.

pls refer to line 329, 344 in dsyevd.f.

i wonder whether those codes are necessary, because dsyevd has precalculated LOPT with at least 1+6*N+2*N**2.

if those codes must be there, why not for ssyevd?

thanks in advance.

Yao Tao

SRC/dsyevd.f

index ccb02ad58d301edbf044a204db35600f349291c0..7d39a3313cf4c1e540c9a80656bdd206e453fe79 100644 (file)
 *
       CALL DSYTRD( UPLO, N, A, LDA, W, WORK( INDE ), WORK( INDTAU ),
      $             WORK( INDWRK ), LLWORK, IINFO )
-      LOPT = 2*N + WORK( INDWRK )
 *
 *     For eigenvalues only, call DSTERF.  For eigenvectors, first call
 *     DSTEDC to generate the eigenvector matrix, WORK(INDWRK), of the
          CALL DORMTR( 'L', UPLO, 'N', N, N, A, LDA, WORK( INDTAU ),
      $                WORK( INDWRK ), N, WORK( INDWK2 ), LLWRK2, IINFO )
          CALL DLACPY( 'A', N, N, WORK( INDWRK ), N, A, LDA )
-         LOPT = MAX( LOPT, 1+6*N+2*N**2 )
       END IF
 *
 *     If matrix was scaled, then rescale eigenvalues appropriately.