15 #include "../base/base_uses.f90"
34 TYPE(pw_r3d_rs_type),
INTENT(IN) :: rhos, norm_drhos
35 TYPE(pw_r3d_rs_type),
INTENT(INOUT) :: fxc
36 REAL(kind=
dp),
INTENT(IN) :: gx
37 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: cx
38 REAL(kind=
dp),
INTENT(IN) :: eps_rho
40 CHARACTER(len=*),
PARAMETER :: routinen =
'b97_fxc_eval'
42 INTEGER :: handle, i, io, j, k, norder
43 INTEGER,
DIMENSION(2, 3) :: bo
44 REAL(kind=
dp) :: drho, gval, rho, sval, ux
46 CALL timeset(routinen, handle)
49 bo(1:2, 1:3) = rhos%pw_grid%bounds_local(1:2, 1:3)
52 DO k = bo(1, 3), bo(2, 3)
53 DO j = bo(1, 2), bo(2, 2)
54 DO i = bo(1, 1), bo(2, 1)
56 rho = rhos%array(i, j, k)
57 drho = norm_drhos%array(i, j, k)
58 IF (rho > eps_rho)
THEN
59 sval = gx*(drho/rho**1.33333333333333_dp)**2
60 ux = sval/(1._dp + sval)
63 gval = gval + cx(io + 1)*(ux**io)
65 fxc%array(i, j, k) = fxc%array(i, j, k)*gval
87 SUBROUTINE b97_fcc_eval(rhoa, rhob, norm_drhoa, norm_drhob, fcc, gcc, cco, eps_rho)
88 TYPE(pw_r3d_rs_type),
INTENT(IN) :: rhoa, rhob, norm_drhoa, norm_drhob
89 TYPE(pw_r3d_rs_type),
INTENT(INOUT) :: fcc
90 REAL(kind=
dp),
INTENT(IN) :: gcc
91 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: cco
92 REAL(kind=
dp),
INTENT(IN) :: eps_rho
94 CHARACTER(len=*),
PARAMETER :: routinen =
'b97_fcc_eval'
96 INTEGER :: handle, i, io, j, k, norder
97 INTEGER,
DIMENSION(2, 3) :: bo
98 REAL(kind=
dp) :: dra, drb, gval, ra, rb, sa, sb, sval, ux
100 CALL timeset(routinen, handle)
103 bo(1:2, 1:3) = rhoa%pw_grid%bounds_local(1:2, 1:3)
106 DO k = bo(1, 3), bo(2, 3)
107 DO j = bo(1, 2), bo(2, 2)
108 DO i = bo(1, 1), bo(2, 1)
110 ra = rhoa%array(i, j, k)
111 rb = rhob%array(i, j, k)
112 dra = norm_drhoa%array(i, j, k)
113 drb = norm_drhob%array(i, j, k)
114 IF (ra > eps_rho .AND. rb > eps_rho)
THEN
115 sa = (dra/ra**1.33333333333333_dp)**2
116 sb = (drb/rb**1.33333333333333_dp)**2
117 sval = 0.5_dp*gcc*(sa + sb)
118 ux = sval/(1._dp + sval)
120 DO io = 0, norder - 1
121 gval = gval + cco(io + 1)*(ux**io)
123 fcc%array(i, j, k) = fcc%array(i, j, k)*gval
130 CALL timestop(handle)
Defines the basic variable types.
integer, parameter, public dp
calculates fxc in the spirit of the b97 exchange/correlation functional
subroutine, public b97_fxc_eval(rhos, norm_drhos, fxc, gx, cx, eps_rho)
...
subroutine, public b97_fcc_eval(rhoa, rhob, norm_drhoa, norm_drhob, fcc, gcc, cco, eps_rho)
...