6 subroutine eveqnfvz(nmatp,h,o,evalfv,evecfv)
11 integer,
intent(in) :: nmatp
12 complex(8),
intent(in) :: h(*),o(*)
13 real(8),
intent(out) :: evalfv(nstfv)
14 complex(8),
intent(out) :: evecfv(nmatmax,nstfv)
21 integer iwork(5*nmatp),ifail(nmatp)
22 real(8) w(nmatp),rwork(7*nmatp)
24 complex(8),
allocatable :: work(:)
26 integer,
external :: ilaenv
29 nb=ilaenv(1,
'ZHETRD',
'U',nmatp,-1,-1,-1)
35 nts=mkl_set_num_threads_local(nthd)
37 call 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)
39 nts=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
54 evalfv(1:nstfv)=w(1:nstfv)
subroutine eveqnfvz(nmatp, h, o, evalfv, evecfv)
subroutine holdthd(nloop, nthd)