diff options
Diffstat (limited to 'src/labat/exchpt.f')
| -rw-r--r-- | src/labat/exchpt.f | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/labat/exchpt.f b/src/labat/exchpt.f new file mode 100644 index 0000000..b44f49e --- /dev/null +++ b/src/labat/exchpt.f | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | subroutine exchpt(d,s,u,v,vx) | ||
| 2 | c gga91 exchange potential for a spin-unpolarized electronic system | ||
| 3 | c input d : density | ||
| 4 | c input s : abs(grad d)/(2*kf*d) | ||
| 5 | c input u : (grad d)*grad(abs(grad d))/(d**2 * (2*kf)**3) | ||
| 6 | c input v : (laplacian d)/(d*(2*kf)**2) | ||
| 7 | c output vx : exchange potential per electron | ||
| 8 | implicit double precision (a-h,o-z) | ||
| 9 | data a1,a2,a3,a4/0.19645d0,0.27430d0,0.15084d0,100.d0/ | ||
| 10 | data ax,a,b1/-0.7385588d0,7.7956d0,0.004d0/ | ||
| 11 | data thrd,thrd4/0.333333333333d0,1.33333333333d0/ | ||
| 12 | fac = ax*d**thrd | ||
| 13 | s2 = s*s | ||
| 14 | s3 = s2*s | ||
| 15 | s4 = s2*s2 | ||
| 16 | p0 = 1.d0/dsqrt(1.d0+a*a*s2) | ||
| 17 | p1 = dlog(a*s+1.d0/p0) | ||
| 18 | p2 = dexp(-a4*s2) | ||
| 19 | p3 = 1.d0/(1.d0+a1*s*p1+b1*s4) | ||
| 20 | p4 = 1.d0+a1*s*p1+(a2-a3*p2)*s2 | ||
| 21 | f = p3*p4 | ||
| 22 | p5 = b1*s2-(a2-a3*p2) | ||
| 23 | p6 = a1*s*(p1+a*s*p0) | ||
| 24 | p7 = 2.d0*(a2-a3*p2)+2.d0*a3*a4*s2*p2-4.d0*b1*s2*f | ||
| 25 | fs = p3*(p3*p5*p6+p7) | ||
| 26 | p8 = 2.d0*s*(b1-a3*a4*p2) | ||
| 27 | p9 = a1*p1+a*a1*s*p0*(3.d0-a*a*s2*p0*p0) | ||
| 28 | p10 = 4.d0*a3*a4*s*p2*(2.d0-a4*s2)-8.d0*b1*s*f-4.d0*b1*s3*fs | ||
| 29 | p11 = -p3*p3*(a1*p1+a*a1*s*p0+4.d0*b1*s3) | ||
| 30 | fss = p3*p3*(p5*p9+p6*p8)+2.d0*p3*p5*p6*p11+p3*p10+p7*p11 | ||
| 31 | vx = fac*(thrd4*f-(u-thrd4*s3)*fss-v*fs) | ||
| 32 | return | ||
| 33 | end | ||
