6 subroutine eveqnit(nmatp,ngp,igpig,vpl,vgpl,vgpc,apwalm,evalfv,evecfv)
11 integer,
intent(in) :: nmatp,ngp,igpig(ngkmax)
12 real(8),
intent(in) :: vpl(3),vgpl(3,ngkmax),vgpc(3,ngkmax)
13 complex(8),
intent(in) :: apwalm(ngkmax,apwordmax,lmmaxapw,natmtot)
14 real(8),
intent(out) :: evalfv(nstfv)
15 complex(8),
intent(out) :: evecfv(nmatmax,nstfv)
23 integer,
allocatable :: idx(:)
24 real(8),
allocatable :: w(:),rwork(:)
25 complex(8),
allocatable :: h(:,:),o(:,:),hv(:,:),ov(:,:)
26 complex(8),
allocatable :: u(:,:),hu(:,:),ou(:,:)
27 complex(8),
allocatable :: hs(:,:),os(:,:),work(:)
29 integer,
external :: ilaenv
30 real(8),
external :: ddot
33 allocate(h(nmatp,nmatp),o(nmatp,nmatp))
40 call hmlistl(ngp,igpig,vgpc,nmatp,h)
46 call hmlaa(
tefvr,is,ias,ngp,apwalm(:,:,:,ias),nmatp,h)
47 call hmlalo(is,ias,ngp,apwalm(:,:,:,ias),nmatp,h)
48 call hmllolo(is,ias,ngp,nmatp,h)
58 call olpaa(
tefvr,is,ngp,apwalm(:,:,:,ias),nmatp,o)
59 call olpalo(is,ias,ngp,apwalm(:,:,:,ias),nmatp,o)
60 call olplolo(is,ias,ngp,nmatp,o)
72 allocate(idx(nmatp),w(nmatp))
77 evecfv(1:nmatp,1:nstfv)=0.d0
79 evecfv(idx(ist),ist)=1.d0
85 allocate(w(ns),rwork(3*ns))
86 allocate(hv(nmatp,nstfv),ov(nmatp,nstfv))
87 allocate(u(nmatp,nstfv),hu(nmatp,nstfv),ou(nmatp,nstfv))
88 allocate(hs(ns,ns),os(ns,ns))
90 nb=ilaenv(1,
'ZHETRD',
'U',nmatp,-1,-1,-1)
103 call zhemv(
'U',nmatp,
zone,o,nmatp,evecfv(:,ist),1,
zzero,ov(:,ist),1)
105 t1=ddot(2*nmatp,evecfv(:,ist),1,ov(:,ist),1)
108 call zdscal(nmatp,t1,evecfv(:,ist),1)
109 call zdscal(nmatp,t1,ov(:,ist),1)
112 call zhemv(
'U',nmatp,
zone,h,nmatp,evecfv(:,ist),1,
zzero,hv(:,ist),1)
114 evalfv(ist)=ddot(2*nmatp,evecfv(:,ist),1,hv(:,ist),1)
116 call zcopy(nmatp,hv(:,ist),1,u(:,ist),1)
118 u(1:nmatp,ist)=u(1:nmatp,ist)+t1*ov(1:nmatp,ist)
120 call zhemv(
'U',nmatp,
zone,o,nmatp,u(:,ist),1,
zzero,ou(:,ist),1)
122 call zhemv(
'U',nmatp,
zone,h,nmatp,u(:,ist),1,
zzero,hu(:,ist),1)
129 call zgemv(
'C',nmatp,nstfv,
zone,evecfv,nmatmax,hv(:,ist),1,
zzero, &
131 call zgemv(
'C',nmatp,nstfv,
zone,evecfv,nmatmax,hu(:,ist),1,
zzero, &
133 call zgemv(
'C',nmatp,nstfv,
zone,u,nmatp,hu(:,ist),1,
zzero, &
134 hs(nstfv+1,nstfv+ist),1)
139 call zgemv(
'C',nmatp,nstfv,
zone,evecfv,nmatmax,ov(:,ist),1,
zzero, &
141 call zgemv(
'C',nmatp,nstfv,
zone,evecfv,nmatmax,ou(:,ist),1,
zzero, &
143 call zgemv(
'C',nmatp,nstfv,
zone,u,nmatp,ou(:,ist),1,
zzero, &
144 os(nstfv+1,nstfv+ist),1)
149 call zhegv(1,
'V',
'U',ns,hs,ns,os,ns,w,work,lwork,rwork,info)
155 call zgemv(
'N',nmatp,nstfv,
zone,evecfv,nmatmax,hs(1,ist),1,
zzero, &
157 call zgemv(
'N',nmatp,nstfv,
zone,u,nmatp,hs(nstfv+1,ist),1,
zone,ov(:,ist),1)
162 call zcopy(nmatp,ov(:,ist),1,evecfv(:,ist),1)
169 deallocate(w,rwork,h,o,hv,ov)
170 deallocate(u,hu,ou,hs,os,work)
pure subroutine hmlistl(ngp, igpig, vgpc, ld, h)
subroutine getevecfv(fext, ikp, vpl, vgpl, evecfv)
subroutine hmlaa(thr, is, ias, ngp, apwalm, ld, h)
complex(8), parameter zone
subroutine olpaa(tor, is, ngp, apwalm, ld, o)
pure subroutine olpalo(is, ias, ngp, apwalm, ld, o)
pure subroutine sortidx(n, x, idx)
complex(8), parameter zzero
integer, dimension(maxatoms *maxspecies) idxis
pure subroutine olpistl(ngp, igpig, ld, o)
subroutine eveqnit(nmatp, ngp, igpig, vpl, vgpl, vgpc, apwalm, evalfv, evecfv)
subroutine holdthd(nloop, nthd)
pure subroutine olplolo(is, ias, ngp, ld, o)
pure subroutine hmllolo(is, ias, ngp, ld, h)
pure subroutine hmlalo(is, ias, ngp, apwalm, ld, h)