mirror of
https://github.com/pfloos/quack
synced 2025-05-06 23:34:42 +02:00
pp-RPA starting to be OK
This commit is contained in:
parent
870e4defaf
commit
f8a9321cf0
@ -1,11 +1,11 @@
|
||||
# RHF UHF MOM
|
||||
T F F
|
||||
# MP2 MP3 MP2-F12
|
||||
T F F
|
||||
F F F
|
||||
# CCD CCSD CCSD(T)
|
||||
F F F
|
||||
# CIS TDHF ppRPA ADC
|
||||
F T T F
|
||||
F F T F
|
||||
# GF2 GF3
|
||||
F F
|
||||
# G0W0 evGW qsGW
|
||||
|
@ -344,7 +344,9 @@ program QuAcK
|
||||
if(doCCD) then
|
||||
|
||||
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)
|
||||
|
||||
t_CCD = end_CCD - start_CCD
|
||||
|
@ -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
|
||||
|
||||
Z(:,:) = M(:,:)
|
||||
call diagonalize_matrix(nOO+nVV,Z(:,:),Omega(:))
|
||||
call diagonalize_general_matrix(nOO+nVV,M(:,:),Omega(:),Z(:,:))
|
||||
|
||||
! write(*,*) 'pp-RPA excitation energies'
|
||||
! call matout(nOO+nVV,1,Omega(:))
|
||||
! write(*,*)
|
||||
write(*,*) 'pp-RPA excitation energies'
|
||||
call matout(nOO+nVV,1,Omega(:))
|
||||
write(*,*)
|
||||
|
||||
! Split the various quantities in p-p and h-h parts
|
||||
|
||||
|
@ -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)
|
||||
!
|
||||
!! Diagonalize a square matrix but only provide the M lowest eigenvalues/eigenvectors
|
||||
@ -61,6 +30,37 @@
|
||||
!
|
||||
!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)
|
||||
|
||||
! Diagonalize a square matrix
|
||||
@ -88,7 +88,7 @@ subroutine diagonalize_matrix(N,A,e)
|
||||
if(info /= 0) then
|
||||
print*,'Problem in diagonalize_matrix (dsyev)!!'
|
||||
endif
|
||||
|
||||
|
||||
end subroutine diagonalize_matrix
|
||||
|
||||
subroutine svd(N,A,U,D,Vt)
|
||||
|
Loading…
x
Reference in New Issue
Block a user