mirror of
https://github.com/pfloos/quack
synced 2024-12-22 20:35:36 +01:00
4-state eDFT
This commit is contained in:
parent
494204113b
commit
20281b2c8d
@ -15,7 +15,7 @@
|
|||||||
# Hybrid = 4: HF,B3LYP,PBE
|
# Hybrid = 4: HF,B3LYP,PBE
|
||||||
1 VWN5
|
1 VWN5
|
||||||
# quadrature grid SG-n
|
# quadrature grid SG-n
|
||||||
1
|
0
|
||||||
# Number of states in ensemble (nEns)
|
# Number of states in ensemble (nEns)
|
||||||
4
|
4
|
||||||
# occupation numbers
|
# occupation numbers
|
||||||
@ -31,7 +31,7 @@
|
|||||||
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||||
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||||
# Ensemble weights: wEns(1),...,wEns(nEns-1)
|
# Ensemble weights: wEns(1),...,wEns(nEns-1)
|
||||||
0.25 0.25 0.25
|
0.00 0.00 0.00
|
||||||
# N-centered?
|
# N-centered?
|
||||||
T
|
T
|
||||||
# Parameters for CC weight-dependent exchange functional
|
# Parameters for CC weight-dependent exchange functional
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# RHF UHF KS MOM
|
# RHF UHF KS MOM
|
||||||
T F F F
|
F F T F
|
||||||
# MP2* MP3 MP2-F12
|
# MP2* MP3 MP2-F12
|
||||||
F F F
|
F F F
|
||||||
# CCD DCD CCSD CCSD(T)
|
# CCD DCD CCSD CCSD(T)
|
||||||
@ -13,7 +13,7 @@
|
|||||||
# G0F2* evGF2* qsGF2* G0F3 evGF3
|
# G0F2* evGF2* qsGF2* G0F3 evGF3
|
||||||
F F F F F
|
F F F F F
|
||||||
# G0W0* evGW* qsGW* ufG0W0 ufGW
|
# G0W0* evGW* qsGW* ufG0W0 ufGW
|
||||||
T F F F F
|
F F F F F
|
||||||
# G0T0 evGT qsGT
|
# G0T0 evGT qsGT
|
||||||
F F F
|
F F F
|
||||||
# MCMP2
|
# MCMP2
|
||||||
|
@ -52,7 +52,7 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,n
|
|||||||
|
|
||||||
character(len=8) :: method
|
character(len=8) :: method
|
||||||
integer :: x_rung,c_rung
|
integer :: x_rung,c_rung
|
||||||
character(len=12) :: x_DFA ,c_DFA
|
integer :: x_DFA,c_DFA
|
||||||
logical :: LDA_centered = .true.
|
logical :: LDA_centered = .true.
|
||||||
|
|
||||||
integer :: SGn
|
integer :: SGn
|
||||||
@ -80,6 +80,7 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,n
|
|||||||
|
|
||||||
integer :: i,vmajor,vminor,vmicro
|
integer :: i,vmajor,vminor,vmicro
|
||||||
integer :: iBas,iEns,ispin
|
integer :: iBas,iEns,ispin
|
||||||
|
integer :: icart,iGrid
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
@ -118,6 +119,22 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,n
|
|||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Construct quadrature grid
|
! Construct quadrature grid
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
if(SGn == -1) then
|
||||||
|
|
||||||
|
write(*,*) '*** Quadrature grid on atomic sites ! ***'
|
||||||
|
write(*,*)
|
||||||
|
nGrid = nNuc
|
||||||
|
allocate(root(ncart,nGrid),weight(nGrid))
|
||||||
|
|
||||||
|
do icart=1,ncart
|
||||||
|
do iGrid=1,nGrid
|
||||||
|
root(icart,iGrid) = rNuc(iGrid,icart)
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
weight(:) = 1d0
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
call read_grid(SGn,radial_precision,nRad,nAng,nGrid)
|
call read_grid(SGn,radial_precision,nRad,nAng,nGrid)
|
||||||
|
|
||||||
call allocate_grid(nNuc,ZNuc,max_ang_mom,min_exponent,max_exponent,radial_precision,nAng,nGrid)
|
call allocate_grid(nNuc,ZNuc,max_ang_mom,min_exponent,max_exponent,radial_precision,nAng,nGrid)
|
||||||
@ -127,6 +144,8 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,n
|
|||||||
call build_grid(nNuc,ZNuc,rNuc,max_ang_mom,min_exponent,max_exponent, &
|
call build_grid(nNuc,ZNuc,rNuc,max_ang_mom,min_exponent,max_exponent, &
|
||||||
radial_precision,nRad,nAng,nGrid,weight,root)
|
radial_precision,nRad,nAng,nGrid,weight,root)
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Calculate AO values at grid points
|
! Calculate AO values at grid points
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
@ -9,7 +9,7 @@ subroutine eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weig
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: x_rung,c_rung
|
integer,intent(in) :: x_rung,c_rung
|
||||||
character(len=12),intent(in) :: x_DFA,c_DFA
|
integer,intent(in) :: x_DFA,c_DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
double precision,intent(in) :: aCC_w1(3)
|
double precision,intent(in) :: aCC_w1(3)
|
||||||
@ -108,21 +108,21 @@ subroutine eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weig
|
|||||||
|
|
||||||
! Select rung for exchange
|
! Select rung for exchange
|
||||||
|
|
||||||
write(*,*)
|
! write(*,*)
|
||||||
write(*,*) '*******************************************************************'
|
! write(*,*) '*******************************************************************'
|
||||||
write(*,*) '* Exchange rung *'
|
! write(*,*) '* Exchange rung *'
|
||||||
write(*,*) '*******************************************************************'
|
! write(*,*) '*******************************************************************'
|
||||||
|
|
||||||
call select_rung(x_rung,x_DFA)
|
! call select_rung(x_rung,x_DFA)
|
||||||
|
|
||||||
! Select rung for correlation
|
! Select rung for correlation
|
||||||
|
|
||||||
write(*,*)
|
! write(*,*)
|
||||||
write(*,*) '*******************************************************************'
|
! write(*,*) '*******************************************************************'
|
||||||
write(*,*) '* Correlation rung *'
|
! write(*,*) '* Correlation rung *'
|
||||||
write(*,*) '*******************************************************************'
|
! write(*,*) '*******************************************************************'
|
||||||
|
|
||||||
call select_rung(c_rung,c_DFA)
|
! call select_rung(c_rung,c_DFA)
|
||||||
|
|
||||||
! Overall rung
|
! Overall rung
|
||||||
|
|
||||||
|
@ -17,12 +17,13 @@ subroutine read_options_dft(nBas,method,x_rung,x_DFA,c_rung,c_DFA,SGn,nEns,wEns,
|
|||||||
integer :: iParam
|
integer :: iParam
|
||||||
character(len=1) :: answer
|
character(len=1) :: answer
|
||||||
double precision,allocatable :: nEl(:)
|
double precision,allocatable :: nEl(:)
|
||||||
|
character(len=12) :: x_func,c_func
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
character(len=8),intent(out) :: method
|
character(len=8),intent(out) :: method
|
||||||
integer,intent(out) :: x_rung,c_rung
|
integer,intent(out) :: x_rung,c_rung
|
||||||
character(len=12),intent(out) :: x_DFA,c_DFA
|
integer,intent(out) :: x_DFA,c_DFA
|
||||||
integer,intent(out) :: SGn
|
integer,intent(out) :: SGn
|
||||||
integer,intent(out) :: nEns
|
integer,intent(out) :: nEns
|
||||||
logical,intent(out) :: doNcentered
|
logical,intent(out) :: doNcentered
|
||||||
@ -42,8 +43,8 @@ subroutine read_options_dft(nBas,method,x_rung,x_DFA,c_rung,c_DFA,SGn,nEns,wEns,
|
|||||||
method = 'eDFT-UKS'
|
method = 'eDFT-UKS'
|
||||||
x_rung = 1
|
x_rung = 1
|
||||||
c_rung = 1
|
c_rung = 1
|
||||||
x_DFA = 'S51'
|
x_DFA = 1
|
||||||
c_DFA = 'VWN5'
|
c_DFA = 1
|
||||||
SGn = 0
|
SGn = 0
|
||||||
wEns(:) = 0d0
|
wEns(:) = 0d0
|
||||||
|
|
||||||
@ -52,7 +53,9 @@ subroutine read_options_dft(nBas,method,x_rung,x_DFA,c_rung,c_DFA,SGn,nEns,wEns,
|
|||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*) method
|
read(1,*) method
|
||||||
|
|
||||||
! EXCHANGE: read rung of Jacob's ladder
|
!---------------------------------------!
|
||||||
|
! EXCHANGE: read rung of Jacob's ladder !
|
||||||
|
!---------------------------------------!
|
||||||
|
|
||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*)
|
read(1,*)
|
||||||
@ -60,9 +63,124 @@ subroutine read_options_dft(nBas,method,x_rung,x_DFA,c_rung,c_DFA,SGn,nEns,wEns,
|
|||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*) x_rung,x_DFA
|
read(1,*) x_rung,x_func
|
||||||
|
|
||||||
! CORRELATION: read rung of Jacob's ladder
|
select case (x_rung) ! exchange functionals
|
||||||
|
|
||||||
|
case (0) ! Hartree
|
||||||
|
|
||||||
|
select case (x_func)
|
||||||
|
|
||||||
|
case ('H')
|
||||||
|
|
||||||
|
x_DFA = 1
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! Hartree exchange functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (1) ! LDA
|
||||||
|
|
||||||
|
select case (x_func)
|
||||||
|
|
||||||
|
case ('S51')
|
||||||
|
|
||||||
|
x_DFA = 1
|
||||||
|
|
||||||
|
case ('CC-S51')
|
||||||
|
|
||||||
|
x_DFA = 2
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! LDA exchange functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (2) ! GGA
|
||||||
|
|
||||||
|
select case (x_func)
|
||||||
|
|
||||||
|
case ('G96')
|
||||||
|
|
||||||
|
x_DFA = 1
|
||||||
|
|
||||||
|
case ('B88')
|
||||||
|
|
||||||
|
x_DFA = 2
|
||||||
|
|
||||||
|
case ('PBE')
|
||||||
|
|
||||||
|
x_DFA = 3
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! GGA exchange functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (3) ! MGGA
|
||||||
|
|
||||||
|
select case (x_func)
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! MGGA exchange functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (4) ! Hybrid
|
||||||
|
|
||||||
|
select case (x_func)
|
||||||
|
|
||||||
|
case ('HF')
|
||||||
|
|
||||||
|
x_DFA = 1
|
||||||
|
|
||||||
|
case ('B3LYP')
|
||||||
|
|
||||||
|
x_DFA = 2
|
||||||
|
|
||||||
|
case ('BHHLYP')
|
||||||
|
|
||||||
|
x_DFA = 3
|
||||||
|
|
||||||
|
case ('PBE')
|
||||||
|
|
||||||
|
x_DFA = 4
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! Hybrid exchange functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! Exchange rung not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
! Select rung for exchange
|
||||||
|
|
||||||
|
write(*,*)
|
||||||
|
write(*,*) '*******************************************************************'
|
||||||
|
write(*,*) '* Exchange rung *'
|
||||||
|
write(*,*) '*******************************************************************'
|
||||||
|
|
||||||
|
call select_rung(x_rung,x_func)
|
||||||
|
|
||||||
|
!------------------------------------------!
|
||||||
|
! CORRELATION: read rung of Jacob's ladder !
|
||||||
|
!------------------------------------------!
|
||||||
|
|
||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*)
|
read(1,*)
|
||||||
@ -70,7 +188,128 @@ subroutine read_options_dft(nBas,method,x_rung,x_DFA,c_rung,c_DFA,SGn,nEns,wEns,
|
|||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*)
|
read(1,*)
|
||||||
read(1,*) c_rung,c_DFA
|
read(1,*) c_rung,c_func
|
||||||
|
|
||||||
|
select case (c_rung) ! correlation functionals
|
||||||
|
|
||||||
|
case (0) ! Hartree
|
||||||
|
|
||||||
|
select case (c_func)
|
||||||
|
|
||||||
|
case ('H')
|
||||||
|
|
||||||
|
c_DFA = 1
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! Hartree correlation functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (1) ! LDA
|
||||||
|
|
||||||
|
select case (c_func)
|
||||||
|
|
||||||
|
case ('W38')
|
||||||
|
|
||||||
|
c_DFA = 1
|
||||||
|
|
||||||
|
case ('PW92')
|
||||||
|
|
||||||
|
c_DFA = 2
|
||||||
|
|
||||||
|
case ('VWN3')
|
||||||
|
|
||||||
|
c_DFA = 3
|
||||||
|
|
||||||
|
case ('VWN5')
|
||||||
|
|
||||||
|
c_DFA = 4
|
||||||
|
|
||||||
|
case ('eVWN5')
|
||||||
|
|
||||||
|
c_DFA = 5
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! LDA correlation functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (2) ! GGA
|
||||||
|
|
||||||
|
select case (c_func)
|
||||||
|
|
||||||
|
case ('LYP')
|
||||||
|
|
||||||
|
c_DFA = 1
|
||||||
|
|
||||||
|
case ('PBE')
|
||||||
|
|
||||||
|
c_DFA = 2
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! GGA correlation functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (3) ! MGGA
|
||||||
|
|
||||||
|
select case (c_func)
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! MGGA correlation functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case (4) ! Hybrid
|
||||||
|
|
||||||
|
select case (c_func)
|
||||||
|
|
||||||
|
case ('HF')
|
||||||
|
|
||||||
|
c_DFA = 1
|
||||||
|
|
||||||
|
case ('B3LYP')
|
||||||
|
|
||||||
|
c_DFA = 2
|
||||||
|
|
||||||
|
case ('BHHLYP')
|
||||||
|
|
||||||
|
c_DFA = 3
|
||||||
|
|
||||||
|
case ('PBE')
|
||||||
|
|
||||||
|
c_DFA = 4
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! Hybrid correlation functional not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
case default
|
||||||
|
|
||||||
|
call print_warning('!!! Correlation rung not available !!!')
|
||||||
|
stop
|
||||||
|
|
||||||
|
end select
|
||||||
|
|
||||||
|
! Select rung for correlation
|
||||||
|
|
||||||
|
write(*,*)
|
||||||
|
write(*,*) '*******************************************************************'
|
||||||
|
write(*,*) '* Correlation rung *'
|
||||||
|
write(*,*) '*******************************************************************'
|
||||||
|
|
||||||
|
call select_rung(c_rung,c_func)
|
||||||
|
|
||||||
! Read SG-n grid
|
! Read SG-n grid
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_correlation_derivative_discontinuity(rung,DFA,nEns,wEns,
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_correlation_energy(rung,DFA,nEns,wEns,nGrid,weight,rho,d
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_correlation_individual_energy(rung,DFA,LDA_centered,nEns
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_correlation_potential(rung,DFA,nEns,wEns,nGrid,weight,nB
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_exchange_derivative_discontinuity(rung,DFA,nEns,wEns,aCC
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
double precision,intent(in) :: aCC_w1(3)
|
double precision,intent(in) :: aCC_w1(3)
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_exchange_energy(rung,DFA,LDA_centered,nEns,wEns,aCC_w1,a
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_exchange_individual_energy(rung,DFA,LDA_centered,nEns,wE
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_exchange_potential(rung,DFA,LDA_centered,nEns,wEns,aCC_w
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: rung
|
integer,intent(in) :: rung
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_gga_correlation_derivative_discontinuity(DFA,nEns,wEns,n
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -26,11 +26,11 @@ subroutine unrestricted_gga_correlation_derivative_discontinuity(DFA,nEns,wEns,n
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('LYP')
|
case (1)
|
||||||
|
|
||||||
Ec(:,:) = 0d0
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
case ('PBE')
|
case (2)
|
||||||
|
|
||||||
Ec(:,:) = 0d0
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_gga_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,dr
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -26,11 +26,11 @@ subroutine unrestricted_gga_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,dr
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('LYP')
|
case (1)
|
||||||
|
|
||||||
call ULYP_gga_correlation_energy(nGrid,weight,rho,drho,Ec)
|
call ULYP_gga_correlation_energy(nGrid,weight,rho,drho,Ec)
|
||||||
|
|
||||||
case ('PBE')
|
case (2)
|
||||||
|
|
||||||
call UPBE_gga_correlation_energy(nGrid,weight,rho,drho,Ec)
|
call UPBE_gga_correlation_energy(nGrid,weight,rho,drho,Ec)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_gga_correlation_potential(DFA,nEns,wEns,nGrid,weight,nBa
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -28,11 +28,11 @@ subroutine unrestricted_gga_correlation_potential(DFA,nEns,wEns,nGrid,weight,nBa
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('LYP')
|
case (1)
|
||||||
|
|
||||||
call ULYP_gga_correlation_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
call ULYP_gga_correlation_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
||||||
|
|
||||||
case ('PBE')
|
case (2)
|
||||||
|
|
||||||
call UPBE_gga_correlation_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
call UPBE_gga_correlation_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_gga_exchange_derivative_discontinuity(DFA,nEns,wEns,nGri
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -26,15 +26,15 @@ subroutine unrestricted_gga_exchange_derivative_discontinuity(DFA,nEns,wEns,nGri
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('G96')
|
case (1)
|
||||||
|
|
||||||
ExDD(:) = 0d0
|
ExDD(:) = 0d0
|
||||||
|
|
||||||
case ('B88')
|
case (2)
|
||||||
|
|
||||||
ExDD(:) = 0d0
|
ExDD(:) = 0d0
|
||||||
|
|
||||||
case ('PBE')
|
case (3)
|
||||||
|
|
||||||
ExDD(:) = 0d0
|
ExDD(:) = 0d0
|
||||||
|
|
||||||
|
@ -8,13 +8,13 @@ subroutine unrestricted_gga_exchange_energy(DFA,nEns,wEns,nGrid,weight,rho,drho,
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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)
|
||||||
double precision,intent(in) :: rho(nGrid)
|
double precision,intent(in) :: rho(nGrid)
|
||||||
double precision,intent(in) :: drho(3,nGrid)
|
double precision,intent(in) :: drho(ncart,nGrid)
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
@ -22,15 +22,15 @@ subroutine unrestricted_gga_exchange_energy(DFA,nEns,wEns,nGrid,weight,rho,drho,
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('G96')
|
case (1)
|
||||||
|
|
||||||
call UG96_gga_exchange_energy(nGrid,weight,rho,drho,Ex)
|
call UG96_gga_exchange_energy(nGrid,weight,rho,drho,Ex)
|
||||||
|
|
||||||
case ('B88')
|
case (2)
|
||||||
|
|
||||||
call UB88_gga_exchange_energy(nGrid,weight,rho,drho,Ex)
|
call UB88_gga_exchange_energy(nGrid,weight,rho,drho,Ex)
|
||||||
|
|
||||||
case ('PBE')
|
case (3)
|
||||||
|
|
||||||
call UPBE_gga_exchange_energy(nGrid,weight,rho,drho,Ex)
|
call UPBE_gga_exchange_energy(nGrid,weight,rho,drho,Ex)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_gga_exchange_individual_energy(DFA,nEns,wEns,nGrid,weigh
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_gga_exchange_potential(DFA,nEns,wEns,nGrid,weight,nBas,A
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -26,15 +26,15 @@ subroutine unrestricted_gga_exchange_potential(DFA,nEns,wEns,nGrid,weight,nBas,A
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('G96')
|
case (1)
|
||||||
|
|
||||||
call UG96_gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fx)
|
call UG96_gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fx)
|
||||||
|
|
||||||
case ('B88')
|
case (2)
|
||||||
|
|
||||||
call UB88_gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fx)
|
call UB88_gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fx)
|
||||||
|
|
||||||
case ('PBE')
|
case (3)
|
||||||
|
|
||||||
call UPBE_gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fx)
|
call UPBE_gga_exchange_potential(nGrid,weight,nBas,AO,dAO,rho,drho,Fx)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_hybrid_correlation_derivative_discontinuity(DFA,nEns,wEn
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -26,15 +26,15 @@ subroutine unrestricted_hybrid_correlation_derivative_discontinuity(DFA,nEns,wEn
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('HF')
|
case (1)
|
||||||
|
|
||||||
Ec(:,:) = 0d0
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
case ('LYP')
|
case (2)
|
||||||
|
|
||||||
Ec(:,:) = 0d0
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
case ('PBE')
|
case (3)
|
||||||
|
|
||||||
Ec(:,:) = 0d0
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_hybrid_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -27,26 +27,26 @@ subroutine unrestricted_hybrid_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case('HF')
|
case(1)
|
||||||
|
|
||||||
Ec(:) = 0d0
|
Ec(:) = 0d0
|
||||||
|
|
||||||
case('B3LYP')
|
case(2)
|
||||||
|
|
||||||
aC = 0.81d0
|
aC = 0.81d0
|
||||||
|
|
||||||
call unrestricted_lda_correlation_energy('VWN3 ',nEns,wEns,nGrid,weight,rho,EcLDA)
|
call unrestricted_lda_correlation_energy(3,nEns,wEns,nGrid,weight,rho,EcLDA)
|
||||||
call unrestricted_gga_correlation_energy('LYP ',nEns,wEns,nGrid,weight,rho,drho,EcGGA)
|
call unrestricted_gga_correlation_energy(1,nEns,wEns,nGrid,weight,rho,drho,EcGGA)
|
||||||
|
|
||||||
Ec(:) = EcLDA(:) + aC*(EcGGA(:) - EcLDA(:))
|
Ec(:) = EcLDA(:) + aC*(EcGGA(:) - EcLDA(:))
|
||||||
|
|
||||||
case('BHHLYP')
|
case(3)
|
||||||
|
|
||||||
call unrestricted_gga_correlation_energy('LYP ',nEns,wEns,nGrid,weight,rho,drho,Ec)
|
call unrestricted_gga_correlation_energy(1,nEns,wEns,nGrid,weight,rho,drho,Ec)
|
||||||
|
|
||||||
case('PBE')
|
case(4)
|
||||||
|
|
||||||
call unrestricted_gga_correlation_energy('PBE ',nEns,wEns,nGrid,weight,rho,drho,Ec)
|
call unrestricted_gga_correlation_energy(2,nEns,wEns,nGrid,weight,rho,drho,Ec)
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_hybrid_correlation_potential(DFA,nEns,wEns,nGrid,weight,
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -32,32 +32,32 @@ subroutine unrestricted_hybrid_correlation_potential(DFA,nEns,wEns,nGrid,weight,
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case('HF')
|
case(1)
|
||||||
|
|
||||||
Fc(:,:,:) = 0d0
|
Fc(:,:,:) = 0d0
|
||||||
|
|
||||||
case('B3LYP')
|
case(2)
|
||||||
|
|
||||||
allocate(FcLDA(nBas,nBas,nspin),FcGGA(nBas,nBas,nspin))
|
allocate(FcLDA(nBas,nBas,nspin),FcGGA(nBas,nBas,nspin))
|
||||||
|
|
||||||
aC = 0.81d0
|
aC = 0.81d0
|
||||||
|
|
||||||
call unrestricted_lda_correlation_potential('VWN3 ',nEns,wEns,nGrid,weight,nBas,AO,rho,FcLDA)
|
call unrestricted_lda_correlation_potential(3,nEns,wEns,nGrid,weight,nBas,AO,rho,FcLDA)
|
||||||
call unrestricted_gga_correlation_potential('LYP ',nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,FcGGA)
|
call unrestricted_gga_correlation_potential(1,nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,FcGGA)
|
||||||
|
|
||||||
Fc(:,:,:) = FcLDA(:,:,:) + aC*(FcGGA(:,:,:) - FcLDA(:,:,:))
|
Fc(:,:,:) = FcLDA(:,:,:) + aC*(FcGGA(:,:,:) - FcLDA(:,:,:))
|
||||||
|
|
||||||
case('BHHLYP')
|
case(3)
|
||||||
|
|
||||||
allocate(FcGGA(nBas,nBas,nspin))
|
allocate(FcGGA(nBas,nBas,nspin))
|
||||||
|
|
||||||
call unrestricted_gga_correlation_potential('LYP ',nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
call unrestricted_gga_correlation_potential(1,nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
||||||
|
|
||||||
case('PBE')
|
case(4)
|
||||||
|
|
||||||
allocate(FcGGA(nBas,nBas,nspin))
|
allocate(FcGGA(nBas,nBas,nspin))
|
||||||
|
|
||||||
call unrestricted_gga_correlation_potential('PBE ',nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
call unrestricted_gga_correlation_potential(2,nEns,wEns,nGrid,weight,nBas,AO,dAO,rho,drho,Fc)
|
||||||
|
|
||||||
case default
|
case default
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_hybrid_exchange_derivative_discontinuity(DFA,nEns,wEns,a
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
double precision,intent(in) :: aCC_w1(3)
|
double precision,intent(in) :: aCC_w1(3)
|
||||||
@ -32,15 +32,15 @@ subroutine unrestricted_hybrid_exchange_derivative_discontinuity(DFA,nEns,wEns,a
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('HF')
|
case (1)
|
||||||
|
|
||||||
ExDD(:) = 0d0
|
ExDD(:) = 0d0
|
||||||
|
|
||||||
case ('B3')
|
case (2)
|
||||||
|
|
||||||
ExDD(:) = 0d0
|
ExDD(:) = 0d0
|
||||||
|
|
||||||
case ('PBE')
|
case (3)
|
||||||
|
|
||||||
ExDD(:) = 0d0
|
ExDD(:) = 0d0
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_hybrid_exchange_energy(DFA,LDA_centered,nEns,wEns,aCC_w1
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
@ -34,34 +34,34 @@ subroutine unrestricted_hybrid_exchange_energy(DFA,LDA_centered,nEns,wEns,aCC_w1
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('HF')
|
case (1)
|
||||||
|
|
||||||
call unrestricted_fock_exchange_energy(nBas,P,FxHF,Ex)
|
call unrestricted_fock_exchange_energy(nBas,P,FxHF,Ex)
|
||||||
|
|
||||||
case ('B3LYP')
|
case (2)
|
||||||
|
|
||||||
a0 = 0.20d0
|
a0 = 0.20d0
|
||||||
aX = 0.72d0
|
aX = 0.72d0
|
||||||
|
|
||||||
call unrestricted_lda_exchange_energy('S51 ',LDA_centered,nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,&
|
call unrestricted_lda_exchange_energy(1,LDA_centered,nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,&
|
||||||
rho,ExLDA,Cx_choice)
|
rho,ExLDA,Cx_choice)
|
||||||
call unrestricted_gga_exchange_energy('B88 ',nEns,wEns,nGrid,weight,rho,drho,ExGGA)
|
call unrestricted_gga_exchange_energy(2,nEns,wEns,nGrid,weight,rho,drho,ExGGA)
|
||||||
call unrestricted_fock_exchange_energy(nBas,P,FxHF,ExHF)
|
call unrestricted_fock_exchange_energy(nBas,P,FxHF,ExHF)
|
||||||
|
|
||||||
Ex = ExLDA &
|
Ex = ExLDA &
|
||||||
+ a0*(ExHF - ExLDA) &
|
+ a0*(ExHF - ExLDA) &
|
||||||
+ aX*(ExGGA - ExLDA)
|
+ aX*(ExGGA - ExLDA)
|
||||||
|
|
||||||
case ('BHHLYP')
|
case (3)
|
||||||
|
|
||||||
call unrestricted_gga_exchange_energy('B88 ',nEns,wEns,nGrid,weight,rho,drho,ExGGA)
|
call unrestricted_gga_exchange_energy(2,nEns,wEns,nGrid,weight,rho,drho,ExGGA)
|
||||||
call unrestricted_fock_exchange_energy(nBas,P,FxHF,ExHF)
|
call unrestricted_fock_exchange_energy(nBas,P,FxHF,ExHF)
|
||||||
|
|
||||||
Ex = 0.5d0*ExHF + 0.5d0*ExGGA
|
Ex = 0.5d0*ExHF + 0.5d0*ExGGA
|
||||||
|
|
||||||
case ('PBE')
|
case (4)
|
||||||
|
|
||||||
call unrestricted_gga_exchange_energy('PBE ',nEns,wEns,nGrid,weight,rho,drho,ExGGA)
|
call unrestricted_gga_exchange_energy(3,nEns,wEns,nGrid,weight,rho,drho,ExGGA)
|
||||||
call unrestricted_fock_exchange_energy(nBas,P,FxHF,ExHF)
|
call unrestricted_fock_exchange_energy(nBas,P,FxHF,ExHF)
|
||||||
|
|
||||||
Ex = 0.25d0*ExHF + 0.75d0*ExGGA
|
Ex = 0.25d0*ExHF + 0.75d0*ExGGA
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_hybrid_exchange_potential(DFA,LDA_centered,nEns,wEns,aCC
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
@ -38,12 +38,12 @@ subroutine unrestricted_hybrid_exchange_potential(DFA,LDA_centered,nEns,wEns,aCC
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case('HF')
|
case(1)
|
||||||
|
|
||||||
call unrestricted_fock_exchange_potential(nBas,P,ERI,FxHF)
|
call unrestricted_fock_exchange_potential(nBas,P,ERI,FxHF)
|
||||||
Fx(:,:) = FxHF(:,:)
|
Fx(:,:) = FxHF(:,:)
|
||||||
|
|
||||||
case('B3LYP')
|
case(2)
|
||||||
|
|
||||||
allocate(FxLDA(nBas,nBas),FxGGA(nBas,nBas))
|
allocate(FxLDA(nBas,nBas),FxGGA(nBas,nBas))
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ subroutine unrestricted_hybrid_exchange_potential(DFA,LDA_centered,nEns,wEns,aCC
|
|||||||
+ a0*(FxHF(:,:) - FxLDA(:,:)) &
|
+ a0*(FxHF(:,:) - FxLDA(:,:)) &
|
||||||
+ aX*(FxGGA(:,:) - FxLDA(:,:))
|
+ aX*(FxGGA(:,:) - FxLDA(:,:))
|
||||||
|
|
||||||
case('BHHLYP')
|
case(3)
|
||||||
|
|
||||||
allocate(FxGGA(nBas,nBas))
|
allocate(FxGGA(nBas,nBas))
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ subroutine unrestricted_hybrid_exchange_potential(DFA,LDA_centered,nEns,wEns,aCC
|
|||||||
|
|
||||||
Fx(:,:) = 0.5d0*FxHF(:,:) + 0.5d0*FxGGA(:,:)
|
Fx(:,:) = 0.5d0*FxHF(:,:) + 0.5d0*FxGGA(:,:)
|
||||||
|
|
||||||
case('PBE')
|
case(4)
|
||||||
|
|
||||||
allocate(FxGGA(nBas,nBas))
|
allocate(FxGGA(nBas,nBas))
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ subroutine unrestricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,LDA_centered
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
integer,intent(in) :: x_rung,c_rung
|
integer,intent(in) :: x_rung,c_rung
|
||||||
character(len=12),intent(in) :: x_DFA,c_DFA
|
integer,intent(in) :: x_DFA,c_DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
@ -212,7 +212,7 @@ subroutine unrestricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,LDA_centered
|
|||||||
|
|
||||||
do iEns=1,nEns
|
do iEns=1,nEns
|
||||||
call unrestricted_correlation_individual_energy(c_rung,c_DFA,LDA_centered,nEns,wEns,nGrid,weight, &
|
call unrestricted_correlation_individual_energy(c_rung,c_DFA,LDA_centered,nEns,wEns,nGrid,weight, &
|
||||||
rhow,drhow,rho(:,:,iEns),drho(:,:,:,iEns),kappa(iEns),Ec(:,iEns))
|
rhow,drhow,rho(:,:,iEns),drho(:,:,:,iEns),doNcentered,kappa(iEns),Ec(:,iEns))
|
||||||
end do
|
end do
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_lda_correlation_derivative_discontinuity(DFA,nEns,wEns,n
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -26,15 +26,19 @@ subroutine unrestricted_lda_correlation_derivative_discontinuity(DFA,nEns,wEns,n
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
! Wigner's LDA correlation functional: Wigner, Trans. Faraday Soc. 34 (1938) 678
|
case (1)
|
||||||
|
|
||||||
case ('W38')
|
|
||||||
|
|
||||||
Ec(:,:) = 0d0
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
! Vosko, Wilk and Nusair's functional V: Can. J. Phys. 58 (1980) 1200
|
case (2)
|
||||||
|
|
||||||
case ('VWN5')
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
|
case (3)
|
||||||
|
|
||||||
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
|
case (4)
|
||||||
|
|
||||||
Ec(:,:) = 0d0
|
Ec(:,:) = 0d0
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_lda_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,Ec
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -24,27 +24,23 @@ subroutine unrestricted_lda_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,Ec
|
|||||||
|
|
||||||
! Hartree-Fock
|
! Hartree-Fock
|
||||||
|
|
||||||
case ('HF')
|
case (1)
|
||||||
|
|
||||||
Ec(:) = 0d0
|
|
||||||
|
|
||||||
case ('W38')
|
|
||||||
|
|
||||||
call UW38_lda_correlation_energy(nGrid,weight,rho,Ec)
|
call UW38_lda_correlation_energy(nGrid,weight,rho,Ec)
|
||||||
|
|
||||||
case ('PW92')
|
case (2)
|
||||||
|
|
||||||
call UPW92_lda_correlation_energy(nGrid,weight,rho,Ec)
|
call UPW92_lda_correlation_energy(nGrid,weight,rho,Ec)
|
||||||
|
|
||||||
case ('VWN3')
|
case (3)
|
||||||
|
|
||||||
call UVWN3_lda_correlation_energy(nGrid,weight,rho,Ec)
|
call UVWN3_lda_correlation_energy(nGrid,weight,rho,Ec)
|
||||||
|
|
||||||
case ('VWN5')
|
case (4)
|
||||||
|
|
||||||
call UVWN5_lda_correlation_energy(nGrid,weight,rho,Ec)
|
call UVWN5_lda_correlation_energy(nGrid,weight,rho,Ec)
|
||||||
|
|
||||||
case ('C16')
|
case (5)
|
||||||
|
|
||||||
call UC16_lda_correlation_energy(nGrid,weight,rho,Ec)
|
call UC16_lda_correlation_energy(nGrid,weight,rho,Ec)
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
logical,intent(in) :: LDA_centered
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -27,13 +27,11 @@ subroutine unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
! Vosko, Wilk and Nusair's functional V: Can. J. Phys. 58 (1980) 1200
|
case (3)
|
||||||
|
|
||||||
case ('VWN3')
|
|
||||||
|
|
||||||
call UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec)
|
call UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec)
|
||||||
|
|
||||||
case ('VWN5')
|
case (4)
|
||||||
|
|
||||||
call UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec)
|
call UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ include 'parameters.h'
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
@ -26,27 +26,23 @@ include 'parameters.h'
|
|||||||
|
|
||||||
! Hartree-Fock
|
! Hartree-Fock
|
||||||
|
|
||||||
case ('HF')
|
case (1)
|
||||||
|
|
||||||
Fc(:,:,:) = 0d0
|
|
||||||
|
|
||||||
case ('W38')
|
|
||||||
|
|
||||||
call UW38_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
call UW38_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
||||||
|
|
||||||
case ('PW92')
|
case (2)
|
||||||
|
|
||||||
call UPW92_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
call UPW92_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
||||||
|
|
||||||
case ('VWN3')
|
case (3)
|
||||||
|
|
||||||
call UVWN3_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
call UVWN3_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
||||||
|
|
||||||
case ('VWN5')
|
case (4)
|
||||||
|
|
||||||
call UVWN5_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
call UVWN5_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
||||||
|
|
||||||
case ('C16')
|
case (5)
|
||||||
|
|
||||||
call UC16_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
call UC16_lda_correlation_potential(nGrid,weight(:),nBas,AO(:,:),rho(:,:),Fc(:,:,:))
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_lda_exchange_derivative_discontinuity(DFA,nEns,wEns,aCC_
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
double precision,intent(in) :: aCC_w1(3)
|
double precision,intent(in) :: aCC_w1(3)
|
||||||
@ -32,11 +32,11 @@ subroutine unrestricted_lda_exchange_derivative_discontinuity(DFA,nEns,wEns,aCC_
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('S51')
|
case (1)
|
||||||
|
|
||||||
ExDD(:) = 0d0
|
ExDD(:) = 0d0
|
||||||
|
|
||||||
case ('CC')
|
case (2)
|
||||||
|
|
||||||
call UCC_lda_exchange_derivative_discontinuity(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight(:),rhow(:),&
|
call UCC_lda_exchange_derivative_discontinuity(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight(:),rhow(:),&
|
||||||
Cx_choice,doNcentered,kappa,ExDD(:))
|
Cx_choice,doNcentered,kappa,ExDD(:))
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_lda_exchange_energy(DFA,LDA_centered,nEns,wEns,aCC_w1,aC
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
logical,intent(in) :: LDA_centered
|
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)
|
||||||
@ -26,11 +26,11 @@ subroutine unrestricted_lda_exchange_energy(DFA,LDA_centered,nEns,wEns,aCC_w1,aC
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('S51')
|
case (1)
|
||||||
|
|
||||||
call US51_lda_exchange_energy(nGrid,weight,rho,Ex)
|
call US51_lda_exchange_energy(nGrid,weight,rho,Ex)
|
||||||
|
|
||||||
case ('CC')
|
case (2)
|
||||||
|
|
||||||
call UCC_lda_exchange_energy(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,rho,Ex,Cx_choice)
|
call UCC_lda_exchange_energy(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,rho,Ex,Cx_choice)
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_lda_exchange_individual_energy(DFA,LDA_centered,nEns,wEn
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
logical,intent(in) :: LDA_centered
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
double precision,intent(in) :: aCC_w1(3)
|
double precision,intent(in) :: aCC_w1(3)
|
||||||
@ -31,11 +31,11 @@ subroutine unrestricted_lda_exchange_individual_energy(DFA,LDA_centered,nEns,wEn
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('S51')
|
case (1)
|
||||||
|
|
||||||
call US51_lda_exchange_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ex)
|
call US51_lda_exchange_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ex)
|
||||||
|
|
||||||
case ('CC')
|
case (2)
|
||||||
|
|
||||||
call UCC_lda_exchange_individual_energy(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,rhow,rho,&
|
call UCC_lda_exchange_individual_energy(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,rhow,rho,&
|
||||||
Cx_choice,doNcentered,kappa,Ex)
|
Cx_choice,doNcentered,kappa,Ex)
|
||||||
|
@ -9,7 +9,7 @@ subroutine unrestricted_lda_exchange_potential(DFA,LDA_centered,nEns,wEns,aCC_w1
|
|||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
logical,intent(in) :: LDA_centered
|
logical,intent(in) :: LDA_centered
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
integer,intent(in) :: nEns
|
integer,intent(in) :: nEns
|
||||||
double precision,intent(in) :: wEns(nEns)
|
double precision,intent(in) :: wEns(nEns)
|
||||||
double precision,intent(in) :: aCC_w1(3)
|
double precision,intent(in) :: aCC_w1(3)
|
||||||
@ -29,11 +29,11 @@ subroutine unrestricted_lda_exchange_potential(DFA,LDA_centered,nEns,wEns,aCC_w1
|
|||||||
|
|
||||||
select case (DFA)
|
select case (DFA)
|
||||||
|
|
||||||
case ('S51')
|
case (1)
|
||||||
|
|
||||||
call US51_lda_exchange_potential(nGrid,weight,nBas,AO,rho,Fx)
|
call US51_lda_exchange_potential(nGrid,weight,nBas,AO,rho,Fx)
|
||||||
|
|
||||||
case ('CC')
|
case (2)
|
||||||
|
|
||||||
call UCC_lda_exchange_potential(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,nBas,AO,rho,Fx,Cx_choice)
|
call UCC_lda_exchange_potential(nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,nBas,AO,rho,Fx,Cx_choice)
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_mgga_correlation_derivative_discontinuity(DFA,nEns,wEns,
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_mgga_correlation_energy(DFA,nEns,wEns,nGrid,weight,rho,d
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_mgga_correlation_potential(DFA,nEns,wEns,nGrid,weight,nB
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_mgga_exchange_derivative_discontinuity(DFA,nEns,wEns,nGr
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -8,7 +8,7 @@ subroutine unrestricted_mgga_exchange_energy(DFA,nEns,wEns,nGrid,weight,rho,drho
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_mgga_exchange_individual_energy(DFA,nEns,wEns,nGrid,weig
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
@ -7,7 +7,7 @@ subroutine unrestricted_mgga_exchange_potential(DFA,nEns,wEns,nGrid,weight,nBas,
|
|||||||
|
|
||||||
! Input variables
|
! Input variables
|
||||||
|
|
||||||
character(len=12),intent(in) :: DFA
|
integer,intent(in) :: DFA
|
||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user