mirror of
https://github.com/pfloos/quack
synced 2024-12-22 20:35:36 +01:00
pCCD
This commit is contained in:
parent
bbbf50e146
commit
c05432416e
@ -71,7 +71,7 @@ subroutine pCCD(dotest,maxIt,thresh,max_diis,nBas,nOrb,nC,nO,nV,nR, &
|
|||||||
double precision,allocatable :: ExpKap(:,:)
|
double precision,allocatable :: ExpKap(:,:)
|
||||||
|
|
||||||
integer :: O,V,N
|
integer :: O,V,N
|
||||||
integer :: Np
|
integer :: Nsq
|
||||||
integer :: n_diis
|
integer :: n_diis
|
||||||
double precision :: rcond
|
double precision :: rcond
|
||||||
double precision,allocatable :: err_diis(:,:)
|
double precision,allocatable :: err_diis(:,:)
|
||||||
@ -92,7 +92,7 @@ subroutine pCCD(dotest,maxIt,thresh,max_diis,nBas,nOrb,nC,nO,nV,nR, &
|
|||||||
V = nV - nR
|
V = nV - nR
|
||||||
N = O + V
|
N = O + V
|
||||||
|
|
||||||
Np = N*N
|
Nsq = N*N
|
||||||
|
|
||||||
!------------------------------------!
|
!------------------------------------!
|
||||||
! Star Loop for orbital optimization !
|
! Star Loop for orbital optimization !
|
||||||
@ -357,9 +357,9 @@ subroutine pCCD(dotest,maxIt,thresh,max_diis,nBas,nOrb,nC,nO,nV,nR, &
|
|||||||
! Compute orbital gradient !
|
! Compute orbital gradient !
|
||||||
!--------------------------!
|
!--------------------------!
|
||||||
|
|
||||||
allocate(grad(Np))
|
allocate(grad(Nsq))
|
||||||
|
|
||||||
call pCCD_orbital_gradient(O,V,N,Np,h,ERI_MO,rdm1,rdm2,grad)
|
call pCCD_orbital_gradient(O,V,N,Nsq,h,ERI_MO,rdm1,rdm2,grad)
|
||||||
|
|
||||||
! Check convergence of orbital optimization
|
! Check convergence of orbital optimization
|
||||||
|
|
||||||
@ -378,15 +378,15 @@ subroutine pCCD(dotest,maxIt,thresh,max_diis,nBas,nOrb,nC,nO,nV,nR, &
|
|||||||
! Compute orbital Hessian !
|
! Compute orbital Hessian !
|
||||||
!-------------------------!
|
!-------------------------!
|
||||||
|
|
||||||
allocate(hess(Np,Np))
|
allocate(hess(Nsq,Nsq))
|
||||||
|
|
||||||
call pCCD_orbital_hessian(O,V,N,Np,h,ERI_MO,rdm1,rdm2,hess)
|
call pCCD_orbital_hessian(O,V,N,Nsq,h,ERI_MO,rdm1,rdm2,hess)
|
||||||
|
|
||||||
deallocate(rdm1,rdm2)
|
deallocate(rdm1,rdm2)
|
||||||
|
|
||||||
allocate(hessInv(Np,Np))
|
allocate(hessInv(Nsq,Nsq))
|
||||||
|
|
||||||
call inverse_matrix(Np,hess,hessInv)
|
call inverse_matrix(Nsq,hess,hessInv)
|
||||||
|
|
||||||
deallocate(hess)
|
deallocate(hess)
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine pCCD_orbital_gradient(O,V,N,Np,h,ERI_MO,rdm1,rdm2,grad)
|
subroutine pCCD_orbital_gradient(O,V,N,Nsq,h,ERI_MO,rdm1,rdm2,grad)
|
||||||
|
|
||||||
! Compute the orbital gradient at the pCCD level
|
! Compute the orbital gradient at the pCCD level
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ subroutine pCCD_orbital_gradient(O,V,N,Np,h,ERI_MO,rdm1,rdm2,grad)
|
|||||||
integer,intent(in) :: O
|
integer,intent(in) :: O
|
||||||
integer,intent(in) :: V
|
integer,intent(in) :: V
|
||||||
integer,intent(in) :: N
|
integer,intent(in) :: N
|
||||||
integer,intent(in) :: Np
|
integer,intent(in) :: Nsq
|
||||||
double precision,intent(in) :: h(N,N)
|
double precision,intent(in) :: h(N,N)
|
||||||
double precision,intent(in) :: ERI_MO(N,N,N,N)
|
double precision,intent(in) :: ERI_MO(N,N,N,N)
|
||||||
double precision,intent(in) :: rdm1(N,N)
|
double precision,intent(in) :: rdm1(N,N)
|
||||||
@ -24,7 +24,7 @@ subroutine pCCD_orbital_gradient(O,V,N,Np,h,ERI_MO,rdm1,rdm2,grad)
|
|||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
double precision,intent(out) :: grad(Np)
|
double precision,intent(out) :: grad(Nsq)
|
||||||
|
|
||||||
! Compute gradient
|
! Compute gradient
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine pCCD_orbital_hessian(O,V,N,Np,h,ERI_MO,rdm1,rdm2,hess)
|
subroutine pCCD_orbital_hessian(O,V,N,Nsq,h,ERI_MO,rdm1,rdm2,hess)
|
||||||
|
|
||||||
! Compute the orbital hessian at the pCCD level
|
! Compute the orbital hessian at the pCCD level
|
||||||
|
|
||||||
@ -9,7 +9,7 @@ subroutine pCCD_orbital_hessian(O,V,N,Np,h,ERI_MO,rdm1,rdm2,hess)
|
|||||||
integer,intent(in) :: O
|
integer,intent(in) :: O
|
||||||
integer,intent(in) :: V
|
integer,intent(in) :: V
|
||||||
integer,intent(in) :: N
|
integer,intent(in) :: N
|
||||||
integer,intent(in) :: Np
|
integer,intent(in) :: Nsq
|
||||||
double precision,intent(in) :: h(N,N)
|
double precision,intent(in) :: h(N,N)
|
||||||
double precision,intent(in) :: ERI_MO(N,N,N,N)
|
double precision,intent(in) :: ERI_MO(N,N,N,N)
|
||||||
double precision,intent(in) :: rdm1(N,N)
|
double precision,intent(in) :: rdm1(N,N)
|
||||||
@ -28,7 +28,7 @@ subroutine pCCD_orbital_hessian(O,V,N,Np,h,ERI_MO,rdm1,rdm2,hess)
|
|||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
double precision,intent(out) :: hess(Np,Np)
|
double precision,intent(out) :: hess(Nsq,Nsq)
|
||||||
|
|
||||||
! Compute intermediate array
|
! Compute intermediate array
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ subroutine pCCD_orbital_hessian(O,V,N,Np,h,ERI_MO,rdm1,rdm2,hess)
|
|||||||
if(debug) then
|
if(debug) then
|
||||||
|
|
||||||
write(*,*) 'Orbital Hessian at the pCCD level:'
|
write(*,*) 'Orbital Hessian at the pCCD level:'
|
||||||
call matout(Np,Np,hess)
|
call matout(Nsq,Nsq,hess)
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
Loading…
Reference in New Issue
Block a user