The Elk Code
 
Loading...
Searching...
No Matches
xc_pwca.f90
Go to the documentation of this file.
1
2! Copyright (C) 2002-2011 J. K. Dewhurst, S. Sharma and C. Ambrosch-Draxl.
3! This file is distributed under the terms of the GNU Lesser General Public
4! License. See the file COPYING for license details.
5
6!BOP
7! !ROUTINE: xc_pwca
8! !INTERFACE:
9subroutine xc_pwca(n,rhoup,rhodn,ex,ec,vxup,vxdn,vcup,vcdn)
10! !INPUT/OUTPUT PARAMETERS:
11! n : number of density points (in,integer)
12! rhoup : spin-up charge density (in,real(n))
13! rhodn : spin-down charge density (in,real(n))
14! ex : exchange energy density (out,real(n))
15! ec : correlation energy density (out,real(n))
16! vxup : spin-up exchange potential (out,real(n))
17! vxdn : spin-down exchange potential (out,real(n))
18! vcup : spin-up correlation potential (out,real(n))
19! vcdn : spin-down correlation potential (out,real(n))
20! !DESCRIPTION:
21! Spin-polarised exchange-correlation potential and energy of the Perdew-Wang
22! parameterisation of the Ceperley-Alder electron gas: {\it Phys. Rev. B}
23! {\bf 45}, 13244 (1992) and {\it Phys. Rev. Lett.} {\bf 45}, 566 (1980).
24!
25! !REVISION HISTORY:
26! Created January 2004 (JKD)
27! Rewrote, October 2011 (JKD)
28!EOP
29!BOC
30implicit none
31! arguments
32integer, intent(in) :: n
33real(8), intent(in) :: rhoup(n),rhodn(n)
34real(8), intent(out) :: ex(n),ec(n)
35real(8), intent(out) :: vxup(n),vxdn(n)
36real(8), intent(out) :: vcup(n),vcdn(n)
37! local variables
38integer i
39real(8), parameter :: pi=3.1415926535897932385d0
40real(8), parameter :: thrd=1.d0/3.d0, thrd4=4.d0/3.d0
41real(8), parameter :: d2f0=1.709921d0
42real(8), parameter :: a(3)=[ 0.0310907d0, 0.01554535d0, 0.0168869d0 ]
43real(8), parameter :: a1(3)=[ 0.21370d0, 0.20548d0, 0.11125d0 ]
44real(8), parameter :: b1(3)=[ 7.5957d0, 14.1189d0, 10.357d0 ]
45real(8), parameter :: b2(3)=[ 3.5876d0, 6.1977d0, 3.6231d0 ]
46real(8), parameter :: b3(3)=[ 1.6382d0, 3.3662d0, 0.88026d0 ]
47real(8), parameter :: b4(3)=[ 0.49294d0, 0.62517d0, 0.49671d0 ]
48real(8) p1,p2,p3,rup,rdn,r,ri,ri2
49real(8) rs,rs2,rs12,rs32,rsi,rs12i
50real(8) mz,z,z3,z4,drs,dzu,dzd
51real(8) fz,dfz,ders,dez,deu,ded
52real(8) a2,ec0,dec0,ec1,dec1,ac,dac
53real(8) t1,t2,t3,t4,t5,t6,t7,dt1,dt2
54if (n < 1) then
55 write(*,*)
56 write(*,'("Error(xc_pwca): n < 1 : ",I8)') n
57 write(*,*)
58 stop
59end if
60! prefactors
61t1=3.d0/(4.d0*pi)
62p1=t1**thrd
63p2=t1*(9.d0*pi/4.d0)**thrd
64p3=1.d0/(2.d0**thrd4-2.d0)
65do i=1,n
66 rup=rhoup(i); rdn=rhodn(i)
67! total density
68 r=rup+rdn
69 if ((rup < 0.d0).or.(rdn < 0.d0).or.(r < 1.d-20)) then
70 ex(i)=0.d0
71 ec(i)=0.d0
72 vxup(i)=0.d0
73 vxdn(i)=0.d0
74 vcup(i)=0.d0
75 vcdn(i)=0.d0
76 cycle
77 end if
78 ri=1.d0/r
79 ri2=ri**2
80 rs=p1*ri**thrd
81 rs2=rs**2
82 rs12=sqrt(rs)
83 rs32=rs12*rs
84 rsi=1.d0/rs
85 rs12i=1.d0/rs12
86 mz=rup-rdn
87 z=mz/r
88 z3=z**3
89 z4=z3*z
90! drs/drup = drs/drdn = drs/drho
91 drs=-thrd*rs*ri
92! dz/drup, dz/drdn
93 t1=mz*ri2
94 dzu=ri-t1
95 dzd=-ri-t1
96!------------------!
97! exchange !
98!------------------!
99 t1=-p2*rsi/2.d0
100 t2=1.d0+z
101 t3=1.d0-z
102 t4=t2**thrd4
103 t5=t3**thrd4
104 t6=t4+t5
105! exchange energy density
106 ex(i)=t1*t6
107! dex/drs
108 ders=-ex(i)*rsi
109! f(z)
110 fz=p3*(t6-2.d0)
111! dex/dz
112 t4=t4/t2
113 t5=t5/t3
114 t6=t4-t5
115 t7=thrd4*t6
116 dez=t1*t7
117! df/dz
118 dfz=p3*t7
119! dex/drup, dex/drdn
120 t1=ders*drs
121 deu=t1+dez*dzu
122 ded=t1+dez*dzd
123! exchange potential
124 vxup(i)=ex(i)+r*deu
125 vxdn(i)=ex(i)+r*ded
126!---------------------!
127! correlation !
128!---------------------!
129! ec(rs,0)
130 a2=2.d0*a(1)
131 t1=a2*(b1(1)*rs12+b2(1)*rs+b3(1)*rs32+b4(1)*rs2)
132 dt1=a2*(0.5d0*b1(1)*rs12i+b2(1)+1.5d0*b3(1)*rs12+2.d0*b4(1)*rs)
133 t3=1.d0/t1
134 t2=1.d0+t3
135 dt2=-dt1*t3**2
136 t3=1.d0/t2
137 t4=1.d0+a1(1)*rs
138 t5=log(t2)
139 ec0=-a2*t4*t5
140 dec0=-a2*(a1(1)*t5+t4*t3*dt2)
141! ec(rs,1)
142 a2=2.d0*a(2)
143 t1=a2*(b1(2)*rs12+b2(2)*rs+b3(2)*rs32+b4(2)*rs2)
144 dt1=a2*(0.5d0*b1(2)*rs12i+b2(2)+1.5d0*b3(2)*rs12+2.d0*b4(2)*rs)
145 t3=1.d0/t1
146 t2=1.d0+t3
147 dt2=-dt1*t3**2
148 t3=1.d0/t2
149 t4=1.d0+a1(2)*rs
150 t5=log(t2)
151 ec1=-a2*t4*t5
152 dec1=-a2*(a1(2)*t5+t4*t3*dt2)
153! ac(rs)
154 a2=2.d0*a(3)
155 t1=a2*(b1(3)*rs12+b2(3)*rs+b3(3)*rs32+b4(3)*rs2)
156 dt1=a2*(0.5d0*b1(3)*rs12i+b2(3)+1.5d0*b3(3)*rs12+2.d0*b4(3)*rs)
157 t3=1.d0/t1
158 t2=1.d0+t3
159 dt2=-dt1*t3**2
160 t3=1.d0/t2
161 t4=1.d0+a1(3)*rs
162 t5=log(t2)
163 ac=a2*t4*t5
164 dac=a2*(a1(3)*t5+t4*t3*dt2)
165! correlation energy density
166 t1=1.d0-z4
167 t2=(fz/d2f0)*t1
168 t3=ec1-ec0
169 t4=fz*z4
170 ec(i)=ec0+ac*t2+t3*t4
171! dec/drs
172 t5=dec1-dec0
173 ders=dec0+dac*t2+t5*t4
174! dec/dz
175 t6=4.d0*fz*z3
176 dez=(ac/d2f0)*(dfz*t1-t6)+t3*(dfz*z4+t6)
177! dec/drup, dec/drdn
178 t1=ders*drs
179 deu=t1+dez*dzu
180 ded=t1+dez*dzd
181! correlation potential
182 vcup(i)=ec(i)+r*deu
183 vcdn(i)=ec(i)+r*ded
184end do
185end subroutine
186!EOC
187
subroutine xc_pwca(n, rhoup, rhodn, ex, ec, vxup, vxdn, vcup, vcdn)
Definition xc_pwca.f90:10