2
* $Id: integrate_kbpp_e_band_nonlocal_new.F 22503 2012-05-20 06:58:57Z d3y133 $
4
subroutine integrate_kbpp_e_band_nonlocal_new(version,kvec,
5
> nrho,drho,lmax,locp,nmax,
6
> n_extra,n_expansion,zv,
8
> nfft1,nfft2,nfft3,nprj,
14
double precision kvec(3)
20
integer n_extra,n_expansion(0:lmax)
22
double precision vp(nrho,0:lmax)
23
double precision wp(nrho,0:(lmax+n_extra))
24
double precision rho(nrho)
25
double precision f(nrho)
26
double precision cs(nrho)
27
double precision sn(nrho)
29
integer nfft1,nfft2,nfft3,nprj
30
double precision G(nfft1,nfft2,nfft3,3)
31
double precision vnl(nfft1,nfft2,nfft3,nprj)
34
double precision G_ray(nray)
35
double precision vnl_ray(nray,0:(lmax+n_extra),2)
39
* *** local variables ****
40
integer np,taskid,MASTER
43
integer lcount,task_count,nfft3d
44
integer k1,k2,k3,i,l,nx,n,nb
46
double precision gx,gy,gz,q,d,dG
49
* **** external functions ****
50
double precision dsum,simp,nwpw_splint
51
external dsum,simp,nwpw_splint
53
* **** set up indx(n,l) --> to wp ****
64
call Parallel_taskid(taskid)
66
nfft3d = (nfft1)*nfft2*nfft3
69
write(*,*)"non-local psp not generated: lmax exceeds 3"
73
if ((nrho/2)*2.EQ.nrho) then
74
write(*,*)"non-local psp not generated: nrho is not odd"
79
*====================== Fourier transformation ======================
80
dG = G_ray(3)-G_ray(2)
81
call dcopy(nprj*nfft3d,0.0d0,0,vnl,1)
86
task_count = task_count + 1
87
if (mod(task_count,np).ne.taskid) go to 700
88
gx=G(k1,k2,k3,1)+kvec(1)
89
gy=G(k1,k2,k3,2)+kvec(2)
90
gz=G(k1,k2,k3,3)+kvec(3)
92
Q =DSQRT(gx**2 + gy**2 + gz**2)
95
if (dabs(Q).gt.1.0d-9) then
106
GO TO (500,400,300,200), lmax+1
108
*:::::::::::::::::::::::::::::: f-wave ::::::::::::::::::::::::::::::
111
do n=1,n_expansion(3)
112
D = nwpw_splint(G_ray,vnl_ray(1,indx(n,3),1),
113
> vnl_ray(1,indx(n,3),2),nray,nx,Q)
115
vnl(k1,k2,k3,lcount)=D*GX*(4.0d0*GX*GX
116
> -3.0d0*(1.0d0-GZ*GZ))
119
vnl(k1,k2,k3,lcount)=D*GY*(3.0d0*(1.0d0-GZ*GZ)
123
vnl(k1,k2,k3,lcount)=D*GZ*(GX*GX - GY*GY)
126
vnl(k1,k2,k3,lcount)=D*GX*GY*GZ
128
vnl(k1,k2,k3,lcount)=D*GX*(5.0d0*GZ*GZ-1.0d0)
131
vnl(k1,k2,k3,lcount)=D*GY*(5.0d0*GZ*GZ-1.0d0)
134
vnl(k1,k2,k3,lcount)=D*GZ*(5.0d0*GZ*GZ-3.0d0)
138
*:::::::::::::::::::::::::::::: d-wave ::::::::::::::::::::::::::::::
141
do n=1,n_expansion(2)
142
D = nwpw_splint(G_ray,vnl_ray(1,indx(n,2),1),
143
> vnl_ray(1,indx(n,2),2),nray,nx,Q)
145
vnl(k1,k2,k3,lcount)=D*(2.0d0*GZ*GZ-GX*GX-GY*GY)
146
> /(2.0d0*dsqrt(3.0d0))
148
vnl(k1,k2,k3,lcount)=D*GX*GY
150
vnl(k1,k2,k3,lcount)=D*GY*GZ
152
vnl(k1,k2,k3,lcount)=D*GZ*GX
154
vnl(k1,k2,k3,lcount)=D*(GX*GX-GY*GY)/(2.0d0)
157
*:::::::::::::::::::::::::::::: p-wave ::::::::::::::::::::::::::::::
160
do n=1,n_expansion(1)
161
P = nwpw_splint(G_ray,vnl_ray(1,indx(n,1),1),
162
> vnl_ray(1,indx(n,1),2),nray,nx,Q)
164
vnl(k1,k2,k3,lcount)=P*GX
166
vnl(k1,k2,k3,lcount)=P*GY
168
vnl(k1,k2,k3,lcount)=P*GZ
171
*:::::::::::::::::::::::::::::: s-wave :::::::::::::::::::::::::::::::
174
do n=1,n_expansion(0)
176
vnl(k1,k2,k3,lcount)= nwpw_splint(G_ray,
177
> vnl_ray(1,indx(n,0),1),
178
> vnl_ray(1,indx(n,0),2),
185
*::::::::::::::::::::::::::::::: G+k=0 ::::::::::::::::::::::::::::::::
189
vnl(k1,k2,k3,l)=0.0d0
191
* *** only j0 is non-zero at zero ****
193
do n=1,n_expansion(0)
194
vnl(k1,k2,k3,n_expansion(0)-n+1)=vnl_ray(1,indx(n,0),1)
203
call Parallel_Vector_SumAll(nprj*nfft3d,vnl)