2
* $Id: integrate_e_stress_ray.F 22503 2012-05-20 06:58:57Z d3y133 $
5
* ************************************
7
* * integrate_e_stress_ray *
9
* ************************************
11
subroutine integrate_e_stress_ray(version,rlocal,
12
> nrho,drho,lmax,locp,nmax,
13
> n_extra,n_expansion,zv,
15
> nray,G_ray,dvl_ray,dvnl_ray,
16
> semicore,rho_sc_r,rho_sc_k_ray,
20
double precision rlocal
26
integer n_extra,n_expansion(0:lmax)
28
double precision vp(nrho,0:lmax)
29
double precision wp(nrho,0:(lmax+n_extra))
30
double precision rho(nrho)
31
double precision f(nrho)
32
double precision cs(nrho)
33
double precision sn(nrho)
36
double precision G_ray(nray)
37
double precision dvl_ray(nray)
38
double precision dvnl_ray(nray,2,0:(lmax+n_extra))
41
double precision rho_sc_r(nrho,2)
42
double precision rho_sc_k_ray(nray)
47
* *** local variables ****
48
integer np,taskid,MASTER
53
double precision pi,twopi,forpi
54
double precision p0,p1,p2,p3
59
* **** external functions ****
60
double precision dsum,simp,util_erf
61
external dsum,simp,util_erf
63
* **** set up indx(n,l) --> to wp ****
74
call Parallel_taskid(taskid)
76
if (version.ne.3) then
77
call errquit('integrate_stress_ray - unit cell is aperiodic',0,
83
call errquit('integrate_stress_ray - lmax > f',0,
88
if ((nrho/2)*2.eq.nrho) then
89
call errquit('integrate_stress_ray - psp grid not odd',0,
100
p2=dsqrt(15.0d0*forpi)
101
p3=dsqrt(105.0d0*forpi)
103
*====================== Fourier transformation ======================
104
call dcopy(nray,0.0d0,0,dvl_ray,1)
105
call dcopy(2*(lmax+1+n_extra)*nray,0.0d0,0,dvnl_ray,1)
106
call dcopy(nray,0.0d0,0,rho_sc_k_ray,1)
109
task_count = task_count + 1
110
if (mod(task_count,np).ne.taskid) go to 700
119
GO TO (500,400,300,200), lmax+1
121
*:::::::::::::::::::::::::::::: f-wave ::::::::::::::::::::::::::::::
124
do n=1,n_expansion(3)
128
A=15.0d0*(A-cs(i))/(q*rho(i))**2 - 6*A + cs(i)
129
f(i)=A*wp(i,indx(n,3))*vp(i,3)
131
dvnl_ray(k1,1,indx(n,3))=p3*SIMP(nrho,F,drho)/q
135
A= -60.0d0*sn(i)/(rho(i)**3 * q**5)
136
> + 60.0d0*cs(i)/(rho(i)**2 * q**4)
137
> + 27.0d0*sn(i)/(rho(i) * q**3)
138
> - 7.0d0*cs(i)/(q**2)
140
f(i)=A*wp(i,indx(n,3))*vp(i,3)
142
dvnl_ray(k1,2,indx(n,3))=p3*SIMP(nrho,F,drho)
145
*:::::::::::::::::::::::::::::: d-wave ::::::::::::::::::::::::::::::
148
do n=1,n_expansion(2)
151
A=3.0d0*(sn(i)/(q*rho(i))-cs(i))/(q*rho(i))-sn(i)
152
f(i)=A*wp(i,indx(n,2))*vp(i,2)
154
dvnl_ray(k1,1,indx(n,2))=p2*SIMP(nrho,F,drho)/q
158
A= -9.0d0*sn(i)/(rho(i)**2 * q**4)
159
> + 9.0d0*cs(i)/(rho(i) * q**3)
160
> + 4.0d0*sn(i)/(q**2)
162
f(i)=A*wp(i,indx(n,2))*vp(i,2)
164
dvnl_ray(k1,2,indx(n,2))=p2*SIMP(nrho,F,drho)
167
*:::::::::::::::::::::::::::::: p-wave ::::::::::::::::::::::::::::::
170
do n=1,n_expansion(1)
173
f(i)=(sn(i)/(q*rho(i)) - cs(i)) * wp(i,indx(n,1))*vp(i,1)
175
dvnl_ray(k1,1,indx(n,1))=p1*SIMP(nrho,F,drho)/q
179
f(i)=wp(i,indx(n,1))*vp(i,1)* ( -2.0d0*sn(i)/(rho(i)* q**3)
180
> + 2.0d0*cs(i)/(q**2)
183
dvnl_ray(k1,2,indx(n,1))=p1*SIMP(nrho,F,drho)
186
*:::::::::::::::::::::::::::::: s-wave :::::::::::::::::::::::::::::::
189
do n=1,n_expansion(0)
191
f(i)=wp(i,indx(n,0))*vp(i,0) * ( -sn(i)/(q**2)
194
dvnl_ray(k1,1,indx(n,0)) = p0*SIMP(nrho,F,drho)
197
*:::::::::::::::::::::::::::::: local :::::::::::::::::::::::::::::::
201
f(i)=rho(i)*vp(i,locp)*(rho(i)*cs(i)-sn(i)/q)
203
dvl_ray(k1)= SIMP(nrho,f,drho)*forpi/q
204
> + zv*forpi/(q*q)*(2.0d0*cs(nrho)/q + rho(nrho)*sn(nrho))
205
*::::::::::::::::::::: semicore density :::::::::::::::::::::::::::::::
208
f(i)=rho(i)*dsqrt(rho_sc_r(i,1))*(rho(i)*cs(i)-sn(i)/q)
210
rho_sc_k_ray(k1)= SIMP(nrho,f,drho)*forpi/q
215
call Parallel_Vector_SumAll(nray,rho_sc_k_ray)
216
call Parallel_Vector_SumAll(nray,dvl_ray)
217
call Parallel_Vector_Sumall(2*(lmax+1+n_extra)*nray,dvnl_ray)
219
*::::::::::::::::::::::::::::::: G=0 ::::::::::::::::::::::::::::::::
221
rho_sc_k_ray(1) = 0.0d0
223
do n=1,n_expansion(l)
224
dvnl_ray(1,1,indx(n,l))=0.0d0
225
dvnl_ray(1,2,indx(n,l))=0.0d0