6subroutine eveqnss(ngp,igpig,apwalm,evalfv,evecfv,evalsv_,evecsv)
12integer,
intent(in) :: ngp(nspnfv),igpig(ngkmax,nspnfv)
13complex(8),
intent(in) :: apwalm(ngkmax,apwordmax,lmmaxapw,natmtot,nspnfv)
14real(8),
intent(in) :: evalfv(nstfv,nspnfv)
15complex(8),
intent(in) :: evecfv(nmatmax,nstfv,nspnfv)
16real(8),
intent(out) :: evalsv_(nstsv)
17complex(8),
intent(out) :: evecsv(nstsv,nstsv)
19integer ld,ist,jst,ispn,is,ias
20integer nrc,nrci,nrco,nj,i,j
21integer l,lm,nm,npc,npc2,npci
22integer n1,n12,n2,n22,igp,nthd
26complex(8) wfmt2(npcmtmax,nspnfv),wfmt4(npcmtmax)
27complex(8) wfmt31(npcmtmax),wfmt32(npcmtmax),wfmt33(npcmtmax)
28complex(4) wfmt5(npcmtmax),wfgp1(ngkmax),wfgp2(ngkmax),wfgp3(ngkmax)
29complex(4) wfir1(ngtc,nspnfv),wfir2(ngtc),y(nstfv)
31complex(4),
allocatable :: wfmt0(:,:,:),wfgp0(:,:,:)
32complex(8),
allocatable :: wfmt1(:,:,:)
34real(4),
external :: sdot
37 write(*,
'("Error(eveqnss): spin-unpolarised calculation")')
44evecsv(1:nstsv,1:nstsv)=0.d0
49 evecsv(i,i)=evalfv(ist,ispn)
63allocate(wfmt0(npcmtmax,nstfv,nspnfv),wfmt1(npcmtmax,nstfv,nspnfv))
77 if (
ssdph.and.(ispn == 2)) zq=conjg(zq)
80 call wfmtfv(ias,ngp(ispn),apwalm(:,:,:,ias,ispn),evecfv(:,ist,ispn), &
83 if (
ssdph) wfmt1(1:npc,ist,ispn)=zq*wfmt1(1:npc,ist,ispn)
85 call zcfmtwr(nrc,nrci,
wr2cmt(:,is),wfmt1(:,ist,ispn),wfmt0(:,ist,ispn))
93 call zbsht(nrc,nrci,wfmt1(:,jst,ispn),wfmt2(:,ispn))
96 wfmt4(1:npc)=
bsmt(1:npc,ias,3)*wfmt2(1:npc,1)
97 call zfsht(nrc,nrci,wfmt4,wfmt31)
98 wfmt4(1:npc)=-
bsmt(1:npc,ias,3)*wfmt2(1:npc,2)
99 call zfsht(nrc,nrci,wfmt4,wfmt32)
100 wfmt4(1:npc)=cmplx(
bsmt(1:npc,ias,1),-
bsmt(1:npc,ias,2),8)*wfmt2(1:npc,2)
101 call zfsht(nrc,nrci,wfmt4,wfmt33)
105 if (
tvmmt(l,ias))
then
110 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,1,lm,1,ias),ld, &
113 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,1,ias),ld, &
116 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
119 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
122 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
125 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
133 wfmt5(1:npc)=wfmt31(1:npc)
134 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
135 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
136 evecsv(jst,jst)=evecsv(jst,jst)+sdot(npc2,wfmt0(:,jst,1),1,wfmt5,1)
139 wfmt5(1:npc)=wfmt32(1:npc)
140 call cgemv(
'C',npc,nj,
cone,wfmt0(:,:,2),npcmtmax,wfmt5,1,
czero,y,1)
141 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
142 evecsv(j,j)=evecsv(j,j)+sdot(npc2,wfmt0(:,jst,2),1,wfmt5,1)
144 wfmt5(1:npc)=wfmt33(1:npc)
145 call cgemv(
'C',npc,nstfv,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
146 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
152deallocate(wfmt0,wfmt1)
160allocate(wfgp0(ngkmax,nstfv,nspnfv))
166 wfgp0(1:ngp(ispn),ist,ispn)=evecfv(1:ngp(ispn),ist,ispn)
176 wfir1(
igfc(igpig(igp,ispn)),ispn)=wfgp0(igp,jst,ispn)
182 wfir2(1:ngtc)=
bsirc(1:ngtc,3)*wfir1(1:ngtc,1)
185 wfgp1(igp)=wfir2(
igfc(igpig(igp,1)))
187 wfir2(1:ngtc)=-
bsirc(1:ngtc,3)*wfir1(1:ngtc,2)
190 wfgp2(igp)=wfir2(
igfc(igpig(igp,2)))
192 wfir2(1:ngtc)=cmplx(
bsirc(1:ngtc,1),-
bsirc(1:ngtc,2),8)*wfir1(1:ngtc,2)
195 wfgp3(igp)=wfir2(
igfc(igpig(igp,1)))
200 call cgemv(
'C',n1,nj,
cone,wfgp0,ngkmax,wfgp1,1,
czero,y,1)
201 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
202 evecsv(jst,jst)=evecsv(jst,jst)+sdot(n12,wfgp0(:,jst,1),1,wfgp1,1)
205 call cgemv(
'C',n2,nj,
cone,wfgp0(:,:,2),ngkmax,wfgp2,1,
czero,y,1)
206 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
207 evecsv(j,j)=evecsv(j,j)+sdot(n22,wfgp0(:,jst,2),1,wfgp2,1)
209 call cgemv(
'C',n1,nstfv,
cone,wfgp0,ngkmax,wfgp3,1,
czero,y,1)
210 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
219call eveqnzh(nstsv,nstsv,evecsv,evalsv_)
real(8), dimension(:,:), pointer, contiguous bsirc
real(8), dimension(:,:,:), pointer, contiguous bsmt