From 068d88aa0691c886ef60fed8159cbd93f1b2b041 Mon Sep 17 00:00:00 2001 From: pfloos Date: Thu, 9 Nov 2023 09:37:21 +0100 Subject: [PATCH] modifs print qsGW --- input/methods | 2 +- src/GW/GG0W0.f90 | 2 +- src/GW/RG0W0.f90 | 2 +- src/GW/SRG_qsGW.f90 | 2 +- src/GW/evGGW.f90 | 2 +- src/GW/evRGW.f90 | 2 +- src/GW/{print_G0W0.f90 => print_GG0W0.f90} | 18 +++--- src/GW/print_RG0W0.f90 | 53 ++++++++++++++++++ src/GW/print_UG0W0.f90 | 2 +- src/GW/{print_evGW.f90 => print_evGGW.f90} | 22 +++----- src/GW/print_evRGW.f90 | 57 +++++++++++++++++++ src/GW/print_evUGW.f90 | 20 +++---- src/GW/print_qsGGW.f90 | 52 ++++++++--------- src/GW/{print_qsGW.f90 => print_qsRGW.f90} | 65 +++++++++++----------- src/GW/print_qsUGW.f90 | 8 +-- src/GW/qsRGW.f90 | 10 ++-- src/utils/utils.f90 | 14 +++++ 17 files changed, 224 insertions(+), 109 deletions(-) rename src/GW/{print_G0W0.f90 => print_GG0W0.f90} (71%) create mode 100644 src/GW/print_RG0W0.f90 rename src/GW/{print_evGW.f90 => print_evGGW.f90} (69%) create mode 100644 src/GW/print_evRGW.f90 rename src/GW/{print_qsGW.f90 => print_qsRGW.f90} (61%) diff --git a/input/methods b/input/methods index 97c42d5..183bcf4 100644 --- a/input/methods +++ b/input/methods @@ -1,5 +1,5 @@ # RHF UHF GHF ROHF - F T F F + F F T F # MP2 MP3 F F # CCD pCCD DCD CCSD CCSD(T) diff --git a/src/GW/GG0W0.f90 b/src/GW/GG0W0.f90 index 7498b3b..f1b574f 100644 --- a/src/GW/GG0W0.f90 +++ b/src/GW/GG0W0.f90 @@ -154,7 +154,7 @@ subroutine GG0W0(doACFDT,exchange_kernel,doXBS,dophBSE,dophBSE2,TDA_W,TDA,dBSE,d ! Dump results ! !--------------! - call print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) + call print_GG0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Deallocate memory diff --git a/src/GW/RG0W0.f90 b/src/GW/RG0W0.f90 index 5da964e..77fb3ba 100644 --- a/src/GW/RG0W0.f90 +++ b/src/GW/RG0W0.f90 @@ -157,7 +157,7 @@ subroutine RG0W0(doACFDT,exchange_kernel,doXBS,dophBSE,dophBSE2,TDA_W,TDA,dBSE,d ! Dump results ! !--------------! - call print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) + call print_RG0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Deallocate memory diff --git a/src/GW/SRG_qsGW.f90 b/src/GW/SRG_qsGW.f90 index 5be6bfd..53d16e7 100644 --- a/src/GW/SRG_qsGW.f90 +++ b/src/GW/SRG_qsGW.f90 @@ -279,7 +279,7 @@ subroutine SRG_qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,BSE,BSE ! Print results call dipole_moment(nBas,P,nNuc,ZNuc,rNuc,dipole_int_AO,dipole) - call print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex,EcGM,EcRPA,EqsGW,dipole) + call print_qsRGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex,EcGM,EcRPA,EqsGW,dipole) enddo !------------------------------------------------------------------------ diff --git a/src/GW/evGGW.f90 b/src/GW/evGGW.f90 index 923ea1a..9655791 100644 --- a/src/GW/evGGW.f90 +++ b/src/GW/evGGW.f90 @@ -155,7 +155,7 @@ subroutine evGGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,do ! Print results - call print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) + call print_evGGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Linear mixing or DIIS extrapolation diff --git a/src/GW/evRGW.f90 b/src/GW/evRGW.f90 index 3ff10bb..cbea673 100644 --- a/src/GW/evRGW.f90 +++ b/src/GW/evRGW.f90 @@ -157,7 +157,7 @@ subroutine evRGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,do ! Print results - call print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) + call print_evRGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Linear mixing or DIIS extrapolation diff --git a/src/GW/print_G0W0.f90 b/src/GW/print_GG0W0.f90 similarity index 71% rename from src/GW/print_G0W0.f90 rename to src/GW/print_GG0W0.f90 index 7be7551..ecd8175 100644 --- a/src/GW/print_G0W0.f90 +++ b/src/GW/print_GG0W0.f90 @@ -1,4 +1,4 @@ -subroutine print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) +subroutine print_GG0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Print one-electron energies and other stuff for G0W0 @@ -27,7 +27,7 @@ subroutine print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Dump results write(*,*)'-------------------------------------------------------------------------------' - write(*,*)' One-shot G0W0 calculation' + write(*,*)' One-shot GG0W0 calculation' write(*,*)'-------------------------------------------------------------------------------' write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & '|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|' @@ -39,14 +39,14 @@ subroutine print_G0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) enddo write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') 'G0W0 HOMO energy =',eGW(HOMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'G0W0 LUMO energy =',eGW(LUMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'G0W0 HOMO-LUMO gap =',Gap*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'GG0W0 HOMO energy =',eGW(HOMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'GG0W0 LUMO energy =',eGW(LUMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'GG0W0 HOMO-LUMO gap =',Gap*HaToeV,' eV' write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') 'phRPA@G0W0 total energy =',ENuc + ERHF + EcRPA,' au' - write(*,'(2X,A60,F15.6,A3)') 'phRPA@G0W0 correlation energy =',EcRPA,' au' - write(*,'(2X,A60,F15.6,A3)') ' GM@G0W0 total energy =',ENuc + ERHF + EcGM,' au' - write(*,'(2X,A60,F15.6,A3)') ' GM@G0W0 correlation energy =',EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@GG0W0 total energy =',ENuc + ERHF + EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@GG0W0 correlation energy =',EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@GG0W0 total energy =',ENuc + ERHF + EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@GG0W0 correlation energy =',EcGM,' au' write(*,*)'-------------------------------------------------------------------------------' write(*,*) diff --git a/src/GW/print_RG0W0.f90 b/src/GW/print_RG0W0.f90 new file mode 100644 index 0000000..d885f57 --- /dev/null +++ b/src/GW/print_RG0W0.f90 @@ -0,0 +1,53 @@ +subroutine print_RG0W0(nBas,nO,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) + +! Print one-electron energies and other stuff for G0W0 + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO + double precision,intent(in) :: ENuc + double precision,intent(in) :: ERHF + double precision,intent(in) :: EcRPA + double precision,intent(in) :: EcGM + double precision,intent(in) :: eHF(nBas) + double precision,intent(in) :: SigC(nBas) + double precision,intent(in) :: Z(nBas) + double precision,intent(in) :: eGW(nBas) + + integer :: p,HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eGW(LUMO)-eGW(HOMO) + +! Dump results + + write(*,*)'-------------------------------------------------------------------------------' + write(*,*)' One-shot RG0W0 calculation' + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & + '|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|' + write(*,*)'-------------------------------------------------------------------------------' + + do p=1,nBas + write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') & + '|',p,'|',eHF(p)*HaToeV,'|',SigC(p)*HaToeV,'|',Z(p),'|',eGW(p)*HaToeV,'|' + enddo + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A60,F15.6,A3)') 'RG0W0 HOMO energy =',eGW(HOMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'RG0W0 LUMO energy =',eGW(LUMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'RG0W0 HOMO-LUMO gap =',Gap*HaToeV,' eV' + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@RG0W0 total energy =',ENuc + ERHF + EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@RG0W0 correlation energy =',EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@RG0W0 total energy =',ENuc + ERHF + EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@RG0W0 correlation energy =',EcGM,' au' + write(*,*)'-------------------------------------------------------------------------------' + write(*,*) + +end subroutine diff --git a/src/GW/print_UG0W0.f90 b/src/GW/print_UG0W0.f90 index 036450d..bc61be4 100644 --- a/src/GW/print_UG0W0.f90 +++ b/src/GW/print_UG0W0.f90 @@ -40,7 +40,7 @@ subroutine print_UG0W0(nBas,nO,eHF,ENuc,EUHF,SigC,Z,eGW,EcRPA,EcGM) write(*,*)'-------------------------------------------------------------------------------& ------------------------------------------------' - write(*,*)' Unrestricted one-shot G0W0 calculation (eV)' + write(*,*)' One-shot UG0W0 calculation (eV)' write(*,*)'-------------------------------------------------------------------------------& ------------------------------------------------' write(*,'(A1,A3,A1,A30,A1,A30,A1,A30,A1,A30,A1)') & diff --git a/src/GW/print_evGW.f90 b/src/GW/print_evGGW.f90 similarity index 69% rename from src/GW/print_evGW.f90 rename to src/GW/print_evGGW.f90 index 1b178a2..75a212b 100644 --- a/src/GW/print_evGW.f90 +++ b/src/GW/print_evGGW.f90 @@ -1,4 +1,4 @@ -subroutine print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) +subroutine print_evGGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Print one-electron energies and other stuff for evGW @@ -28,11 +28,7 @@ subroutine print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) ! Dump results write(*,*)'-------------------------------------------------------------------------------' - if(nSCF < 10) then - write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent evG',nSCF,'W',nSCF,' calculation' - else - write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent evG',nSCF,'W',nSCF,' calculation' - endif + write(*,'(1X,A21,I3,A1,I3,A12)')' Self-consistent evGG',nSCF,'W',nSCF,' calculation' write(*,*)'-------------------------------------------------------------------------------' write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & '|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|' @@ -47,14 +43,14 @@ subroutine print_evGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) write(*,'(2X,A10,I3)') 'Iteration ',nSCF write(*,'(2X,A14,F15.5)')'Convergence = ',Conv write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') 'evGW HOMO energy =',eGW(HOMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'evGW LUMO energy =',eGW(LUMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'evGW HOMO-LUMO gap =',Gap*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'evGGW HOMO energy =',eGW(HOMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'evGGW LUMO energy =',eGW(LUMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'evGGW HOMO-LUMO gap =',Gap*HaToeV,' eV' write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGW total energy =',ENuc + ERHF + EcRPA,' au' - write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGW correlation energy =',EcRPA,' au' - write(*,'(2X,A60,F15.6,A3)') ' GM@evGW total energy =',ENuc + ERHF + EcGM,' au' - write(*,'(2X,A60,F15.6,A3)') ' GM@evGW correlation energy =',EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGGW total energy =',ENuc + ERHF + EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@evGGW correlation energy =',EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@evGGW total energy =',ENuc + ERHF + EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@evGGW correlation energy =',EcGM,' au' write(*,*)'-------------------------------------------------------------------------------' write(*,*) diff --git a/src/GW/print_evRGW.f90 b/src/GW/print_evRGW.f90 new file mode 100644 index 0000000..05ee754 --- /dev/null +++ b/src/GW/print_evRGW.f90 @@ -0,0 +1,57 @@ +subroutine print_evRGW(nBas,nO,nSCF,Conv,eHF,ENuc,ERHF,SigC,Z,eGW,EcRPA,EcGM) + +! Print one-electron energies and other stuff for evGW + + implicit none + include 'parameters.h' + + integer,intent(in) :: nBas,nO,nSCF + double precision,intent(in) :: ENuc + double precision,intent(in) :: ERHF + double precision,intent(in) :: Conv + double precision,intent(in) :: eHF(nBas) + double precision,intent(in) :: SigC(nBas) + double precision,intent(in) :: Z(nBas) + double precision,intent(in) :: eGW(nBas) + double precision,intent(in) :: EcRPA + double precision,intent(in) :: EcGM + + integer :: p,HOMO,LUMO + double precision :: Gap + +! HOMO and LUMO + + HOMO = nO + LUMO = HOMO + 1 + Gap = eGW(LUMO)-eGW(HOMO) + +! Dump results + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(1X,A21,I3,A1,I3,A12)')' Self-consistent evRG',nSCF,'W',nSCF,' calculation' + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & + '|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|' + write(*,*)'-------------------------------------------------------------------------------' + + do p=1,nBas + write(*,'(1X,A1,1X,I3,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X,F15.6,1X,A1,1X)') & + '|',p,'|',eHF(p)*HaToeV,'|',SigC(p)*HaToeV,'|',Z(p),'|',eGW(p)*HaToeV,'|' + enddo + + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A10,I3)') 'Iteration ',nSCF + write(*,'(2X,A14,F15.5)')'Convergence = ',Conv + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A60,F15.6,A3)') 'evRGW HOMO energy =',eGW(HOMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'evRGW LUMO energy =',eGW(LUMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'evRGW HOMO-LUMO gap =',Gap*HaToeV,' eV' + write(*,*)'-------------------------------------------------------------------------------' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@evRGW total energy =',ENuc + ERHF + EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@evRGW correlation energy =',EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@evRGW total energy =',ENuc + ERHF + EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@evRGW correlation energy =',EcGM,' au' + write(*,*)'-------------------------------------------------------------------------------' + write(*,*) + +end subroutine diff --git a/src/GW/print_evUGW.f90 b/src/GW/print_evUGW.f90 index faf374a..8130faa 100644 --- a/src/GW/print_evUGW.f90 +++ b/src/GW/print_evUGW.f90 @@ -42,11 +42,7 @@ subroutine print_evUGW(nBas,nO,nSCF,Conv,eHF,ENuc,EUHF,SigC,Z,eGW,EcRPA,EcGM) write(*,*)'-------------------------------------------------------------------------------& ------------------------------------------------' - if(nSCF < 10) then - write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent evG',nSCF,'W',nSCF,' calculation' - else - write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent evG',nSCF,'W',nSCF,' calculation' - endif + write(*,'(1X,A21,I3,A1,I3,A12)')' Self-consistent evUG',nSCF,'W',nSCF,' calculation' write(*,*)'-------------------------------------------------------------------------------& ------------------------------------------------' write(*,'(A1,A3,A1,A30,A1,A30,A1,A30,A1,A30,A1)') & @@ -68,15 +64,15 @@ subroutine print_evUGW(nBas,nO,nSCF,Conv,eHF,ENuc,EUHF,SigC,Z,eGW,EcRPA,EcGM) write(*,'(2X,A14,F15.5)')'Convergence = ',Conv write(*,*)'-------------------------------------------------------------------------------& -------------------------------------------------' - write(*,'(2X,A30,F15.6,A3)') 'evGW HOMO energy:',maxval(HOMO(:))*HaToeV,' eV' - write(*,'(2X,A30,F15.6,A3)') 'evGW LUMO energy:',minval(LUMO(:))*HaToeV,' eV' - write(*,'(2X,A30,F15.6,A3)') 'evGW HOMO-LUMO gap :',(minval(LUMO(:))-maxval(HOMO(:)))*HaToeV,' eV' + write(*,'(2X,A30,F15.6,A3)') 'evUGW HOMO energy:',maxval(HOMO(:))*HaToeV,' eV' + write(*,'(2X,A30,F15.6,A3)') 'evUGW LUMO energy:',minval(LUMO(:))*HaToeV,' eV' + write(*,'(2X,A30,F15.6,A3)') 'evUGW HOMO-LUMO gap :',(minval(LUMO(:))-maxval(HOMO(:)))*HaToeV,' eV' write(*,*)'-------------------------------------------------------------------------------& ------------------------------------------------' - write(*,'(2X,A30,F15.6,A3)') 'RPA@evGW total energy :',ENuc + EUHF + EcRPA,' au' - write(*,'(2X,A30,F15.6,A3)') 'RPA@evGW correlation energy:',EcRPA,' au' - write(*,'(2X,A30,F15.6,A3)') ' GM@evGW total energy :',ENuc + EUHF + sum(EcGM(:)),' au' - write(*,'(2X,A30,F15.6,A3)') ' GM@evGW correlation energy:',sum(EcGM(:)),' au' + write(*,'(2X,A30,F15.6,A3)') 'RPA@evUGW total energy :',ENuc + EUHF + EcRPA,' au' + write(*,'(2X,A30,F15.6,A3)') 'RPA@evUGW correlation energy:',EcRPA,' au' + write(*,'(2X,A30,F15.6,A3)') ' GM@evUGW total energy :',ENuc + EUHF + sum(EcGM(:)),' au' + write(*,'(2X,A30,F15.6,A3)') ' GM@evUGW correlation energy:',sum(EcGM(:)),' au' write(*,*)'-------------------------------------------------------------------------------& -------------------------------------------------' write(*,*) diff --git a/src/GW/print_qsGGW.f90 b/src/GW/print_qsGGW.f90 index b244d5b..0eb3405 100644 --- a/src/GW/print_qsGGW.f90 +++ b/src/GW/print_qsGGW.f90 @@ -48,9 +48,11 @@ subroutine print_qsGGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,E write(*,*)'-------------------------------------------------------------------------------' if(nSCF < 10) then - write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' + write(*,'(1X,A22,I1,A1,I1,A12)')' Self-consistent qsRG',nSCF,'W',nSCF,' calculation' + elseif(nSCF < 100) then + write(*,'(1X,A22,I2,A1,I2,A12)')' Self-consistent qsRG',nSCF,'W',nSCF,' calculation' else - write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' + write(*,'(1X,A22,I3,A1,I3,A12)')' Self-consistent qsRG',nSCF,'W',nSCF,' calculation' endif write(*,*)'-------------------------------------------------------------------------------' write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & @@ -66,14 +68,14 @@ subroutine print_qsGGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,E write(*,'(2X,A10,I3)') 'Iteration ',nSCF write(*,'(2X,A14,F15.5)')'Convergence = ',Conv write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') 'qsGGW HOMO energy =',eGW(HOMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'qsGGW LUMO energy =',eGW(LUMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'qsGGW HOMO-LUMO gap =',Gap*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'qsGGW HOMO energy = ',eGW(HOMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'qsGGW LUMO energy = ',eGW(LUMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'qsGGW HOMO-LUMO gap = ',Gap*HaToeV,' eV' write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') ' qsGGW total energy =',ENuc + EqsGW,' au' - write(*,'(2X,A60,F15.6,A3)') ' qsGGW exchange energy =',Ex,' au' - write(*,'(2X,A60,F15.6,A3)') ' GM@qsgGW correlation energy =',EcGM,' au' - write(*,'(2X,A60,F15.6,A3)') 'phRPA@qsGGW correlation energy =',EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') ' qsGGW total energy = ',ENuc + EqsGW,' au' + write(*,'(2X,A60,F15.6,A3)') ' qsGGW exchange energy = ',Ex,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@qsGGW correlation energy = ',EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@qsGGW correlation energy = ',EcRPA,' au' write(*,*)'-------------------------------------------------------------------------------' write(*,*) @@ -83,38 +85,38 @@ subroutine print_qsGGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,E write(*,*) write(*,'(A50)') '---------------------------------------' - write(*,'(A32)') ' Summary ' + write(*,'(A33)') ' Summary ' write(*,'(A50)') '---------------------------------------' - write(*,'(A32,1X,F16.10,A3)') ' One-electron energy: ',ET + EV,' au' - write(*,'(A32,1X,F16.10,A3)') ' Kinetic energy: ',ET,' au' - write(*,'(A32,1X,F16.10,A3)') ' Potential energy: ',EV,' au' + write(*,'(A33,1X,F16.10,A3)') ' One-electron energy = ',ET + EV,' au' + write(*,'(A33,1X,F16.10,A3)') ' Kinetic energy = ',ET,' au' + write(*,'(A33,1X,F16.10,A3)') ' Potential energy = ',EV,' au' write(*,'(A50)') '---------------------------------------' - write(*,'(A32,1X,F16.10,A3)') ' Two-electron energy: ',EJ + Ex,' au' - write(*,'(A32,1X,F16.10,A3)') ' Hartree energy: ',EJ,' au' - write(*,'(A32,1X,F16.10,A3)') ' Exchange energy: ',Ex,' au' - write(*,'(A32,1X,F16.10,A3)') ' Correlation energy: ',EcGM,' au' + write(*,'(A33,1X,F16.10,A3)') ' Two-electron energy = ',EJ + Ex,' au' + write(*,'(A33,1X,F16.10,A3)') ' Hartree energy = ',EJ,' au' + write(*,'(A33,1X,F16.10,A3)') ' Exchange energy = ',Ex,' au' + write(*,'(A33,1X,F16.10,A3)') ' Correlation energy = ',EcGM,' au' write(*,'(A50)') '---------------------------------------' - write(*,'(A32,1X,F16.10,A3)') ' Electronic energy: ',EqsGW,' au' - write(*,'(A32,1X,F16.10,A3)') ' Nuclear repulsion: ',ENuc,' au' - write(*,'(A32,1X,F16.10,A3)') ' qsGGW energy: ',ENuc + EqsGW,' au' + write(*,'(A33,1X,F16.10,A3)') ' Electronic energy = ',EqsGW,' au' + write(*,'(A33,1X,F16.10,A3)') ' Nuclear repulsion = ',ENuc,' au' + write(*,'(A33,1X,F16.10,A3)') ' qsGGW energy = ',ENuc + EqsGW,' au' write(*,'(A50)') '---------------------------------------' - write(*,'(A35)') ' Dipole moment (Debye) ' + write(*,'(A36)') ' Dipole moment (Debye) ' write(*,'(10X,4A10)') 'X','Y','Z','Tot.' - write(*,'(10X,4F10.6)') (dipole(ixyz)*auToD,ixyz=1,ncart),norm2(dipole)*auToD + write(*,'(10X,4F10.4)') (dipole(ixyz)*auToD,ixyz=1,ncart),norm2(dipole)*auToD write(*,'(A50)') '-----------------------------------------' write(*,*) if(dump_orb) then write(*,'(A50)') '---------------------------------------' - write(*,'(A32)') ' qsGGW orbital coefficients' + write(*,'(A32)') ' Generalized qsGW orbital coefficients ' write(*,'(A50)') '---------------------------------------' call matout(nBas,nBas,c) write(*,*) end if write(*,'(A50)') '---------------------------------------' - write(*,'(A32)') ' qsGGW orbital energies' + write(*,'(A32)') ' Generalized qsGW orbital energies (au)' write(*,'(A50)') '---------------------------------------' - call matout(nBas,1,eGW) + call vecout(nBas,eGW) write(*,*) endif diff --git a/src/GW/print_qsGW.f90 b/src/GW/print_qsRGW.f90 similarity index 61% rename from src/GW/print_qsGW.f90 rename to src/GW/print_qsRGW.f90 index 3d7f7bb..7f1bd62 100644 --- a/src/GW/print_qsGW.f90 +++ b/src/GW/print_qsRGW.f90 @@ -1,6 +1,6 @@ -subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex,EcGM,EcRPA,EqsGW,dipole) +subroutine print_qsRGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,EK,EcGM,EcRPA,EqsGW,dipole) -! Print one-electron energies and other stuff for qsGW +! Print useful information about qsRGW calculation implicit none include 'parameters.h' @@ -14,7 +14,7 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex double precision,intent(in) :: ET double precision,intent(in) :: EV double precision,intent(in) :: EJ - double precision,intent(in) :: Ex + double precision,intent(in) :: EK double precision,intent(in) :: EcGM double precision,intent(in) :: EcRPA double precision,intent(in) :: Conv @@ -47,11 +47,13 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex ! Dump results write(*,*)'-------------------------------------------------------------------------------' - if(nSCF < 10) then - write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' + if(nSCF < 10) then + write(*,'(1X,A22,I1,A1,I1,A12)')' Self-consistent qsRG',nSCF,'W',nSCF,' calculation' + elseif(nSCF < 100) then + write(*,'(1X,A22,I2,A1,I2,A12)')' Self-consistent qsRG',nSCF,'W',nSCF,' calculation' else - write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' - endif + write(*,'(1X,A22,I3,A1,I3,A12)')' Self-consistent qsRG',nSCF,'W',nSCF,' calculation' + end if write(*,*)'-------------------------------------------------------------------------------' write(*,'(1X,A1,1X,A3,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X,A15,1X,A1,1X)') & '|','#','|','e_HF (eV)','|','Sig_GW (eV)','|','Z','|','e_GW (eV)','|' @@ -66,14 +68,14 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex write(*,'(2X,A10,I3)') 'Iteration ',nSCF write(*,'(2X,A14,F15.5)')'Convergence = ',Conv write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') 'qsGW HOMO energy =',eGW(HOMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'qsGW LUMO energy =',eGW(LUMO)*HaToeV,' eV' - write(*,'(2X,A60,F15.6,A3)') 'qsGW HOMO-LUMO gap =',Gap*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'qsRGW HOMO energy =',eGW(HOMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'qsRGW LUMO energy =',eGW(LUMO)*HaToeV,' eV' + write(*,'(2X,A60,F15.6,A3)') 'qsRGW HOMO-LUMO gap =',Gap*HaToeV,' eV' write(*,*)'-------------------------------------------------------------------------------' - write(*,'(2X,A60,F15.6,A3)') ' qsGW total energy =',ENuc + EqsGW,' au' - write(*,'(2X,A60,F15.6,A3)') ' qsGW exchange energy =',Ex,' au' - write(*,'(2X,A60,F15.6,A3)') ' GM@qsGW correlation energy =',EcGM,' au' - write(*,'(2X,A60,F15.6,A3)') 'phRPA@qsGW correlation energy =',EcRPA,' au' + write(*,'(2X,A60,F15.6,A3)') ' qsRGW total energy =',ENuc + EqsGW,' au' + write(*,'(2X,A60,F15.6,A3)') ' qsRGW exchange energy =',EK,' au' + write(*,'(2X,A60,F15.6,A3)') ' GM@qsRGW correlation energy =',EcGM,' au' + write(*,'(2X,A60,F15.6,A3)') 'phRPA@qsRGW correlation energy =',EcRPA,' au' write(*,*)'-------------------------------------------------------------------------------' write(*,*) @@ -83,41 +85,40 @@ subroutine print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigC,Z,ENuc,ET,EV,EJ,Ex write(*,*) write(*,'(A50)') '---------------------------------------' - write(*,'(A32)') ' Summary ' + write(*,'(A33)') ' Summary ' write(*,'(A50)') '---------------------------------------' - write(*,'(A32,1X,F16.10,A3)') ' One-electron energy: ',ET + EV,' au' - write(*,'(A32,1X,F16.10,A3)') ' Kinetic energy: ',ET,' au' - write(*,'(A32,1X,F16.10,A3)') ' Potential energy: ',EV,' au' + write(*,'(A33,1X,F16.10,A3)') ' One-electron energy = ',ET + EV,' au' + write(*,'(A33,1X,F16.10,A3)') ' Kinetic energy = ',ET,' au' + write(*,'(A33,1X,F16.10,A3)') ' Potential energy = ',EV,' au' write(*,'(A50)') '---------------------------------------' - write(*,'(A32,1X,F16.10,A3)') ' Two-electron energy: ',EJ + Ex,' au' - write(*,'(A32,1X,F16.10,A3)') ' Hartree energy: ',EJ,' au' - write(*,'(A32,1X,F16.10,A3)') ' Exchange energy: ',Ex,' au' - write(*,'(A32,1X,F16.10,A3)') ' Correlation energy: ',EcGM,' au' + write(*,'(A33,1X,F16.10,A3)') ' Two-electron energy = ',EJ + EK,' au' + write(*,'(A33,1X,F16.10,A3)') ' Hartree energy = ',EJ,' au' + write(*,'(A33,1X,F16.10,A3)') ' Exchange energy = ',EK,' au' + write(*,'(A33,1X,F16.10,A3)') ' Correlation energy = ',EcGM,' au' write(*,'(A50)') '---------------------------------------' - write(*,'(A32,1X,F16.10,A3)') ' Electronic energy: ',EqsGW,' au' - write(*,'(A32,1X,F16.10,A3)') ' Nuclear repulsion: ',ENuc,' au' - write(*,'(A32,1X,F16.10,A3)') ' qsGW energy: ',ENuc + EqsGW,' au' + write(*,'(A33,1X,F16.10,A3)') ' Electronic energy = ',EqsGW,' au' + write(*,'(A33,1X,F16.10,A3)') ' Nuclear repulsion = ',ENuc,' au' + write(*,'(A33,1X,F16.10,A3)') ' qsRGW energy = ',ENuc + EqsGW,' au' write(*,'(A50)') '---------------------------------------' - write(*,'(A35)') ' Dipole moment (Debye) ' + write(*,'(A36)') ' Dipole moment (Debye) ' write(*,'(10X,4A10)') 'X','Y','Z','Tot.' - write(*,'(10X,4F10.6)') (dipole(ixyz)*auToD,ixyz=1,ncart),norm2(dipole)*auToD - write(*,'(A50)') '-----------------------------------------' + write(*,'(10X,4F10.4)') (dipole(ixyz)*auToD,ixyz=1,ncart),norm2(dipole)*auToD + write(*,'(A50)') '---------------------------------------' write(*,*) if(dump_orb) then write(*,'(A50)') '---------------------------------------' - write(*,'(A32)') ' qsGW MO coefficients' + write(*,'(A50)') ' Restricted qsGW orbital coefficients' write(*,'(A50)') '---------------------------------------' call matout(nBas,nBas,c) write(*,*) end if write(*,'(A50)') '---------------------------------------' - write(*,'(A32)') ' qsGW MO energies' + write(*,'(A50)') ' Restricted qsGW orbital energies (au) ' write(*,'(A50)') '---------------------------------------' - call matout(nBas,1,eGW) + call vecout(nBas,eGW) write(*,*) endif - end subroutine diff --git a/src/GW/print_qsUGW.f90 b/src/GW/print_qsUGW.f90 index 4523dc2..0ad207a 100644 --- a/src/GW/print_qsUGW.f90 +++ b/src/GW/print_qsUGW.f90 @@ -65,11 +65,7 @@ subroutine print_qsUGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,cGW,Ov, & write(*,*)'-------------------------------------------------------------------------------& ------------------------------------------------' - if(nSCF < 10) then - write(*,'(1X,A21,I1,A1,I1,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' - else - write(*,'(1X,A21,I2,A1,I2,A12)')' Self-consistent qsG',nSCF,'W',nSCF,' calculation' - endif + write(*,'(1X,A21,I3,A1,I3,A12)')' Self-consistent qsUG',nSCF,'W',nSCF,' calculation' write(*,*)'-------------------------------------------------------------------------------& ------------------------------------------------' write(*,'(A1,A3,A1,A30,A1,A30,A1,A30,A1,A30,A1)') & @@ -153,7 +149,7 @@ subroutine print_qsUGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,cGW,Ov, & write(*,'(A60)') '-------------------------------------------------' write(*,'(A45)') ' Dipole moment (Debye) ' write(*,'(19X,4A10)') 'X','Y','Z','Tot.' - write(*,'(19X,4F10.6)') (dipole(ixyz)*auToD,ixyz=1,ncart),norm2(dipole)*auToD + write(*,'(19X,4F10.4)') (dipole(ixyz)*auToD,ixyz=1,ncart),norm2(dipole)*auToD write(*,'(A60)') '-------------------------------------------------' write(*,*) diff --git a/src/GW/qsRGW.f90 b/src/GW/qsRGW.f90 index 624da6a..e4b54a9 100644 --- a/src/GW/qsRGW.f90 +++ b/src/GW/qsRGW.f90 @@ -62,7 +62,7 @@ subroutine qsRGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,do double precision :: ET double precision :: EV double precision :: EJ - double precision :: Ex + double precision :: EK double precision :: EqsGW double precision :: EcRPA double precision :: EcBSE(nspin) @@ -73,7 +73,7 @@ subroutine qsRGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,do double precision :: dipole(ncart) logical :: dRPA = .true. - logical :: print_W = .true. + logical :: print_W = .false. double precision,allocatable :: error_diis(:,:) double precision,allocatable :: F_diis(:,:) double precision,allocatable :: Aph(:,:) @@ -245,16 +245,16 @@ subroutine qsRGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,dophBSE,do ! Exchange energy - Ex = 0.25d0*trace_matrix(nBas,matmul(P,K)) + EK = 0.25d0*trace_matrix(nBas,matmul(P,K)) ! Total energy - EqsGW = ET + EV + EJ + Ex + EqsGW = ET + EV + EJ + EK ! Print results call dipole_moment(nBas,P,nNuc,ZNuc,rNuc,dipole_int_AO,dipole) - call print_qsGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigCp,Z,ENuc,ET,EV,EJ,Ex,EcGM,EcRPA,EqsGW,dipole) + call print_qsRGW(nBas,nO,nSCF,Conv,thresh,eHF,eGW,c,SigCp,Z,ENuc,ET,EV,EJ,EK,EcGM,EcRPA,EqsGW,dipole) enddo !------------------------------------------------------------------------ diff --git a/src/utils/utils.f90 b/src/utils/utils.f90 index 961b419..cf341be 100644 --- a/src/utils/utils.f90 +++ b/src/utils/utils.f90 @@ -143,6 +143,20 @@ subroutine matout(m,n,A) end subroutine +!------------------------------------------------------------------------ +subroutine vecout(m,A) + +! Print the N vector A + + implicit none + + integer,intent(in) :: m + double precision,intent(in) :: A(m) + + call matout(m,1,A) + +end subroutine + !------------------------------------------------------------------------ subroutine trace_vector(n,v,Tr)