From 8dfd69db805529b944a833baf5981c1e67d584ac Mon Sep 17 00:00:00 2001 From: Pierre-Francois Loos Date: Thu, 16 Jan 2020 21:39:00 +0100 Subject: [PATCH] exchange kernel --- examples/molecule.N2 | 2 +- input/basis | 84 ++++++++++++-------------------------- input/methods | 4 +- input/molecule | 2 +- input/options | 10 ++--- input/weight | 84 ++++++++++++-------------------------- scan_N2.sh | 2 +- src/QuAcK/G0W0.f90 | 5 ++- src/QuAcK/QuAcK.f90 | 17 ++++---- src/QuAcK/RPA.f90 | 7 ++-- src/QuAcK/evGW.f90 | 5 ++- src/QuAcK/qsGW.f90 | 6 ++- src/QuAcK/read_options.f90 | 9 ++-- 13 files changed, 91 insertions(+), 146 deletions(-) diff --git a/examples/molecule.N2 b/examples/molecule.N2 index 58ce30b..35e31a1 100644 --- a/examples/molecule.N2 +++ b/examples/molecule.N2 @@ -2,4 +2,4 @@ 2 7 7 0 0 # Znuc x y z N 0. 0. 0. - N 0. 0. 3 + N 0. 0. 2.0 diff --git a/input/basis b/input/basis index 120ad98..b246175 100644 --- a/input/basis +++ b/input/basis @@ -1,58 +1,26 @@ -1 6 -S 8 1.00 - 9046.0000000 0.0007000 - 1357.0000000 0.0053890 - 309.3000000 0.0274060 - 87.7300000 0.1032070 - 28.5600000 0.2787230 - 10.2100000 0.4485400 - 3.8380000 0.2782380 - 0.7466000 0.0154400 -S 8 1.00 - 9046.0000000 -0.0001530 - 1357.0000000 -0.0012080 - 309.3000000 -0.0059920 - 87.7300000 -0.0245440 - 28.5600000 -0.0674590 - 10.2100000 -0.1580780 - 3.8380000 -0.1218310 - 0.7466000 0.5490030 -S 1 1.00 - 0.2248000 1.0000000 -P 3 1.00 - 13.5500000 0.0399190 - 2.9170000 0.2171690 - 0.7973000 0.5103190 -P 1 1.00 - 0.2185000 1.0000000 -D 1 1.00 - 0.8170000 1.0000000 -2 6 -S 8 1.00 - 9046.0000000 0.0007000 - 1357.0000000 0.0053890 - 309.3000000 0.0274060 - 87.7300000 0.1032070 - 28.5600000 0.2787230 - 10.2100000 0.4485400 - 3.8380000 0.2782380 - 0.7466000 0.0154400 -S 8 1.00 - 9046.0000000 -0.0001530 - 1357.0000000 -0.0012080 - 309.3000000 -0.0059920 - 87.7300000 -0.0245440 - 28.5600000 -0.0674590 - 10.2100000 -0.1580780 - 3.8380000 -0.1218310 - 0.7466000 0.5490030 -S 1 1.00 - 0.2248000 1.0000000 -P 3 1.00 - 13.5500000 0.0399190 - 2.9170000 0.2171690 - 0.7973000 0.5103190 -P 1 1.00 - 0.2185000 1.0000000 -D 1 1.00 - 0.8170000 1.0000000 +1 3 +S 3 1.00 + 0.9910616896D+02 0.1543289673D+00 + 0.1805231239D+02 0.5353281423D+00 + 0.4885660238D+01 0.4446345422D+00 +S 3 1.00 + 0.3780455879D+01 -0.9996722919D-01 + 0.8784966449D+00 0.3995128261D+00 + 0.2857143744D+00 0.7001154689D+00 +P 3 1.00 + 0.3780455879D+01 0.1559162750D+00 + 0.8784966449D+00 0.6076837186D+00 + 0.2857143744D+00 0.3919573931D+00 +2 3 +S 3 1.00 + 0.9910616896D+02 0.1543289673D+00 + 0.1805231239D+02 0.5353281423D+00 + 0.4885660238D+01 0.4446345422D+00 +S 3 1.00 + 0.3780455879D+01 -0.9996722919D-01 + 0.8784966449D+00 0.3995128261D+00 + 0.2857143744D+00 0.7001154689D+00 +P 3 1.00 + 0.3780455879D+01 0.1559162750D+00 + 0.8784966449D+00 0.6076837186D+00 + 0.2857143744D+00 0.3919573931D+00 diff --git a/input/methods b/input/methods index 5b88684..4b948cf 100644 --- a/input/methods +++ b/input/methods @@ -5,11 +5,11 @@ # CCD CCSD CCSD(T) ringCCD ladderCCD F F F F F # CIS RPA RPAx ppRPA ADC - T T T F F + F T T F F # GF2 GF3 F F # G0W0 evGW qsGW - T F F + F F F # G0T0 evGT qsGT F F F # MCMP2 diff --git a/input/molecule b/input/molecule index 58ce30b..35e31a1 100644 --- a/input/molecule +++ b/input/molecule @@ -2,4 +2,4 @@ 2 7 7 0 0 # Znuc x y z N 0. 0. 0. - N 0. 0. 3 + N 0. 0. 2.0 diff --git a/input/options b/input/options index b8b7c10..91ed066 100644 --- a/input/options +++ b/input/options @@ -1,5 +1,5 @@ # RHF: maxSCF thresh DIIS n_diis guess_type ortho_type - 64 0.0000001 T 5 1 1 + 64 0.0000001 T 5 2 1 # MP: # CC: maxSCF thresh DIIS n_diis @@ -7,10 +7,10 @@ # CIS/TDHF/BSE: singlet triplet T T # GF: maxSCF thresh DIIS n_diis renormalization - 64 0.00001 T 10 3 + 64 0.00001 T 5 3 # GW: maxSCF thresh DIIS n_diis COHSEX SOSEX BSE TDA G0W GW0 lin eta - 256 0.00001 T 5 F F T F F F F 0.000 -# ACFDT: AC XBS - T T + 64 0.00001 T 5 F F T F F F F 0.000 +# ACFDT: AC Kx XBS + T T T # MCMP2: nMC nEq nWalk dt nPrint iSeed doDrift 1000000 100000 10 0.3 10000 1234 T diff --git a/input/weight b/input/weight index 120ad98..b246175 100644 --- a/input/weight +++ b/input/weight @@ -1,58 +1,26 @@ -1 6 -S 8 1.00 - 9046.0000000 0.0007000 - 1357.0000000 0.0053890 - 309.3000000 0.0274060 - 87.7300000 0.1032070 - 28.5600000 0.2787230 - 10.2100000 0.4485400 - 3.8380000 0.2782380 - 0.7466000 0.0154400 -S 8 1.00 - 9046.0000000 -0.0001530 - 1357.0000000 -0.0012080 - 309.3000000 -0.0059920 - 87.7300000 -0.0245440 - 28.5600000 -0.0674590 - 10.2100000 -0.1580780 - 3.8380000 -0.1218310 - 0.7466000 0.5490030 -S 1 1.00 - 0.2248000 1.0000000 -P 3 1.00 - 13.5500000 0.0399190 - 2.9170000 0.2171690 - 0.7973000 0.5103190 -P 1 1.00 - 0.2185000 1.0000000 -D 1 1.00 - 0.8170000 1.0000000 -2 6 -S 8 1.00 - 9046.0000000 0.0007000 - 1357.0000000 0.0053890 - 309.3000000 0.0274060 - 87.7300000 0.1032070 - 28.5600000 0.2787230 - 10.2100000 0.4485400 - 3.8380000 0.2782380 - 0.7466000 0.0154400 -S 8 1.00 - 9046.0000000 -0.0001530 - 1357.0000000 -0.0012080 - 309.3000000 -0.0059920 - 87.7300000 -0.0245440 - 28.5600000 -0.0674590 - 10.2100000 -0.1580780 - 3.8380000 -0.1218310 - 0.7466000 0.5490030 -S 1 1.00 - 0.2248000 1.0000000 -P 3 1.00 - 13.5500000 0.0399190 - 2.9170000 0.2171690 - 0.7973000 0.5103190 -P 1 1.00 - 0.2185000 1.0000000 -D 1 1.00 - 0.8170000 1.0000000 +1 3 +S 3 1.00 + 0.9910616896D+02 0.1543289673D+00 + 0.1805231239D+02 0.5353281423D+00 + 0.4885660238D+01 0.4446345422D+00 +S 3 1.00 + 0.3780455879D+01 -0.9996722919D-01 + 0.8784966449D+00 0.3995128261D+00 + 0.2857143744D+00 0.7001154689D+00 +P 3 1.00 + 0.3780455879D+01 0.1559162750D+00 + 0.8784966449D+00 0.6076837186D+00 + 0.2857143744D+00 0.3919573931D+00 +2 3 +S 3 1.00 + 0.9910616896D+02 0.1543289673D+00 + 0.1805231239D+02 0.5353281423D+00 + 0.4885660238D+01 0.4446345422D+00 +S 3 1.00 + 0.3780455879D+01 -0.9996722919D-01 + 0.8784966449D+00 0.3995128261D+00 + 0.2857143744D+00 0.7001154689D+00 +P 3 1.00 + 0.3780455879D+01 0.1559162750D+00 + 0.8784966449D+00 0.6076837186D+00 + 0.2857143744D+00 0.3919573931D+00 diff --git a/scan_N2.sh b/scan_N2.sh index 35f50e2..4f0cd5e 100755 --- a/scan_N2.sh +++ b/scan_N2.sh @@ -4,7 +4,7 @@ MOL="N2" BASIS="VDZ" R_START=1.5 R_END=3.0 -DR=0.05 +DR=0.1 for R in $(seq $R_START $DR $R_END) do diff --git a/src/QuAcK/G0W0.f90 b/src/QuAcK/G0W0.f90 index 1e86fe7..7efd1b3 100644 --- a/src/QuAcK/G0W0.f90 +++ b/src/QuAcK/G0W0.f90 @@ -1,4 +1,4 @@ -subroutine G0W0(doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_manifold,eta, & +subroutine G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_manifold,eta, & nBas,nC,nO,nV,nR,nS,ENuc,ERHF,Hc,H,ERI,PHF,cHF,eHF,eGW) ! Perform G0W0 calculation @@ -10,6 +10,7 @@ subroutine G0W0(doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_mani ! Input variables logical,intent(in) :: doACFDT + logical,intent(in) :: exchange_kernel logical,intent(in) :: doXBS logical,intent(in) :: COHSEX logical,intent(in) :: SOSEX @@ -153,7 +154,7 @@ subroutine G0W0(doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_mani end if - call ACFDT(doXBS,.true.,TDA,BSE,singlet_manifold,triplet_manifold, & + call ACFDT(exchange_kernel,doXBS,.true.,TDA,BSE,singlet_manifold,triplet_manifold, & nBas,nC,nO,nV,nR,nS,ERI,eGW,Omega,XpY,XmY,rho,EcAC) write(*,*) diff --git a/src/QuAcK/QuAcK.f90 b/src/QuAcK/QuAcK.f90 index 00cc4cd..37d240d 100644 --- a/src/QuAcK/QuAcK.f90 +++ b/src/QuAcK/QuAcK.f90 @@ -29,6 +29,7 @@ program QuAcK double precision,allocatable :: eG0T0(:) logical :: doACFDT + logical :: exchange_kernel logical :: doXBS integer :: nShell @@ -132,7 +133,7 @@ program QuAcK maxSCF_GF,thresh_GF,DIIS_GF,n_diis_GF,renormalization, & maxSCF_GW,thresh_GW,DIIS_GW,n_diis_GW, & COHSEX,SOSEX,BSE,TDA,G0W,GW0,linearize,eta, & - doACFDT,doXBS, & + doACFDT,exchange_kernel,doXBS, & nMC,nEq,nWalk,dt,nPrint,iSeed,doDrift) ! Weird stuff @@ -440,7 +441,7 @@ program QuAcK if(doRPA) then call cpu_time(start_RPA) - call RPA(doACFDT,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO_basis,eHF) + call RPA(doACFDT,exchange_kernel,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO_basis,eHF) call cpu_time(end_RPA) t_RPA = end_RPA - start_RPA @@ -450,13 +451,13 @@ program QuAcK end if !------------------------------------------------------------------------ -! Compute RPAx excitations +! Compute RPAx (RPA with exchange) excitations !------------------------------------------------------------------------ if(doRPAx) then call cpu_time(start_RPAx) - call RPAx(doACFDT,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO_basis,eHF) + call RPAx(doACFDT,exchange_kernel,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI_MO_basis,eHF) call cpu_time(end_RPAx) t_RPAx = end_RPAx - start_RPAx @@ -472,7 +473,7 @@ program QuAcK if(doppRPA) then call cpu_time(start_ppRPA) - call ppRPA(doACFDT,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,ENuc,ERHF,ERI_MO_basis,eHF) + call ppRPA(doACFDT,exchange_kernel,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,ENuc,ERHF,ERI_MO_basis,eHF) call cpu_time(end_ppRPA) t_ppRPA = end_ppRPA - start_ppRPA @@ -538,7 +539,7 @@ program QuAcK if(doG0W0) then call cpu_time(start_G0W0) - call G0W0(doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_manifold,eta, & + call G0W0(doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA,singlet_manifold,triplet_manifold,eta, & nBas,nC(1),nO(1),nV(1),nR(1),nS(1),ENuc,ERHF,Hc,H,ERI_MO_basis,PHF,cHF,eHF,eG0W0) call cpu_time(end_G0W0) @@ -555,7 +556,7 @@ program QuAcK if(doevGW) then call cpu_time(start_evGW) - call evGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW0, & + call evGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW0, & singlet_manifold,triplet_manifold,linearize,eta, & nBas,nC(1),nO(1),nV(1),nR(1),nS(1),ENuc,ERHF,Hc,H,ERI_MO_basis,PHF,cHF,eHF,eG0W0) call cpu_time(end_evGW) @@ -573,7 +574,7 @@ program QuAcK if(doqsGW) then call cpu_time(start_qsGW) - call qsGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW0, & + call qsGW(maxSCF_GW,thresh_GW,n_diis_GW,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW0, & singlet_manifold,triplet_manifold,eta, & nBas,nC(1),nO(1),nV(1),nR(1),nS(1),ENuc,ERHF,S,X,T,V,Hc,ERI_AO_basis,ERI_MO_basis,PHF,cHF,eHF) call cpu_time(end_qsGW) diff --git a/src/QuAcK/RPA.f90 b/src/QuAcK/RPA.f90 index da6afe4..927df68 100644 --- a/src/QuAcK/RPA.f90 +++ b/src/QuAcK/RPA.f90 @@ -1,4 +1,4 @@ -subroutine RPA(doACFDT,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI,e) +subroutine RPA(doACFDT,exchange_kernel,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI,e) ! Perform a direct random phase approximation calculation @@ -9,6 +9,7 @@ subroutine RPA(doACFDT,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENu ! Input variables logical,intent(in) :: doACFDT + logical,intent(in) :: exchange_kernel logical,intent(in) :: singlet_manifold logical,intent(in) :: triplet_manifold integer,intent(in) :: nBas @@ -91,8 +92,8 @@ subroutine RPA(doACFDT,singlet_manifold,triplet_manifold,nBas,nC,nO,nV,nR,nS,ENu write(*,*) 'Adiabatic connection version of RPA correlation energy' write(*,*) '------------------------------------------------------' write(*,*) - - call ACFDT(.false.,.true.,.false.,.false.,singlet_manifold,triplet_manifold, & + + call ACFDT(exchange_kernel,.false.,.true.,.false.,.false.,singlet_manifold,triplet_manifold, & nBas,nC,nO,nV,nR,nS,ERI,e,Omega,XpY,XmY,rho,EcAC) diff --git a/src/QuAcK/evGW.f90 b/src/QuAcK/evGW.f90 index 126f712..9e5ccfe 100644 --- a/src/QuAcK/evGW.f90 +++ b/src/QuAcK/evGW.f90 @@ -1,4 +1,4 @@ -subroutine evGW(maxSCF,thresh,max_diis,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW0, & +subroutine evGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW0, & singlet_manifold,triplet_manifold,linearize,eta, & nBas,nC,nO,nV,nR,nS,ENuc,ERHF,Hc,H,ERI,PHF,cHF,eHF,eG0W0) @@ -15,6 +15,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW double precision,intent(in) :: ENuc double precision,intent(in) :: ERHF logical,intent(in) :: doACFDT + logical,intent(in) :: exchange_kernel logical,intent(in) :: doXBS logical,intent(in) :: COHSEX logical,intent(in) :: SOSEX @@ -255,7 +256,7 @@ subroutine evGW(maxSCF,thresh,max_diis,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW end if - call ACFDT(doXBS,.true.,TDA,BSE,singlet_manifold,triplet_manifold, & + call ACFDT(exchange_kernel,doXBS,.true.,TDA,BSE,singlet_manifold,triplet_manifold, & nBas,nC,nO,nV,nR,nS,ERI,eGW,Omega,XpY,XmY,rho,EcAC) write(*,*) diff --git a/src/QuAcK/qsGW.f90 b/src/QuAcK/qsGW.f90 index d2a10b0..c85aecb 100644 --- a/src/QuAcK/qsGW.f90 +++ b/src/QuAcK/qsGW.f90 @@ -1,4 +1,5 @@ -subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold,eta, & +subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,exchange_kernel,doXBS, & + COHSEX,SOSEX,BSE,TDA,G0W,GW0,singlet_manifold,triplet_manifold,eta, & nBas,nC,nO,nV,nR,nS,ENuc,ERHF,S,X,T,V,Hc,ERI_AO_basis,ERI_MO_basis,PHF,cHF,eHF) ! Perform a quasiparticle self-consistent GW calculation @@ -12,6 +13,7 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW integer,intent(in) :: max_diis double precision,intent(in) :: thresh logical,intent(in) :: doACFDT + logical,intent(in) :: exchange_kernel logical,intent(in) :: doXBS logical,intent(in) :: COHSEX logical,intent(in) :: SOSEX @@ -285,7 +287,7 @@ subroutine qsGW(maxSCF,thresh,max_diis,doACFDT,doXBS,COHSEX,SOSEX,BSE,TDA,G0W,GW end if - call ACFDT(doXBS,.true.,TDA,BSE,singlet_manifold,triplet_manifold, & + call ACFDT(exchange_kernel,doXBS,.true.,TDA,BSE,singlet_manifold,triplet_manifold, & nBas,nC,nO,nV,nR,nS,ERI_MO_basis,eGW,Omega,XpY,XmY,rho,EcAC) write(*,*) diff --git a/src/QuAcK/read_options.f90 b/src/QuAcK/read_options.f90 index 0f67374..1b15a24 100644 --- a/src/QuAcK/read_options.f90 +++ b/src/QuAcK/read_options.f90 @@ -4,7 +4,7 @@ subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,n_diis_HF,guess_type,ortho_t maxSCF_GF,thresh_GF,DIIS_GF,n_diis_GF,renormalization, & maxSCF_GW,thresh_GW,DIIS_GW,n_diis_GW, & COHSEX,SOSEX,BSE,TDA,G0W,GW0,linearize,eta, & - doACFDT,doXBS, & + doACFDT,exchange_kernel,doXBS, & nMC,nEq,nWalk,dt,nPrint,iSeed,doDrift) ! Read desired methods @@ -48,6 +48,7 @@ subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,n_diis_HF,guess_type,ortho_t double precision,intent(out) :: eta logical,intent(out) :: doACFDT + logical,intent(out) :: exchange_kernel logical,intent(out) :: doXBS integer,intent(out) :: nMC @@ -158,13 +159,15 @@ subroutine read_options(maxSCF_HF,thresh_HF,DIIS_HF,n_diis_HF,guess_type,ortho_t ! Options for adiabatic connection doACFDT = .false. + exchange_kernel = .false. doXBS = .false. read(1,*) - read(1,*) answer1,answer2 + read(1,*) answer1,answer2,answer3 if(answer1 == 'T') doACFDT = .true. - if(answer2 == 'T') doXBS = .true. + if(answer2 == 'T') exchange_kernel = .true. + if(answer3 == 'T') doXBS = .true. ! Read options for MC-MP2: Monte Carlo steps, number of equilibration steps, number of walkers, ! Monte Carlo time step, frequency of output results, and seed for random number generator