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,i1,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))
143 wfmt31(i0:i1)=wfmt31(i0:i1)+t1*wfmt4(i0:i1,3)
144 wfmt32(i0:i1)=wfmt32(i0:i1)-t1*wfmt4(i0:i1,3)
145 wfmt33(i0:i1)=wfmt33(i0:i1)+t1*(wfmt4(i0:i1,1)-
zi*wfmt4(i0:i1,2))
151 wfmt31(i0:i1)=wfmt31(i0:i1)+t1*wfmt4(i0:i1,3)
152 wfmt32(i0:i1)=wfmt32(i0:i1)-t1*wfmt4(i0:i1,3)
153 wfmt33(i0:i1)=wfmt33(i0:i1)+t1*(wfmt4(i0:i1,1)-
zi*wfmt4(i0:i1,2))
159 z1=b(1)*wfmt4(i,1)+b(2)*wfmt4(i,2)+b(3)*wfmt4(i,3)
160 wfmt31(i)=wfmt31(i)+z1
161 wfmt32(i)=wfmt32(i)+z1
171 if (
tvmmt(l,ias))
then 176 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,1,lm,1,ias),ld, &
178 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,1,ias),ld, &
182 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
184 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,2,lm,2,ias),ld, &
188 call zgemm(
'N',
'N',nm,nrci,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
190 call zgemm(
'N',
'N',nm,nrco,nm,
zone,
vmatmt(lm,1,lm,2,ias),ld, &
199 call gradzfmt(nrc,nrci,
rlcmt(:,-1,is),
wcrcmt(:,:,is),wfmt1(:,jst), &
203 z1=a(1)*wfmt4(i,1)+a(2)*wfmt4(i,2)+a(3)*wfmt4(i,3)
204 z1=cmplx(z1%im,-z1%re,8)
205 wfmt31(i)=wfmt31(i)+z1
206 if (
spinpol) wfmt32(i)=wfmt32(i)+z1
212 z3=asp(1,3)*wfmt4(i,1)+asp(2,3)*wfmt4(i,2)+asp(3,3)*wfmt4(i,3)
213 z3=cmplx(z3%im,-z3%re,8)
214 wfmt31(i)=wfmt31(i)+z3
215 wfmt32(i)=wfmt32(i)-z3
217 z1=asp(1,1)*wfmt4(i,1)+asp(2,1)*wfmt4(i,2)+asp(3,1)*wfmt4(i,3)
218 z2=asp(1,2)*wfmt4(i,1)+asp(2,2)*wfmt4(i,2)+asp(3,2)*wfmt4(i,3)
219 wfmt33(i)=wfmt33(i)+cmplx(z1%im,-z1%re,8)-z2
227 wfmt5(1:npc)=wfmt31(1:npc)
228 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
229 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
230 evecsv(jst,jst)=evecsv(jst,jst)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
234 wfmt5(1:npc)=wfmt32(1:npc)
235 call cgemv(
'C',npc,nj,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
236 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
237 evecsv(j,j)=evecsv(j,j)+sdot(npc2,wfmt0(:,jst),1,wfmt5,1)
240 wfmt5(1:npc)=wfmt33(1:npc)
241 call cgemv(
'C',npc,nstfv,
cone,wfmt0,npcmtmax,wfmt5,1,
czero,y,1)
242 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
251 deallocate(wfmt0,wfmt1)
258 if (socz) todsb=.false.
260 allocate(wfgp0(ngp,nstfv))
265 wfgp0(1:ngp,ist)=evecfv(1:ngp,ist)
273 wfir1(
igfc(igpig(igp)))=wfgp0(igp,jst)
279 wfir2(1:ngtc)=
bsirc(1:ngtc,
ndmag)*wfir1(1:ngtc)
282 wfgp1(igp)=wfir2(
igfc(igpig(igp)))
284 wfgp2(1:ngp)=-wfgp1(1:ngp)
286 wfir2(1:ngtc)=cmplx(
bsirc(1:ngtc,1),-
bsirc(1:ngtc,2),8)*wfir1(1:ngtc)
289 wfgp3(igp)=wfir2(
igfc(igpig(igp)))
299 t1=a(1)*vgpc(1,igp)+a(2)*vgpc(2,igp)+a(3)*vgpc(3,igp)
300 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
303 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
306 c1=wfir1(
igfc(igpig(igp)))
307 wfgp1(igp)=wfgp1(igp)+c1
308 if (
spinpol) wfgp2(igp)=wfgp2(igp)+c1
314 if (sum(abs(asp(1:3,j))) < 1.d-8) cycle
317 t1=asp(1,j)*vgpc(1,igp)+asp(2,j)*vgpc(2,igp)+asp(3,j)*vgpc(3,igp)
318 wfir1(
igfc(igpig(igp)))=t1*wfgp0(igp,jst)
321 wfir1(1:ngtc)=wfir1(1:ngtc)*
cfrc(1:ngtc)
325 wfgp3(igp)=wfgp3(igp)+wfir1(
igfc(igpig(igp)))
327 else if (j == 2)
then 329 c1=wfir1(
igfc(igpig(igp)))
330 wfgp3(igp)=wfgp3(igp)+cmplx(c1%im,-c1%re,4)
334 c1=wfir1(
igfc(igpig(igp)))
335 wfgp1(igp)=wfgp1(igp)+c1
336 wfgp2(igp)=wfgp2(igp)-c1
344 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp1,1,
czero,y,1)
345 evecsv(1:nj,jst)=evecsv(1:nj,jst)+y(1:nj)
346 evecsv(jst,jst)=evecsv(jst,jst)+sdot(ngp2,wfgp0(:,jst),1,wfgp1,1)
350 call cgemv(
'C',ngp,nj,
cone,wfgp0,ngp,wfgp2,1,
czero,y,1)
351 evecsv(nstfv+1:nstfv+nj,j)=evecsv(nstfv+1:nstfv+nj,j)+y(1:nj)
352 evecsv(j,j)=evecsv(j,j)+sdot(ngp2,wfgp0(:,jst),1,wfgp2,1)
355 call cgemv(
'C',ngp,nstfv,
cone,wfgp0,ngp,wfgp3,1,
czero,y,1)
356 evecsv(1:nstfv,j)=evecsv(1:nstfv,j)+y(1:nstfv)
370 call zheevdi(nstsv,nstsv,evecsv,evalsv_)
373 call zheevdi(nstfv,nstsv,evecsv,evalsv_)
374 evecsv(nstfv+1:nstsv,1:nstfv)=0.d0
375 evecsv(1:nstfv,nstfv+1:nstsv)=0.d0
377 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