From 954e6d2a29f9aaf133006ce56d86609929a79052 Mon Sep 17 00:00:00 2001 From: Pierre-Francois Loos Date: Tue, 17 Mar 2020 19:35:00 +0100 Subject: [PATCH] RMFL20 done --- src/eDFT/GOK_RKS.f90 | 3 ++- src/eDFT/RMFL20_lda_correlation_energy.f90 | 2 -- ...RMFL20_lda_correlation_individual_energy.f90 | 17 +++++------------ src/eDFT/RVWN5_lda_correlation_energy.f90 | 2 +- src/eDFT/print_restricted_individual_energy.f90 | 3 ++- src/eDFT/restricted_elda_correlation_energy.f90 | 6 +++--- ...icted_elda_correlation_individual_energy.f90 | 2 +- src/eDFT/restricted_individual_energy.f90 | 6 +++--- ...lda_correlation_derivative_discontinuity.f90 | 2 -- 9 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/eDFT/GOK_RKS.f90 b/src/eDFT/GOK_RKS.f90 index 03783c1..c8bf9cf 100644 --- a/src/eDFT/GOK_RKS.f90 +++ b/src/eDFT/GOK_RKS.f90 @@ -236,7 +236,7 @@ subroutine GOK_RKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thres call restricted_correlation_potential(c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:), & nBas,AO(:,:),dAO(:,:,:),rhow(:),drhow(:,:),Fc(:,:)) - +! print*,'Done with restricted_correlation_potential' ! Build Fock operator F(:,:) = Hc(:,:) + J(:,:) + Fx(:,:) + Fc(:,:) @@ -280,6 +280,7 @@ subroutine GOK_RKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGrid,weight,maxSCF,thres ! Correlation energy call restricted_correlation_energy(c_rung,c_DFA,nEns,wEns(:),nGrid,weight(:),rhow(:),drhow(:,:),Ec) +! print*,'Done with restricted_correlation_energy' ! Total energy diff --git a/src/eDFT/RMFL20_lda_correlation_energy.f90 b/src/eDFT/RMFL20_lda_correlation_energy.f90 index d1fb9d4..5ebe526 100644 --- a/src/eDFT/RMFL20_lda_correlation_energy.f90 +++ b/src/eDFT/RMFL20_lda_correlation_energy.f90 @@ -49,8 +49,6 @@ subroutine RMFL20_lda_correlation_energy(nEns,wEns,nGrid,weight,rho,Ec) ! LDA-centered functional - EcLDA = 0d0 - call RVWN5_lda_correlation_energy(nGrid,weight(:),rho(:),EcLDA) do iEns=1,nEns diff --git a/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 b/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 index ef06070..217ff6c 100644 --- a/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 +++ b/src/eDFT/RMFL20_lda_correlation_individual_energy.f90 @@ -16,7 +16,6 @@ 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(:,:) @@ -40,27 +39,21 @@ subroutine RMFL20_lda_correlation_individual_energy(nEns,wEns,nGrid,weight,rhow, aMFL(2,2) = -0.0506019d0 aMFL(3,2) = +0.0331417d0 -! Compute correlation energy for ground, singly-excited and doubly-excited states +! Compute correlation energy for ground- and doubly-excited states do iEns=1,nEns - call restricted_elda_correlation_individual_energy(nEns,aMFL(:,iEns),nGrid,weight(:),rhow(:),rho(:),EceLDA(iEns)) - end do ! LDA-centered functional EcLDA = 0d0 - 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) - - do iEns=1,nEns - EceLDA(iEns) = EceLDA(iEns) + EcLDA - EceLDA(1) - end do - - end if + do iEns=1,nEns + EceLDA(iEns) = EceLDA(iEns) + EcLDA - EceLDA(1) + end do ! Weight-denpendent functional for ensembles diff --git a/src/eDFT/RVWN5_lda_correlation_energy.f90 b/src/eDFT/RVWN5_lda_correlation_energy.f90 index 34bc6cb..4e3d3db 100644 --- a/src/eDFT/RVWN5_lda_correlation_energy.f90 +++ b/src/eDFT/RVWN5_lda_correlation_energy.f90 @@ -22,7 +22,7 @@ subroutine RVWN5_lda_correlation_energy(nGrid,weight,rho,Ec) ! Output variables - double precision :: Ec(nsp) + double precision :: Ec ! Parameters of the functional diff --git a/src/eDFT/print_restricted_individual_energy.f90 b/src/eDFT/print_restricted_individual_energy.f90 index 671b436..3529d3b 100644 --- a/src/eDFT/print_restricted_individual_energy.f90 +++ b/src/eDFT/print_restricted_individual_energy.f90 @@ -96,12 +96,13 @@ subroutine print_restricted_individual_energy(nEns,ET,EV,EJ,Ex,Ec,Exc,ExDD,EcDD, write(*,'(A50)') ' Derivative discontinuities (DD) ' write(*,'(A60)') '-------------------------------------------------' do iEns=1,nEns + write(*,*) write(*,'(A40,I2,A2,F16.10,A3)') ' x ensemble derivative state ',iEns,': ',ExDD(iEns), ' au' write(*,'(A40,I2,A2,F16.10,A3)') ' c ensemble derivative state ',iEns,': ',EcDD(iEns), ' au' write(*,'(A40,I2,A2,F16.10,A3)') ' xc ensemble derivative state ',iEns,': ',ExcDD(iEns),' au' - write(*,*) end do write(*,'(A60)') '-------------------------------------------------' + write(*,*) !------------------------------------------------------------------------ ! Total and Excitation energies diff --git a/src/eDFT/restricted_elda_correlation_energy.f90 b/src/eDFT/restricted_elda_correlation_energy.f90 index 6dd50fb..a54d88f 100644 --- a/src/eDFT/restricted_elda_correlation_energy.f90 +++ b/src/eDFT/restricted_elda_correlation_energy.f90 @@ -16,7 +16,7 @@ subroutine restricted_elda_correlation_energy(nEns,aMFL,nGrid,weight,rho,Ec) ! Local variables integer :: iG - double precision :: r,ec_p + double precision :: r,e ! Output variables @@ -33,9 +33,9 @@ subroutine restricted_elda_correlation_energy(nEns,aMFL,nGrid,weight,rho,Ec) if(r > threshold) then - ec_p = aMFL(1)/(1d0 + aMFL(2)*r**(-1d0/6d0) + aMFL(3)*r**(-1d0/3d0)) + e = aMFL(1)/(1d0 + aMFL(2)*r**(-1d0/6d0) + aMFL(3)*r**(-1d0/3d0)) - Ec = Ec + weight(iG)*ec_p*r + Ec = Ec + weight(iG)*e*r end if diff --git a/src/eDFT/restricted_elda_correlation_individual_energy.f90 b/src/eDFT/restricted_elda_correlation_individual_energy.f90 index dd61945..c9d2bad 100644 --- a/src/eDFT/restricted_elda_correlation_individual_energy.f90 +++ b/src/eDFT/restricted_elda_correlation_individual_energy.f90 @@ -43,7 +43,7 @@ subroutine restricted_elda_correlation_individual_energy(nEns,aLF,nGrid,weight,r dFcdr = ec_p*dFcdr/(6d0*r) dFcdr = ec_p + dFcdr*r - Ec = Ec + weight(iG)*rI*dFcdr + Ec = Ec + weight(iG)*(ec_p*rI + dFcdr*r*rI - dFcdr*r*r) end if diff --git a/src/eDFT/restricted_individual_energy.f90 b/src/eDFT/restricted_individual_energy.f90 index 0b15e40..e6f7276 100644 --- a/src/eDFT/restricted_individual_energy.f90 +++ b/src/eDFT/restricted_individual_energy.f90 @@ -118,9 +118,9 @@ subroutine restricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,nGri !------------------------------------------------------------------------ do iEns=1,nEns - Exc(iEns) = Ex(iEns) + Ec(iEns) - E(iEns) = ENuc + ET(iEns) + EV(iEns) + EJ(iEns) & - + Ex(iEns) + Ec(iEns) + ExcDD(iEns) + Exc(iEns) = Ex(iEns) + Ec(iEns) + E(iEns) = ENuc + ET(iEns) + EV(iEns) + EJ(iEns) & + + Ex(iEns) + Ec(iEns) + ExcDD(iEns) end do !------------------------------------------------------------------------ diff --git a/src/eDFT/restricted_lda_correlation_derivative_discontinuity.f90 b/src/eDFT/restricted_lda_correlation_derivative_discontinuity.f90 index 2c91968..d945a71 100644 --- a/src/eDFT/restricted_lda_correlation_derivative_discontinuity.f90 +++ b/src/eDFT/restricted_lda_correlation_derivative_discontinuity.f90 @@ -16,8 +16,6 @@ subroutine restricted_lda_correlation_derivative_discontinuity(DFA,nEns,wEns,nGr ! Local variables - double precision :: aC - ! Output variables double precision,intent(out) :: Ec(nEns)