diff --git a/input/methods.default b/input/methods.default index 4f2a83b..3ce35b7 100644 --- a/input/methods.default +++ b/input/methods.default @@ -1,5 +1,5 @@ # RHF UHF GHF ROHF - F F F F + F T F F # MP2 MP3 F F # CCD pCCD DCD CCSD CCSD(T) @@ -10,8 +10,8 @@ F F F F F # phRPA phRPAx crRPA ppRPA F F F F -# G0F2 evGF2 qsGF2 G0F3 evGF3 - F F F F F +# G0F2 evGF2 qsGF2 ADC2 G0F3 evGF3 + F F F F F F # G0W0 evGW qsGW SRG-qsGW ufG0W0 ufGW F F F F F F # G0T0pp evGTpp qsGTpp G0T0eh evGTeh qsGTeh diff --git a/src/GF/RGF.f90 b/src/GF/RGF.f90 index db4c2af..2fe50f2 100644 --- a/src/GF/RGF.f90 +++ b/src/GF/RGF.f90 @@ -1,6 +1,6 @@ -subroutine RGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm,maxSCF,thresh,max_diis, & - dophBSE,doppBSE,TDA,dBSE,dTDA,singlet,triplet,linearize,eta,regularize, & - nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc,ERI_AO,ERI, & +subroutine RGF(dotest,doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,renorm,maxSCF,thresh,max_diis, & + dophBSE,doppBSE,TDA,dBSE,dTDA,singlet,triplet,linearize,eta,regularize, & + nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc,ERI_AO,ERI, & dipole_int_AO,dipole_int,PHF,cHF,epsHF) ! Green's function module @@ -15,6 +15,7 @@ subroutine RGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm,maxSCF,thresh logical,intent(in) :: doG0F2 logical,intent(in) :: doevGF2 logical,intent(in) :: doqsGF2 + logical,intent(in) :: doufG0F02 logical,intent(in) :: doG0F3 logical,intent(in) :: doevGF3 @@ -113,6 +114,22 @@ subroutine RGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm,maxSCF,thresh write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for qsGF2 = ',t_GF,' seconds' write(*,*) + end if + +!------------------------------------------------------------------------ +! Perform ufG0F02 calculation +!------------------------------------------------------------------------ + + if(doufG0F02) then + + call wall_time(start_GF) + call ufRG0F02(dotest,nBas,nC,nO,nV,nR,nS,ENuc,EHF,ERI,epsHF) + call wall_time(end_GF) + + t_GF = end_GF - start_GF + write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for ufG0F02 = ',t_GF,' seconds' + write(*,*) + end if !------------------------------------------------------------------------ diff --git a/src/GF/UGF.f90 b/src/GF/UGF.f90 index 55bafb9..03e569a 100644 --- a/src/GF/UGF.f90 +++ b/src/GF/UGF.f90 @@ -1,4 +1,4 @@ -subroutine UGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm,maxSCF,thresh,max_diis, & +subroutine UGF(dotest,doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,renorm,maxSCF,thresh,max_diis, & dophBSE,doppBSE,TDA,dBSE,dTDA,spin_conserved,spin_flip,linearize,eta,regularize, & nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EHF,S,X,T,V,Hc,ERI_AO,ERI_aaaa,ERI_aabb,ERI_bbbb, & dipole_int_AO,dipole_int_aa,dipole_int_bb,PHF,cHF,epsHF) @@ -15,6 +15,7 @@ subroutine UGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm,maxSCF,thresh logical,intent(in) :: doG0F2 logical,intent(in) :: doevGF2 logical,intent(in) :: doqsGF2 + logical,intent(in) :: doufG0F02 logical,intent(in) :: doG0F3 logical,intent(in) :: doevGF3 @@ -118,7 +119,23 @@ subroutine UGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm,maxSCF,thresh write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for qsGF2 = ',t_GF,' seconds' write(*,*) - end if + end if + +!------------------------------------------------------------------------ +! Perform ufG0F02 calculation +!------------------------------------------------------------------------ + + if(doufG0F02) then + + !call wall_time(start_GF) + !call ufUG0F02() + !call wall_time(end_GF) + print*,'Unrestricted version of ufG0F02 not yet implemented! Sorry.' + !t_GF = end_GF - start_GF + !write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for ufG0F02 = ',t_GF,' seconds' + !write(*,*) + + end if !------------------------------------------------------------------------ ! Compute G0F3 electronic binding energies diff --git a/src/GW/ufG0W0.f90 b/src/GW/ufG0W0.f90 index 969cd47..17119cc 100644 --- a/src/GW/ufG0W0.f90 +++ b/src/GW/ufG0W0.f90 @@ -491,14 +491,14 @@ subroutine ufG0W0(dotest,TDA_W,nBas,nC,nO,nV,nR,nS,ENuc,ERHF,ERI,eHF) write(*,*)'-------------------------------------------------------------' write(*,*) - end if + end if ! If state s should be print - end do + end do ! Loop on s - end if + end if ! If TDA - end if + end if ! If verbose - end do + end do ! Loop on the orbital in the e block end subroutine diff --git a/src/QuAcK/QuAcK.f90 b/src/QuAcK/QuAcK.f90 index df2c856..6625502 100644 --- a/src/QuAcK/QuAcK.f90 +++ b/src/QuAcK/QuAcK.f90 @@ -11,7 +11,7 @@ program QuAcK logical :: dodrCCD,dorCCD,docrCCD,dolCCD logical :: doCIS,doCIS_D,doCID,doCISD,doFCI logical :: dophRPA,dophRPAx,docrRPA,doppRPA - logical :: doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3 + logical :: doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3 logical :: doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW logical :: doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh @@ -98,7 +98,7 @@ program QuAcK dodrCCD,dorCCD,docrCCD,dolCCD, & doCIS,doCIS_D,doCID,doCISD,doFCI, & dophRPA,dophRPAx,docrRPA,doppRPA, & - doG0F2,doevGF2,doqsGF2, & + doG0F2,doevGF2,doqsGF2,doufG0F02, & doG0F3,doevGF3, & doG0W0,doevGW,doqsGW,doSRGqsGW, & doufG0W0,doufGW, & @@ -198,7 +198,7 @@ program QuAcK if(doRQuAcK) & call RQuAcK(doRtest,doRHF,doROHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,doDCD,doCCSD,doCCSDT, & dodrCCD,dorCCD,docrCCD,dolCCD,doCIS,doCIS_D,doCID,doCISD,doFCI,dophRPA,dophRPAx,docrRPA,doppRPA, & - doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & + doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh,nNuc,nBas,nC,nO,nV,nR,ENuc,ZNuc,rNuc, & S,T,V,Hc,X,dipole_int_AO,ERI_AO,maxSCF_HF,max_diis_HF,thresh_HF,level_shift, & guess_type,mix,reg_MP,maxSCF_CC,max_diis_CC,thresh_CC,spin_conserved,spin_flip,TDA, & @@ -213,7 +213,7 @@ program QuAcK if(doUQuAcK) & call UQuAcK(doUtest,doUHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,doDCD,doCCSD,doCCSDT, & dodrCCD,dorCCD,docrCCD,dolCCD,doCIS,doCIS_D,doCID,doCISD,doFCI,dophRPA,dophRPAx,docrRPA,doppRPA, & - doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & + doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh,nNuc,nBas,nC,nO,nV,nR,ENuc,ZNuc,rNuc, & S,T,V,Hc,X,dipole_int_AO,ERI_AO,maxSCF_HF,max_diis_HF,thresh_HF,level_shift, & guess_type,mix,reg_MP,maxSCF_CC,max_diis_CC,thresh_CC,spin_conserved,spin_flip,TDA, & diff --git a/src/QuAcK/RQuAcK.f90 b/src/QuAcK/RQuAcK.f90 index 5651d2f..e1d1292 100644 --- a/src/QuAcK/RQuAcK.f90 +++ b/src/QuAcK/RQuAcK.f90 @@ -1,6 +1,6 @@ subroutine RQuAcK(dotest,doRHF,doROHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,doDCD,doCCSD,doCCSDT, & dodrCCD,dorCCD,docrCCD,dolCCD,doCIS,doCIS_D,doCID,doCISD,doFCI,dophRPA,dophRPAx,docrRPA,doppRPA, & - doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & + doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh,nNuc,nBas,nC,nO,nV,nR,ENuc,ZNuc,rNuc, & S,T,V,Hc,X,dipole_int_AO,ERI_AO,maxSCF_HF,max_diis_HF,thresh_HF,level_shift, & guess_type,mix,reg_MP,maxSCF_CC,max_diis_CC,thresh_CC,singlet,triplet,TDA, & @@ -23,7 +23,7 @@ subroutine RQuAcK(dotest,doRHF,doROHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,d logical,intent(in) :: dodrCCD,dorCCD,docrCCD,dolCCD logical,intent(in) :: doCIS,doCIS_D,doCID,doCISD,doFCI logical,intent(in) :: dophRPA,dophRPAx,docrRPA,doppRPA - logical,intent(in) :: doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3 + logical,intent(in) :: doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3 logical,intent(in) :: doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW logical,intent(in) :: doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh @@ -277,14 +277,14 @@ subroutine RQuAcK(dotest,doRHF,doROHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,d ! Green's function module ! !-------------------------! - doGF = doG0F2 .or. doevGF2 .or. doqsGF2 .or. doG0F3 .or. doevGF3 + doGF = doG0F2 .or. doevGF2 .or. doqsGF2 .or. doufG0F02 .or. doG0F3 .or. doevGF3 if(doGF) then call wall_time(start_GF) - call RGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm_GF,maxSCF_GF,thresh_GF,max_diis_GF, & - dophBSE,doppBSE,TDA,dBSE,dTDA,singlet,triplet,lin_GF,eta_GF,reg_GF, & - nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,ERHF,S,X,T,V,Hc,ERI_AO,ERI_MO, & + call RGF(dotest,doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,renorm_GF,maxSCF_GF,thresh_GF,max_diis_GF, & + dophBSE,doppBSE,TDA,dBSE,dTDA,singlet,triplet,lin_GF,eta_GF,reg_GF, & + nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,ERHF,S,X,T,V,Hc,ERI_AO,ERI_MO, & dipole_int_AO,dipole_int_MO,PHF,cHF,eHF) call wall_time(end_GF) diff --git a/src/QuAcK/UQuAcK.f90 b/src/QuAcK/UQuAcK.f90 index 9bf04f4..be012d3 100644 --- a/src/QuAcK/UQuAcK.f90 +++ b/src/QuAcK/UQuAcK.f90 @@ -1,6 +1,6 @@ subroutine UQuAcK(dotest,doUHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,doDCD,doCCSD,doCCSDT, & dodrCCD,dorCCD,docrCCD,dolCCD,doCIS,doCIS_D,doCID,doCISD,doFCI,dophRPA,dophRPAx,docrRPA,doppRPA, & - doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & + doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW, & doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh,nNuc,nBas,nC,nO,nV,nR,ENuc,ZNuc,rNuc, & S,T,V,Hc,X,dipole_int_AO,ERI_AO,maxSCF_HF,max_diis_HF,thresh_HF,level_shift, & guess_type,mix,reg_MP,maxSCF_CC,max_diis_CC,thresh_CC,spin_conserved,spin_flip,TDA, & @@ -21,7 +21,7 @@ subroutine UQuAcK(dotest,doUHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,doDCD,do logical,intent(in) :: dodrCCD,dorCCD,docrCCD,dolCCD logical,intent(in) :: doCIS,doCIS_D,doCID,doCISD,doFCI logical,intent(in) :: dophRPA,dophRPAx,docrRPA,doppRPA - logical,intent(in) :: doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3 + logical,intent(in) :: doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3 logical,intent(in) :: doG0W0,doevGW,doqsGW,doufG0W0,doufGW,doSRGqsGW logical,intent(in) :: doG0T0pp,doevGTpp,doqsGTpp,doG0T0eh,doevGTeh,doqsGTeh @@ -294,14 +294,14 @@ subroutine UQuAcK(dotest,doUHF,dostab,dosearch,doMP2,doMP3,doCCD,dopCCD,doDCD,do ! Green's function module ! !-------------------------! - doGF = doG0F2 .or. doevGF2 .or. doqsGF2 .or. doG0F3 .or. doevGF3 + doGF = doG0F2 .or. doevGF2 .or. doqsGF2 .or. doufG0F02 .or. doG0F3 .or. doevGF3 if(doGF) then call wall_time(start_GF) - call UGF(dotest,doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3,renorm_GF,maxSCF_GF,thresh_GF,max_diis_GF, & - dophBSE,doppBSE,TDA,dBSE,dTDA,spin_conserved,spin_flip,lin_GF,eta_GF,reg_GF, & - nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EUHF,S,X,T,V,Hc,ERI_AO,ERI_aaaa,ERI_aabb,ERI_bbbb, & + call UGF(dotest,doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3,renorm_GF,maxSCF_GF,thresh_GF,max_diis_GF, & + dophBSE,doppBSE,TDA,dBSE,dTDA,spin_conserved,spin_flip,lin_GF,eta_GF,reg_GF, & + nNuc,ZNuc,rNuc,ENuc,nBas,nC,nO,nV,nR,nS,EUHF,S,X,T,V,Hc,ERI_AO,ERI_aaaa,ERI_aabb,ERI_bbbb, & dipole_int_AO,dipole_int_aa,dipole_int_bb,PHF,cHF,eHF) call wall_time(end_GF) diff --git a/src/QuAcK/read_methods.f90 b/src/QuAcK/read_methods.f90 index dafa77e..a56ac38 100644 --- a/src/QuAcK/read_methods.f90 +++ b/src/QuAcK/read_methods.f90 @@ -4,7 +4,7 @@ subroutine read_methods(doRHF,doUHF,doGHF,doROHF, & do_drCCD,do_rCCD,do_crCCD,do_lCCD, & doCIS,doCIS_D,doCID,doCISD,doFCI, & dophRPA,dophRPAx,docrRPA,doppRPA, & - doG0F2,doevGF2,doqsGF2, & + doG0F2,doevGF2,doqsGF2,doufG0F02, & doG0F3,doevGF3, & doG0W0,doevGW,doqsGW,doSRGqsGW, & doufG0W0,doufGW, & @@ -24,7 +24,7 @@ subroutine read_methods(doRHF,doUHF,doGHF,doROHF, & logical,intent(out) :: do_drCCD,do_rCCD,do_crCCD,do_lCCD logical,intent(out) :: doCIS,doCIS_D,doCID,doCISD,doFCI logical,intent(out) :: dophRPA,dophRPAx,docrRPA,doppRPA - logical,intent(out) :: doG0F2,doevGF2,doqsGF2,doG0F3,doevGF3 + logical,intent(out) :: doG0F2,doevGF2,doqsGF2,doufG0F02,doG0F3,doevGF3 logical,intent(out) :: doG0W0,doevGW,doqsGW,doSRGqsGW,doufG0W0,doufGW logical,intent(out) :: doG0T0pp,doevGTpp,doqsGTpp logical,intent(out) :: doG0T0eh,doevGTeh,doqsGTeh @@ -126,19 +126,21 @@ subroutine read_methods(doRHF,doUHF,doGHF,doROHF, & ! Read Green's function methods - doG0F2 = .false. - doevGF2 = .false. - doqsGF2 = .false. - doG0F3 = .false. - doevGF3 = .false. + doG0F2 = .false. + doevGF2 = .false. + doqsGF2 = .false. + doufG0F02 = .false. + doG0F3 = .false. + doevGF3 = .false. read(1,*) - read(1,*) ans1,ans2,ans3,ans4,ans5 - if(ans1 == 'T') doG0F2 = .true. - if(ans2 == 'T') doevGF2 = .true. - if(ans3 == 'T') doqsGF2 = .true. - if(ans4 == 'T') doG0F3 = .true. - if(ans5 == 'T') doevGF3 = .true. + read(1,*) ans1,ans2,ans3,ans4,ans5,ans6 + if(ans1 == 'T') doG0F2 = .true. + if(ans2 == 'T') doevGF2 = .true. + if(ans3 == 'T') doqsGF2 = .true. + if(ans4 == 'T') doufG0F02 = .true. + if(ans5 == 'T') doG0F3 = .true. + if(ans6 == 'T') doevGF3 = .true. ! Read GW methods