6subroutine deveqnfv(ngp,ngpq,igpig,igpqig,vgpc,vgpqc,evalfv,apwalm,apwalmq, &
7 dapwalm,dapwalmq,evecfv,devalfvp,devecfv)
13integer,
intent(in) :: ngp,ngpq
14integer,
intent(in) :: igpig(ngkmax),igpqig(ngkmax)
15real(8),
intent(in) :: vgpc(3,ngkmax),vgpqc(3,ngkmax)
16real(8),
intent(in) :: evalfv(nstfv)
17complex(8),
intent(in) :: apwalm(ngkmax,apwordmax,lmmaxapw,natmtot)
18complex(8),
intent(in) :: apwalmq(ngkmax,apwordmax,lmmaxapw,natmtot)
19complex(8),
intent(in) :: dapwalm(ngkmax,apwordmax,lmmaxapw)
20complex(8),
intent(in) :: dapwalmq(ngkmax,apwordmax,lmmaxapw)
21complex(8),
intent(in) :: evecfv(nmatmax,nstfv)
22real(8),
intent(out) :: devalfvp(nstfv)
23complex(8),
intent(out) :: devecfv(nmatmax,nstfv)
25integer nm,nmq,is,ias,jst,i
26integer lwork,info,nthd
30real(8),
allocatable :: w(:),rwork(:)
31complex(8),
allocatable :: h(:,:),o(:,:),dh(:,:),od(:,:)
32complex(8),
allocatable :: x(:),y(:),work(:)
34real(8),
external :: ddot
38allocate(h(nmq,nmq),o(nmq,nmq))
44call hmlfv(nmq,ngpq,igpqig,vgpqc,apwalmq,h)
46call olpfv(nmq,ngpq,igpqig,apwalmq,o)
52allocate(w(nmq),rwork(3*nmq),work(lwork))
53call zhegv(1,
'V',
'U',nmq,h,nmq,o,nmq,w,work,lwork,rwork,info)
56 write(*,
'("Error(deveqnfv): diagonalisation failed")')
57 write(*,
'(" ZHEGV returned INFO = ",I8)') info
61deallocate(rwork,o,work)
63allocate(dh(nmq,nm),od(nmq,nm))
69call dhmlistl(ngp,ngpq,igpig,igpqig,vgpc,vgpqc,nmq,dh)
70dh(ngpq+1:nmq,1:ngp)=0.d0
71dh(1:nmq,ngp+1:nm)=0.d0
74 call dhmlaa(is,ias,ngp,ngpq,apwalm(:,:,:,ias),apwalmq(:,:,:,ias),dapwalm, &
76 call dhmlalo(is,ias,ngp,ngpq,apwalm(:,:,:,ias),apwalmq(:,:,:,ias),dapwalm, &
78 call dhmllolo(is,ias,ngp,ngpq,nmq,dh)
81call dolpistl(ngp,ngpq,igpig,igpqig,nmq,od)
82od(ngpq+1:nmq,1:ngp)=0.d0
83od(1:nmq,ngp+1:nm)=0.d0
86 call dolpaa(is,ias,ngp,ngpq,apwalm(:,:,:,ias),apwalmq(:,:,:,ias),dapwalm, &
88 call dolpalo(is,ias,ngp,ngpq,dapwalm,dapwalmq,nmq,od)
92allocate(x(nmq),y(nmq))
97 call zgemv(
'N',nmq,nm,z1,od,nmq,evecfv(:,jst),1,
zzero,x,1)
98 call zgemv(
'N',nmq,nm,
zone,dh,nmq,evecfv(:,jst),1,
zone,x,1)
101 devalfvp(jst)=ddot(2*nmq,evecfv(:,jst),1,x,1)
105 call zgemv(
'C',nmq,nmq,
zone,h,nmq,x,1,
zzero,y,1)
108 if (abs(t1) >
epsdev)
then
114 call zgemv(
'N',nmq,nmq,
zone,h,nmq,y,1,
zzero,devecfv(:,jst),1)
116deallocate(w,h,dh,od,x,y)
complex(8), parameter zzero
complex(8), parameter zone
integer, dimension(maxatoms *maxspecies) idxis