diff options
Diffstat (limited to 'src/labat/ggaec.f')
| -rw-r--r-- | src/labat/ggaec.f | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/labat/ggaec.f b/src/labat/ggaec.f new file mode 100644 index 0000000..3177859 --- /dev/null +++ b/src/labat/ggaec.f | |||
| @@ -0,0 +1,43 @@ | |||
| 1 | subroutine ggaec(rs,zet,t,ec,h) | ||
| 2 | c called by subroutine ggaexc | ||
| 3 | c gga91 correlation | ||
| 4 | c input rs : seitz radius | ||
| 5 | c input zet : relative spin polarization | ||
| 6 | c input t : abs(grad d)/(d*2.*ks*g) | ||
| 7 | c input : correlation energy per electron (ec) | ||
| 8 | c output h : nonlocal part of correlation energy per electron | ||
| 9 | implicit double precision (a-h,o-z) | ||
| 10 | data xnu,cc0,cx,alf/15.75592d0,0.004235d0,-0.001667212d0,0.09d0/ | ||
| 11 | data c1,c2,c3,c4/0.002568d0,0.023266d0,7.389d-6,8.723d0/ | ||
| 12 | data c5,c6,a4/0.472d0,7.389d-2,100.d0/ | ||
| 13 | data thrd2/0.666666666667d0/ | ||
| 14 | pi = 4.d0*datan(1.d0) | ||
| 15 | fk = 1.91915829d0/rs | ||
| 16 | sk = dsqrt(4.d0*fk/pi) | ||
| 17 | g = ((1.d0+zet)**thrd2+(1.d0-zet)**thrd2)/2.d0 | ||
| 18 | bet = xnu*cc0 | ||
| 19 | delt = 2.d0*alf/bet | ||
| 20 | g3 = g**3 | ||
| 21 | g4 = g3*g | ||
| 22 | pon = -delt*ec/(g3*bet) | ||
| 23 | b = delt/(dexp(pon)-1.d0) | ||
| 24 | b2 = b*b | ||
| 25 | t2 = t*t | ||
| 26 | t4 = t2*t2 | ||
| 27 | rs2 = rs*rs | ||
| 28 | rs3 = rs2*rs | ||
| 29 | q4 = 1.d0+b*t2 | ||
| 30 | q5 = 1.d0+b*t2+b2*t4 | ||
| 31 | q6 = c1+c2*rs+c3*rs2 | ||
| 32 | q7 = 1.d0+c4*rs+c5*rs2+c6*rs3 | ||
| 33 | cc = -cx + q6/q7 | ||
| 34 | r0 = (sk/fk)**2 | ||
| 35 | r1 = a4*r0*g4 | ||
| 36 | coeff = cc-cc0-3.d0*cx/7.d0 | ||
| 37 | r2 = xnu*coeff*g3 | ||
| 38 | r3 = dexp(-r1*t2) | ||
| 39 | h0 = g3*(bet/delt)*dlog(1.d0+delt*q4*t2/q5) | ||
| 40 | h1 = r3*r2*t2 | ||
| 41 | h = h0 + h1 | ||
| 42 | return | ||
| 43 | end | ||
