The Elk Code
xc_wc06.f90
Go to the documentation of this file.
1 
2 ! Copyright (C) 2006 Zhigang Wu and R. E. Cohen.
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 subroutine xc_wc06(n,rho,grho,g2rho,g3rho,ex,ec,vx,vc)
7 implicit none
8 ! arguments
9 integer, intent(in) :: n
10 real(8), intent(in) :: rho(n),grho(n),g2rho(n),g3rho(n)
11 real(8), intent(out) :: ex(n),ec(n),vx(n),vc(n)
12 ! local variables
13 integer i
14 real(8), parameter :: pi=3.1415926535897932385d0
15 real(8), parameter :: thrd=1.d0/3.d0
16 ! default PBE beta
17 real(8), parameter :: beta=0.06672455060314922d0
18 real(8) r,grho_,g2rho_,g3rho_
19 real(8) kf,s,u,v,rs,z,g
20 real(8) ks,ksg,t,uu,vv,ww
21 do i=1,n
22  r=rho(i)
23  if (r > 1.d-12) then
24  grho_=grho(i)
25  g2rho_=g2rho(i)
26  g3rho_=g3rho(i)
27  kf=(r*3.d0*pi**2)**thrd
28  s=grho_/(2.d0*kf*r)
29  u=g3rho_/((r**2)*(2.d0*kf)**3)
30  v=g2rho_/(r*(2.d0*kf)**2)
31 ! Wu-Cohen exchange
32  call x_wc06(r,s,u,v,ex(i),vx(i))
33 ! Perdew-Burke-Ernzerhof correlation
34  rs=(3.d0/(4.d0*pi*r))**thrd
35  z=0.d0
36  g=1.d0
37  ks=sqrt(4.d0*kf/pi)
38  ksg=2.d0*ks*g
39  t=grho_/(ksg*r)
40  uu=g3rho_/((r**2)*ksg**3)
41  vv=g2rho_/(r*ksg**2)
42  ww=0.d0
43  call c_pbe(beta,rs,z,t,uu,vv,ww,ec(i),vc(i),vc(i))
44  else
45  ex(i)=0.d0
46  ec(i)=0.d0
47  vx(i)=0.d0
48  vc(i)=0.d0
49  end if
50 end do
51 end subroutine
52 
elemental subroutine x_wc06(rho, s, u, v, ex, vx)
Definition: x_wc06.f90:7
subroutine xc_wc06(n, rho, grho, g2rho, g3rho, ex, ec, vx, vc)
Definition: xc_wc06.f90:7
subroutine c_pbe(beta, rs, z, t, uu, vv, ww, ec, vcup, vcdn)
Definition: c_pbe.f90:5