9subroutine xc_vbh(n,rhoup,rhodn,ex,ec,vxup,vxdn,vcup,vcdn)
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)
39real(8),
parameter :: pi=3.1415926535897932385d0
40real(8),
parameter :: cp=0.0504d0
41real(8),
parameter :: cf=0.0254d0
42real(8),
parameter :: rp=30.d0
43real(8),
parameter :: rf=75.d0
44real(8) alpha0,eps0_x,a,gamma
45real(8) rup,rdn,r,rs,x,zf,zp
46real(8) fx,fp,ff,epsp_x,mup_x
47real(8) epsp_c,epsf_c,mup_c,muf_c,vc,tau_c
48alpha0=(4.d0/(9.d0*pi))**(1.d0/3.d0)
49eps0_x=(3.d0/2.d0)/(pi*alpha0)
51gamma=(4.d0/3.d0)*a/(1.d0-a)
53 rup=rhoup(i); rdn=rhodn(i)
56 if ((rup >= 0.d0).and.(rdn >= 0.d0).and.(r > 1.d-12))
then
58 rs=(3.d0/(4.d0*pi*r))**(1.d0/3.d0)
60 fx=(1.d0/(1.d0-a))*(x**(4.d0/3.d0)+(1.d0-x)**(4.d0/3.d0)-a)
62 mup_x=(4.d0/3.d0)*epsp_x
64 ex(i)=epsp_x+(1.d0/gamma)*mup_x*fx
66 fp=(1.d0+zp**3)*log(1.d0+1.d0/zp)+0.5d0*zp-zp**2-1.d0/3.d0
68 ff=(1.d0+zf**3)*log(1.d0+1.d0/zf)+0.5d0*zf-zf**2-1.d0/3.d0
71 vc=gamma*(epsf_c-epsp_c)
73 ec(i)=epsp_c+(1.d0/gamma)*vc*fx
74 mup_c=-cp*log(1.d0+rp/rs)
75 muf_c=-cf*log(1.d0+rf/rs)
76 tau_c=muf_c-mup_c-(4.d0/3.d0)*(epsf_c-epsp_c)
78 vxup(i)=mup_x*(2.d0*x)**(1.d0/3.d0)
79 vxdn(i)=mup_x*(2.d0*(1.d0-x))**(1.d0/3.d0)
81 vcup(i)=vc*(2.d0*x)**(1.d0/3.d0)+mup_c-vc+tau_c*fx
82 vcdn(i)=vc*(2.d0*(1.d0-x))**(1.d0/3.d0)+mup_c-vc+tau_c*fx
subroutine xc_vbh(n, rhoup, rhodn, ex, ec, vxup, vxdn, vcup, vcdn)