mirror of
https://github.com/pfloos/quack
synced 2024-12-23 04:43:53 +01:00
Debug in progress
This commit is contained in:
parent
862b34099a
commit
a5163dbbcb
46
input/basis
46
input/basis
@ -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
|
|
||||||
|
@ -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
|
||||||
|
46
input/weight
46
input/weight
@ -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
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
42
src/eDFT/restricted_elda_exchange_energy.f90
Normal file
42
src/eDFT/restricted_elda_exchange_energy.f90
Normal 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
|
Loading…
Reference in New Issue
Block a user