diff --git a/examples/molecule.H2 b/examples/molecule.H2 index 81c624a..8076140 100644 --- a/examples/molecule.H2 +++ b/examples/molecule.H2 @@ -1,5 +1,5 @@ # nAt nEla nElb nCore nRyd - 2 1 1 0 0 + 2 1 1 0 0 # Znuc x y z - H 0. 0. 0. - H 0. 0. 1.4 + H 0.0 0.0 0.0 + H 0.0 0.0 1.4 diff --git a/input/basis b/input/basis index 1ce59ba..a1f7a8d 100644 --- a/input/basis +++ b/input/basis @@ -1,62 +1,27 @@ -1 14 +1 5 S 3 - 1 82.6400000 0.0020060 - 2 12.4100000 0.0153430 - 3 2.8240000 0.0755790 + 1 13.0100000 0.0196850 + 2 1.9620000 0.1379770 + 3 0.4446000 0.4781480 S 1 - 1 0.7977000 1.0000000 + 1 0.1220000 1.0000000 S 1 - 1 0.2581000 1.0000000 -S 1 - 1 0.0898900 1.0000000 -S 1 - 1 0.0236300 1.0000000 + 1 0.0297400 1.0000000 P 1 - 1 2.2920000 1.0000000 + 1 0.7270000 1.0000000 P 1 - 1 0.8380000 1.0000000 -P 1 - 1 0.2920000 1.0000000 -P 1 - 1 0.0848000 1.0000000 -D 1 - 1 2.0620000 1.0000000 -D 1 - 1 0.6620000 1.0000000 -D 1 - 1 0.1900000 1.0000000 -F 1 - 1 1.3970000 1.0000000 -F 1 - 1 0.3600000 1.0000000 -2 14 + 1 0.1410000 1.0000000 +2 5 S 3 - 1 82.6400000 0.0020060 - 2 12.4100000 0.0153430 - 3 2.8240000 0.0755790 + 1 13.0100000 0.0196850 + 2 1.9620000 0.1379770 + 3 0.4446000 0.4781480 S 1 - 1 0.7977000 1.0000000 + 1 0.1220000 1.0000000 S 1 - 1 0.2581000 1.0000000 -S 1 - 1 0.0898900 1.0000000 -S 1 - 1 0.0236300 1.0000000 + 1 0.0297400 1.0000000 P 1 - 1 2.2920000 1.0000000 + 1 0.7270000 1.0000000 P 1 - 1 0.8380000 1.0000000 -P 1 - 1 0.2920000 1.0000000 -P 1 - 1 0.0848000 1.0000000 -D 1 - 1 2.0620000 1.0000000 -D 1 - 1 0.6620000 1.0000000 -D 1 - 1 0.1900000 1.0000000 -F 1 - 1 1.3970000 1.0000000 -F 1 - 1 0.3600000 1.0000000 + 1 0.1410000 1.0000000 + diff --git a/input/dft b/input/dft index b786990..21ea210 100644 --- a/input/dft +++ b/input/dft @@ -1,10 +1,10 @@ # Restricted or unrestricted KS calculation LIM-RKS -# exchange rung: +# exchange rung: # Hartree = 0 # LDA = 1: RS51,RMFL20 # GGA = 2: RB88 -# Hybrid = 4 +# Hybrid = 4 # Hartree-Fock = 666 1 RMFL20 # correlation rung: @@ -13,12 +13,12 @@ # GGA = 2: # Hybrid = 4: # Hartree-Fock = 666 - 666 HF + 1 RVWN5 # quadrature grid SG-n 1 # Number of states in ensemble (nEns) 2 # Ensemble weights: wEns(1),...,wEns(nEns-1) - 1.00000 0.00000 + 0.5 0.0 # GOK-DFT: maxSCF thresh DIIS n_diis guess_type ortho_type 32 0.00001 T 5 1 1 diff --git a/input/molecule b/input/molecule index 81c624a..8076140 100644 --- a/input/molecule +++ b/input/molecule @@ -1,5 +1,5 @@ # nAt nEla nElb nCore nRyd - 2 1 1 0 0 + 2 1 1 0 0 # Znuc x y z - H 0. 0. 0. - H 0. 0. 1.4 + H 0.0 0.0 0.0 + H 0.0 0.0 1.4 diff --git a/input/weight b/input/weight index 1ce59ba..a1f7a8d 100644 --- a/input/weight +++ b/input/weight @@ -1,62 +1,27 @@ -1 14 +1 5 S 3 - 1 82.6400000 0.0020060 - 2 12.4100000 0.0153430 - 3 2.8240000 0.0755790 + 1 13.0100000 0.0196850 + 2 1.9620000 0.1379770 + 3 0.4446000 0.4781480 S 1 - 1 0.7977000 1.0000000 + 1 0.1220000 1.0000000 S 1 - 1 0.2581000 1.0000000 -S 1 - 1 0.0898900 1.0000000 -S 1 - 1 0.0236300 1.0000000 + 1 0.0297400 1.0000000 P 1 - 1 2.2920000 1.0000000 + 1 0.7270000 1.0000000 P 1 - 1 0.8380000 1.0000000 -P 1 - 1 0.2920000 1.0000000 -P 1 - 1 0.0848000 1.0000000 -D 1 - 1 2.0620000 1.0000000 -D 1 - 1 0.6620000 1.0000000 -D 1 - 1 0.1900000 1.0000000 -F 1 - 1 1.3970000 1.0000000 -F 1 - 1 0.3600000 1.0000000 -2 14 + 1 0.1410000 1.0000000 +2 5 S 3 - 1 82.6400000 0.0020060 - 2 12.4100000 0.0153430 - 3 2.8240000 0.0755790 + 1 13.0100000 0.0196850 + 2 1.9620000 0.1379770 + 3 0.4446000 0.4781480 S 1 - 1 0.7977000 1.0000000 + 1 0.1220000 1.0000000 S 1 - 1 0.2581000 1.0000000 -S 1 - 1 0.0898900 1.0000000 -S 1 - 1 0.0236300 1.0000000 + 1 0.0297400 1.0000000 P 1 - 1 2.2920000 1.0000000 + 1 0.7270000 1.0000000 P 1 - 1 0.8380000 1.0000000 -P 1 - 1 0.2920000 1.0000000 -P 1 - 1 0.0848000 1.0000000 -D 1 - 1 2.0620000 1.0000000 -D 1 - 1 0.6620000 1.0000000 -D 1 - 1 0.1900000 1.0000000 -F 1 - 1 1.3970000 1.0000000 -F 1 - 1 0.3600000 1.0000000 + 1 0.1410000 1.0000000 + diff --git a/src/eDFT/RMFL20_lda_correlation_energy.f90 b/src/eDFT/RMFL20_lda_correlation_energy.f90 index 8819239..7dd4b13 100644 --- a/src/eDFT/RMFL20_lda_correlation_energy.f90 +++ b/src/eDFT/RMFL20_lda_correlation_energy.f90 @@ -16,6 +16,7 @@ subroutine RMFL20_lda_correlation_energy(nEns,wEns,nGrid,weight,rho,Ec) ! Local variables + logical :: LDA_centered = .true. integer :: iEns double precision :: EcLDA double precision,allocatable :: aMFL(:,:) @@ -51,11 +52,11 @@ subroutine RMFL20_lda_correlation_energy(nEns,wEns,nGrid,weight,rho,Ec) call RVWN5_lda_correlation_energy(nGrid,weight(:),rho(:),EcLDA) - do iEns=1,nEns - - EceLDA(iEns) = EceLDA(iEns) + EcLDA - EceLDA(1) - - end do + if(LDA_centered) then + do iEns=1,nEns + EceLDA(iEns) = EceLDA(iEns) + EcLDA - EceLDA(1) + end do + end if ! Weight-denpendent functional for ensembles diff --git a/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 b/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 index 217ff6c..bbee4af 100644 --- a/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 +++ b/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 @@ -16,6 +16,7 @@ subroutine RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight,rhow, ! Local variables + logical :: LDA_centered = .true. integer :: iEns double precision :: EcLDA double precision,allocatable :: aMFL(:,:) @@ -51,9 +52,11 @@ subroutine RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight,rhow, call RVWN5_lda_correlation_individual_energy(nGrid,weight(:),rhow(:),rho(:),EcLDA) - do iEns=1,nEns - EceLDA(iEns) = EceLDA(iEns) + EcLDA - EceLDA(1) - end do + if(LDA_centered) then + do iEns=1,nEns + EceLDA(iEns) = EceLDA(iEns) + EcLDA - EceLDA(1) + end do + end if ! Weight-denpendent functional for ensembles diff --git a/src/eDFT/RMFL20_lda_correlation_potential.f90 b/src/eDFT/RMFL20_lda_correlation_potential.f90 index 81cc3ad..a747690 100644 --- a/src/eDFT/RMFL20_lda_correlation_potential.f90 +++ b/src/eDFT/RMFL20_lda_correlation_potential.f90 @@ -17,6 +17,7 @@ include 'parameters.h' ! Local variables + logical :: LDA_centered = .true. integer :: iEns double precision,allocatable :: aMFL(:,:) double precision,allocatable :: FcLDA(:,:) @@ -54,11 +55,11 @@ include 'parameters.h' call RVWN5_lda_correlation_potential(nGrid,weight,nBas,AO,rho,FcLDA) - do iEns=1,nEns - - FceLDA(:,:,iEns) = FceLDA(:,:,iEns) + FcLDA(:,:) - FceLDA(:,:,1) - - end do + if(LDA_centered) then + do iEns=1,nEns + FceLDA(:,:,iEns) = FceLDA(:,:,iEns) + FcLDA(:,:) - FceLDA(:,:,1) + end do + end if ! Weight-denpendent functional for ensembles diff --git a/src/eDFT/RMFL20_lda_exchange_derivative_discontinuity.f90 b/src/eDFT/RMFL20_lda_exchange_derivative_discontinuity.f90 index 08f352f..9b2b4c7 100644 --- a/src/eDFT/RMFL20_lda_exchange_derivative_discontinuity.f90 +++ b/src/eDFT/RMFL20_lda_exchange_derivative_discontinuity.f90 @@ -29,7 +29,7 @@ subroutine RMFL20_lda_exchange_derivative_discontinuity(nEns,wEns,nGrid,weight,r Cx(1) = Cx0 Cx(2) = Cx1 -! Compute correlation energy for ground, singly-excited and doubly-excited states +! Compute correlation energy for ground- and doubly-excited states do iEns=1,nEns @@ -42,7 +42,9 @@ subroutine RMFL20_lda_exchange_derivative_discontinuity(nEns,wEns,nGrid,weight,r do iEns=1,nEns do jEns=1,nEns - ExDD(iEns) = ExDD(iEns) + (Kronecker_delta(iEns,jEns) - wEns(jEns))*(dExdw(jEns) - dExdw(1)) + ExDD(iEns) = ExDD(iEns) + (Kronecker_delta(iEns,jEns) - wEns(jEns))* & + (dExdw(jEns) - dExdw(1)) +! (cos(2d0*pi*wEns(jEns)) + 1d0) end do end do diff --git a/src/eDFT/RMFL20_lda_exchange_energy.f90 b/src/eDFT/RMFL20_lda_exchange_energy.f90 index 5db13f0..f38d77a 100644 --- a/src/eDFT/RMFL20_lda_exchange_energy.f90 +++ b/src/eDFT/RMFL20_lda_exchange_energy.f90 @@ -16,6 +16,7 @@ subroutine RMFL20_lda_exchange_energy(nEns,wEns,nGrid,weight,rho,Ex) ! Local variables + logical :: LDA_centered = .true. integer :: iG double precision :: Cxw double precision :: r @@ -26,7 +27,13 @@ subroutine RMFL20_lda_exchange_energy(nEns,wEns,nGrid,weight,rho,Ex) ! Weight-denepdent Cx coefficient - Cxw = CxLDA + wEns(2)*(Cx1 - Cx0) + if(LDA_centered) then + Cxw = CxLDA + (Cx1 - Cx0)*wEns(2) + else + Cxw = wEns(1)*Cx0 + wEns(2)*Cx1 + end if + +! Cxw = CxLDA + (Cx1 - Cx0)*wEns(2)*(cos(2d0*pi*wEns(2)) + 1d0) ! Compute LDA exchange energy diff --git a/src/eDFT/RMFL20_lda_exchange_individual_energy.f90 b/src/eDFT/RMFL20_lda_exchange_individual_energy.f90 index 044eba9..52f76ab 100644 --- a/src/eDFT/RMFL20_lda_exchange_individual_energy.f90 +++ b/src/eDFT/RMFL20_lda_exchange_individual_energy.f90 @@ -16,6 +16,7 @@ subroutine RMFL20_lda_exchange_individual_energy(nEns,wEns,nGrid,weight,rhow,rho ! Local variables + logical :: LDA_centered = .true. integer :: iG double precision :: Cxw double precision :: r,rI @@ -27,7 +28,13 @@ subroutine RMFL20_lda_exchange_individual_energy(nEns,wEns,nGrid,weight,rhow,rho ! Weight-dependent Cx coefficient for RMFL20 exchange functional - Cxw = CxLDA + wEns(2)*(Cx1 - Cx0) + if(LDA_centered) then + Cxw = CxLDA + (Cx1 - Cx0)*wEns(2) + else + Cxw = wEns(1)*Cx0 + wEns(2)*Cx1 + end if + +! Cxw = CxLDA + (Cx1 - Cx0)*wEns(2)*(cos(2d0*pi*wEns(2)) + 1d0) ! Compute LDA exchange matrix in the AO basis diff --git a/src/eDFT/RMFL20_lda_exchange_potential.f90 b/src/eDFT/RMFL20_lda_exchange_potential.f90 index 5d989ec..040f217 100644 --- a/src/eDFT/RMFL20_lda_exchange_potential.f90 +++ b/src/eDFT/RMFL20_lda_exchange_potential.f90 @@ -17,6 +17,7 @@ subroutine RMFL20_lda_exchange_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,Fx) ! Local variables + logical :: LDA_centered = .true. integer :: mu,nu,iG double precision :: Cxw double precision :: r,vAO @@ -27,7 +28,13 @@ subroutine RMFL20_lda_exchange_potential(nEns,wEns,nGrid,weight,nBas,AO,rho,Fx) ! Weight-dependent Cx coefficient for RMFL20 exchange functional - Cxw = CxLDA + wEns(2)*(Cx1 - Cx0) + if(LDA_centered) then + Cxw = CxLDA + (Cx1 - Cx0)*wEns(2) + else + Cxw = wEns(1)*Cx0 + wEns(2)*Cx1 + end if + +! Cxw = CxLDA + (Cx1 - Cx0)*wEns(2)*(cos(2d0*pi*wEns(2)) + 1d0) ! Compute LDA exchange matrix in the AO basis