4
1
mirror of https://github.com/pfloos/quack synced 2024-12-23 04:43:53 +01:00

Debug in progress

This commit is contained in:
Pierre-Francois Loos 2020-03-17 22:39:04 +01:00
parent 862b34099a
commit a5163dbbcb
6 changed files with 90 additions and 94 deletions

View File

@ -1,35 +1,13 @@
1 9 1 3
S 8 S 3
1 2940.0000000 0.0006800 1 30.1678710 0.15432897
2 441.2000000 0.0052360 2 5.4951153 0.53532814
3 100.5000000 0.0266060 3 1.4871927 0.44463454
4 28.4300000 0.0999930 S 3
5 9.1690000 0.2697020 1 1.3148331 -0.0999672
6 3.1960000 0.4514690 2 0.3055389 0.3995128
7 1.1590000 0.2950740 3 0.0993707 0.7001155
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
1 0.0589000 1.0000000
S 1
1 0.0187700 1.0000000
P 3 P 3
1 3.6190000 0.0291110 1 1.3148331 0.1559163
2 0.7110000 0.1693650 2 0.3055389 0.6076837
3 0.1951000 0.5134580 3 0.0993707 0.3919574
P 1
1 0.0601800 1.0000000
P 1
1 0.0085000 1.0000000
D 1
1 0.2380000 1.0000000
D 1
1 0.0740000 1.0000000

View File

@ -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.50000 0.00000 0.00000 0.00000
# GOK-DFT: maxSCF thresh DIIS n_diis guess_type ortho_type # GOK-DFT: maxSCF thresh DIIS n_diis guess_type ortho_type
64 0.0000001 T 5 1 1 64 0.0000001 T 5 1 1

View File

@ -1,35 +1,13 @@
1 9 1 3
S 8 S 3
1 2940.0000000 0.0006800 1 30.1678710 0.15432897
2 441.2000000 0.0052360 2 5.4951153 0.53532814
3 100.5000000 0.0266060 3 1.4871927 0.44463454
4 28.4300000 0.0999930 S 3
5 9.1690000 0.2697020 1 1.3148331 -0.0999672
6 3.1960000 0.4514690 2 0.3055389 0.3995128
7 1.1590000 0.2950740 3 0.0993707 0.7001155
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
1 0.0589000 1.0000000
S 1
1 0.0187700 1.0000000
P 3 P 3
1 3.6190000 0.0291110 1 1.3148331 0.1559163
2 0.7110000 0.1693650 2 0.3055389 0.6076837
3 0.1951000 0.5134580 3 0.0993707 0.3919574
P 1
1 0.0601800 1.0000000
P 1
1 0.0085000 1.0000000
D 1
1 0.2380000 1.0000000
D 1
1 0.0740000 1.0000000

View File

@ -1,4 +1,4 @@
subroutine RMFL20_lda_correlation_derivative_discontinuity(nEns,wEns,nGrid,weight,rhow,Ec) subroutine RMFL20_lda_correlation_derivative_discontinuity(nEns,wEns,nGrid,weight,rhow,EcDD)
! Compute the restricted version of the eLDA correlation part of the derivative discontinuity ! Compute the restricted version of the eLDA correlation part of the derivative discontinuity
@ -17,12 +17,12 @@ subroutine RMFL20_lda_correlation_derivative_discontinuity(nEns,wEns,nGrid,weigh
integer :: iEns,jEns integer :: iEns,jEns
double precision,allocatable :: aMFL(:,:) double precision,allocatable :: aMFL(:,:)
double precision :: dEc(nEns) double precision :: dEcdw(nEns)
double precision,external :: Kronecker_delta double precision,external :: Kronecker_delta
! Output variables ! Output variables
double precision,intent(out) :: Ec(nEns) double precision,intent(out) :: EcDD(nEns)
! Allocation ! Allocation
@ -42,16 +42,16 @@ subroutine RMFL20_lda_correlation_derivative_discontinuity(nEns,wEns,nGrid,weigh
do iEns=1,nEns do iEns=1,nEns
call restricted_elda_correlation_energy(nEns,aMFL(:,iEns),nGrid,weight(:),rhow(:),dEc(iEns)) call restricted_elda_correlation_energy(nEns,aMFL(:,iEns),nGrid,weight(:),rhow(:),dEcdw(iEns))
end do end do
Ec(:) = 0d0 EcDD(:) = 0d0
do iEns=1,nEns do iEns=1,nEns
do jEns=1,nEns do jEns=1,nEns
Ec(iEns) = Ec(iEns) + (Kronecker_delta(iEns,jEns) - wEns(jEns))*(dEc(jEns) - dEc(1)) EcDD(iEns) = EcDD(iEns) + (Kronecker_delta(iEns,jEns) - wEns(jEns))*(dEcdw(jEns) - dEcdw(1))
end do end do
end do end do

View File

@ -15,11 +15,10 @@ subroutine RMFL20_lda_exchange_derivative_discontinuity(nEns,wEns,nGrid,weight,r
! Local variables ! Local variables
integer :: iG integer :: iEns,jEns
double precision :: Cx0 double precision :: Cx(nEns)
double precision :: Cx1 double precision :: dExdw(nEns)
double precision :: rw double precision,external :: Kronecker_delta
double precision :: dExdw
! Output variables ! Output variables
@ -27,26 +26,25 @@ subroutine RMFL20_lda_exchange_derivative_discontinuity(nEns,wEns,nGrid,weight,r
! Weight-dependent Cx coefficient for RMFL20 exchange functional ! Weight-dependent Cx coefficient for RMFL20 exchange functional
Cx0 = -(4d0/3d0)*(1d0/pi)**(1d0/3d0) Cx(1) = -(4d0/3d0)*(1d0/pi)**(1d0/3d0)
Cx1 = -(176d0/105d0)*(1d0/pi)**(1d0/3d0) Cx(2) = -(176d0/105d0)*(1d0/pi)**(1d0/3d0)
! Compute correlation energy for ground, singly-excited and doubly-excited states ! Compute correlation energy for ground, singly-excited and doubly-excited states
dExdw = 0d0 do iEns=1,nEns
do iG=1,nGrid call restricted_elda_exchange_energy(nEns,Cx(iEns),nGrid,weight(:),rhow(:),dExdw(iEns))
rw = max(0d0,rhow(iG))
if(rw > threshold) then
dExdw = dExdw + weight(iG)*(Cx1 - Cx0)*rw**(4d0/3d0)
end if
end do end do
ExDD(1) = - wEns(2) *dExdw ExDD(:) = 0d0
ExDD(2) = (1d0 - wEns(2))*dExdw
do iEns=1,nEns
do jEns=1,nEns
ExDD(iEns) = ExDD(iEns) + (Kronecker_delta(iEns,jEns) - wEns(jEns))*(dExdw(jEns) - dExdw(1))
end do
end do
end subroutine RMFL20_lda_exchange_derivative_discontinuity end subroutine RMFL20_lda_exchange_derivative_discontinuity

View File

@ -0,0 +1,42 @@
subroutine restricted_elda_exchange_energy(nEns,Cx,nGrid,weight,rho,Ex)
! Compute the restricted LDA exchange energy of 2-glomium for various states
implicit none
include 'parameters.h'
! Input variables
integer,intent(in) :: nEns
double precision,intent(in) :: Cx
integer,intent(in) :: nGrid
double precision,intent(in) :: weight(nGrid)
double precision,intent(in) :: rho(nGrid)
! Local variables
integer :: iG
double precision :: r
! Output variables
double precision,intent(out) :: Ex
! Compute eLDA exchange energy
Ex = 0d0
do iG=1,nGrid
r = max(0d0,rho(iG))
if(r > threshold) then
Ex = Ex + weight(iG)*Cx*r**(4d0/3d0)
end if
end do
end subroutine restricted_elda_exchange_energy