9 subroutine xc_am05(n,rho,grho,g2rho,g3rho,ex,ec,vx,vc)
30 integer,
intent(in) :: n
31 real(8),
intent(in) :: rho(n),grho(n),g2rho(n),g3rho(n)
32 real(8),
intent(out) :: ex(n),ec(n),vx(n),vc(n)
35 real(8),
parameter :: pi=3.1415926535897932385d0
37 real(8) grho_,g2rho_,g3rho_
45 kf=(r*3.d0*pi**2)**(1.d0/3.d0)
47 v=g2rho_/(r*(2.d0*kf)**2)
48 u=g3rho_/((r**2)*(2.d0*kf)**3)
83 real(8),
intent(in) :: rho, s, u, v
84 integer,
intent(in) :: pot
85 real(8),
intent(out) :: ex, ec, vx, vc
87 real(8),
parameter :: pi=3.1415926535897932385d0
88 real(8),
parameter :: g = 0.8098d0
89 real(8),
parameter :: a = 2.804d0
90 real(8),
parameter :: c = 0.7168d0
92 real(8) s2,exlda, vxlda, eclda, vclda, X, Xs, Xss
93 real(8) F, Fs, Fss, Hx, Hxs, Hxss, Hc, Hcs, Hcss
94 real(8) zb, zbs, zbss, w
95 real(8) n0b, n0bs, n0bss
96 real(8) ln0b, ln0bs, ln0bss
97 real(8) zbb, zbbc, zbbs, zbbss
98 real(8) fxb, fxbs, fxbss
100 if((rho <= 1.d-16))
then 116 x = 1.0d0 - a*s2/(1.0d0 + a*s2)
119 zb = (3.0d0/2.0d0*w)**(2.0d0/3.0d0)
120 n0b = w/(2.0d0*pi**2*s**3)
121 ln0b = -3.0d0/(2.0d0*pi)*(3.0d0*pi**2*n0b)**(1.0d0/3.0d0)
122 zbbc = ((4.0d0/3.0d0)**(1.0d0/3.0d0)*2.0d0*pi/3.0d0)**4
123 zbb = (zbbc*zb**2 + zb**4)**(1.0d0/4.0d0)
124 fxb = -1.0d0/(ln0b*2.0d0*zbb)
125 f = (c*s2 + 1.0d0)/(c*s2/fxb + 1.0d0)
127 hx = x + (1.0d0 - x)*f
134 hc = x + g*(1.0d0 - x)
142 xs = -2.0d0*a*s/(1.0d0 + a*s2)**2
143 xss = 2.0d0*a*(3.0d0*a*s2-1.0d0)/(1.0d0+a*s2)**3
146 zbss = - zb*w*(5.0d0+2.0d0*w)/(2.0d0*s2*(1.0d0+w)**3)
147 n0bs = sqrt(zb)*(-2.0d0*zb+s*zbs)/(2.0d0*pi**2*s2**2)
148 n0bss = (16.0d0*zb**2+s**2*zbs**2+2.0d0*s*zb*(-6.0d0* &
149 zbs+s*zbss))/(4.0d0*pi**2*s**5*sqrt(zb))
150 ln0bs = -(3.0d0/pi)**(1.0d0/3.0d0)*n0bs/ &
151 (2.0d0*n0b**(2.0d0/3.0d0))
152 ln0bss = (2.0d0*n0bs**2-3.0d0*n0b*n0bss)/(2.0d0* &
153 3.0d0**(2.0d0/3.0d0)*pi**(1.0d0/3.0d0)*n0b**(5.0d0/3.0d0))
154 zbbs = zb*(zbbc+2*zb**2)*zbs/ &
155 (2.0d0*(zb**2*(zbbc+zb**2))**(3.0d0/4.0d0))
156 zbbss = zb**2*(-zbbc*(zbbc-2.0d0*zb**2)*zbs**2+ &
157 2.0d0*zb*(zbbc+zb**2)*(zbbc+2.0d0*zb**2)*zbss)/ &
158 (4.0d0*(zb**2*(zbbc+zb**2))**(7.0d0/4.0d0))
159 fxbs = (zbb*ln0bs+ln0b*zbbs)/(2.0d0*ln0b**2*zbb**2)
160 fxbss = (-2.0d0*ln0b**2*zbbs**2+zbb**2*(-2.0d0*ln0bs**2 + &
161 ln0b*ln0bss)+ln0b*zbb*(-2.0d0*ln0bs*zbbs+ln0b*zbbss))/ &
162 (2.0d0*ln0b**3*zbb**3)
163 fs = (c*s*(2.0d0*(fxb-1.0d0)*fxb + s*(1.0d0+c*s2)*fxbs))/ &
165 fss = (c*(-2.0d0*(3.0d0*c*s2-fxb)*(fxb-1.0d0)*fxb+ &
166 4.0d0*s*(-c*s2+fxb+2.0d0*c*s2*fxb)*fxbs - &
167 2.0d0*s2*(1.0d0+c*s2)*fxbs**2+s2*(1.0d0+c*s2)* &
168 (c*s2 + fxb)*fxbss))/(c*s2+fxb)**3
170 hxs = - (x - 1.0d0)*fs - (f - 1.0d0)*xs
171 hxss = - 2.0d0*fs*xs - (x - 1.0d0)*fss - (f - 1.0d0)*xss
174 vx = vxlda*(hx - s*hxs) + &
175 exlda*((4.0d0/3.0d0*s-v/s)*hxs - &
176 (u-4.0d0/3.0d0*s**3)*(hxss/s-hxs/s2))
185 vc = vclda*(hc - s*hcs) + &
186 eclda*((4.0d0/3.0d0*s - v/s)*hcs - &
187 (u - 4.0d0/3.0d0*s**3)*(hcss/s - hcs/s2))
208 real(8),
intent(in) :: n
209 real(8),
intent(out) :: ex
210 real(8),
intent(out) :: vx
212 real(8),
parameter :: pi=3.1415926535897932385d0
213 vx=-(3.d0*n/pi)**(1.d0/3.d0)
238 real(8),
intent(in) :: n
239 real(8),
intent(out) :: ec
240 real(8),
intent(out) :: vc
242 real(8),
parameter :: pi=3.1415926535897932385d0
243 real(8),
parameter :: a01 = 0.21370d0
244 real(8),
parameter :: b01 = 7.5957d0
245 real(8),
parameter :: b02 = 3.5876d0
246 real(8),
parameter :: b03 = 1.6382d0
247 real(8),
parameter :: b04 = 0.49294d0
251 real(8),
parameter :: A0 = 0.0310907d0
254 real(8) Q0, Q1, Q1p, ecrs
255 rsq = (3.0d0/(4.0d0*pi*n))**(1.0d0/6.0d0)
256 ec = -2.0d0*a0*(1.0d0 + a01*rsq**2)* &
258 (2.0d0*a0*rsq*(b01 + rsq*(b02 + rsq*(b03 + b04*rsq)))))
259 q0 = -2.0d0*a0*(1.0d0 + a01*rsq**2)
260 q1 = 2.0d0*a0*rsq*(b01 + rsq*(b02 + rsq*(b03 + b04*rsq)))
261 q1p = a0*(b01/rsq+2.0d0*b02+3.0d0*b03*rsq+4.0d0*b04*rsq**2)
262 ecrs = -2.0d0*a0*a01*log(1.0d0 + 1.0d0/q1)-q0*q1p/(q1**2+q1)
263 vc = ec - rsq**2/3.0d0*ecrs
286 real(8),
intent(in) :: z
287 real(8),
intent(out) :: val
298 if (abs(z+1.d0/e) > 1.45d0)
then 304 val=1.d0*sqrt(2.d0*e*z+2.d0)-1.d0
310 if (val /= -1.d0)
then 311 t=t/(p*(val+1.d0)-0.5d0*(val+2.d0)*t/(val+1.d0))
316 if (abs(t) < (2.48d0*1.d-14)*(1.d0+abs(val)))
return 320 write(*,
'("Error(xc_am05_labertw): iteration limit reached")')
321 write(*,
'(" Likely cause: improper numbers (INFs, NaNs) in density")')
subroutine xc_am05_ldax(n, ex, vx)
subroutine xc_am05_labertw(z, val)
subroutine xc_am05(n, rho, grho, g2rho, g3rho, ex, ec, vx, vc)
subroutine xc_am05_ldapwc(n, ec, vc)
subroutine xc_am05_point(rho, s, u, v, ex, ec, vx, vc, pot)