quantum-espresso/CPV/eigs0.f90

45 lines
1.4 KiB
Fortran

!-----------------------------------------------------------------------
subroutine eigs0(nspin,nx,nupdwn,iupdwn,f,lambda)
!-----------------------------------------------------------------------
! computes eigenvalues (wr) of the real symmetric matrix lambda
! Note that lambda as calculated is multiplied by occupation numbers
! so empty states yield zero. Eigenvalues are printed out in eV
!
use io_global, only: stdout
implicit none
! input
integer, intent(in) :: nspin, nx, nupdwn(nspin), iupdwn(nspin)
real(kind=8), intent(in) :: lambda(nx,nx), f(nx)
! local variables
real(kind=8) lambdar(nx,nx), wr(nx), fv1(nx),fm1(2,nx), zr, au
integer iss,j,i,ierr
!
au=27.212
!
do iss=1,nspin
do i=1,nupdwn(iss)
do j=1,nupdwn(iss)
lambdar(j,i)=lambda(iupdwn(iss)-1+j,iupdwn(iss)-1+i)
end do
end do
call rs(nx,nupdwn(iss),lambdar,wr,0,zr,fv1,fm1,ierr)
do i=1,nupdwn(iss)
if (f(iupdwn(iss)-1+i).gt.1.e-6) then
wr(i)=au*wr(i)/f(iupdwn(iss)-1+i)
else
wr(i)=0.0
end if
end do
!
! print out eigenvalues
!
WRITE( stdout,12) 0., 0., 0.
WRITE( stdout,14) (wr(i),i=1,nupdwn(iss))
end do
12 format(//' eigenvalues at k-point: ',3f6.3)
14 format(10f8.2)
WRITE( stdout,*)
!
return
end