quantum-espresso/flib/eispack.f90

41 lines
992 B
Fortran

#include "f_defs.h"
SUBROUTINE RS(nm, n, a, w, matz, z, fv1, fv2, ierr)
INTEGER n,nm,ierr,matz
REAL*8 :: a(nm,n),w(n),z(nm,n),fv1(n),fv2(n)
CHARACTER(LEN=1) :: jobz, uplo
INTEGER info, lda, lwork
!verificare! cosi' non va bene
REAL*8 work( 3*n-1 ), ztmp(nm,n)
ztmp(1:N,1:N) = a(1:N,1:N)
if ( matz == 0) then
jobz = 'N'
else
jobz = 'V'
end if
lda = nm
uplo = 'U'
lwork = 3*n-1
CALL DSYEV(jobz, uplo, n, ztmp, lda, w, work, lwork, info)
ierr = info
!non posso fare ierr = INFO perche' non hanno gli stessi codici d'errore
! a meno che non ce ne freghi niente quando e' maggiore di 0 (perche' non si controlla il codice)
!if (INFO.eq.0) then
! ierr = 0
!end if
if ( matz /= 0) then
z(1:N,1:N) = ztmp(1:N,1:N)
end if
RETURN
END SUBROUTINE