mirror of
https://github.com/pfloos/quack
synced 2024-11-04 21:23:55 +01:00
individual energies fixed at fucking last
This commit is contained in:
parent
e7fa09cbd0
commit
2eddd491bf
@ -18,6 +18,6 @@
|
|||||||
|
|
||||||
double precision,parameter :: CxLDA = - (3d0/4d0)*(3d0/pi)**(1d0/3d0)
|
double precision,parameter :: CxLDA = - (3d0/4d0)*(3d0/pi)**(1d0/3d0)
|
||||||
double precision,parameter :: Cx0 = - (4d0/3d0)*(1d0/pi)**(1d0/3d0)
|
double precision,parameter :: Cx0 = - (4d0/3d0)*(1d0/pi)**(1d0/3d0)
|
||||||
! double precision,parameter :: Cx1 = - (176d0/105d0)*(1d0/pi)**(1d0/3d0)
|
! double precision,parameter :: Cx1 = - 0.913d0*(4d0/3d0)*(1d0/pi)**(1d0/3d0)
|
||||||
double precision,parameter :: Cx1 = - 0.904*(176d0/105d0)*(1d0/pi)**(1d0/3d0)
|
double precision,parameter :: Cx1 = - (176d0/105d0)*(1d0/pi)**(1d0/3d0)
|
||||||
|
|
||||||
|
54
input/basis
54
input/basis
@ -1,27 +1,35 @@
|
|||||||
1 5
|
1 9
|
||||||
S 3
|
S 8
|
||||||
1 13.0100000 0.0196850
|
1 2940.0000000 0.0006800
|
||||||
2 1.9620000 0.1379770
|
2 441.2000000 0.0052360
|
||||||
3 0.4446000 0.4781480
|
3 100.5000000 0.0266060
|
||||||
|
4 28.4300000 0.0999930
|
||||||
|
5 9.1690000 0.2697020
|
||||||
|
6 3.1960000 0.4514690
|
||||||
|
7 1.1590000 0.2950740
|
||||||
|
8 0.1811000 0.0125870
|
||||||
|
S 8
|
||||||
|
1 2940.0000000 -0.0001230
|
||||||
|
2 441.2000000 -0.0009660
|
||||||
|
3 100.5000000 -0.0048310
|
||||||
|
4 28.4300000 -0.0193140
|
||||||
|
5 9.1690000 -0.0532800
|
||||||
|
6 3.1960000 -0.1207230
|
||||||
|
7 1.1590000 -0.1334350
|
||||||
|
8 0.1811000 0.5307670
|
||||||
S 1
|
S 1
|
||||||
1 0.1220000 1.0000000
|
1 0.0589000 1.0000000
|
||||||
S 1
|
S 1
|
||||||
1 0.0297400 1.0000000
|
1 0.0187700 1.0000000
|
||||||
|
P 3
|
||||||
|
1 3.6190000 0.0291110
|
||||||
|
2 0.7110000 0.1693650
|
||||||
|
3 0.1951000 0.5134580
|
||||||
P 1
|
P 1
|
||||||
1 0.7270000 1.0000000
|
1 0.0601800 1.0000000
|
||||||
P 1
|
P 1
|
||||||
1 0.1410000 1.0000000
|
1 0.0085000 1.0000000
|
||||||
2 5
|
D 1
|
||||||
S 3
|
1 0.2380000 1.0000000
|
||||||
1 13.0100000 0.0196850
|
D 1
|
||||||
2 1.9620000 0.1379770
|
1 0.0740000 1.0000000
|
||||||
3 0.4446000 0.4781480
|
|
||||||
S 1
|
|
||||||
1 0.1220000 1.0000000
|
|
||||||
S 1
|
|
||||||
1 0.0297400 1.0000000
|
|
||||||
P 1
|
|
||||||
1 0.7270000 1.0000000
|
|
||||||
P 1
|
|
||||||
1 0.1410000 1.0000000
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# Restricted or unrestricted KS calculation
|
# Restricted or unrestricted KS calculation
|
||||||
LIM-RKS
|
GOK-RKS
|
||||||
# exchange rung:
|
# exchange rung:
|
||||||
# Hartree = 0
|
# Hartree = 0
|
||||||
# LDA = 1: RS51,RMFL20
|
# LDA = 1: RS51,RMFL20
|
||||||
@ -19,6 +19,6 @@
|
|||||||
# Number of states in ensemble (nEns)
|
# Number of states in ensemble (nEns)
|
||||||
2
|
2
|
||||||
# Ensemble weights: wEns(1),...,wEns(nEns-1)
|
# Ensemble weights: wEns(1),...,wEns(nEns-1)
|
||||||
0.25
|
0.5
|
||||||
# GOK-DFT: maxSCF thresh DIIS n_diis guess_type ortho_type
|
# GOK-DFT: maxSCF thresh DIIS n_diis guess_type ortho_type
|
||||||
32 0.00001 T 5 1 1
|
32 0.00001 T 5 1 1
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
# nAt nEla nElb nCore nRyd
|
# nAt nEla nElb nCore nRyd
|
||||||
2 1 1 0 0
|
1 2 2 0 0
|
||||||
# Znuc x y z
|
# Znuc x y z
|
||||||
H 0.0 0.0 0.0
|
Be 0.0 0.0 0.0
|
||||||
H 0.0 0.0 1.4
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
2
|
1
|
||||||
|
|
||||||
H 0.0000000000 0.0000000000 0.0000000000
|
Be 0.0000000000 0.0000000000 0.0000000000
|
||||||
H 0.0000000000 0.0000000000 0.7408481486
|
|
||||||
|
54
input/weight
54
input/weight
@ -1,27 +1,35 @@
|
|||||||
1 5
|
1 9
|
||||||
S 3
|
S 8
|
||||||
1 13.0100000 0.0196850
|
1 2940.0000000 0.0006800
|
||||||
2 1.9620000 0.1379770
|
2 441.2000000 0.0052360
|
||||||
3 0.4446000 0.4781480
|
3 100.5000000 0.0266060
|
||||||
|
4 28.4300000 0.0999930
|
||||||
|
5 9.1690000 0.2697020
|
||||||
|
6 3.1960000 0.4514690
|
||||||
|
7 1.1590000 0.2950740
|
||||||
|
8 0.1811000 0.0125870
|
||||||
|
S 8
|
||||||
|
1 2940.0000000 -0.0001230
|
||||||
|
2 441.2000000 -0.0009660
|
||||||
|
3 100.5000000 -0.0048310
|
||||||
|
4 28.4300000 -0.0193140
|
||||||
|
5 9.1690000 -0.0532800
|
||||||
|
6 3.1960000 -0.1207230
|
||||||
|
7 1.1590000 -0.1334350
|
||||||
|
8 0.1811000 0.5307670
|
||||||
S 1
|
S 1
|
||||||
1 0.1220000 1.0000000
|
1 0.0589000 1.0000000
|
||||||
S 1
|
S 1
|
||||||
1 0.0297400 1.0000000
|
1 0.0187700 1.0000000
|
||||||
|
P 3
|
||||||
|
1 3.6190000 0.0291110
|
||||||
|
2 0.7110000 0.1693650
|
||||||
|
3 0.1951000 0.5134580
|
||||||
P 1
|
P 1
|
||||||
1 0.7270000 1.0000000
|
1 0.0601800 1.0000000
|
||||||
P 1
|
P 1
|
||||||
1 0.1410000 1.0000000
|
1 0.0085000 1.0000000
|
||||||
2 5
|
D 1
|
||||||
S 3
|
1 0.2380000 1.0000000
|
||||||
1 13.0100000 0.0196850
|
D 1
|
||||||
2 1.9620000 0.1379770
|
1 0.0740000 1.0000000
|
||||||
3 0.4446000 0.4781480
|
|
||||||
S 1
|
|
||||||
1 0.1220000 1.0000000
|
|
||||||
S 1
|
|
||||||
1 0.0297400 1.0000000
|
|
||||||
P 1
|
|
||||||
1 0.7270000 1.0000000
|
|
||||||
P 1
|
|
||||||
1 0.1410000 1.0000000
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine GOK_RKS(restart,x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thresh, &
|
subroutine GOK_RKS(restart,x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wEns,nGrid,weight,maxSCF,thresh, &
|
||||||
max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,Ew,EwGIC,c)
|
max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,Ew,EwGIC,c)
|
||||||
|
|
||||||
! Perform restricted Kohn-Sham calculation for ensembles
|
! Perform restricted Kohn-Sham calculation for ensembles
|
||||||
@ -11,11 +11,14 @@ subroutine GOK_RKS(restart,x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxS
|
|||||||
logical,intent(in) :: restart
|
logical,intent(in) :: restart
|
||||||
integer,intent(in) :: x_rung,c_rung
|
integer,intent(in) :: x_rung,c_rung
|
||||||
character(len=12),intent(in) :: x_DFA,c_DFA
|
character(len=12),intent(in) :: x_DFA,c_DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
double precision,intent(in) :: weight(nGrid)
|
double precision,intent(in) :: weight(nGrid)
|
||||||
integer,intent(in) :: maxSCF,max_diis,guess_type
|
integer,intent(in) :: maxSCF
|
||||||
|
integer,intent(in) :: max_diis
|
||||||
|
integer,intent(in) :: guess_type
|
||||||
double precision,intent(in) :: thresh
|
double precision,intent(in) :: thresh
|
||||||
integer,intent(in) :: nBas
|
integer,intent(in) :: nBas
|
||||||
double precision,intent(in) :: AO(nBas,nGrid)
|
double precision,intent(in) :: AO(nBas,nGrid)
|
||||||
@ -232,12 +235,12 @@ subroutine GOK_RKS(restart,x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxS
|
|||||||
|
|
||||||
! Compute exchange potential
|
! Compute exchange potential
|
||||||
|
|
||||||
call exchange_potential(x_rung,x_DFA,nEns,wEns(:),nGrid,weight(:),nBas,Pw(:,:),ERI(:,:,:,:), &
|
call exchange_potential(x_rung,x_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),nBas,Pw(:,:),ERI(:,:,:,:), &
|
||||||
AO(:,:),dAO(:,:,:),rhow(:),drhow(:,:),Fx(:,:),FxHF(:,:))
|
AO(:,:),dAO(:,:,:),rhow(:),drhow(:,:),Fx(:,:),FxHF(:,:))
|
||||||
|
|
||||||
! Compute correlation potential
|
! Compute correlation potential
|
||||||
|
|
||||||
call restricted_correlation_potential(c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:), &
|
call restricted_correlation_potential(c_rung,c_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:), &
|
||||||
nBas,AO(:,:),dAO(:,:,:),rhow(:),drhow(:,:),Fc(:,:))
|
nBas,AO(:,:),dAO(:,:,:),rhow(:),drhow(:,:),Fc(:,:))
|
||||||
|
|
||||||
! Build Fock operator
|
! Build Fock operator
|
||||||
@ -290,12 +293,12 @@ subroutine GOK_RKS(restart,x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxS
|
|||||||
|
|
||||||
! Exchange energy
|
! Exchange energy
|
||||||
|
|
||||||
call exchange_energy(x_rung,x_DFA,nEns,wEns(:),nGrid,weight(:),nBas, &
|
call exchange_energy(x_rung,x_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),nBas, &
|
||||||
Pw(:,:),FxHF(:,:),rhow(:),drhow(:,:),Ex)
|
Pw(:,:),FxHF(:,:),rhow(:),drhow(:,:),Ex)
|
||||||
|
|
||||||
! Correlation energy
|
! Correlation energy
|
||||||
|
|
||||||
call restricted_correlation_energy(c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:),rhow(:),drhow(:,:),Ec)
|
call restricted_correlation_energy(c_rung,c_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),rhow(:),drhow(:,:),Ec)
|
||||||
|
|
||||||
! Total energy
|
! Total energy
|
||||||
|
|
||||||
@ -338,9 +341,8 @@ subroutine GOK_RKS(restart,x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxS
|
|||||||
! Compute individual energies from ensemble energy
|
! Compute individual energies from ensemble energy
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
call restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:), &
|
call restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:), &
|
||||||
nBas,nO,nV,T(:,:),V(:,:),ERI(:,:,:,:),ENuc, &
|
nBas,nO,nV,T(:,:),V(:,:),ERI(:,:,:,:),ENuc,eps(:),Pw(:,:),rhow(:),drhow(:,:), &
|
||||||
eps(:),Pw(:,:),rhow(:),drhow(:,:),J(:,:),P(:,:,:), &
|
J(:,:),P(:,:,:),rho(:,:),drho(:,:,:),Ew,EwGIC,E(:),Om(:))
|
||||||
rho(:,:),drho(:,:,:),Ew,EwGIC,E(:),Om(:))
|
|
||||||
|
|
||||||
end subroutine GOK_RKS
|
end subroutine GOK_RKS
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
subroutine LIM_RKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thresh, &
|
subroutine LIM_RKS(x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wEns,nGrid,weight, &
|
||||||
max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,c)
|
maxSCF,thresh,max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,c)
|
||||||
|
|
||||||
! Perform restricted Kohn-Sham calculation for ensembles
|
! Perform restricted Kohn-Sham calculation for ensembles
|
||||||
|
|
||||||
@ -10,6 +10,7 @@ subroutine LIM_RKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thres
|
|||||||
|
|
||||||
integer,intent(in) :: x_rung,c_rung
|
integer,intent(in) :: x_rung,c_rung
|
||||||
character(len=12),intent(in) :: x_DFA,c_DFA
|
character(len=12),intent(in) :: x_DFA,c_DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -65,7 +66,7 @@ subroutine LIM_RKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thres
|
|||||||
write(*,'(A40)') '*************************************************'
|
write(*,'(A40)') '*************************************************'
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
call GOK_RKS(.false.,x_rung,x_DFA,c_rung,c_DFA,nEns,wLIM,nGrid,weight,maxSCF,thresh, &
|
call GOK_RKS(.false.,x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wLIM,nGrid,weight,maxSCF,thresh, &
|
||||||
max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,EwZW,EwGICZW,c)
|
max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,EwZW,EwGICZW,c)
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
@ -82,7 +83,7 @@ subroutine LIM_RKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thres
|
|||||||
write(*,'(A40)') '*************************************************'
|
write(*,'(A40)') '*************************************************'
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
call GOK_RKS(.true.,x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thresh, &
|
call GOK_RKS(.true.,x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wEns,nGrid,weight,maxSCF,thresh, &
|
||||||
max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,EwEW,EwGICEW,c)
|
max_diis,guess_type,nBas,AO,dAO,nO,nV,S,T,V,Hc,ERI,X,ENuc,EwEW,EwGICEW,c)
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine RMFL20_lda_correlation_energy(nEns,wEns,nGrid,weight,rho,Ec)
|
subroutine RMFL20_lda_correlation_energy(LDA_centered,nEns,wEns,nGrid,weight,rho,Ec)
|
||||||
|
|
||||||
! Compute the restricted version of the Marut-Fromager-Loos weight-dependent correlation functional
|
! Compute the restricted version of the Marut-Fromager-Loos weight-dependent correlation functional
|
||||||
! The RMFL20 is a two-state, single-weight correlation functional for spin-unpolarized systems
|
! The RMFL20 is a two-state, single-weight correlation functional for spin-unpolarized systems
|
||||||
@ -8,6 +8,7 @@ subroutine RMFL20_lda_correlation_energy(nEns,wEns,nGrid,weight,rho,Ec)
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -16,7 +17,6 @@ subroutine RMFL20_lda_correlation_energy(nEns,wEns,nGrid,weight,rho,Ec)
|
|||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
logical :: LDA_centered = .true.
|
|
||||||
integer :: iEns
|
integer :: iEns
|
||||||
double precision :: EcLDA
|
double precision :: EcLDA
|
||||||
double precision,allocatable :: aMFL(:,:)
|
double precision,allocatable :: aMFL(:,:)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight,rhow,rho,Ec)
|
subroutine RMFL20_lda_correlation_individual_energy(LDA_centered,nEns,wEns,nGrid,weight,rhow,rho,Ec)
|
||||||
|
|
||||||
! Compute eLDA correlation energy
|
! Compute eLDA correlation energy
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight,rhow,
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -16,7 +17,6 @@ subroutine RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight,rhow,
|
|||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
logical :: LDA_centered = .true.
|
|
||||||
integer :: iEns
|
integer :: iEns
|
||||||
double precision :: EcLDA
|
double precision :: EcLDA
|
||||||
double precision,allocatable :: aMFL(:,:)
|
double precision,allocatable :: aMFL(:,:)
|
||||||
@ -48,7 +48,6 @@ subroutine RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight,rhow,
|
|||||||
|
|
||||||
! LDA-centered functional
|
! LDA-centered functional
|
||||||
|
|
||||||
|
|
||||||
if(LDA_centered) then
|
if(LDA_centered) then
|
||||||
|
|
||||||
call RVWN5_lda_correlation_individual_energy(nGrid,weight(:),rhow(:),rho(:),EcLDA)
|
call RVWN5_lda_correlation_individual_energy(nGrid,weight(:),rhow(:),rho(:),EcLDA)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine RMFL20_lda_correlation_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,Fc)
|
subroutine RMFL20_lda_correlation_potential(LDA_centered,nEns,wEns,nGrid,weight,nBas,AO,rho,Fc)
|
||||||
|
|
||||||
! Compute Marut-Fromager-Loos weight-dependent LDA correlation potential
|
! Compute Marut-Fromager-Loos weight-dependent LDA correlation potential
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine RMFL20_lda_correlation_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,F
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -17,7 +18,6 @@ subroutine RMFL20_lda_correlation_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,F
|
|||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
logical :: LDA_centered = .true.
|
|
||||||
integer :: iEns
|
integer :: iEns
|
||||||
double precision,allocatable :: aMFL(:,:)
|
double precision,allocatable :: aMFL(:,:)
|
||||||
double precision,allocatable :: FcLDA(:,:)
|
double precision,allocatable :: FcLDA(:,:)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine RMFL20_lda_exchange_energy(nEns,wEns,nGrid,weight,rho,Ex)
|
subroutine RMFL20_lda_exchange_energy(LDA_centered,nEns,wEns,nGrid,weight,rho,Ex)
|
||||||
|
|
||||||
! Compute the restricted version of the Marut-Fromager-Loos weight-dependent exchange functional
|
! Compute the restricted version of the Marut-Fromager-Loos weight-dependent exchange functional
|
||||||
! The RMFL20 is a two-state, single-weight exchange functional
|
! The RMFL20 is a two-state, single-weight exchange functional
|
||||||
@ -8,6 +8,7 @@ subroutine RMFL20_lda_exchange_energy(nEns,wEns,nGrid,weight,rho,Ex)
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -16,7 +17,6 @@ subroutine RMFL20_lda_exchange_energy(nEns,wEns,nGrid,weight,rho,Ex)
|
|||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
logical :: LDA_centered = .true.
|
|
||||||
integer :: iG
|
integer :: iG
|
||||||
double precision :: Cxw
|
double precision :: Cxw
|
||||||
double precision :: r
|
double precision :: r
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine RMFL20_lda_exchange_individual_energy(nEns,wEns,nGrid,weight,rhow,rho,Ex)
|
subroutine RMFL20_lda_exchange_individual_energy(LDA_centered,nEns,wEns,nGrid,weight,rhow,rho,Ex)
|
||||||
|
|
||||||
! Compute the restricted version of the Marut-Fromager-Loos 2020 weight-dependent exchange functional
|
! Compute the restricted version of the Marut-Fromager-Loos 2020 weight-dependent exchange functional
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine RMFL20_lda_exchange_individual_energy(nEns,wEns,nGrid,weight,rhow,rho
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -16,7 +17,6 @@ subroutine RMFL20_lda_exchange_individual_energy(nEns,wEns,nGrid,weight,rhow,rho
|
|||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
logical :: LDA_centered = .true.
|
|
||||||
integer :: iG
|
integer :: iG
|
||||||
double precision :: Cxw
|
double precision :: Cxw
|
||||||
double precision :: r,rI
|
double precision :: r,rI
|
||||||
@ -43,9 +43,11 @@ subroutine RMFL20_lda_exchange_individual_energy(nEns,wEns,nGrid,weight,rhow,rho
|
|||||||
rI = max(0d0,rho(iG))
|
rI = max(0d0,rho(iG))
|
||||||
|
|
||||||
if(r > threshold .and. rI > threshold) then
|
if(r > threshold .and. rI > threshold) then
|
||||||
|
|
||||||
e = Cxw*r**(1d0/3d0)
|
e = Cxw*r**(1d0/3d0)
|
||||||
dedr = 1d0/3d0*Cxw*r**(-2d0/3d0)
|
dedr = 1d0/3d0*Cxw*r**(-2d0/3d0)
|
||||||
Ex = Ex + weight(iG)*(e*rI + dedr*r*rI - dedr*r*r)
|
Ex = Ex + weight(iG)*(e*rI + dedr*r*rI - dedr*r*r)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine RMFL20_lda_exchange_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
subroutine RMFL20_lda_exchange_potential(LDA_centered,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
||||||
|
|
||||||
! Compute the restricted version of the weight-dependent MFL20 exchange potential
|
! Compute the restricted version of the weight-dependent MFL20 exchange potential
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine RMFL20_lda_exchange_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -17,7 +18,6 @@ subroutine RMFL20_lda_exchange_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
|||||||
|
|
||||||
! Local variables
|
! Local variables
|
||||||
|
|
||||||
logical :: LDA_centered = .true.
|
|
||||||
integer :: mu,nu,iG
|
integer :: mu,nu,iG
|
||||||
double precision :: Cxw
|
double precision :: Cxw
|
||||||
double precision :: r,vAO
|
double precision :: r,vAO
|
||||||
|
@ -30,10 +30,11 @@ subroutine RS51_lda_exchange_individual_energy(nGrid,weight,rhow,rho,Ex)
|
|||||||
r = max(0d0,rhow(iG))
|
r = max(0d0,rhow(iG))
|
||||||
rI = max(0d0,rho(iG))
|
rI = max(0d0,rho(iG))
|
||||||
|
|
||||||
if(r > threshold .and. rI > threshold) then
|
if(r > threshold .or. rI > threshold) then
|
||||||
|
|
||||||
e = CxLDA*r**(1d0/3d0)
|
e = CxLDA*r**(1d0/3d0)
|
||||||
dedr = 1d0/3d0*CxLDA*r**(-2d0/3d0)
|
dedr = 1d0/3d0*CxLDA*r**(-2d0/3d0)
|
||||||
|
|
||||||
Ex = Ex + weight(iG)*(e*rI + dedr*r*rI - dedr*r*r)
|
Ex = Ex + weight(iG)*(e*rI + dedr*r*rI - dedr*r*r)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -19,7 +19,7 @@ subroutine RVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec)
|
|||||||
double precision :: r,rI,rs,x
|
double precision :: r,rI,rs,x
|
||||||
double precision :: a_p,x0_p,xx0_p,b_p,c_p,x_p,q_p
|
double precision :: a_p,x0_p,xx0_p,b_p,c_p,x_p,q_p
|
||||||
double precision :: dxdrs,dxdx_p,decdx_p
|
double precision :: dxdrs,dxdx_p,decdx_p
|
||||||
double precision :: drsdra,decdra_p
|
double precision :: drsdr,decdr_p
|
||||||
double precision :: ec_p
|
double precision :: ec_p
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
@ -42,8 +42,6 @@ subroutine RVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec)
|
|||||||
r = max(0d0,rhow(iG))
|
r = max(0d0,rhow(iG))
|
||||||
rI = max(0d0,rho(iG))
|
rI = max(0d0,rho(iG))
|
||||||
|
|
||||||
! spin-up contribution
|
|
||||||
|
|
||||||
if(r > threshold .and. rI > threshold) then
|
if(r > threshold .and. rI > threshold) then
|
||||||
|
|
||||||
rs = (4d0*pi*r/3d0)**(-1d0/3d0)
|
rs = (4d0*pi*r/3d0)**(-1d0/3d0)
|
||||||
@ -56,7 +54,7 @@ subroutine RVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec)
|
|||||||
ec_p = a_p*( log(x**2/x_p) + 2d0*b_p/q_p*atan(q_p/(2d0*x + b_p)) &
|
ec_p = a_p*( log(x**2/x_p) + 2d0*b_p/q_p*atan(q_p/(2d0*x + b_p)) &
|
||||||
- b_p*x0_p/xx0_p*( log((x - x0_p)**2/x_p) + 2d0*(b_p + 2d0*x0_p)/q_p*atan(q_p/(2d0*x + b_p)) ) )
|
- b_p*x0_p/xx0_p*( log((x - x0_p)**2/x_p) + 2d0*(b_p + 2d0*x0_p)/q_p*atan(q_p/(2d0*x + b_p)) ) )
|
||||||
|
|
||||||
drsdra = - (36d0*pi)**(-1d0/3d0)*r**(-4d0/3d0)
|
drsdr = - (36d0*pi)**(-1d0/3d0)*r**(-4d0/3d0)
|
||||||
dxdrs = 0.5d0/sqrt(rs)
|
dxdrs = 0.5d0/sqrt(rs)
|
||||||
|
|
||||||
dxdx_p = 2d0*x + b_p
|
dxdx_p = 2d0*x + b_p
|
||||||
@ -64,9 +62,9 @@ subroutine RVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec)
|
|||||||
decdx_p = a_p*( 2d0/x - 4d0*b_p/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p &
|
decdx_p = a_p*( 2d0/x - 4d0*b_p/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p &
|
||||||
- b_p*x0_p/xx0_p*( 2/(x-x0_p) - 4d0*(b_p+2d0*x0_p)/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p ) )
|
- b_p*x0_p/xx0_p*( 2/(x-x0_p) - 4d0*(b_p+2d0*x0_p)/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p ) )
|
||||||
|
|
||||||
decdra_p = drsdra*dxdrs*decdx_p
|
decdr_p = drsdr*dxdrs*decdx_p
|
||||||
|
|
||||||
Ec = Ec + weight(iG)*(ec_p*rI + decdra_p*r*rI - decdra_p*r*r)
|
Ec = Ec + weight(iG)*(ec_p*rI + decdr_p*r*rI - decdr_p*r*r)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ subroutine RVWN5_lda_correlation_potential(nGrid,weight,nBas,AO,rho,Fc)
|
|||||||
double precision :: r,rs,x
|
double precision :: r,rs,x
|
||||||
double precision :: a_p,x0_p,xx0_p,b_p,c_p,x_p,q_p
|
double precision :: a_p,x0_p,xx0_p,b_p,c_p,x_p,q_p
|
||||||
double precision :: dxdrs,dxdx_p,decdx_p
|
double precision :: dxdrs,dxdx_p,decdx_p
|
||||||
double precision :: drsdra,decdra_p
|
double precision :: drsdr,decdr_p
|
||||||
|
|
||||||
double precision :: ec_p
|
double precision :: ec_p
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ subroutine RVWN5_lda_correlation_potential(nGrid,weight,nBas,AO,rho,Fc)
|
|||||||
ec_p = a_p*( log(x**2/x_p) + 2d0*b_p/q_p*atan(q_p/(2d0*x + b_p)) &
|
ec_p = a_p*( log(x**2/x_p) + 2d0*b_p/q_p*atan(q_p/(2d0*x + b_p)) &
|
||||||
- b_p*x0_p/xx0_p*( log((x - x0_p)**2/x_p) + 2d0*(b_p + 2d0*x0_p)/q_p*atan(q_p/(2d0*x + b_p)) ) )
|
- b_p*x0_p/xx0_p*( log((x - x0_p)**2/x_p) + 2d0*(b_p + 2d0*x0_p)/q_p*atan(q_p/(2d0*x + b_p)) ) )
|
||||||
|
|
||||||
drsdra = - (36d0*pi)**(-1d0/3d0)*r**(-4d0/3d0)
|
drsdr = - (36d0*pi)**(-1d0/3d0)*r**(-4d0/3d0)
|
||||||
dxdrs = 0.5d0/sqrt(rs)
|
dxdrs = 0.5d0/sqrt(rs)
|
||||||
|
|
||||||
dxdx_p = 2d0*x + b_p
|
dxdx_p = 2d0*x + b_p
|
||||||
@ -65,9 +65,9 @@ subroutine RVWN5_lda_correlation_potential(nGrid,weight,nBas,AO,rho,Fc)
|
|||||||
decdx_p = a_p*( 2d0/x - 4d0*b_p/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p &
|
decdx_p = a_p*( 2d0/x - 4d0*b_p/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p &
|
||||||
- b_p*x0_p/xx0_p*( 2/(x-x0_p) - 4d0*(b_p+2d0*x0_p)/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p ) )
|
- b_p*x0_p/xx0_p*( 2/(x-x0_p) - 4d0*(b_p+2d0*x0_p)/( (b_p+2d0*x)**2 + q_p**2) - dxdx_p/x_p ) )
|
||||||
|
|
||||||
decdra_p = drsdra*dxdrs*decdx_p
|
decdr_p = drsdr*dxdrs*decdx_p
|
||||||
|
|
||||||
Fc(mu,nu) = Fc(mu,nu) + weight(iG)*AO(mu,iG)*AO(nu,iG)*(ec_p + decdra_p*r)
|
Fc(mu,nu) = Fc(mu,nu) + weight(iG)*AO(mu,iG)*AO(nu,iG)*(ec_p + decdr_p*r)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ program eDFT
|
|||||||
character(len=7) :: method
|
character(len=7) :: method
|
||||||
integer :: x_rung,c_rung
|
integer :: x_rung,c_rung
|
||||||
character(len=12) :: x_DFA ,c_DFA
|
character(len=12) :: x_DFA ,c_DFA
|
||||||
|
logical :: LDA_centered = .true.
|
||||||
|
|
||||||
integer :: SGn
|
integer :: SGn
|
||||||
double precision :: radial_precision
|
double precision :: radial_precision
|
||||||
@ -152,6 +153,8 @@ program eDFT
|
|||||||
allocate(AO(nBas,nGrid),dAO(ncart,nBas,nGrid))
|
allocate(AO(nBas,nGrid),dAO(ncart,nBas,nGrid))
|
||||||
call AO_values_grid(nBas,nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,nGrid,root,AO,dAO)
|
call AO_values_grid(nBas,nShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell,nGrid,root,AO,dAO)
|
||||||
|
|
||||||
|
LDA_centered = .true.
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Compute GOK-RKS energy
|
! Compute GOK-RKS energy
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
@ -159,9 +162,9 @@ program eDFT
|
|||||||
if(method == 'GOK-RKS') then
|
if(method == 'GOK-RKS') then
|
||||||
|
|
||||||
call cpu_time(start_KS)
|
call cpu_time(start_KS)
|
||||||
call GOK_RKS(.false.,x_rung,x_DFA,c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:),maxSCF,thresh,max_diis,guess_type, &
|
call GOK_RKS(.false.,x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:), &
|
||||||
nBas,AO(:,:),dAO(:,:,:),nO(1),nV(1),S(:,:),T(:,:),V(:,:),Hc(:,:),ERI(:,:,:,:),X(:,:),ENuc, &
|
maxSCF,thresh,max_diis,guess_type,nBas,AO(:,:),dAO(:,:,:),nO(1),nV(1), &
|
||||||
Ew,EwGIC,c(:,:))
|
S(:,:),T(:,:),V(:,:),Hc(:,:),ERI(:,:,:,:),X(:,:),ENuc,Ew,EwGIC,c(:,:))
|
||||||
call cpu_time(end_KS)
|
call cpu_time(end_KS)
|
||||||
|
|
||||||
t_KS = end_KS - start_KS
|
t_KS = end_KS - start_KS
|
||||||
@ -177,9 +180,9 @@ program eDFT
|
|||||||
if(method == 'LIM-RKS') then
|
if(method == 'LIM-RKS') then
|
||||||
|
|
||||||
call cpu_time(start_KS)
|
call cpu_time(start_KS)
|
||||||
call LIM_RKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:),maxSCF,thresh,max_diis,guess_type, &
|
call LIM_RKS(x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:), &
|
||||||
nBas,AO(:,:),dAO(:,:,:),nO(1),nV(1),S(:,:),T(:,:),V(:,:),Hc(:,:),ERI(:,:,:,:),X(:,:),ENuc, &
|
maxSCF,thresh,max_diis,guess_type,nBas,AO(:,:),dAO(:,:,:),nO(1),nV(1), &
|
||||||
c(:,:))
|
S(:,:),T(:,:),V(:,:),Hc(:,:),ERI(:,:,:,:),X(:,:),ENuc,c(:,:))
|
||||||
call cpu_time(end_KS)
|
call cpu_time(end_KS)
|
||||||
|
|
||||||
t_KS = end_KS - start_KS
|
t_KS = end_KS - start_KS
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine exchange_energy(rung,DFA,nEns,wEns,nGrid,weight,nBas,P,FxHF,rho,drho,Ex)
|
subroutine exchange_energy(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas,P,FxHF,rho,drho,Ex)
|
||||||
|
|
||||||
! Compute the exchange energy
|
! Compute the exchange energy
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ subroutine exchange_energy(rung,DFA,nEns,wEns,nGrid,weight,nBas,P,FxHF,rho,drho,
|
|||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -40,7 +41,7 @@ subroutine exchange_energy(rung,DFA,nEns,wEns,nGrid,weight,nBas,P,FxHF,rho,drho,
|
|||||||
|
|
||||||
case(1)
|
case(1)
|
||||||
|
|
||||||
call lda_exchange_energy(DFA,nEns,wEns,nGrid,weight,rho,ExLDA)
|
call lda_exchange_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rho,ExLDA)
|
||||||
|
|
||||||
Ex = ExLDA
|
Ex = ExLDA
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
subroutine exchange_individual_energy(rung,DFA,nEns,wEns,nGrid,weight,nBas, &
|
subroutine exchange_individual_energy(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas, &
|
||||||
ERI,P,rhow,drhow,rho,drho,Ex)
|
ERI,Pw,P,rhow,drhow,rho,drho,Ex)
|
||||||
|
|
||||||
! Compute the exchange individual energy
|
! Compute the exchange individual energy
|
||||||
|
|
||||||
@ -10,12 +10,14 @@ subroutine exchange_individual_energy(rung,DFA,nEns,wEns,nGrid,weight,nBas, &
|
|||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
double precision,intent(in) :: weight(nGrid)
|
double precision,intent(in) :: weight(nGrid)
|
||||||
integer,intent(in) :: nBas
|
integer,intent(in) :: nBas
|
||||||
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
||||||
|
double precision,intent(in) :: Pw(nBas,nBas)
|
||||||
double precision,intent(in) :: P(nBas,nBas)
|
double precision,intent(in) :: P(nBas,nBas)
|
||||||
double precision,intent(in) :: rhow(nGrid)
|
double precision,intent(in) :: rhow(nGrid)
|
||||||
double precision,intent(in) :: drhow(ncart,nGrid)
|
double precision,intent(in) :: drhow(ncart,nGrid)
|
||||||
@ -43,7 +45,7 @@ subroutine exchange_individual_energy(rung,DFA,nEns,wEns,nGrid,weight,nBas, &
|
|||||||
|
|
||||||
case(1)
|
case(1)
|
||||||
|
|
||||||
call lda_exchange_individual_energy(DFA,nEns,wEns,nGrid,weight,rhow,rho,ExLDA)
|
call lda_exchange_individual_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,rho,ExLDA)
|
||||||
|
|
||||||
Ex = ExLDA
|
Ex = ExLDA
|
||||||
|
|
||||||
@ -65,7 +67,7 @@ subroutine exchange_individual_energy(rung,DFA,nEns,wEns,nGrid,weight,nBas, &
|
|||||||
|
|
||||||
case(666)
|
case(666)
|
||||||
|
|
||||||
call fock_exchange_individual_energy(nBas,P,ERI,ExHF)
|
call fock_exchange_individual_energy(nBas,Pw,P,ERI,ExHF)
|
||||||
|
|
||||||
Ex = ExHF
|
Ex = ExHF
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine exchange_potential(rung,DFA,nEns,wEns,nGrid,weight,nBas,P,ERI,AO,dAO,rho,drho,Fx,FxHF)
|
subroutine exchange_potential(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas,P,ERI,AO,dAO,rho,drho,Fx,FxHF)
|
||||||
|
|
||||||
! Compute the exchange potential
|
! Compute the exchange potential
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ subroutine exchange_potential(rung,DFA,nEns,wEns,nGrid,weight,nBas,P,ERI,AO,dAO,
|
|||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -44,7 +45,7 @@ subroutine exchange_potential(rung,DFA,nEns,wEns,nGrid,weight,nBas,P,ERI,AO,dAO,
|
|||||||
|
|
||||||
case(1)
|
case(1)
|
||||||
|
|
||||||
call lda_exchange_potential(DFA,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
call lda_exchange_potential(DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
||||||
|
|
||||||
! GGA functionals
|
! GGA functionals
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine fock_exchange_individual_energy(nBas,P,ERI,Ex)
|
subroutine fock_exchange_individual_energy(nBas,Pw,P,ERI,Ex)
|
||||||
|
|
||||||
! Compute the Fock exchange potential
|
! Compute the Fock exchange potential
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine fock_exchange_individual_energy(nBas,P,ERI,Ex)
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: nBas
|
integer,intent(in) :: nBas
|
||||||
|
double precision,intent(in) :: Pw(nBas,nBas)
|
||||||
double precision,intent(in) :: P(nBas,nBas)
|
double precision,intent(in) :: P(nBas,nBas)
|
||||||
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
||||||
|
|
||||||
|
65
src/eDFT/hartree_individual_energy.f90
Normal file
65
src/eDFT/hartree_individual_energy.f90
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
subroutine hartree_individual_energy(rung,nBas,ERI,J,Pw,P,EJ)
|
||||||
|
|
||||||
|
! Compute the exchange individual energy
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
include 'parameters.h'
|
||||||
|
|
||||||
|
! Input variables
|
||||||
|
|
||||||
|
integer,intent(in) :: rung
|
||||||
|
integer,intent(in) :: nBas
|
||||||
|
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
||||||
|
double precision,intent(in) :: J(nBas,nBas)
|
||||||
|
double precision,intent(in) :: Pw(nBas,nBas)
|
||||||
|
double precision,intent(in) :: P(nBas,nBas)
|
||||||
|
|
||||||
|
! Local variables
|
||||||
|
|
||||||
|
double precision,external :: trace_matrix
|
||||||
|
|
||||||
|
! Output variables
|
||||||
|
|
||||||
|
double precision,intent(out) :: EJ
|
||||||
|
|
||||||
|
select case (rung)
|
||||||
|
|
||||||
|
! Hartree calculation
|
||||||
|
|
||||||
|
case(0)
|
||||||
|
|
||||||
|
call hartree_coulomb(nBas,P(:,:),ERI(:,:,:,:),J(:,:))
|
||||||
|
EJ = 0.5d0*trace_matrix(nBas,matmul(P(:,:),J(:,:)))
|
||||||
|
|
||||||
|
! LDA functionals
|
||||||
|
|
||||||
|
case(1)
|
||||||
|
|
||||||
|
call hartree_coulomb(nBas,Pw(:,:),ERI(:,:,:,:),J(:,:))
|
||||||
|
EJ = trace_matrix(nBas,matmul(P(:,:),J(:,:))) &
|
||||||
|
- 0.5d0*trace_matrix(nBas,matmul(Pw(:,:),J(:,:)))
|
||||||
|
|
||||||
|
! GGA functionals
|
||||||
|
|
||||||
|
case(2)
|
||||||
|
|
||||||
|
call print_warning('!!! Hartee individual energies NYI for GGAs !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
! Hybrid functionals
|
||||||
|
|
||||||
|
case(4)
|
||||||
|
|
||||||
|
call print_warning('!!! Hartree individual energies NYI for Hybrids !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
! Hartree-Fock calculation
|
||||||
|
|
||||||
|
case(666)
|
||||||
|
|
||||||
|
call hartree_coulomb(nBas,P(:,:),ERI(:,:,:,:),J(:,:))
|
||||||
|
EJ = 0.5d0*trace_matrix(nBas,matmul(P(:,:),J(:,:)))
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
end subroutine hartree_individual_energy
|
@ -1,4 +1,4 @@
|
|||||||
subroutine lda_exchange_energy(DFA,nEns,wEns,nGrid,weight,rho,Ex)
|
subroutine lda_exchange_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rho,Ex)
|
||||||
|
|
||||||
! Select LDA exchange functional
|
! Select LDA exchange functional
|
||||||
|
|
||||||
@ -8,6 +8,7 @@ subroutine lda_exchange_energy(DFA,nEns,wEns,nGrid,weight,rho,Ex)
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -38,7 +39,7 @@ subroutine lda_exchange_energy(DFA,nEns,wEns,nGrid,weight,rho,Ex)
|
|||||||
|
|
||||||
case ('RMFL20')
|
case ('RMFL20')
|
||||||
|
|
||||||
call RMFL20_lda_exchange_energy(nEns,wEns,nGrid,weight,rho,Ex)
|
call RMFL20_lda_exchange_energy(LDA_centered,nEns,wEns,nGrid,weight,rho,Ex)
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine lda_exchange_individual_energy(DFA,nEns,wEns,nGrid,weight,rhow,rho,Ex)
|
subroutine lda_exchange_individual_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,rho,Ex)
|
||||||
|
|
||||||
! Compute LDA exchange energy for individual states
|
! Compute LDA exchange energy for individual states
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine lda_exchange_individual_energy(DFA,nEns,wEns,nGrid,weight,rhow,rho,Ex
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
@ -29,7 +30,7 @@ subroutine lda_exchange_individual_energy(DFA,nEns,wEns,nGrid,weight,rhow,rho,Ex
|
|||||||
|
|
||||||
case ('RMFL20')
|
case ('RMFL20')
|
||||||
|
|
||||||
call RMFL20_lda_exchange_individual_energy(nEns,wEns,nGrid,weight(:),rhow(:),rho(:),Ex)
|
call RMFL20_lda_exchange_individual_energy(LDA_centered,nEns,wEns,nGrid,weight(:),rhow(:),rho(:),Ex)
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine lda_exchange_potential(DFA,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
subroutine lda_exchange_potential(DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
||||||
|
|
||||||
! Select LDA correlation potential
|
! Select LDA correlation potential
|
||||||
|
|
||||||
@ -8,6 +8,7 @@ subroutine lda_exchange_potential(DFA,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
@ -41,7 +42,7 @@ subroutine lda_exchange_potential(DFA,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
|||||||
|
|
||||||
case ('RMFL20')
|
case ('RMFL20')
|
||||||
|
|
||||||
call RMFL20_lda_exchange_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
call RMFL20_lda_exchange_potential(LDA_centered,nEns,wEns,nGrid,weight,nBas,AO,rho,Fx)
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine restricted_correlation_energy(rung,DFA,nEns,wEns,nGrid,weight,rho,drho,Ec)
|
subroutine restricted_correlation_energy(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,rho,drho,Ec)
|
||||||
|
|
||||||
! Compute the correlation energy
|
! Compute the correlation energy
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ subroutine restricted_correlation_energy(rung,DFA,nEns,wEns,nGrid,weight,rho,drh
|
|||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -38,7 +39,7 @@ subroutine restricted_correlation_energy(rung,DFA,nEns,wEns,nGrid,weight,rho,drh
|
|||||||
|
|
||||||
case(1)
|
case(1)
|
||||||
|
|
||||||
call restricted_lda_correlation_energy(DFA,nEns,wEns(:),nGrid,weight(:),rho(:),Ec)
|
call restricted_lda_correlation_energy(DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),rho(:),Ec)
|
||||||
|
|
||||||
! GGA functionals
|
! GGA functionals
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine restricted_correlation_individual_energy(rung,DFA,nEns,wEns,nGrid,weight,rhow,drhow,rho,drho,Ec)
|
subroutine restricted_correlation_individual_energy(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,drhow,rho,drho,Ec)
|
||||||
|
|
||||||
! Compute the correlation energy of individual states
|
! Compute the correlation energy of individual states
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ subroutine restricted_correlation_individual_energy(rung,DFA,nEns,wEns,nGrid,wei
|
|||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -40,7 +41,7 @@ subroutine restricted_correlation_individual_energy(rung,DFA,nEns,wEns,nGrid,wei
|
|||||||
|
|
||||||
case(1)
|
case(1)
|
||||||
|
|
||||||
call restricted_lda_correlation_individual_energy(DFA,nEns,wEns(:),nGrid,weight(:),rhow(:),rho(:),Ec)
|
call restricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),rhow(:),rho(:),Ec)
|
||||||
|
|
||||||
! GGA functionals
|
! GGA functionals
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine restricted_correlation_potential(rung,DFA,nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
subroutine restricted_correlation_potential(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
||||||
|
|
||||||
! Compute the correlation potential
|
! Compute the correlation potential
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ subroutine restricted_correlation_potential(rung,DFA,nEns,wEns,nGrid,weight,nBas
|
|||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -41,7 +42,7 @@ subroutine restricted_correlation_potential(rung,DFA,nEns,wEns,nGrid,weight,nBas
|
|||||||
|
|
||||||
case(1)
|
case(1)
|
||||||
|
|
||||||
call restricted_lda_correlation_potential(DFA,nEns,wEns(:),nGrid,weight(:),nBas,AO(:,:),rho(:),Fc(:,:))
|
call restricted_lda_correlation_potential(DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),nBas,AO(:,:),rho(:),Fc(:,:))
|
||||||
|
|
||||||
! GGA functionals
|
! GGA functionals
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,nBas, &
|
subroutine restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas, &
|
||||||
nO,nV,T,V,ERI,ENuc,eps,Pw,rhow,drhow,J,P,rho,drho,Ew,EwGIC,E,Om)
|
nO,nV,T,V,ERI,ENuc,eps,Pw,rhow,drhow,J,P,rho,drho,Ew,EwGIC,E,Om)
|
||||||
|
|
||||||
! Compute individual energies as well as excitation energies
|
! Compute individual energies as well as excitation energies
|
||||||
@ -10,6 +10,7 @@ subroutine restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGri
|
|||||||
|
|
||||||
integer,intent(in) :: x_rung,c_rung
|
integer,intent(in) :: x_rung,c_rung
|
||||||
character(len=12),intent(in) :: x_DFA,c_DFA
|
character(len=12),intent(in) :: x_DFA,c_DFA
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
integer,intent(in) :: nGrid
|
integer,intent(in) :: nGrid
|
||||||
@ -75,12 +76,11 @@ subroutine restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGri
|
|||||||
end do
|
end do
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Hartree energy
|
! Individua Hartree energy
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
do iEns=1,nEns
|
do iEns=1,nEns
|
||||||
call hartree_coulomb(nBas,P(:,:,iEns),ERI(:,:,:,:),J(:,:))
|
call hartree_individual_energy(x_rung,nBas,ERI,J(:,:),Pw(:,:),P(:,:,iEns),EJ(iEns))
|
||||||
EJ(iEns) = 0.5d0*trace_matrix(nBas,matmul(P(:,:,iEns),J(:,:)))
|
|
||||||
end do
|
end do
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
@ -88,10 +88,8 @@ subroutine restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGri
|
|||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
do iEns=1,nEns
|
do iEns=1,nEns
|
||||||
|
call exchange_individual_energy(x_rung,x_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),nBas,ERI(:,:,:,:), &
|
||||||
call exchange_individual_energy(x_rung,x_DFA,nEns,wEns(:),nGrid,weight(:),nBas,ERI(:,:,:,:), &
|
Pw(:,:),P(:,:,iEns),rhow(:),drhow(:,:),rho(:,iEns),drho(:,:,iEns),Ex(iEns))
|
||||||
P(:,:,iEns),rhow(:),drhow(:,:),rho(:,iEns),drho(:,:,iEns),Ex(iEns))
|
|
||||||
|
|
||||||
end do
|
end do
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
@ -99,15 +97,10 @@ subroutine restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGri
|
|||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
do iEns=1,nEns
|
do iEns=1,nEns
|
||||||
|
call restricted_correlation_individual_energy(c_rung,c_DFA,LDA_centered,nEns,wEns(:),nGrid,weight(:),rhow(:),drhow(:,:), &
|
||||||
call restricted_correlation_individual_energy(c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:),rhow(:),drhow(:,:), &
|
|
||||||
rho(:,iEns),drho(:,:,iEns),Ec(iEns))
|
rho(:,iEns),drho(:,:,iEns),Ec(iEns))
|
||||||
|
|
||||||
end do
|
end do
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Compute auxiliary energies
|
! Compute auxiliary energies
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine restricted_lda_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,Ec)
|
subroutine restricted_lda_correlation_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rho,Ec)
|
||||||
|
|
||||||
! Select LDA correlation functional
|
! Select LDA correlation functional
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine restricted_lda_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,Ec)
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
@ -34,7 +35,7 @@ subroutine restricted_lda_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,Ec)
|
|||||||
|
|
||||||
case ('RMFL20')
|
case ('RMFL20')
|
||||||
|
|
||||||
call RMFL20_lda_correlation_energy(nEns,wEns(:),nGrid,weight(:),rho(:),Ec)
|
call RMFL20_lda_correlation_energy(LDA_centered,nEns,wEns(:),nGrid,weight(:),rho(:),Ec)
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine restricted_lda_correlation_individual_energy(DFA,nEns,wEns,nGrid,weight,rhow,rho,Ec)
|
subroutine restricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,rho,Ec)
|
||||||
|
|
||||||
! Compute LDA correlation energy for individual states
|
! Compute LDA correlation energy for individual states
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine restricted_lda_correlation_individual_energy(DFA,nEns,wEns,nGrid,weig
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
@ -33,7 +34,7 @@ subroutine restricted_lda_correlation_individual_energy(DFA,nEns,wEns,nGrid,weig
|
|||||||
|
|
||||||
case ('RMFL20')
|
case ('RMFL20')
|
||||||
|
|
||||||
call RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight(:),rhow(:),rho(:),Ec)
|
call RMFL20_lda_correlation_individual_energy(LDA_centered,nEns,wEns,nGrid,weight(:),rhow(:),rho(:),Ec)
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine restricted_lda_correlation_potential(DFA,nEns,wEns,nGrid,weight,nBas,AO,rho,Fc)
|
subroutine restricted_lda_correlation_potential(DFA,LDA_centered,nEns,wEns,nGrid,weight,nBas,AO,rho,Fc)
|
||||||
|
|
||||||
! Select LDA correlation potential
|
! Select LDA correlation potential
|
||||||
|
|
||||||
@ -7,6 +7,7 @@ subroutine restricted_lda_correlation_potential(DFA,nEns,wEns,nGrid,weight,nBas,
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
character(len=12),intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
@ -36,7 +37,7 @@ subroutine restricted_lda_correlation_potential(DFA,nEns,wEns,nGrid,weight,nBas,
|
|||||||
|
|
||||||
case ('RMFL20')
|
case ('RMFL20')
|
||||||
|
|
||||||
call RMFL20_lda_correlation_potential(nEns,wEns(:),nGrid,weight(:),nBas,AO(:,:),rho(:),Fc(:,:))
|
call RMFL20_lda_correlation_potential(LDA_centered,nEns,wEns(:),nGrid,weight(:),nBas,AO(:,:),rho(:),Fc(:,:))
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user