9 subroutine genppts(tfbz,nsym,sym,ngridp,npptnr,epslat,bvec,boxl,nppt,ipvip, &
10 ipvipnr,ivp,vpl,vpc,wppt,wpptnr)
65 logical,
intent(in) :: tfbz
66 integer,
intent(in) :: nsym,sym(3,3,*),ngridp(3),npptnr
67 real(8),
intent(in) :: epslat,bvec(3,3),boxl(3,0:3)
68 integer,
intent(out) :: nppt
69 integer,
intent(out) :: ipvip(0:ngridp(1)-1,0:ngridp(2)-1,0:ngridp(3)-1)
70 integer,
intent(out) :: ipvipnr(0:ngridp(1)-1,0:ngridp(2)-1,0:ngridp(3)-1)
71 integer,
intent(out) :: ivp(3,npptnr)
72 real(8),
intent(out) :: vpl(3,npptnr),vpc(3,npptnr)
73 real(8),
intent(out) :: wppt(npptnr),wpptnr
77 real(8) v1(3),v2(3),v3(3)
79 if ((ngridp(1) < 1).or.(ngridp(2) < 1).or.(ngridp(3) < 1))
then 81 write(*,
'("Error(genppts): invalid ngridp : ",3I8)') ngridp
85 if (npptnr /= ngridp(1)*ngridp(2)*ngridp(3))
then 87 write(*,
'("Error(genppts): mismatched npptnr and ngridp : ",4I8)') npptnr, &
93 b(1:3,1)=boxl(1:3,1)-boxl(1:3,0)
94 b(1:3,2)=boxl(1:3,2)-boxl(1:3,0)
95 b(1:3,3)=boxl(1:3,3)-boxl(1:3,0)
97 wpptnr=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))
153 pure subroutine i3mtrv(a,x,y)
156 integer,
intent(in) :: a(3,3)
157 real(8),
intent(in) :: x(3)
158 real(8),
intent(out) :: y(3)
159 y(1)=a(1,1)*x(1)+a(2,1)*x(2)+a(3,1)*x(3)
160 y(2)=a(1,2)*x(1)+a(2,2)*x(2)+a(3,2)*x(3)
161 y(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)
pure subroutine i3mtrv(a, x, y)
subroutine vecfbz(eps, bvec, vpl)
pure subroutine r3frac(eps, v)
pure subroutine r3mv(a, x, y)