7subroutine eveqnsv(ngp,igpig,vgpc,apwalm,evalfv,evecfv,evalsv_,evecsv)
13integer,
intent(in) :: ngp,igpig(ngkmax)
14real(8),
intent(in) :: vgpc(3,ngkmax)
15complex(8),
intent(in) :: apwalm(ngkmax,apwordmax,lmmaxapw,natmtot)
16real(8),
intent(in) :: evalfv(nstfv)
17complex(8),
intent(in) :: evecfv(nmatmax,nstfv)
18real(8),
intent(out) :: evalsv_(nstsv)
19complex(8),
intent(out) :: evecsv(nstsv,nstsv)
22integer ld,ist,jst,ispn,is,ias
23integer nrc,nrci,nrco,irco,irc
24integer l,lm,nm,npc,npc2,npci,ipco
25integer ngp2,igp,i0,i,j,nj,nthd
26real(8) ca,cb,a(3),asp(3,3),b(3),t1
31complex(8) wfmt2(npcmtmax),wfmt4(npcmtmax,3)
32complex(8) wfmt31(npcmtmax),wfmt32(npcmtmax),wfmt33(npcmtmax)
33complex(4) wfmt5(npcmtmax),wfgp1(ngkmax),wfgp2(ngkmax),wfgp3(ngkmax)
34complex(4) wfir1(ngtc),wfir2(ngtc),y(nstfv)
36complex(4),
allocatable :: wfmt0(:,:),wfgp0(:,:)
37complex(8),
allocatable :: wfmt1(:,:)
39real(4),
external :: sdot
42 evalsv_(1:nstsv)=evalfv(1:nstsv)
43 evecsv(1:nstsv,1:nstsv)=0.d0
62evecsv(1:nstsv,1:nstsv)=0.d0
67 evecsv(i,i)=evalfv(ist)
82allocate(wfmt0(npcmtmax,nstfv),wfmt1(npcmtmax,nstfv))
108 call wfmtfv(ias,ngp,apwalm(:,:,:,ias),evecfv(:,ist),wfmt1(:,ist))
110 call zcfmtwr(nrc,nrci,
wr2cmt(:,is),wfmt1(:,ist),wfmt0(:,ist))
118 call zbsht(nrc,nrci,wfmt1(:,jst),wfmt2)
120 wfmt32(1:npc)=
bsmt(1:npc,ias,
ndmag)*wfmt2(1:npc)
122 call zfsht(nrc,nrci,wfmt32,wfmt31)
127 wfmt32(1:npc)=cmplx(
bsmt(1:npc,ias,1),-
bsmt(1:npc,ias,2),8)*wfmt2(1:npc)
128 call zfsht(nrc,nrci,wfmt32,wfmt33)
130 wfmt32(1:npc)=-wfmt31(1:npc)
136 wfmt4(ipco,2),wfmt4(ipco,3))
144 wfmt31(i)=wfmt31(i)+t1*wfmt4(i,3)
145 wfmt32(i)=wfmt32(i)-t1*wfmt4(i,3)
146 wfmt33(i)=wfmt33(i)+t1*(wfmt4(i,1)+
zmi*wfmt4(i,2))
154 wfmt31(i)=wfmt31(i)+t1*wfmt4(i,3)
155 wfmt32(i)=wfmt32(i)-t1*wfmt4(i,3)
156 wfmt33(i)=wfmt33(i)+t1*(wfmt4(i,1)+
zmi*wfmt4(i,2))
163 z1=b(1)*wfmt4(i,1)+b(2)*wfmt4(i,2)+b(3)*wfmt4(i,3)
164 wfmt31(i)=wfmt31(i)+z1
165 wfmt32(i)=wfmt32(i)+z1
175 if (
tvmmt(l,ias))
then
180 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,1,lm,1,ias),ld, &
183 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,1,ias),ld, &
187 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
190 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
194 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
197 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
206 call gradzfmt(nrc,nrci,
rlcmt(:,-1,is),
wcrcmt(:,:,is),wfmt1(:,jst), &
210 z1=
zmi*(a(1)*wfmt4(i,1)+a(2)*wfmt4(i,2)+a(3)*wfmt4(i,3))
211 wfmt31(i)=wfmt31(i)+z1
212 if (
spinpol) wfmt32(i)=wfmt32(i)+z1
218 z3=
zmi*(asp(1,3)*wfmt4(i,1)+asp(2,3)*wfmt4(i,2)+asp(3,3)*wfmt4(i,3))
219 wfmt31(i)=wfmt31(i)+z3
220 wfmt32(i)=wfmt32(i)-z3
222 z1=asp(1,1)*wfmt4(i,1)+asp(2,1)*wfmt4(i,2)+asp(3,1)*wfmt4(i,3)
223 z2=asp(1,2)*wfmt4(i,1)+asp(2,2)*wfmt4(i,2)+asp(3,2)*wfmt4(i,3)
224 wfmt33(i)=wfmt33(i)+
zmi*z1-z2
232 wfmt5(1:npc)=wfmt31(1:npc)
233 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
234 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
235 evecsv(jst,jst)=evecsv(jst,jst)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
239 wfmt5(1:npc)=wfmt32(1:npc)
240 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
241 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
242 evecsv(j,j)=evecsv(j,j)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
245 wfmt5(1:npc)=wfmt33(1:npc)
246 call cgemv(
'C',npc,nstfv,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
247 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
256deallocate(wfmt0,wfmt1)
263 if (socz) todsb=.false.
265 allocate(wfgp0(ngp,nstfv))
270 wfgp0(1:ngp,ist)=evecfv(1:ngp,ist)
278 wfir1(
igfc(igpig(igp)))=wfgp0(igp,jst)
284 wfir2(1:ngtc)=
bsirc(1:ngtc,
ndmag)*wfir1(1:ngtc)
287 wfgp1(igp)=wfir2(
igfc(igpig(igp)))
289 wfgp2(1:ngp)=-wfgp1(1:ngp)
291 wfir2(1:ngtc)=cmplx(
bsirc(1:ngtc,1),-
bsirc(1:ngtc,2),8)*wfir1(1:ngtc)
294 wfgp3(igp)=wfir2(
igfc(igpig(igp)))
304 t1=a(1)*vgpc(1,igp)+a(2)*vgpc(2,igp)+a(3)*vgpc(3,igp)
305 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
308 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
311 c1=wfir1(
igfc(igpig(igp)))
312 wfgp1(igp)=wfgp1(igp)+c1
313 if (
spinpol) wfgp2(igp)=wfgp2(igp)+c1
319 if (sum(abs(asp(1:3,j))) < 1.d-8) cycle
322 t1=asp(1,j)*vgpc(1,igp)+asp(2,j)*vgpc(2,igp)+asp(3,j)*vgpc(3,igp)
323 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
326 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
330 wfgp3(igp)=wfgp3(igp)+wfir1(
igfc(igpig(igp)))
332 else if (j == 2)
then
334 c1=wfir1(
igfc(igpig(igp)))
335 wfgp3(igp)=wfgp3(igp)+
cmi*c1
339 c1=wfir1(
igfc(igpig(igp)))
340 wfgp1(igp)=wfgp1(igp)+c1
341 wfgp2(igp)=wfgp2(igp)-c1
349 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp1,1,
czero,y,1)
350 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
351 evecsv(jst,jst)=evecsv(jst,jst)+sdot(ngp2,wfgp0(:,jst),1,wfgp1,1)
355 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp2,1,
czero,y,1)
356 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
357 evecsv(j,j)=evecsv(j,j)+sdot(ngp2,wfgp0(:,jst),1,wfgp2,1)
360 call cgemv(
'C',ngp,nstfv,
cone,wfgp0,ngp,wfgp3,1,
czero,y,1)
361 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
375 call eveqnzh(nstsv,nstsv,evecsv,evalsv_)
378 call eveqnzh(nstfv,nstsv,evecsv,evalsv_)
379 evecsv(nstfv+1:nstsv,1:nstfv)=0.d0
380 evecsv(1:nstfv,nstfv+1:nstsv)=0.d0
382 call eveqnzh(nstfv,nstsv,evecsv(i,i),evalsv_(i))