From 722d74ae170c48e51891953247b5ce62d9136fea Mon Sep 17 00:00:00 2001 From: Pierre-Francois Loos Date: Sun, 14 Feb 2021 22:24:52 +0100 Subject: [PATCH] fix KS --- src/QuAcK/QuAcK.f90 | 4 ++-- src/eDFT/eDFT.f90 | 13 +++++++++--- src/eDFT/eDFT_UKS.f90 | 21 ++++++++++--------- ...d_correlation_derivative_discontinuity.f90 | 5 ----- ...stricted_correlation_individual_energy.f90 | 5 ----- ...cted_exchange_derivative_discontinuity.f90 | 1 - ...nrestricted_exchange_individual_energy.f90 | 1 - 7 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/QuAcK/QuAcK.f90 b/src/QuAcK/QuAcK.f90 index 710c9e4..c1154f5 100644 --- a/src/QuAcK/QuAcK.f90 +++ b/src/QuAcK/QuAcK.f90 @@ -317,8 +317,8 @@ program QuAcK call cpu_time(start_KS) call eDFT(maxSCF_HF,thresh_HF,n_diis_HF,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,nEl,nC, & - nO,nV,nR,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell, & - max_ang_mom,min_exponent,max_exponent,S,T,V,Hc,X,ERI_AO,dipole_int_AO) + nO,nV,nR,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell, & + max_ang_mom,min_exponent,max_exponent,S,T,V,Hc,X,ERI_AO,dipole_int_AO,EUHF,eHF,cHF,PHF) call cpu_time(end_KS) diff --git a/src/eDFT/eDFT.f90 b/src/eDFT/eDFT.f90 index ab6b5f0..2f9ec5a 100644 --- a/src/eDFT/eDFT.f90 +++ b/src/eDFT/eDFT.f90 @@ -1,6 +1,6 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,nEl,nC,nO,nV,nR, & nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell, & - max_ang_mom,min_exponent,max_exponent,S,T,V,Hc,X,ERI,dipole_int) + max_ang_mom,min_exponent,max_exponent,S,T,V,Hc,X,ERI,dipole_int,Ew,eKS,cKS,PKS) ! exchange-correlation density-functional theory calculations @@ -50,7 +50,6 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,n ! Local variables - double precision :: Ew double precision,allocatable :: c(:,:) character(len=8) :: method @@ -83,6 +82,14 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,n integer :: i,vmajor,vminor,vmicro +! Output variables + + double precision,intent(out) :: Ew + double precision,intent(out) :: eKS(nBas,nspin) + double precision,intent(out) :: cKS(nBas,nBas,nspin) + double precision,intent(out) :: PKS(nBas,nBas,nspin) + + ! Hello World write(*,*) @@ -209,7 +216,7 @@ subroutine eDFT(maxSCF,thresh,max_diis,guess_type,mix,nNuc,ZNuc,rNuc,ENuc,nBas,n call cpu_time(start_KS) call eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weight(:),maxSCF,thresh,max_diis,guess_type,mix, & - nBas,AO,dAO,S,T,V,Hc,ERI,X,ENuc,Ew,occnum,Cx_choice,doNcentered) + nBas,AO,dAO,S,T,V,Hc,ERI,X,ENuc,occnum,Cx_choice,doNcentered,Ew,eKS,cKS,PKS) call cpu_time(end_KS) t_KS = end_KS - start_KS diff --git a/src/eDFT/eDFT_UKS.f90 b/src/eDFT/eDFT_UKS.f90 index 4f70433..373e1ea 100644 --- a/src/eDFT/eDFT_UKS.f90 +++ b/src/eDFT/eDFT_UKS.f90 @@ -1,5 +1,5 @@ subroutine eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weight,maxSCF,thresh,max_diis,guess_type,mix, & - nBas,AO,dAO,S,T,V,Hc,ERI,X,ENuc,Ew,occnum,Cx_choice,doNcentered) + nBas,AO,dAO,S,T,V,Hc,ERI,X,ENuc,occnum,Cx_choice,doNcentered,Ew,eps,c,Pw) ! Perform unrestricted Kohn-Sham calculation for ensembles @@ -48,10 +48,7 @@ subroutine eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weig double precision :: EJ(nsp) double precision :: Ex(nspin) double precision :: Ec(nsp) - double precision :: Ew - double precision,allocatable :: eps(:,:) - double precision,allocatable :: c(:,:,:) double precision,allocatable :: cp(:,:,:) double precision,allocatable :: J(:,:,:) double precision,allocatable :: F(:,:,:) @@ -65,7 +62,6 @@ subroutine eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weig double precision,external :: trace_matrix double precision,external :: electron_number - double precision,allocatable :: Pw(:,:,:) double precision,allocatable :: rhow(:,:) double precision,allocatable :: drhow(:,:,:) double precision :: nEl(nspin) @@ -79,6 +75,13 @@ subroutine eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weig integer :: ispin,iEns,iBas +! Output variables + + double precision,intent(out) :: Ew + double precision,intent(out) :: eps(nBas,nspin) + double precision,intent(out) :: Pw(nBas,nBas,nspin) + double precision,intent(out) :: c(nBAs,nBas,nspin) + ! Hello world write(*,*) @@ -120,16 +123,14 @@ subroutine eDFT_UKS(x_rung,x_DFA,c_rung,c_DFA,nEns,wEns,aCC_w1,aCC_w2,nGrid,weig ! Memory allocation - allocate(eps(nBas,nspin),c(nBas,nBas,nspin),cp(nBas,nBas,nspin), & - J(nBas,nBas,nspin),F(nBas,nBas,nspin),Fp(nBas,nBas,nspin), & + allocate(cp(nBas,nBas,nspin),J(nBas,nBas,nspin),F(nBas,nBas,nspin),Fp(nBas,nBas,nspin), & Fx(nBas,nBas,nspin),FxHF(nBas,nBas,nspin),Fc(nBas,nBas,nspin),err(nBas,nBas,nspin), & - Pw(nBas,nBas,nspin),rhow(nGrid,nspin),drhow(ncart,nGrid,nspin), & - err_diis(nBasSq,max_diis,nspin),F_diis(nBasSq,max_diis,nspin), & + rhow(nGrid,nspin),drhow(ncart,nGrid,nspin), & + err_diis(nBasSq,max_diis,nspin),F_diis(nBasSq,max_diis,nspin), & P(nBas,nBas,nspin,nEns),rho(nGrid,nspin,nEns),drho(ncart,nGrid,nspin,nEns)) ! Guess coefficients and eigenvalues - if(guess_type == 1) then do ispin=1,nspin diff --git a/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 b/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 index 62fe916..7c7c33c 100644 --- a/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 +++ b/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 @@ -43,23 +43,18 @@ subroutine unrestricted_correlation_derivative_discontinuity(rung,DFA,nEns,wEns, case(2) call print_warning('!!! derivative discontinuity NYI for GGAs !!!') - stop ! MGGA functionals case(3) call print_warning('!!! derivative discontinuity NYI for MGGAs !!!') - stop ! Hybrid functionals case(4) call print_warning('!!! derivative discontinuity NYI for hybrids !!!') - stop - - aC = 0.81d0 end select diff --git a/src/eDFT/unrestricted_correlation_individual_energy.f90 b/src/eDFT/unrestricted_correlation_individual_energy.f90 index 8bff661..860c955 100644 --- a/src/eDFT/unrestricted_correlation_individual_energy.f90 +++ b/src/eDFT/unrestricted_correlation_individual_energy.f90 @@ -48,23 +48,18 @@ subroutine unrestricted_correlation_individual_energy(rung,DFA,LDA_centered,nEns case(2) call print_warning('!!! Individual energies NYI for GGAs !!!') - stop ! MGGA functionals case(3) call print_warning('!!! Individual energies NYI for MGGAs !!!') - stop ! Hybrid functionals case(4) call print_warning('!!! Individual energies NYI for hybrids !!!') - stop - - aC = 0.81d0 end select diff --git a/src/eDFT/unrestricted_exchange_derivative_discontinuity.f90 b/src/eDFT/unrestricted_exchange_derivative_discontinuity.f90 index 0bc6660..382e0aa 100644 --- a/src/eDFT/unrestricted_exchange_derivative_discontinuity.f90 +++ b/src/eDFT/unrestricted_exchange_derivative_discontinuity.f90 @@ -60,7 +60,6 @@ subroutine unrestricted_exchange_derivative_discontinuity(rung,DFA,nEns,wEns,aCC case(4) call print_warning('!!! exchange part of derivative discontinuity NYI for hybrids !!!') - stop end select diff --git a/src/eDFT/unrestricted_exchange_individual_energy.f90 b/src/eDFT/unrestricted_exchange_individual_energy.f90 index 5a2e5f4..6ddf3d2 100644 --- a/src/eDFT/unrestricted_exchange_individual_energy.f90 +++ b/src/eDFT/unrestricted_exchange_individual_energy.f90 @@ -78,7 +78,6 @@ subroutine unrestricted_exchange_individual_energy(rung,DFA,LDA_centered,nEns,wE case(4) call print_warning('!!! Individual energies NYI for Hybrids !!!') - stop end select