6subroutine eveqnfvz(nmatp,h,o,evalfv,evecfv)
11integer,
intent(in) :: nmatp
12complex(8),
intent(in) :: h(*),o(*)
13real(8),
intent(out) :: evalfv(nstfv)
14complex(8),
intent(out) :: evecfv(nmatmax,nstfv)
21integer iwork(5*nmatp),ifail(nmatp)
22real(8) w(nmatp),rwork(7*nmatp)
24complex(8),
allocatable :: work(:)
26integer,
external :: ilaenv
29nb=ilaenv(1,
'ZHETRD',
'U',nmatp,-1,-1,-1)
35nts=mkl_set_num_threads_local(nthd)
37call zhegvx(1,
'V',
'I',
'U',nmatp,h,nmatp,o,nmatp,vl,vu,1,nstfv,
evaltol,m,w, &
38 evecfv,nmatmax,work,lwork,rwork,iwork,ifail,info)
39nts=mkl_set_num_threads_local(0)
43 write(*,
'("Error(eveqnfvz): diagonalisation failed")')
44 write(*,
'(" ZHEGVX returned INFO = ",I8)') info
45 if (info > nmatp)
then
46 write(*,
'(" The leading minor of the overlap matrix of order ",I8)') &
48 write(*,
'(" is not positive definite")')
49 write(*,
'(" Order of overlap matrix : ",I8)') nmatp
54evalfv(1:nstfv)=w(1:nstfv)