2
* $Id: integrate_kbpp_e_band_local_new.F 22503 2012-05-20 06:58:57Z d3y133 $
4
subroutine integrate_kbpp_e_band_local_new(version,
5
> nrho,drho,lmax,locp,nmax,
6
> n_extra,n_expansion,zv,
8
> nfft1,nfft2,nfft3,nprj,
10
> n_prj,l_prj,m_prj,vnlnrm,
11
> semicore,rho_sc_r,rho_sc_k,
12
> nray,G_ray,vl_ray,vnl_ray,
13
> rho_sc_k_ray,tmp_ray,
23
integer n_extra,n_expansion(0:lmax)
25
double precision vp(nrho,0:lmax)
26
double precision wp(nrho,0:(lmax+n_extra))
27
double precision rho(nrho)
28
double precision f(nrho)
29
double precision cs(nrho)
30
double precision sn(nrho)
32
integer nfft1,nfft2,nfft3,nprj
33
double precision G(nfft1,nfft2,nfft3,3)
34
double precision vl(nfft1,nfft2,nfft3)
35
integer n_prj(nprj),l_prj(nprj),m_prj(nprj)
36
double precision vnlnrm(nmax,nmax,0:lmax)
40
double precision rho_sc_r(nrho,2)
41
double precision rho_sc_k(nfft1,nfft2,nfft3,4)
44
double precision G_ray(nray)
45
double precision vl_ray(nray,2)
46
double precision vnl_ray(nray,0:(lmax+n_extra),2)
47
double precision rho_sc_k_ray(nray,2,2)
48
double precision tmp_ray(nray)
53
#include "mafdecls.fh"
55
* *** local variables ****
56
integer np,taskid,MASTER
59
integer lcount,task_count,nfft3d
60
integer k1,k2,k3,i,l,nx,n,nb,n1,n2
61
double precision ecut,wcut
63
double precision gx,gy,gz,a,q,dG,yp1
66
* **** external functions ****
67
double precision dsum,simp,control_ecut,control_wcut,nwpw_splint
68
external dsum,simp,control_ecut,control_wcut,nwpw_splint
70
* **** set up indx(n,l) --> to wp ****
82
call Parallel_taskid(taskid)
84
nfft3d = (nfft1)*nfft2*nfft3
86
if ((nrho/2)*2.eq.nrho) then
87
write(*,*)"local pseudopotential not computed: nrho is not odd"
93
*:::::::::::::::::: Define non-local pseudopotential ::::::::::::::::
97
vp(i,l)=vp(i,l)-vp(i,locp)
102
*::::::::::::::::::::: Normarization constants ::::::::::::::::::::::
106
do n2 = 1, n_expansion(l)
107
do n1 = n2,n_expansion(l)
108
vnlnrm(n1,n2,l) = 0.0d0
109
vnlnrm(n2,n1,l) = 0.0d0
113
do n2 = 1, n_expansion(l)
115
f(i)=vp(i,l)*wp(i,indx(n2,l))**2
119
do n1 = n2+1,n_expansion(l)
121
f(i)=vp(i,l)*wp(i,indx(n1,l))*wp(i,indx(n2,l))
128
if (n_expansion(l).eq.1) then
130
else if (n_expansion(l).eq.2) then
131
d = vnlnrm(1,1,l)*vnlnrm(2,2,l)
132
> - vnlnrm(1,2,l)*vnlnrm(2,1,l)
134
vnlnrm(1,1,l) = vnlnrm(2,2,l)/d
136
vnlnrm(1,2,l) = -vnlnrm(1,2,l)/d
137
vnlnrm(2,1,l) = -vnlnrm(2,1,l)/d
139
call nwpw_matrix_invert(n_expansion(l),vnlnrm(1,1,l),nmax)
144
* ************* compute ray fourier transforms *********************
145
call integrate_kbpp_e_band_ray(version,
146
> nrho,drho,lmax,locp,nmax,
147
> n_extra,n_expansion,zv,
150
> G_ray,vl_ray,vnl_ray,
151
> semicore,rho_sc_r,rho_sc_k_ray,
154
* **** filter the rays ****
156
ecut = control_ecut()
157
wcut = control_wcut()
158
call kbpp_band_filter_ray(nray,G_ray,ecut,vl_ray)
161
do n=1,n_expansion(l)
162
call kbpp_band_filter_ray(nray,G_ray,wcut,
163
> vnl_ray(1,indx(n,l),1))
168
call kbpp_band_filter_ray(nray,G_ray,ecut,rho_sc_k_ray(1,1,1))
169
call kbpp_band_filter_ray(nray,G_ray,ecut,rho_sc_k_ray(1,2,1))
173
* **** setup cubic bsplines ****
174
dG = G_ray(3)-G_ray(2)
175
!yp1 = (vl_ray(3,1)-vl_ray(2,1))/dG
176
!**** five point formula ***
177
yp1 = ( -50.0d0*vl_ray(2,1)
178
> + 96.0d0*vl_ray(3,1)
179
> - 72.0d0*vl_ray(4,1)
180
> + 32.0d0*vl_ray(5,1)
181
> - 6.0d0*vl_ray(6,1))/(24.0d0*dG)
182
call nwpw_spline(G_ray(2),vl_ray(2,1),nray-1,yp1,0.0d0,
183
> vl_ray(2,2),tmp_ray)
186
do n=1,n_expansion(l)
187
call nwpw_spline(G_ray,vnl_ray(1,indx(n,l),1),nray,
189
> vnl_ray(1,indx(n,l),2),tmp_ray)
194
call nwpw_spline(G_ray,rho_sc_k_ray(1,1,1),nray,0.0d0,0.0d0,
195
> rho_sc_k_ray(1,1,2),tmp_ray)
196
call nwpw_spline(G_ray,rho_sc_k_ray(1,2,1),nray,0.0d0,0.0d0,
197
> rho_sc_k_ray(1,2,2),tmp_ray)
201
*====================== Fourier transformation ======================
202
call dcopy(nfft3d,0.0d0,0,vl,1)
203
call dcopy(4*nfft3d,0.0d0,0,rho_sc_k,1)
208
task_count = task_count + 1
209
if (mod(task_count,np).ne.taskid) go to 700
211
Q=DSQRT(G(k1,k2,k3,1)**2
216
if ((k1.eq.1).and.(k2.eq.1).and.(k3.eq.1)) go to 700
227
*:::::::::::::::::::::::::::::: local :::::::::::::::::::::::::::::::
230
vl(k1,k2,k3)= nwpw_splint(G_ray(2),vl_ray(2,1),
231
> vl_ray(2,2),nray-1,nx-1,Q)
234
*::::::::::::::::::::: semicore density :::::::::::::::::::::::::::::::
236
p = nwpw_splint(G_ray,rho_sc_k_ray(1,1,1),
237
> rho_sc_k_ray(1,1,2),nray,nx,Q)
238
rho_sc_k(k1,k2,k3,1) = p
240
p = nwpw_splint(G_ray,rho_sc_k_ray(1,2,1),
241
> rho_sc_k_ray(1,2,2),nray,nx,Q)
242
rho_sc_k(k1,k2,k3,2)=p*GX
243
rho_sc_k(k1,k2,k3,3)=p*GY
244
rho_sc_k(k1,k2,k3,4)=p*GZ
249
call Parallel_Vector_SumAll(4*nfft3d,rho_sc_k)
250
call Parallel_Vector_SumAll(nfft3d,vl)
252
*::::::::::::::::::::::::::::::: G=0 ::::::::::::::::::::::::::::::::
254
* **** local potential ****
255
vl(1,1,1)=vl_ray(1,1)
257
* **** semicore density ****
259
rho_sc_k(1,1,1,1) = rho_sc_k_ray(1,1,1)
260
rho_sc_k(1,1,1,2) = 0.0d0
261
rho_sc_k(1,1,1,3) = 0.0d0
262
rho_sc_k(1,1,1,4) = 0.0d0
265
* ********************************
266
* **** define n_prj and l_prj ****
267
* ********************************
269
GO TO (950,940,930,920), lmax+1
271
!:::::: f-wave :::::::
274
do n=1,n_expansion(3)
315
do n=1,n_expansion(2)
346
do n=1,n_expansion(1)
367
do n=1,n_expansion(0)