diff --git a/input/dft b/input/dft index f123932..1904956 100644 --- a/input/dft +++ b/input/dft @@ -28,9 +28,9 @@ 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) - 0.0 0.0 + 0.0 0.0 # N-centered? - F + F # Parameters for CC weight-dependent exchange functional 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/src/eDFT/US51_lda_exchange_individual_energy.f90 b/src/eDFT/US51_lda_exchange_individual_energy.f90 index d7da92e..c3d0030 100644 --- a/src/eDFT/US51_lda_exchange_individual_energy.f90 +++ b/src/eDFT/US51_lda_exchange_individual_energy.f90 @@ -61,7 +61,6 @@ subroutine US51_lda_exchange_individual_energy(nGrid,weight,rhow,rho,doNcentered endif - Ex = Exrr + ExrI + ExrrI end subroutine US51_lda_exchange_individual_energy diff --git a/src/eDFT/UVWN3_lda_correlation_individual_energy.f90 b/src/eDFT/UVWN3_lda_correlation_individual_energy.f90 index 2448381..2aeeffc 100644 --- a/src/eDFT/UVWN3_lda_correlation_individual_energy.f90 +++ b/src/eDFT/UVWN3_lda_correlation_individual_energy.f90 @@ -1,4 +1,4 @@ -subroutine UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) +subroutine UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec) ! Compute VWN3 LDA correlation potential @@ -12,6 +12,8 @@ subroutine UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) double precision,intent(in) :: weight(nGrid) double precision,intent(in) :: rhow(nGrid,nspin) double precision,intent(in) :: rho(nGrid,nspin) + logical,intent(in) :: doNcentered + double precision,intent(in) :: kappa ! Local variables @@ -197,6 +199,10 @@ subroutine UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) end do +! De-scaling for N-centered + + if(doNcentered) Ec(:) = kappa*Ec(:) + Ec(2) = Ec(2) - Ec(1) - Ec(3) end subroutine UVWN3_lda_correlation_individual_energy diff --git a/src/eDFT/UVWN5_lda_correlation_individual_energy.f90 b/src/eDFT/UVWN5_lda_correlation_individual_energy.f90 index d856c41..d7e433d 100644 --- a/src/eDFT/UVWN5_lda_correlation_individual_energy.f90 +++ b/src/eDFT/UVWN5_lda_correlation_individual_energy.f90 @@ -1,4 +1,4 @@ -subroutine UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) +subroutine UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec) ! Compute VWN5 LDA correlation potential @@ -12,6 +12,8 @@ subroutine UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) double precision,intent(in) :: weight(nGrid) double precision,intent(in) :: rhow(nGrid,nspin) double precision,intent(in) :: rho(nGrid,nspin) + logical,intent(in) :: doNcentered + double precision,intent(in) :: kappa ! Local variables @@ -197,6 +199,10 @@ subroutine UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) end do +! De-scaling for N-centered + + if(doNcentered) Ec(:) = kappa*Ec(:) + Ec(2) = Ec(2) - Ec(1) - Ec(3) end subroutine UVWN5_lda_correlation_individual_energy diff --git a/src/eDFT/read_options_dft.f90 b/src/eDFT/read_options_dft.f90 index a188ae1..1d052ea 100644 --- a/src/eDFT/read_options_dft.f90 +++ b/src/eDFT/read_options_dft.f90 @@ -140,11 +140,8 @@ subroutine read_options_dft(nBas,method,x_rung,x_DFA,c_rung,c_DFA,SGn,nEns,wEns, wEns(2) = (nEl(1)/nEl(2))*wEns(2) wEns(3) = (nEl(1)/nEl(3))*wEns(3) - else -! wEns(1) = 1d0 - nEl(2)/nEl(1)*wEns(2) - nEl(3)/nEl(1)*wEns(3) - wEns(1) = 1d0 - wEns(2) - wEns(3) end if diff --git a/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 b/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 index 98e8841..71b1d26 100644 --- a/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 +++ b/src/eDFT/unrestricted_correlation_derivative_discontinuity.f90 @@ -1,4 +1,4 @@ -subroutine unrestricted_correlation_derivative_discontinuity(rung,DFA,nEns,wEns,nGrid,weight,rhow,drhow,Ec) +subroutine unrestricted_correlation_derivative_discontinuity(rung,DFA,nEns,wEns,nGrid,weight,rhow,drhow,kappa,Ec) ! Compute the correlation part of the derivative discontinuity @@ -15,6 +15,7 @@ subroutine unrestricted_correlation_derivative_discontinuity(rung,DFA,nEns,wEns, double precision,intent(in) :: weight(nGrid) double precision,intent(in) :: rhow(nGrid,nspin) double precision,intent(in) :: drhow(ncart,nGrid,nspin) + double precision,intent(in) :: kappa(nEns) ! Local variables diff --git a/src/eDFT/unrestricted_correlation_individual_energy.f90 b/src/eDFT/unrestricted_correlation_individual_energy.f90 index 860c955..4e63d1b 100644 --- a/src/eDFT/unrestricted_correlation_individual_energy.f90 +++ b/src/eDFT/unrestricted_correlation_individual_energy.f90 @@ -1,4 +1,5 @@ -subroutine unrestricted_correlation_individual_energy(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,drhow,rho,drho,Ec) +subroutine unrestricted_correlation_individual_energy(rung,DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,drhow,rho,drho, & + doNcentered,kappa,Ec) ! Compute the correlation energy of individual states @@ -18,6 +19,8 @@ subroutine unrestricted_correlation_individual_energy(rung,DFA,LDA_centered,nEns double precision,intent(in) :: drhow(ncart,nGrid,nspin) double precision,intent(in) :: rho(nGrid,nspin) double precision,intent(in) :: drho(ncart,nGrid,nspin) + logical,intent(in) :: doNcentered + double precision,intent(in) :: kappa ! Local variables @@ -41,7 +44,8 @@ subroutine unrestricted_correlation_individual_energy(rung,DFA,LDA_centered,nEns case(1) - call unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,rho,Ec) + call unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,rho, & + doNcentered,kappa,Ec) ! GGA functionals diff --git a/src/eDFT/unrestricted_individual_energy.f90 b/src/eDFT/unrestricted_individual_energy.f90 index 4cb7d11..4f0ab93 100644 --- a/src/eDFT/unrestricted_individual_energy.f90 +++ b/src/eDFT/unrestricted_individual_energy.f90 @@ -123,16 +123,16 @@ subroutine unrestricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,LDA_centered if(doNcentered) then - EJ(1,iEns) = kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,1,iEns),J(:,:,1))) & - -0.5d0*kappa(iEns)*kappa(iEns)*trace_matrix(nBas,matmul(Pw(:,:,1),J(:,:,1))) + EJ(1,iEns) = kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,1,iEns),J(:,:,1))) & + - 0.5d0*kappa(iEns)*kappa(iEns)*trace_matrix(nBas,matmul(Pw(:,:,1),J(:,:,1))) - EJ(2,iEns) = kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,1,iEns),J(:,:,2))) & - + kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,2,iEns),J(:,:,1))) & - -0.5d0*kappa(iEns)*kappa(iEns)*trace_matrix(nBas,matmul(Pw(:,:,1),J(:,:,2))) & + EJ(2,iEns) = kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,1,iEns),J(:,:,2))) & + + kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,2,iEns),J(:,:,1))) & + - 0.5d0*kappa(iEns)*kappa(iEns)*trace_matrix(nBas,matmul(Pw(:,:,1),J(:,:,2))) & - 0.5d0*kappa(iEns)*kappa(iEns)*trace_matrix(nBas,matmul(Pw(:,:,2),J(:,:,1))) - EJ(3,iEns) = kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,2,iEns),J(:,:,2))) & - -0.5d0*kappa(iEns)*kappa(iEns)*trace_matrix(nBas,matmul(Pw(:,:,2),J(:,:,2))) + EJ(3,iEns) = kappa(iEns)*trace_matrix(nBas,matmul(P(:,:,2,iEns),J(:,:,2))) & + - 0.5d0*kappa(iEns)*kappa(iEns)*trace_matrix(nBas,matmul(Pw(:,:,2),J(:,:,2))) else @@ -212,7 +212,7 @@ subroutine unrestricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,LDA_centered do iEns=1,nEns call unrestricted_correlation_individual_energy(c_rung,c_DFA,LDA_centered,nEns,wEns,nGrid,weight, & - rhow,drhow,rho(:,:,iEns),drho(:,:,:,iEns),Ec(:,iEns)) + rhow,drhow,rho(:,:,iEns),drho(:,:,:,iEns),kappa(iEns),Ec(:,iEns)) end do !------------------------------------------------------------------------ @@ -231,7 +231,7 @@ subroutine unrestricted_individual_energy(x_rung,x_DFA,c_rung,c_DFA,LDA_centered rhow(:,ispin),drhow(:,:,ispin),Cx_choice,doNcentered,kappa,ExDD(ispin,:)) end do - call unrestricted_correlation_derivative_discontinuity(c_rung,c_DFA,nEns,wEns,nGrid,weight,rhow,drhow,EcDD) + call unrestricted_correlation_derivative_discontinuity(c_rung,c_DFA,nEns,wEns,nGrid,weight,rhow,drhow,kappa,EcDD) ExcDD(1,:) = ExDD(1,:) + EcDD(1,:) ExcDD(2,:) = EcDD(2,:) diff --git a/src/eDFT/unrestricted_lda_correlation_individual_energy.f90 b/src/eDFT/unrestricted_lda_correlation_individual_energy.f90 index 6cdb3b9..5ee1921 100644 --- a/src/eDFT/unrestricted_lda_correlation_individual_energy.f90 +++ b/src/eDFT/unrestricted_lda_correlation_individual_energy.f90 @@ -1,4 +1,5 @@ -subroutine unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,rho,Ec) +subroutine unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns,wEns,nGrid,weight,rhow,rho, & + doNcentered,kappa,Ec) ! Compute LDA correlation energy for individual states @@ -15,6 +16,8 @@ subroutine unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns, double precision,intent(in) :: weight(nGrid) double precision,intent(in) :: rhow(nGrid,nspin) double precision,intent(in) :: rho(nGrid,nspin) + logical,intent(in) :: doNcentered + double precision,intent(in) :: kappa ! Output variables @@ -28,11 +31,11 @@ subroutine unrestricted_lda_correlation_individual_energy(DFA,LDA_centered,nEns, case ('VWN3') - call UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) + call UVWN3_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec) case ('VWN5') - call UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,Ec) + call UVWN5_lda_correlation_individual_energy(nGrid,weight,rhow,rho,doNcentered,kappa,Ec) case default