6 subroutine deveqnfv(ngp,ngpq,igpig,igpqig,vgpc,vgpqc,evalfv,apwalm,apwalmq, &
7 dapwalm,dapwalmq,evecfv,devalfvp,devecfv)
13 integer,
intent(in) :: ngp,ngpq
14 integer,
intent(in) :: igpig(ngkmax),igpqig(ngkmax)
15 real(8),
intent(in) :: vgpc(3,ngkmax),vgpqc(3,ngkmax)
16 real(8),
intent(in) :: evalfv(nstfv)
17 complex(8),
intent(in) :: apwalm(ngkmax,apwordmax,lmmaxapw,natmtot)
18 complex(8),
intent(in) :: apwalmq(ngkmax,apwordmax,lmmaxapw,natmtot)
19 complex(8),
intent(in) :: dapwalm(ngkmax,apwordmax,lmmaxapw)
20 complex(8),
intent(in) :: dapwalmq(ngkmax,apwordmax,lmmaxapw)
21 complex(8),
intent(in) :: evecfv(nmatmax,nstfv)
22 real(8),
intent(out) :: devalfvp(nstfv)
23 complex(8),
intent(out) :: devecfv(nmatmax,nstfv)
25 integer nm,nmq,is,ias,jst,i
26 integer lwork,info,nthd
30 real(8),
allocatable :: w(:),rwork(:)
31 complex(8),
allocatable :: h(:,:),o(:,:),dh(:,:),od(:,:)
32 complex(8),
allocatable :: x(:),y(:),work(:)
34 real(8),
external :: ddot
38 allocate(h(nmq,nmq),o(nmq,nmq))
44 call hmlfv(nmq,ngpq,igpqig,vgpqc,apwalmq,h)
46 call olpfv(nmq,ngpq,igpqig,apwalmq,o)
52 allocate(w(nmq),rwork(3*nmq),work(lwork))
53 call 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
61 deallocate(rwork,o,work)
63 allocate(dh(nmq,nm),od(nmq,nm))
69 call dhmlistl(ngp,ngpq,igpig,igpqig,vgpc,vgpqc,nmq,dh)
70 dh(ngpq+1:nmq,1:ngp)=0.d0
71 dh(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)
81 call dolpistl(ngp,ngpq,igpig,igpqig,nmq,od)
82 od(ngpq+1:nmq,1:ngp)=0.d0
83 od(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)
92 allocate(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)
116 deallocate(w,h,dh,od,x,y)
pure subroutine dolpistl(ngp, ngpq, igpig, igpqig, ld, od)
subroutine dhmlaa(is, ias, ngp, ngpq, apwalm, apwalmq, dapwalm, dapwalmq, ld, dh)
subroutine olpfv(nmatp, ngp, igpig, apwalm, o)
complex(8), parameter zone
pure subroutine dhmlistl(ngp, ngpq, igpig, igpqig, vgpc, vgpqc, ld, dh)
subroutine dolpaa(is, ias, ngp, ngpq, apwalm, apwalmq, dapwalm, dapwalmq, ld, od)
complex(8), parameter zzero
integer, dimension(maxatoms *maxspecies) idxis
subroutine deveqnfv(ngp, ngpq, igpig, igpqig, vgpc, vgpqc, evalfv, apwalm, apwalmq, dapwalm, dapwalmq, evecfv, devalfvp, devecfv)
subroutine holdthd(nloop, nthd)
pure subroutine dhmllolo(is, ias, ngp, ngpq, ld, dh)
pure subroutine dolpalo(is, ias, ngp, ngpq, dapwalm, dapwalmq, ld, od)
subroutine hmlfv(nmatp, ngp, igpig, vgpc, apwalm, h)
pure subroutine dhmlalo(is, ias, ngp, ngpq, apwalm, apwalmq, dapwalm, dapwalmq, ld, dh)