4
1
mirror of https://github.com/pfloos/quack synced 2024-11-07 06:33:55 +01:00

pp-RPA starting to be OK

This commit is contained in:
Pierre-Francois Loos 2019-10-15 17:56:27 +02:00
parent 870e4defaf
commit f8a9321cf0
4 changed files with 41 additions and 39 deletions

View File

@ -1,11 +1,11 @@
# RHF UHF MOM # RHF UHF MOM
T F F T F F
# MP2 MP3 MP2-F12 # MP2 MP3 MP2-F12
T F F F F F
# CCD CCSD CCSD(T) # CCD CCSD CCSD(T)
F F F F F F
# CIS TDHF ppRPA ADC # CIS TDHF ppRPA ADC
F T T F F F T F
# GF2 GF3 # GF2 GF3
F F F F
# G0W0 evGW qsGW # G0W0 evGW qsGW

View File

@ -344,7 +344,9 @@ program QuAcK
if(doCCD) then if(doCCD) then
call cpu_time(start_CCD) call cpu_time(start_CCD)
call CCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nEl,ERI_MO_basis,ENuc,ERHF,eHF) ! call ring_CCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nEl,ERI_MO_basis,ENuc,ERHF,eHF)
call ladder_CCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nEl,ERI_MO_basis,ENuc,ERHF,eHF)
! call CCD(maxSCF_CC,thresh_CC,n_diis_CC,nBas,nEl,ERI_MO_basis,ENuc,ERHF,eHF)
call cpu_time(end_CCD) call cpu_time(end_CCD)
t_CCD = end_CCD - start_CCD t_CCD = end_CCD - start_CCD

View File

@ -69,11 +69,11 @@ subroutine linear_response_pp(ispin,BSE,nBas,nC,nO,nV,nR,nOO,nVV,e,ERI,Omega1,X1
! Diagonalize the p-h matrix ! Diagonalize the p-h matrix
Z(:,:) = M(:,:) Z(:,:) = M(:,:)
call diagonalize_matrix(nOO+nVV,Z(:,:),Omega(:)) call diagonalize_general_matrix(nOO+nVV,M(:,:),Omega(:),Z(:,:))
! write(*,*) 'pp-RPA excitation energies' write(*,*) 'pp-RPA excitation energies'
! call matout(nOO+nVV,1,Omega(:)) call matout(nOO+nVV,1,Omega(:))
! write(*,*) write(*,*)
! Split the various quantities in p-p and h-h parts ! Split the various quantities in p-p and h-h parts

View File

@ -1,34 +1,3 @@
!subroutine eigenvalues_non_symmetric_matrix(N,A,e)
!
!! Diagonalize a square matrix
!
! implicit none
!
!! Input variables
!
! integer,intent(in) :: N
! double precision,intent(inout):: A(N,N)
! double precision,intent(out) :: e(N)
!
!! Local variables
!
! integer :: lwork,info
! double precision,allocatable :: work(:)
!
!! Memory allocation
!
! allocate(eRe(N),eIm(N),work(3*N))
! lwork = size(work)
!
! call DGEEV('N','N',N,A,N, eRe, eIm, 0d0,1, VR,LDVR, WORK, LWORK, INFO )
!
! if(info /= 0) then
! print*,'Problem in diagonalize_matrix (dseev)!!'
! stop
! endif
!
!end subroutine eigenvalues_non_symmetric_matrix
!subroutine diagonalize_matrix_lowest(N,M,A,e) !subroutine diagonalize_matrix_lowest(N,M,A,e)
! !
!! Diagonalize a square matrix but only provide the M lowest eigenvalues/eigenvectors !! Diagonalize a square matrix but only provide the M lowest eigenvalues/eigenvectors
@ -61,6 +30,37 @@
! !
!end subroutine diagonalize_matrix_lowest !end subroutine diagonalize_matrix_lowest
subroutine diagonalize_general_matrix(N,A,e,X)
! Diagonalize a non-symmetric square matrix
implicit none
! Input variables
integer,intent(in) :: N
double precision,intent(inout):: A(N,N)
double precision,intent(out) :: X(N,N)
double precision,intent(out) :: e(N)
! Local variables
integer :: lwork,info
double precision,allocatable :: work(:),WI(:),VL(:,:)
! Memory allocation
lwork = 4*N
allocate(WI(N),VL(N,N),work(lwork))
call dgeev('V','V',N,A,N,e,WI,VL,N,X,N,work,lwork,info)
if(info /= 0) then
print*,'Problem in diagonalize_matrix (dgeev)!!'
endif
end subroutine diagonalize_general_matrix
subroutine diagonalize_matrix(N,A,e) subroutine diagonalize_matrix(N,A,e)
! Diagonalize a square matrix ! Diagonalize a square matrix