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, &
182 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,1,ias),ld, &
186 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
188 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
192 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
194 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
203 call gradzfmt(nrc,nrci,
rlcmt(:,-1,is),
wcrcmt(:,:,is),wfmt1(:,jst), &
207 z1=a(1)*wfmt4(i,1)+a(2)*wfmt4(i,2)+a(3)*wfmt4(i,3)
208 z1=cmplx(z1%im,-z1%re,8)
209 wfmt31(i)=wfmt31(i)+z1
210 if (
spinpol) wfmt32(i)=wfmt32(i)+z1
216 z3=asp(1,3)*wfmt4(i,1)+asp(2,3)*wfmt4(i,2)+asp(3,3)*wfmt4(i,3)
217 z3=cmplx(z3%im,-z3%re,8)
218 wfmt31(i)=wfmt31(i)+z3
219 wfmt32(i)=wfmt32(i)-z3
221 z1=asp(1,1)*wfmt4(i,1)+asp(2,1)*wfmt4(i,2)+asp(3,1)*wfmt4(i,3)
222 z2=asp(1,2)*wfmt4(i,1)+asp(2,2)*wfmt4(i,2)+asp(3,2)*wfmt4(i,3)
223 wfmt33(i)=wfmt33(i)+cmplx(z1%im,-z1%re,8)-z2
231 wfmt5(1:npc)=wfmt31(1:npc)
232 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
233 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
234 evecsv(jst,jst)=evecsv(jst,jst)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
238 wfmt5(1:npc)=wfmt32(1:npc)
239 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
240 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
241 evecsv(j,j)=evecsv(j,j)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
244 wfmt5(1:npc)=wfmt33(1:npc)
245 call cgemv(
'C',npc,nstfv,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
246 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
255 deallocate(wfmt0,wfmt1)
262 if (socz) todsb=.false.
264 allocate(wfgp0(ngp,nstfv))
269 wfgp0(1:ngp,ist)=evecfv(1:ngp,ist)
277 wfir1(
igfc(igpig(igp)))=wfgp0(igp,jst)
283 wfir2(1:ngtc)=
bsirc(1:ngtc,
ndmag)*wfir1(1:ngtc)
286 wfgp1(igp)=wfir2(
igfc(igpig(igp)))
288 wfgp2(1:ngp)=-wfgp1(1:ngp)
290 wfir2(1:ngtc)=cmplx(
bsirc(1:ngtc,1),-
bsirc(1:ngtc,2),8)*wfir1(1:ngtc)
293 wfgp3(igp)=wfir2(
igfc(igpig(igp)))
303 t1=a(1)*vgpc(1,igp)+a(2)*vgpc(2,igp)+a(3)*vgpc(3,igp)
304 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
307 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
310 c1=wfir1(
igfc(igpig(igp)))
311 wfgp1(igp)=wfgp1(igp)+c1
312 if (
spinpol) wfgp2(igp)=wfgp2(igp)+c1
318 if (sum(abs(asp(1:3,j))) < 1.d-8) cycle
321 t1=asp(1,j)*vgpc(1,igp)+asp(2,j)*vgpc(2,igp)+asp(3,j)*vgpc(3,igp)
322 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
325 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
329 wfgp3(igp)=wfgp3(igp)+wfir1(
igfc(igpig(igp)))
331 else if (j == 2)
then 333 c1=wfir1(
igfc(igpig(igp)))
334 wfgp3(igp)=wfgp3(igp)+cmplx(c1%im,-c1%re,4)
338 c1=wfir1(
igfc(igpig(igp)))
339 wfgp1(igp)=wfgp1(igp)+c1
340 wfgp2(igp)=wfgp2(igp)-c1
348 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp1,1,
czero,y,1)
349 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
350 evecsv(jst,jst)=evecsv(jst,jst)+sdot(ngp2,wfgp0(:,jst),1,wfgp1,1)
354 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp2,1,
czero,y,1)
355 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
356 evecsv(j,j)=evecsv(j,j)+sdot(ngp2,wfgp0(:,jst),1,wfgp2,1)
359 call cgemv(
'C',ngp,nstfv,
cone,wfgp0,ngp,wfgp3,1,
czero,y,1)
360 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
374 call zheevdi(nstsv,nstsv,evecsv,evalsv_)
377 call zheevdi(nstfv,nstsv,evecsv,evalsv_)
378 evecsv(nstfv+1:nstsv,1:nstfv)=0.d0
379 evecsv(1:nstfv,nstfv+1:nstsv)=0.d0
381 call zheevdi(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)
pure subroutine lopzflmn(lmax, n, ld, zflm, zlflm1, zlflm2, zlflm3)
subroutine cfftifc(nd, n, sgn, c)
subroutine zheevdi(n, ld, a, w)
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