C ************ TOTAL ENERGY CALCULATION FOR
atomlda.f ***********
c
Hedin-Lundqvist form
c
for non-relativistic LDA cal.
c writen by
Masahiro Yamamoto,
c
Institute of Atomic Enenrgy, Kyoto University
c
March 1994
C NO:NUMBER OF OCCUPIED ORBITALS
C Wei(I):NUMBER OF ELECTRONS AT I LEVEL
C E(I):ENGENVALUES OF THE I ORBITAL
C ROSUM(I):4*PAI*DENTISY OF ELCTRONS AT THE I
POINT
C R(I):RADIUS OF I POINTS
C X(I)=LOG(R(I))
implicit real*8 (a-h,o-z)
dimension
F(651),G(651),E(29),ROSUM(651),X(651),R(651),
1
Wei(29),rv(651),ek(29),elu(29),h(651)
c --------------- input --------------------
open (1,file='atomlda.dat')
read (1,*) z
read (1,*) no
write (6,*)
'z',z,'no',no
do i =1 , no
read (1,*) npq
,elu(i) ,spin ,wei(i),ons
write (6,*) npq
,elu(i) , spin ,wei(i)
enddo
close (1)
10 FORMAT (5(1PD15.7))
15 FORMAT (5(1PD10.3))
20 FORMAT (1PD15.7)
OPEN (1,FILE='RSCFEN.DAT')
READ (1,10) (E(I), I=1, 20)
CLOSE (1)
OPEN (1,FILE='ROSUM.DAT')
READ (1,10) (ROSUM(I), I=1, 651)
CLOSE (1)
open (1,file='RSCFPO.DAT')
read (1,10) (rv(i), i=1, 651)
close (1)
open (1,file='KINETIC.DAT')
read (1,10) (ek(i), i=1, 20)
close (1)
c -----coordinate----log. mesh
--------------------------
dx=1.0d0/50.0d0
do 40 i=1, 651
x(i)=-9.0d0+dble(i-1)*dx
r(i)=dexp(x(i))
40 continue
C ************ SUMMATION OF ENERGY EIGENVALUE
*******************
c
and orbital kinetic energy
esum=0.0
eksum=0.0
DO 30 I=1, 20
ESUM=ESUM+Wei(I)*E(I)
eksum=eksum+wei(i)*ek(i)
30 CONTINUE
C ************ CHECK OF ROSUM + SCRNC
**********************
sum1=0.0+(r(1)**3)*rosum(1)/2.0
scrnc=sum1
DO 700 I=2, 650, 2
SUM1=SUM1+dx/3.0*(DEXP(3.0*X(I-1))*ROSUM(I-1)+4.0*
1
DEXP(3.0*X(I))*ROSUM(I)+DEXP(3.0*X(I+1))*ROSUM(I+1))
700 CONTINUE
WRITE (6,710) SUM1
710 FORMAT (1H ,'TOTAL CHARGE=',1PD15.7)
C ************ HATREE POTENTIAL CORRECTION
*********************
DO 100 I=1, 651
SUM1=0.0D0
SUM2=0.0D0
IF (MOD(I,2)) 110,110,120
C ------ FOR EVEN I -------
110 IF (I .EQ. 2) GO TO 130
DO 140 J=2, I-2, 2
SUM1=SUM1+dx/3.0*(DEXP(3.0*X(J-1))*ROSUM(J-1)+4.0*
1
DEXP(3.0*X(J))*ROSUM(J)+DEXP(3.0*X(J+1))*ROSUM(J+1))
140 CONTINUE
130
SUM1=SUM1+dx/2.0*(DEXP(3.0*X(I-1))*ROSUM(I-1)+DEXP(3.0*X(I))*
1 ROSUM(I))
SUM1=(SUM1+SCRNC)/R(I)
IF (I .EQ. 650) GO TO 150
DO 160 J=I+1, 649, 2
SUM2=SUM2+dx/3.0*(DEXP(2.0*X(J-1))*ROSUM(J-1)+4.0*
1
DEXP(2.0*X(J))*ROSUM(J)+DEXP(2.0*X(J+1))*ROSUM(J+1))
160 CONTINUE
150
SUM2=SUM2+dx/2.0*(DEXP(2.0*X(650))*ROSUM(650)+DEXP(2.0*X(651))
1 *ROSUM(651))
GO TO 105
C ------ FOR ODD I -------
120 IF (I .EQ. 1) GO TO 170
DO 180 J=2, I-1, 2
SUM1=SUM1+dx/3.0*(DEXP(3.0*X(J-1))*ROSUM(J-1)+4.0*
1
DEXP(3.0*X(J))*ROSUM(J)+DEXP(3.0*X(J+1))*ROSUM(J+1))
180 CONTINUE
170 SUM1=(SUM1+SCRNC)/R(I)
IF (I .EQ. 651) GO TO 195
DO 190 J=I+1, 650, 2
SUM2=SUM2+dx/3.0*(DEXP(2.0*X(J-1))*ROSUM(J-1)+4.0*
1
DEXP(2.0*X(J))*ROSUM(J)+DEXP(2.0*X(J+1))*ROSUM(J+1))
190 CONTINUE
GO TO 105
195 SUM2=0.0D0
105 F(I)=-0.5D0*(SUM1+SUM2)
100 CONTINUE
C ************ EXCHANGE-CORRELATION
CORRECTION ****************
pai=acos(-1.0)
DO 400 I=1, 651
IF (ROSUM(I)) 410,410,420
410 G(I)=0.0D0
GO TO 400
c ------- rosum=(4*pai)*ro(r)
-----------------
420 RS=(3.0/ROSUM(I))**(1.0/3.0)
ex=-(3.0/4.0/pai)*(9.0*pai/4.0)**(1.0/3.0)/rs
px=(4.0/3.0)*ex
c --- Hedin-Lundqvist ----
ahl=21.0d0
chl=0.0225d0
xhl=rs/ahl
aln=log(1.0d0+1.0d0/xhl)
pc=-chl*aln
ec=-chl*(
(1.0d0+xhl**3)*log(1.0d0+1.0d0/xhl)+
&
xhl/2.0d0-xhl**2-1.0d0/3.0d0)
c if (rs-1.0) 701,702,702
c 701 pc=0.0311*log(rs)+(-0.048-0.0311/3.0)+
c &
(2.0/3.0)*0.0020*rs*log(rs)+(2.0*(-0.0116)-0.0020)/3.0*rs
c
ec=0.0311*log(rs)-0.048+0.0020*rs*log(rs)-0.0116*rs
c go to 750
c 702 pc=-0.1423*(1.0+(7.0/6.0)*1.0529*sqrt(rs)+
c &
(4.0/3.0)*0.3334*rs)/(1.0+1.0529*sqrt(rs)+0.3334*rs)**2.0
c
ec=-0.1423/(1.0+1.0529*sqrt(rs)+0.3334*rs)
750 g(I)=ex+ec-(PC+PX)
h(i)=ex+ec
c write (6,1000) i,ex,ec,px,pc
1000 format(i5,4d15.7)
400 CONTINUE
C *********** INTEGRAL OVER THE WHOLE
SPHERE ****************
EINT=dx/2.0*DEXP(3.0*X(1))*(F(1)+G(1))*ROSUM(1)
EINT1=dx/2.0*DEXP(3.0*X(1))*(-F(1)+h(1)-z/r(1))*ROSUM(1)
DO 500 I=2, 650, 2
EINT=EINT+dx/3.0*(DEXP(3.0*X(I-1))*(F(I-1)+G(I-1))*ROSUM(I-1)+
1
4.0*DEXP(3.0*X(I))*(F(I)+G(I))*ROSUM(I)+DEXP(3.0*X(I+1))
2
*(F(I+1)+G(I+1))*ROSUM(I+1))
EINT1=EINT1+dx/3.0*(DEXP(3.0*X(I-1))*(-F(I-1)+h(I-1)-z/r(i-1))
&
*ROSUM(I-1)+4.0*DEXP(3.0*X(I))*(-F(I)+h(I)-z/r(i))*ROSUM(I)
&
+DEXP(3.0*X(I+1))*(-F(I+1)+h(I+1)-z/r(i+1))*ROSUM(I+1))
500 CONTINUE
C **************** TOTAL ENERGY
********************
ESUM=ESUM+EINT
eksum=eksum+eint1
OPEN (1,FILE='TOTE.DAT')
WRITE (1,610) ESUM,eksum
CLOSE (1)
WRITE (6,600) ESUM
600 FORMAT (1H ,'TOTAL E(AU) from eigenvalue=',1PD17.9)
write (6,620) eksum
620 format (1h ,'total E(au) from kinetic energy',1pd17.9)
610 FORMAT (2PD17.9)
write (6,'(f15.7)')
(esum+eksum)/2.0
STOP
END