9subroutine genppts(tfbz,nsym,sym,ngridp,npptnr,epslat,bvec,boxl,nppt,ipvip, &
10 ipvipnr,ivp,vpl,vpc,wppt,wpptnr)
65logical,
intent(in) :: tfbz
66integer,
intent(in) :: nsym,sym(3,3,*),ngridp(3),npptnr
67real(8),
intent(in) :: epslat,bvec(3,3),boxl(3,0:3)
68integer,
intent(out) :: nppt
69integer,
intent(out) :: ipvip(0:ngridp(1)-1,0:ngridp(2)-1,0:ngridp(3)-1)
70integer,
intent(out) :: ipvipnr(0:ngridp(1)-1,0:ngridp(2)-1,0:ngridp(3)-1)
71integer,
intent(out) :: ivp(3,npptnr)
72real(8),
intent(out) :: vpl(3,npptnr),vpc(3,npptnr)
73real(8),
intent(out) :: wppt(npptnr),wpptnr
77real(8) v1(3),v2(3),v3(3)
79if ((ngridp(1) < 1).or.(ngridp(2) < 1).or.(ngridp(3) < 1))
then
81 write(*,
'("Error(genppts): invalid ngridp : ",3I8)') ngridp
85if (npptnr /= ngridp(1)*ngridp(2)*ngridp(3))
then
87 write(*,
'("Error(genppts): mismatched npptnr and ngridp : ",4I8)') npptnr, &
93b(1:3,1)=boxl(1:3,1)-boxl(1:3,0)
94b(1:3,2)=boxl(1:3,2)-boxl(1:3,0)
95b(1:3,3)=boxl(1:3,3)-boxl(1:3,0)
97wpptnr=1.d0/dble(ngridp(1)*ngridp(2)*ngridp(3))
101 v1(3)=dble(i3)/dble(ngridp(3))
103 v1(2)=dble(i2)/dble(ngridp(2))
105 v1(1)=dble(i1)/dble(ngridp(1))
107 v2(1:3)=v2(1:3)+boxl(1:3,0)
113 call i3mtrv(sym(:,:,isym),v2,v3)
116 t1=abs(vpl(1,i)-v3(1))+abs(vpl(2,i)-v3(2))+abs(vpl(3,i)-v3(3))
117 if (t1 < epslat)
then
120 wppt(i)=wppt(i)+wpptnr
123 ivp(1,jp)=i1; ivp(2,jp)=i2; ivp(3,jp)=i3
136 ivp(1,ip)=i1; ivp(2,ip)=i2; ivp(3,ip)=i3
146 if (tfbz)
call vecfbz(epslat,bvec,vpl(:,ip))
148 call r3mv(bvec,vpl(:,ip),vpc(:,ip))
157integer,
intent(in) :: a(3,3)
158real(8),
intent(in) :: x(3)
159real(8),
intent(out) :: y(3)
160y(1)=a(1,1)*x(1)+a(2,1)*x(2)+a(3,1)*x(3)
161y(2)=a(1,2)*x(1)+a(2,2)*x(2)+a(3,2)*x(3)
162y(3)=a(1,3)*x(1)+a(2,3)*x(2)+a(3,3)*x(3)
subroutine genppts(tfbz, nsym, sym, ngridp, npptnr, epslat, bvec, boxl, nppt, ipvip, ipvipnr, ivp, vpl, vpc, wppt, wpptnr)