7 subroutine eveqnsv(ngp,igpig,vgpc,apwalm,evalfv,evecfv,evalsv_,evecsv)
13 integer,
intent(in) :: ngp,igpig(ngkmax)
14 real(8),
intent(in) :: vgpc(3,ngkmax)
15 complex(8),
intent(in) :: apwalm(ngkmax,apwordmax,lmmaxapw,natmtot)
16 real(8),
intent(in) :: evalfv(nstfv)
17 complex(8),
intent(in) :: evecfv(nmatmax,nstfv)
18 real(8),
intent(out) :: evalsv_(nstsv)
19 complex(8),
intent(out) :: evecsv(nstsv,nstsv)
22 integer ld,ist,jst,ispn,is,ias
23 integer nrc,nrci,nrco,irco,irc
24 integer l,lm,nm,npc,npc2,npci,ipco
25 integer ngp2,igp,i0,i,j,nj,nthd
26 real(8) ca,cb,a(3),asp(3,3),b(3),t1
31 complex(8) wfmt2(npcmtmax),wfmt4(npcmtmax,3)
32 complex(8) wfmt31(npcmtmax),wfmt32(npcmtmax),wfmt33(npcmtmax)
33 complex(4) wfmt5(npcmtmax),wfgp1(ngkmax),wfgp2(ngkmax),wfgp3(ngkmax)
34 complex(4) wfir1(ngtc),wfir2(ngtc),y(nstfv)
36 complex(4),
allocatable :: wfmt0(:,:),wfgp0(:,:)
37 complex(8),
allocatable :: wfmt1(:,:)
39 real(4),
external :: sdot
42 evalsv_(1:nstsv)=evalfv(1:nstsv)
43 evecsv(1:nstsv,1:nstsv)=0.d0
62 evecsv(1:nstsv,1:nstsv)=0.d0
67 evecsv(i,i)=evalfv(ist)
82 allocate(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)-
zi*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)-
zi*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=a(1)*wfmt4(i,1)+a(2)*wfmt4(i,2)+a(3)*wfmt4(i,3)
211 z1=cmplx(z1%im,-z1%re,8)
212 wfmt31(i)=wfmt31(i)+z1
213 if (
spinpol) wfmt32(i)=wfmt32(i)+z1
219 z3=asp(1,3)*wfmt4(i,1)+asp(2,3)*wfmt4(i,2)+asp(3,3)*wfmt4(i,3)
220 z3=cmplx(z3%im,-z3%re,8)
221 wfmt31(i)=wfmt31(i)+z3
222 wfmt32(i)=wfmt32(i)-z3
224 z1=asp(1,1)*wfmt4(i,1)+asp(2,1)*wfmt4(i,2)+asp(3,1)*wfmt4(i,3)
225 z2=asp(1,2)*wfmt4(i,1)+asp(2,2)*wfmt4(i,2)+asp(3,2)*wfmt4(i,3)
226 wfmt33(i)=wfmt33(i)+cmplx(z1%im,-z1%re,8)-z2
234 wfmt5(1:npc)=wfmt31(1:npc)
235 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
236 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
237 evecsv(jst,jst)=evecsv(jst,jst)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
241 wfmt5(1:npc)=wfmt32(1:npc)
242 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
243 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
244 evecsv(j,j)=evecsv(j,j)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
247 wfmt5(1:npc)=wfmt33(1:npc)
248 call cgemv(
'C',npc,nstfv,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
249 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
258 deallocate(wfmt0,wfmt1)
265 if (socz) todsb=.false.
267 allocate(wfgp0(ngp,nstfv))
272 wfgp0(1:ngp,ist)=evecfv(1:ngp,ist)
280 wfir1(
igfc(igpig(igp)))=wfgp0(igp,jst)
286 wfir2(1:ngtc)=
bsirc(1:ngtc,
ndmag)*wfir1(1:ngtc)
289 wfgp1(igp)=wfir2(
igfc(igpig(igp)))
291 wfgp2(1:ngp)=-wfgp1(1:ngp)
293 wfir2(1:ngtc)=cmplx(
bsirc(1:ngtc,1),-
bsirc(1:ngtc,2),8)*wfir1(1:ngtc)
296 wfgp3(igp)=wfir2(
igfc(igpig(igp)))
306 t1=a(1)*vgpc(1,igp)+a(2)*vgpc(2,igp)+a(3)*vgpc(3,igp)
307 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
310 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
313 c1=wfir1(
igfc(igpig(igp)))
314 wfgp1(igp)=wfgp1(igp)+c1
315 if (
spinpol) wfgp2(igp)=wfgp2(igp)+c1
321 if (sum(abs(asp(1:3,j))) < 1.d-8) cycle
324 t1=asp(1,j)*vgpc(1,igp)+asp(2,j)*vgpc(2,igp)+asp(3,j)*vgpc(3,igp)
325 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
328 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
332 wfgp3(igp)=wfgp3(igp)+wfir1(
igfc(igpig(igp)))
334 else if (j == 2)
then 336 c1=wfir1(
igfc(igpig(igp)))
337 wfgp3(igp)=wfgp3(igp)+cmplx(c1%im,-c1%re,4)
341 c1=wfir1(
igfc(igpig(igp)))
342 wfgp1(igp)=wfgp1(igp)+c1
343 wfgp2(igp)=wfgp2(igp)-c1
351 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp1,1,
czero,y,1)
352 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
353 evecsv(jst,jst)=evecsv(jst,jst)+sdot(ngp2,wfgp0(:,jst),1,wfgp1,1)
357 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp2,1,
czero,y,1)
358 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
359 evecsv(j,j)=evecsv(j,j)+sdot(ngp2,wfgp0(:,jst),1,wfgp2,1)
362 call cgemv(
'C',ngp,nstfv,
cone,wfgp0,ngp,wfgp3,1,
czero,y,1)
363 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
377 call eveqnzh(nstsv,nstsv,evecsv,evalsv_)
380 call eveqnzh(nstfv,nstsv,evecsv,evalsv_)
381 evecsv(nstfv+1:nstsv,1:nstfv)=0.d0
382 evecsv(1:nstfv,nstfv+1:nstsv)=0.d0
384 call eveqnzh(nstfv,nstsv,evecsv(i,i),evalsv_(i))
real(8), dimension(3, 3) afspc
integer, dimension(maxspecies) npcmt
integer, parameter lmmaxdm
complex(4), parameter czero
subroutine gradzfmt(nr, nri, ri, wcr, zfmt, ld, gzfmt)
real(8), dimension(:,:), allocatable bdmta
complex(4), parameter cone
complex(8), parameter zone
subroutine zfsht(nr, nri, zfmt1, zfmt2)
subroutine eveqnzh(n, ld, a, w)
pure subroutine lopzflmn(lmax, n, ld, zflm, zlflm1, zlflm2, zlflm3)
subroutine cfftifc(nd, n, sgn, c)
integer, dimension(:), allocatable igfc
real(8), dimension(:,:,:), allocatable rlcmt
subroutine eveqnsv(ngp, igpig, vgpc, apwalm, evalfv, evecfv, evalsv_, evecsv)
complex(8), dimension(:,:,:,:,:), allocatable vmatmt
real(8), parameter gfacte
real(8), dimension(3) afieldc
logical, dimension(:,:), allocatable tvmmt
subroutine wfmtfv(ias, ngp, apwalm, evecfv, wfmt)
real(8), dimension(:,:), allocatable wr2cmt
integer, dimension(maxspecies) npcmti
integer, dimension(maxatoms *maxspecies) idxis
real(8), dimension(:,:,:), allocatable wcrcmt
subroutine zbsht(nr, nri, zfmt1, zfmt2)
integer, dimension(3) ngdgc
pure subroutine zcfmtwr(nr, nri, wr, zfmt, cfmt)
subroutine holdthd(nloop, nthd)
real(8), dimension(:), allocatable cfrc
integer, dimension(maxspecies) nrcmt
integer, dimension(maxspecies) nrcmti
integer, parameter lmaxdm
real(8), dimension(:,:), pointer, contiguous bsirc
real(8), dimension(3) bfieldc
real(8), dimension(:,:,:), pointer, contiguous bsmt
real(8), dimension(:,:), allocatable socfr