Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/fem/src/ExchangeCorrelations.F90
3203 views
1
!/*****************************************************************************/
2
! *
3
! * Elmer, A Finite Element Software for Multiphysical Problems
4
! *
5
! * Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland
6
! *
7
! * This library is free software; you can redistribute it and/or
8
! * modify it under the terms of the GNU Lesser General Public
9
! * License as published by the Free Software Foundation; either
10
! * version 2.1 of the License, or (at your option) any later version.
11
! *
12
! * This library is distributed in the hope that it will be useful,
13
! * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
! * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
! * Lesser General Public License for more details.
16
! *
17
! * You should have received a copy of the GNU Lesser General Public
18
! * License along with this library (in file ../LGPL-2.1); if not, write
19
! * to the Free Software Foundation, Inc., 51 Franklin Street,
20
! * Fifth Floor, Boston, MA 02110-1301 USA
21
! *
22
! *****************************************************************************/
23
24
25
!> \ingroup ElmerLib
26
!> \{
27
!-----------------------------------------------------------------------------------------------
28
!> This module contains different parametrizations for the exchange-correlation energy density
29
!> (function exc(r,s,ixc) and the function uxc(r,s,ispin,ixc) calculating the corresponding
30
!> exchange-correlation potential. Here r is the electron density, s is spin density and ixc is
31
!> one of the integer parameters.
32
!-----------------------------------------------------------------------------------------------
33
34
MODULE ExchangeCorrelations
35
36
INTEGER, PARAMETER :: perdew_zunger=0, von_barth_hedin=1, gunnarsson_lundqvist=2, perdew_wang=3
37
38
CONTAINS
39
!........................................u x c.........................
40
FUNCTION uxc (r, s, ispin, ixc)
41
IMPLICIT doubleprecision (a - h, o - z)
42
!* implicit real*8 (a-h,o-z)
43
!* external excgun,uxcgun,excpw,uxcpw
44
! ceperley alder perdew zunger (ixc=0)
45
! or von barth hedin (ixc=1)
46
! or gunnarsson lundqvist (ixc=2)
47
! or ceperley alder perdew wang (ixc=3)
48
DATA gp, bp1, bp2, gf, bf1, bf2 / - .1423d0, 1.0529d0, .3334d0, &
49
- .0843d0, 1.3981d0, .2611d0 /
50
DATA ap, bp, cp, dp, af, bf, cf, df / .0311d0, - .048d0, .002d0, &
51
- .0116d0, .01555d0, - .0269d0, .0007d0, - .0048d0 /
52
!
53
IF (r.lt.1.d-35) goto 100
54
IF (ixc.eq.3) then
55
uxc = uxcpw (r, s, ispin)
56
RETURN
57
ENDIF
58
IF (ixc.eq.2) then
59
uxc = uxcgun (r)
60
RETURN
61
ENDIF
62
IF ( (ixc.lt.0) .or. (ixc.gt.3) ) then
63
WRITE (6, * ) 'Error in exc: ixc = ', ixc
64
STOP 1
65
RETURN
66
ENDIF
67
!
68
! ceperley alder perdew zunger
69
!
70
pi = 4.d0 * datan (1.d0)
71
sinv = (4.d0 * pi * r / 3.d0) ** (1.d0 / 3.d0)
72
rs = 1.d0 / sinv
73
IF (ixc.eq.1) goto 200
74
IF (rs.lt.1.d0) goto 10
75
srs = sqrt (rs)
76
excp = gp / (1.d0 + bp1 * srs + bp2 * rs)
77
excf = gf / (1.d0 + bf1 * srs + bf2 * rs)
78
uxcp = excp * (1.d0 + 7.d0 / 6.d0 * bp1 * srs + 4.d0 / 3.d0 * bp2 &
79
* rs) / (1.d0 + bp1 * srs + bp2 * rs)
80
uxcf = excf * (1.d0 + 7.d0 / 6.d0 * bf1 * srs + 4.d0 / 3.d0 * bf2 &
81
* rs) / (1.d0 + bf1 * srs + bf2 * rs)
82
GOTO 20
83
10 aa = log (rs)
84
excp = ap * aa + bp + cp * rs * aa + dp * rs
85
excf = af * aa + bf + cf * rs * aa + df * rs
86
uxcp = ap * aa + (bp - ap / 3.d0) + 2.d0 / 3.d0 * cp * rs * aa + &
87
(2.d0 * dp - cp) * rs / 3.d0
88
uxcf = af * aa + (bf - af / 3.d0) + 2.d0 / 3.d0 * cf * rs * aa + &
89
(2.d0 * df - cf) * rs / 3.d0
90
20 f = ( (1.d0 + s) ** (4.d0 / 3.d0) + (1.d0 - s) ** (4.d0 / 3.d0) &
91
- 2.d0) / (2.d0** (4.d0 / 3.d0) - 2.d0)
92
ddf = 4.d0 / 3.d0 * ( (1.d0 + s) ** (1.d0 / 3.d0) - (1.d0 - s) ** &
93
(1.d0 / 3.d0) ) / (2.d0** (4.d0 / 3.d0) - 2.d0)
94
uxc = uxcp + f * (uxcf - uxcp) + (excf - excp) * (3.d0 - 2.d0 * &
95
ispin - s) * ddf - .6108871d0 / rs * (1.d0 + (3.d0 - 2.d0 * ispin)&
96
* s) ** (1.d0 / 3.d0)
97
RETURN
98
100 uxc = 0.d0
99
RETURN
100
!
101
! von barth hedin
102
!
103
200 x = s / 2.d0 + 0.5d0
104
! d43=4.d0/3.d0
105
xx = 0.5d0 - s / 2.d0
106
rsf = rs / 75.d0
107
rsf2 = rsf * rsf
108
rsf3 = rsf2 * rsf
109
rsp = rs / 30.d0
110
rsp2 = rsp * rsp
111
rsp3 = rsp2 * rsp
112
fcf = (1.d0 + rsf3) * log (1.d0 + 1.d0 / rsf) + 0.5d0 * rsf - &
113
rsf2 - 1.d0 / 3.d0
114
fcp = (1.d0 + rsp3) * log (1.d0 + 1.d0 / rsp) + 0.5d0 * rsp - &
115
rsp2 - 1.d0 / 3.d0
116
epscp = - .0504d0 * fcp
117
epscf = - .0254d0 * fcf
118
! epsxp=-.91633059d0/rs
119
cny = 5.1297628d0 * (epscf - epscp)
120
! aa=.5d0**(1.d0/3.d0)
121
IF (x.lt..000001d0) x = .000001d0
122
IF (xx.lt..000001d0) xx = .000001d0
123
IF (x.gt..999999d0) x = .999999d0
124
IF (xx.gt..999999d0) xx = .999999d0
125
ars = - 1.22177412d0 / rs + cny
126
brs = - 0.0504d0 * log (1.d0 + 30.d0 / rs) - cny
127
trx1 = (2.d0 * x) ** (1.d0 / 3.d0)
128
trx2 = (2.d0 * xx) ** (1.d0 / 3.d0)
129
IF (ispin.eq.1) vxc = ars * trx1 + brs
130
IF (ispin.eq.2) vxc = ars * trx2 + brs
131
uxc = vxc / 2.d0
132
RETURN
133
END FUNCTION uxc
134
!
135
! EXCHANGE AND CORRELATION BY GUNNARSSON-LUNDQVIST
136
FUNCTION uxcgun (x)
137
IMPLICIT none
138
REAL(8) uxcgun, uxctim, frs, x, pi
139
FRS (X) = (3.d0 / (4.d0 * PI * X) ) ** (1.d0 / 3.d0)
140
UXCtim (X) = - 0.61088d0 / FRS (X) * (1.d0 + 0.0545d0 * FRS (X) &
141
* dLOG (1.d0 + 11.4d0 / FRS (X) ) )
142
!
143
pi = 4.d0 * datan (1.d0)
144
uxcgun = uxctim (x)
145
!
146
RETURN
147
END FUNCTION uxcgun
148
149
150
!
151
! Perdew & Wang correlation potential (Energies are in hartree)
152
! exchange potential is added to the correlation potential at the
153
! end of the program unit
154
!
155
! J. P. Perdew and Y. Wang, Phys. Rev. B 45,13244 (1992).
156
!
157
FUNCTION uxcpw (n, s, ispin)
158
!
159
! n : density (a.u.)
160
! s : relative spin polarization (n_up - n_down)/(n_up + n_down)
161
!
162
Implicit None
163
Double Precision n, s, uxcpw
164
Integer ispin
165
! Double Precision excpw
166
! External excpw
167
Double Precision pi, rs, help
168
Double Precision exc0, exc1, alpha, e0Q0, e0Q1, e0Q1p, e1Q0, e1Q1, &
169
e1Q1p, aQ0, aQ1, aQ1p, dexc0, dexc1, dalpha, dexcrs, dexcs, exrsp,&
170
exrsf, ux0, ux1, uexcha
171
!
172
! Parameters for epsilon_c (rs,0)
173
Double Precision e0p, e0A, e0a1, e0b1, e0b2, e0b3, e0b4
174
Data e0p, e0A, e0a1, e0b1, e0b2, e0b3, e0b4 / 1.d0, 0.031091d0, &
175
0.21370d0, 7.5957d0, 3.5876d0, 1.6382d0, 0.49294d0 /
176
!
177
! Parameters for epcilon_c (rs,1)
178
Double Precision e1p, e1A, e1a1, e1b1, e1b2, e1b3, e1b4
179
Data e1p, e1A, e1a1, e1b1, e1b2, e1b3, e1b4 / 1.d0, 0.015545d0, &
180
0.20548d0, 14.1189d0, 6.1977d0, 3.3662d0, 0.62517d0 /
181
!
182
! Parameters for -alpha_c (rs)
183
Double Precision ap, aA, aa1, ab1, ab2, ab3, ab4
184
Data ap, aA, aa1, ab1, ab2, ab3, ab4 / 1.d0, 0.016887d0, 0.11125d0,&
185
10.357d0, 3.6231d0, 0.88026d0, 0.49671d0 /
186
!
187
!
188
! fpp0 : f''(0)
189
Double Precision fpp0
190
Parameter (fpp0 = 1.709921d0)
191
!
192
Double Precision f, fprime
193
! Statement function for coefficient f(s) (Eq. (9))
194
f (s) = ( (1.d0 + s) ** (4.d0 / 3.d0) + (1.d0 - s) ** (4.d0 / &
195
3.d0) - 2.d0) / (2.d0** (4.d0 / 3.d0) - 2)
196
!
197
! Statement function for coefficient f'(s) (Eq. (A4))
198
fprime (s) = (4.d0 / 3.d0) * ( (1.d0 + s) ** (1.d0 / 3.d0) &
199
- (1.d0 - s) ** (1.d0 / 3.d0) ) / (2.d0** (4.d0 / 3.d0) - 2.d0)
200
!
201
!
202
pi = 4.d0 * datan (1.d0)
203
help = - 3.d0 / (8 * pi) * (9.d0 * pi / 4.d0) ** (1.d0 / 3.d0)
204
rs = 1.d0 / ( (4.d0 * pi * n / 3.d0) ) ** (1.d0 / 3.d0)
205
!
206
! exchange energy for rs
207
! exrsp:paramagnetic, exrsf:ferromagnetic
208
exrsp = - 3.d0 / (4 * pi * rs) * (9.d0 * pi / 4.d0) ** (1.d0 / &
209
3.d0)
210
exrsf = - 0.5772521d0 / rs
211
!
212
ux0 = (4.d0 / 3.d0) * exrsp
213
ux1 = (4.d0 / 3.d0) * exrsf
214
!
215
! correlation energy epsilon_c (rs,0)
216
exc0 = - 2.d0 * e0A * (1.d0 + e0a1 * rs) * dlog (1.d0 + 1.d0 / &
217
(2.d0 * e0A * (e0b1 * sqrt (rs) + e0b2 * rs + e0b3 * rs * sqrt ( &
218
rs) + e0b4 * rs** (e0p + 1.d0) ) ) )
219
!
220
! correlation energy epsilon_c (rs,1)
221
exc1 = - 2.d0 * e1A * (1.d0 + e1a1 * rs) * dlog (1.d0 + 1.d0 / &
222
(2.d0 * e1A * (e1b1 * sqrt (rs) + e1b2 * rs + e1b3 * rs * sqrt ( &
223
rs) + e1b4 * rs** (e1p + 1.d0) ) ) )
224
!
225
! coefficient alpha_c (rs)
226
alpha = 2.d0 * aA * (1.d0 + aa1 * rs) * dlog (1.d0 + 1.d0 / &
227
(2.d0 * aA * (ab1 * sqrt (rs) + ab2 * rs + ab3 * rs * sqrt (rs) &
228
+ ab4 * rs** (ap + 1.d0) ) ) )
229
!
230
! Eq. (A6)
231
e0Q0 = - 2.d0 * e0A * (1.d0 + e0a1 * rs)
232
e1Q0 = - 2.d0 * e1A * (1.d0 + e1a1 * rs)
233
aQ0 = - 2.d0 * aA * (1.d0 + aa1 * rs)
234
! Eq. (A7)
235
e0Q1 = 2.d0 * e0A * (e0b1 * sqrt (rs) + e0b2 * rs + e0b3 * rs** ( &
236
3.d0 / 2.d0) + e0b4 * rs** (e0p + 1.d0) )
237
e1Q1 = 2.d0 * e1A * (e1b1 * sqrt (rs) + e1b2 * rs + e1b3 * rs** ( &
238
3.d0 / 2.d0) + e1b4 * rs** (e1p + 1.d0) )
239
aQ1 = 2.d0 * aA * (ab1 * sqrt (rs) + ab2 * rs + ab3 * rs** (3.d0 /&
240
2.d0) + ab4 * rs** (ap + 1.d0) )
241
! Eq. (A8)
242
e0Q1p = e0A * (e0b1 * rs** ( - 1.d0 / 2.d0) + 2.d0 * e0b2 + 3.d0 *&
243
e0b3 * sqrt (rs) + 2.d0 * (e0p + 1.d0) * e0b4 * rs**e0p)
244
e1Q1p = e1A * (e1b1 * rs** ( - 1.d0 / 2.d0) + 2.d0 * e1b2 + 3.d0 *&
245
e1b3 * sqrt (rs) + 2.d0 * (e1p + 1.d0) * e1b4 * rs**e1p)
246
aQ1p = aA * (ab1 * rs** ( - 1.d0 / 2.d0) + 2.d0 * ab2 + 3.d0 * &
247
ab3 * sqrt (rs) + 2.d0 * (ap + 1.d0) * ab4 * rs**ap)
248
!
249
! d e_c(rs,0) / d rs Eq. (A5)
250
dexc0 = - 2.d0 * e0A * e0a1 * dlog (1.d0 + 1.d0 / e0Q1) - (e0Q0 * &
251
e0Q1p) / (e0Q1**2 + e0Q1)
252
!
253
! d e_c(rs,1) / d rs Eq. (A5)
254
dexc1 = - 2.d0 * e1A * e1a1 * dlog (1.d0 + 1.d0 / e1Q1) - (e1Q0 * &
255
e1Q1p) / (e1Q1**2 + e1Q1)
256
!
257
! d alpha_c(rs) / d rs Eq. (A5)
258
dalpha = 2.d0 * aA * aa1 * dlog (1.d0 + 1.d0 / aQ1) + (aQ0 * aQ1p)&
259
/ (aQ1**2 + aQ1)
260
!
261
! d e_c(rs,s) / d rs Eq. (A2)
262
dexcrs = dexc0 * (1.d0 - f (s) * s**4) + dexc1 * f (s) * s**4 + &
263
dalpha * (1.d0 - s**4) * f (s) / fpp0
264
!
265
! d e_c(rs,s) / d s Eq. (A3)
266
dexcs = 4.d0 * s**3 * f (s) * (exc1 - exc0 - alpha / fpp0) &
267
+ fprime (s) * (s**4 * exc1 - s**4 * exc0 + (1.d0 - s**4) * alpha &
268
/ fpp0)
269
!
270
! The correlation potential Eq. (A1) (+ e_x(rs,s) part of the
271
! exchange potential)
272
! uxcpw = excpw(n,s) - (rs/3.d0)*dexcrs -
273
! $ ( s - dble(sign(1,ispin)) )*dexcs
274
! next ok for ispin = 1 or 2
275
uxcpw = excpw (n, s) - (rs / 3.d0) * dexcrs - dexcs * (dble (sign &
276
(1, (2 * ispin - 3) ) ) + s)
277
! next ok for ispin = +1 or -1
278
! uxcpw = excpw(n,s) - (rs/3.d0)*dexcrs
279
! $ + dexcs*((sign(1,ispin)) - s )
280
!
281
! The exchange potential
282
! next ok for ispin = 1 or 2
283
uexcha = ux0 + f (s) * (ux1 - ux0) - (exrsf - exrsp) * (dble ( &
284
sign (1, (2 * ispin - 3) ) ) + s) * fprime (s) - f (s) * (exrsf - &
285
exrsp) - exrsp
286
! next ok for ispin = +1 or -1
287
! uexcha = ux0 + f(s)*(ux1-ux0) + (exrsf-exrsp)*
288
! $ ( dble(sign(1,ispin)) - s )*fprime(s)
289
! $ - f(s)*(exrsf-exrsp) - exrsp
290
!
291
! Total exchange-correlation potential
292
uxcpw = uxcpw + uexcha
293
!
294
!
295
Return
296
END FUNCTION uxcpw
297
298
299
300
301
! Next come the exchange-correlation energy densities:
302
!
303
FUNCTION exc (r, s, ixc)
304
IMPLICIT REAL (8)(a - h, o - z)
305
! EXTERNAL excgun, uxcgun, excpw, uxcpw
306
! ceperley alder perdew zunger (ixc=0)
307
! or von barth hedin (ixc=1)
308
! or gunnarsson lundqvist (ixc=2)
309
! or ceperley alder perdew wang (ixc=3)
310
DATA gp, bp1, bp2, gf, bf1, bf2 / - .1423d0, 1.0529d0, .3334d0, &
311
- .0843d0, 1.3981d0, .2611d0 /
312
DATA ap, bp, cp, dp, af, bf, cf, df / .0311d0, - .048d0, .002d0, &
313
- .0116d0, .01555d0, - .0269d0, .0007d0, - .0048d0 /
314
!
315
IF (r.lt.1.d-25) GOTO 100
316
IF (s.gt.0.99999999d0) s = 0.99999999d0
317
IF (s.lt. - 0.99999999d0) s = - 0.99999999d0
318
!
319
IF (ixc.eq.3) THEN
320
exc = excpw (r, s)
321
RETURN
322
ENDIF
323
IF (ixc.eq.2) THEN
324
exc = excgun (r)
325
RETURN
326
ENDIF
327
IF ( (ixc.lt.0) .or. (ixc.gt.3) ) THEN
328
WRITE (6, * ) 'Error in exc: ixc = ', ixc
329
STOP 1
330
RETURN
331
ENDIF
332
!
333
IF (r.lt.1.d-25) GOTO 100
334
pi = 4.d0 * datan (1.d0)
335
! if(s.gt.0.99999999d0)s=0.99999999d0
336
! if(s.lt.-0.99999999d0)s=-0.99999999d0
337
sinv = (4.d0 * pi * r / 3.d0) ** (1.d0 / 3.d0)
338
rs = 1.d0 / sinv
339
IF (ixc.eq.1) GOTO 200
340
!
341
! ceperley alder perdew zunger
342
!
343
IF (rs.lt.1.d0) GOTO 10
344
srs = SQRT (rs)
345
excp = gp / (1.d0 + bp1 * srs + bp2 * rs)
346
excf = gf / (1.d0 + bf1 * srs + bf2 * rs)
347
GOTO 20
348
10 aa = LOG (rs)
349
excp = ap * aa + bp + cp * rs * aa + dp * rs
350
excf = af * aa + bf + cf * rs * aa + df * rs
351
20 f = ( (1.d0 + s) ** (4.d0 / 3.d0) + (1.d0 - s) ** (4.d0 / 3.d0) &
352
- 2.d0) / (2.d0** (4.d0 / 3.d0) - 2.d0)
353
excf = excf - .5772521d0 / rs
354
excp = excp - .4581653d0 / rs
355
exc = excp + f * (excf - excp)
356
RETURN
357
100 exc = 0.d0
358
RETURN
359
!
360
! von barth hedin
361
!
362
200 x = s / 2.d0 + 0.5d0
363
d43 = 4.d0 / 3.d0
364
rsf = rs / 75.d0
365
rsf2 = rsf * rsf
366
rsf3 = rsf2 * rsf
367
rsp = rs / 30.d0
368
rsp2 = rsp * rsp
369
rsp3 = rsp2 * rsp
370
fcf = (1.d0 + rsf3) * LOG (1.d0 + 1.d0 / rsf) + 0.5d0 * rsf - &
371
rsf2 - 1.d0 / 3.d0
372
fcp = (1.d0 + rsp3) * LOG (1.d0 + 1.d0 / rsp) + 0.5d0 * rsp - &
373
rsp2 - 1.d0 / 3.d0
374
epscp = - .0504d0 * fcp
375
epscf = - .0254d0 * fcf
376
epsxp = - .91633059d0 / rs
377
cny = 5.1297628d0 * (epscf - epscp)
378
aa = .5d0** (1.d0 / 3.d0)
379
IF (x.lt..000001d0) x = .000001d0
380
IF (x.gt..999999d0) x = .999999d0
381
fx = (x**d43 + (1.d0 - x) **d43 - aa) / (1.d0 - aa)
382
exc = epsxp + epscp + fx * (cny + 4.d0 / 3.d0 * epsxp) / &
383
5.1297628d0
384
exc = exc / 2.d0
385
RETURN
386
END FUNCTION exc
387
388
!
389
! Perdew & Wang (1992) correlation energy (Energies are in hartree)
390
! Exchange energy is added
391
! J. P. Perdew and Y. Wang, Phys. Rev. B 45,13244 (1992).
392
!
393
FUNCTION excpw (n, s)
394
!
395
! n : density (a.u.)
396
! s : relative spin polarization (n_up - n_down)/(n_up + n_down)
397
!
398
IMPLICIT NONE
399
DOUBLE PRECISION n, s, excpw
400
DOUBLE PRECISION exrsp, exrsf, rs, pi, exc0, exc1, alpha
401
!
402
! Parameters for epsilon_c (rs,0)
403
DOUBLE PRECISION e0p, e0A, e0a1, e0b1, e0b2, e0b3, e0b4
404
DATA e0p, e0A, e0a1, e0b1, e0b2, e0b3, e0b4 / 1.d0, 0.031091d0, &
405
0.21370d0, 7.5957d0, 3.5876d0, 1.6382d0, 0.49294d0 /
406
!
407
! Parameters for epcilon_c (rs,1)
408
DOUBLE PRECISION e1p, e1A, e1a1, e1b1, e1b2, e1b3, e1b4
409
DATA e1p, e1A, e1a1, e1b1, e1b2, e1b3, e1b4 / 1.d0, 0.015545d0, &
410
0.20548d0, 14.1189d0, 6.1977d0, 3.3662d0, 0.62517d0 /
411
!
412
! Parameters for -alpha_c (rs)
413
DOUBLE PRECISION ap, aA, aa1, ab1, ab2, ab3, ab4
414
DATA ap, aA, aa1, ab1, ab2, ab3, ab4 / 1.d0, 0.016887d0, 0.11125d0,&
415
10.357d0, 3.6231d0, 0.88026d0, 0.49671d0 /
416
!
417
! fpp0 : f''(0)
418
DOUBLE PRECISION fpp0
419
PARAMETER (fpp0 = 1.709921d0)
420
!
421
! Statement function for coefficient f(s) (Eq. (9))
422
DOUBLE PRECISION f
423
f (s) = ( (1.d0 + s) ** (4.d0 / 3.d0) + (1.d0 - s) ** (4.d0 / &
424
3.d0) - 2.d0) / (2.d0** (4.d0 / 3.d0) - 2)
425
!
426
!
427
pi = 4.d0 * datan (1.d0)
428
rs = 1.d0 / ( (4.d0 * pi * n / 3.d0) ) ** (1.d0 / 3.d0)
429
! exchange energy for rs
430
! exrsp:paramagnetic, exrsf:ferromagnetic
431
exrsp = - 3.d0 / (4 * pi * rs) * (9.d0 * pi / 4.d0) ** (1.d0 / &
432
3.d0)
433
exrsf = - 0.5772521d0 / rs
434
!
435
! correlation energy epsilon_c (rs,0)
436
exc0 = - 2.d0 * e0A * (1.d0 + e0a1 * rs) * dlog (1.d0 + 1.d0 / &
437
(2.d0 * e0A * (e0b1 * SQRT (rs) + e0b2 * rs + e0b3 * rs** (3.d0 / &
438
2.d0) + e0b4 * rs** (e0p + 1.d0) ) ) )
439
!
440
! correlation energy epsilon_c (rs,1)
441
exc1 = - 2.d0 * e1A * (1.d0 + e1a1 * rs) * dlog (1.d0 + 1.d0 / &
442
(2.d0 * e1A * (e1b1 * SQRT (rs) + e1b2 * rs + e1b3 * rs** (3.d0 / &
443
2.d0) + e1b4 * rs** (e1p + 1.d0) ) ) )
444
!
445
! coefficient alpha_c (rs)
446
alpha = 2.d0 * aA * (1.d0 + aa1 * rs) * dlog (1.d0 + 1.d0 / &
447
(2.d0 * aA * (ab1 * SQRT (rs) + ab2 * rs + ab3 * rs** (3.d0 / &
448
2.d0) + ab4 * rs** (ap + 1.d0) ) ) )
449
!
450
! the spin-interpolation formula for correlation
451
excpw = exc0 + alpha * (1.d0 - s**4) * f (s) / fpp0 + (exc1 - &
452
exc0) * f (s) * s**4
453
!
454
! the exchange-correlation energy per particle
455
excpw = excpw + exrsp + f (s) * (exrsf - exrsp)
456
!
457
RETURN
458
END FUNCTION excpw
459
460
461
462
! .................................................e x c................
463
! EXCHANGE AND CORRELATION BY GUNNARSSON-LUNDQVIST
464
FUNCTION excgun (x)
465
IMPLICIT NONE
466
REAL(8) excgun, exctim, frs, x, pi
467
FRS (X) = (3.d0 / (4.d0 * PI * X) ) ** (1.d0 / 3.d0)
468
EXCtim (X) = ( - 0.458d0 / FRS (X) - 0.0333d0 * ( (1. + (FRS (X) &
469
/ 11.4d0) **3) * dLOG (1.d0 + 11.4d0 / FRS (X) ) + FRS (X) &
470
/ 22.8d0 - (FRS (X) / 11.4d0) **2 - 1.d0 / 3.d0) )
471
!
472
pi = 4.d0 * datan (1.d0)
473
excgun = exctim (x)
474
!
475
RETURN
476
END FUNCTION excgun
477
478
END MODULE ExchangeCorrelations
479
480
!> \}
481
482