mirror of https://gitlab.com/QEF/q-e.git
41 lines
992 B
Fortran
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
|