diff --git a/input/methods b/input/methods index 94f75a0..7ef4e42 100644 --- a/input/methods +++ b/input/methods @@ -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 diff --git a/src/QuAcK/QuAcK.f90 b/src/QuAcK/QuAcK.f90 index 1a5a238..22c8012 100644 --- a/src/QuAcK/QuAcK.f90 +++ b/src/QuAcK/QuAcK.f90 @@ -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 diff --git a/src/QuAcK/linear_response_pp.f90 b/src/QuAcK/linear_response_pp.f90 index 3a546fa..cb9df48 100644 --- a/src/QuAcK/linear_response_pp.f90 +++ b/src/QuAcK/linear_response_pp.f90 @@ -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 diff --git a/src/utils/wrap_lapack.f90 b/src/utils/wrap_lapack.f90 index c88a8ef..700aee4 100644 --- a/src/utils/wrap_lapack.f90 +++ b/src/utils/wrap_lapack.f90 @@ -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)