10
1
mirror of https://github.com/pfloos/quack synced 2024-12-23 12:55:25 +01:00

add MP module

This commit is contained in:
Pierre-Francois Loos 2023-07-17 14:21:39 +02:00
parent a2ab1fa782
commit 95807231fe
2 changed files with 76 additions and 42 deletions

69
src/MP/MP.f90 Normal file
View File

@ -0,0 +1,69 @@
subroutine MP(doMP2,doMP3,unrestricted,regularize,nBas,nC,nO,nV,nR,ERI,ERI_aaaa,ERI_aabb,ERI_bbbb,ENuc,EHF,epsHF)
! Moller-Plesset module
implicit none
include 'parameters.h'
! Input variables
logical,intent(in) :: doMP2
logical,intent(in) :: doMP3
logical,intent(in) :: unrestricted
logical,intent(in) :: regularize
integer,intent(in) :: nBas
integer,intent(in) :: nC(nspin)
integer,intent(in) :: nO(nspin)
integer,intent(in) :: nV(nspin)
integer,intent(in) :: nR(nspin)
double precision,intent(in) :: ENuc
double precision,intent(in) :: EHF
double precision,intent(in) :: epsHF(nBas)
double precision,intent(in) :: ERI(nBas,nBas,nBas,nBas)
double precision,intent(in) :: ERI_aaaa(nBas,nBas,nBas,nBas)
double precision,intent(in) :: ERI_aabb(nBas,nBas,nBas,nBas)
double precision,intent(in) :: ERI_bbbb(nBas,nBas,nBas,nBas)
! Local variables
! Output variables
!------------------------------------------------------------------------
! Compute MP3 energy
!------------------------------------------------------------------------
if(doMP2) then
if(unrestricted) then
call UMP2(nBas,nC,nO,nV,nR,ERI_aaaa,ERI_aabb,ERI_bbbb,ENuc,EHF,epsHF)
else
call MP2(regularize,nBas,nC,nO,nV,nR,ERI,ENuc,EHF,epsHF)
end if
end if
!------------------------------------------------------------------------
! Compute MP3 energy
!------------------------------------------------------------------------
if(doMP3) then
if(unrestricted) then
write(*,*) 'MP3 NYI for UHF reference'
stop
else
call MP3(nBas,nC,nO,nV,nR,ERI,ENuc,EHF,epsHF)
end if
end if
end subroutine

View File

@ -7,7 +7,7 @@ program QuAcK
logical :: doHF,doRHF,doUHF,doRMOM,doUMOM logical :: doHF,doRHF,doUHF,doRMOM,doUMOM
logical :: dostab logical :: dostab
logical :: doKS logical :: doKS
logical :: doMP2,doMP3 logical :: doMP,doMP2,doMP3
logical :: doCCD,dopCCD,doDCD,doCCSD,doCCSDT logical :: doCCD,dopCCD,doDCD,doCCSD,doCCSDT
logical :: do_drCCD,do_rCCD,do_crCCD,do_lCCD logical :: do_drCCD,do_rCCD,do_crCCD,do_lCCD
logical :: doCIS,doCIS_D,doCID,doCISD,doFCI logical :: doCIS,doCIS_D,doCID,doCISD,doFCI
@ -229,7 +229,7 @@ program QuAcK
end if end if
!------------------------------------------------------------------------ !------------------------------------------------------------------------
! KS module ! Kohn-Sham module
!------------------------------------------------------------------------ !------------------------------------------------------------------------
if(doKS) then if(doKS) then
@ -360,23 +360,15 @@ program QuAcK
end if end if
!------------------------------------------------------------------------ !------------------------------------------------------------------------
! Compute MP2 energy ! Moller-Plesset module
!------------------------------------------------------------------------ !------------------------------------------------------------------------
if(doMP2) then doMP = doMP2 .or. doMP3
if(doMP) then
call cpu_time(start_MP) call cpu_time(start_MP)
call MP(doMP2,doMP3,unrestricted,regMP,nBas,nC,nO,nV,nR,ERI_MO,ENuc,EHF,epsHF)
if(unrestricted) then
call UMP2(nBas,nC,nO,nV,nR,ERI_MO_aaaa,ERI_MO_aabb,ERI_MO_bbbb,ENuc,EHF,epsHF)
else
call MP2(regMP,nBas,nC,nO,nV,nR,ERI_MO,ENuc,EHF,epsHF)
end if
call cpu_time(end_MP) call cpu_time(end_MP)
t_MP = end_MP - start_MP t_MP = end_MP - start_MP
@ -385,33 +377,6 @@ program QuAcK
end if end if
!------------------------------------------------------------------------
! Compute MP3 energy
!------------------------------------------------------------------------
if(doMP3) then
call cpu_time(start_MP)
if(unrestricted) then
write(*,*) 'MP3 NYI for UHF reference'
stop
else
call MP3(nBas,nC,nO,nV,nR,ERI_MO,ENuc,EHF,epsHF)
end if
call cpu_time(end_MP)
t_MP = end_MP - start_MP
write(*,'(A65,1X,F9.3,A8)') 'Total CPU time for MP3 = ',t_MP,' seconds'
write(*,*)
end if
!------------------------------------------------------------------------ !------------------------------------------------------------------------
! Perform CCD calculation ! Perform CCD calculation
!------------------------------------------------------------------------ !------------------------------------------------------------------------