mirror of
https://github.com/QuantumPackage/qp2.git
synced 2025-04-28 11:14:56 +02:00
Starting optimization of open-shell ccsd
This commit is contained in:
parent
dc75f49500
commit
0647a9db5f
@ -1,9 +1,10 @@
|
|||||||
! Code
|
|
||||||
|
|
||||||
program ccsd
|
program ccsd
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
|
BEGIN_DOC
|
||||||
|
! Closed-shell CCSD
|
||||||
|
END_DOC
|
||||||
read_wf = .True.
|
read_wf = .True.
|
||||||
touch read_wf
|
touch read_wf
|
||||||
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
! Prog
|
|
||||||
|
|
||||||
program ccsd
|
program ccsd
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -11,9 +11,9 @@ subroutine run_ccsd_spin_orb
|
|||||||
double precision, allocatable :: t1(:,:), t2(:,:,:,:), tau(:,:,:,:), tau_t(:,:,:,:)
|
double precision, allocatable :: t1(:,:), t2(:,:,:,:), tau(:,:,:,:), tau_t(:,:,:,:)
|
||||||
double precision, allocatable :: r1(:,:), r2(:,:,:,:)
|
double precision, allocatable :: r1(:,:), r2(:,:,:,:)
|
||||||
double precision, allocatable :: cF_oo(:,:), cF_ov(:,:), cF_vv(:,:)
|
double precision, allocatable :: cF_oo(:,:), cF_ov(:,:), cF_vv(:,:)
|
||||||
double precision, allocatable :: cW_oooo(:,:,:,:), cW_ovvo(:,:,:,:), cW_vvvv(:,:,:,:)
|
double precision, allocatable :: cW_oooo(:,:,:,:), cW_ovvo(:,:,:,:) !, cW_vvvv(:,:,:,:)
|
||||||
|
|
||||||
double precision, allocatable :: f_oo(:,:), f_ov(:,:), f_vv(:,:), f_o(:), f_v(:)
|
double precision, allocatable :: f_o(:), f_v(:)
|
||||||
double precision, allocatable :: v_oooo(:,:,:,:), v_vooo(:,:,:,:), v_ovoo(:,:,:,:)
|
double precision, allocatable :: v_oooo(:,:,:,:), v_vooo(:,:,:,:), v_ovoo(:,:,:,:)
|
||||||
double precision, allocatable :: v_oovo(:,:,:,:), v_ooov(:,:,:,:), v_vvoo(:,:,:,:)
|
double precision, allocatable :: v_oovo(:,:,:,:), v_ooov(:,:,:,:), v_vvoo(:,:,:,:)
|
||||||
double precision, allocatable :: v_vovo(:,:,:,:), v_voov(:,:,:,:), v_ovvo(:,:,:,:)
|
double precision, allocatable :: v_vovo(:,:,:,:), v_voov(:,:,:,:), v_ovvo(:,:,:,:)
|
||||||
@ -24,8 +24,7 @@ subroutine run_ccsd_spin_orb
|
|||||||
double precision, allocatable :: all_err(:,:), all_t(:,:)
|
double precision, allocatable :: all_err(:,:), all_t(:,:)
|
||||||
|
|
||||||
logical :: not_converged
|
logical :: not_converged
|
||||||
integer, allocatable :: list_occ(:,:), list_vir(:,:)
|
integer :: nOa,nOb,nVa,nVb,nO_m,nV_m,nO_S(2),nV_S(2),n_spin(4)
|
||||||
integer :: nO,nV,nOa,nOb,nVa,nVb,nO_m,nV_m,nO_S(2),nV_S(2),n_spin(4)
|
|
||||||
integer :: nb_iter, i,j,a,b
|
integer :: nb_iter, i,j,a,b
|
||||||
double precision :: uncorr_energy, energy, max_r, max_r1, max_r2, cc, ta, tb,ti,tf,tbi,tfi
|
double precision :: uncorr_energy, energy, max_r, max_r1, max_r2, cc, ta, tb,ti,tf,tbi,tfi
|
||||||
integer(bit_kind) :: det(N_int,2)
|
integer(bit_kind) :: det(N_int,2)
|
||||||
@ -41,12 +40,6 @@ subroutine run_ccsd_spin_orb
|
|||||||
nVa = cc_nVa !n_spin(3)
|
nVa = cc_nVa !n_spin(3)
|
||||||
nVb = cc_nVb !n_spin(4)
|
nVb = cc_nVb !n_spin(4)
|
||||||
|
|
||||||
! Total number of occ/vir spin orb
|
|
||||||
nO = cc_nOab !nOa + nOb
|
|
||||||
nV = cc_nVab !nVa + nVb
|
|
||||||
! Debug
|
|
||||||
!print*,nO,nV
|
|
||||||
|
|
||||||
! Number of occ/vir spin orb per spin
|
! Number of occ/vir spin orb per spin
|
||||||
nO_S = cc_nO_S !(/nOa,nOb/)
|
nO_S = cc_nO_S !(/nOa,nOb/)
|
||||||
nV_S = cc_nV_S !(/nVa,nVb/)
|
nV_S = cc_nV_S !(/nVa,nVb/)
|
||||||
@ -59,89 +52,71 @@ subroutine run_ccsd_spin_orb
|
|||||||
! Debug
|
! Debug
|
||||||
!print*,nO_m,nV_m
|
!print*,nO_m,nV_m
|
||||||
|
|
||||||
allocate(list_occ(nO_m,2), list_vir(nV_m,2))
|
|
||||||
list_occ = cc_list_occ_spin
|
|
||||||
list_vir = cc_list_vir_spin
|
|
||||||
! Debug
|
|
||||||
!call extract_list_orb_spin(det,nO_m,nV_m,list_occ,list_vir)
|
|
||||||
!print*,list_occ(:,1)
|
|
||||||
!print*,list_occ(:,2)
|
|
||||||
!print*,list_vir(:,1)
|
|
||||||
!print*,list_vir(:,2)
|
|
||||||
|
|
||||||
! Allocation
|
! Allocation
|
||||||
allocate(t1(nO,nV), t2(nO,nO,nV,nV), tau(nO,nO,nV,nV), tau_t(nO,nO,nV,nV))
|
allocate(t1(cc_nOab,cc_nVab), t2(cc_nOab,cc_nOab,cc_nVab,cc_nVab), tau(cc_nOab,cc_nOab,cc_nVab,cc_nVab), tau_t(cc_nOab,cc_nOab,cc_nVab,cc_nVab))
|
||||||
allocate(r1(nO,nV), r2(nO,nO,nV,nV))
|
allocate(r1(cc_nOab,cc_nVab), r2(cc_nOab,cc_nOab,cc_nVab,cc_nVab))
|
||||||
allocate(cF_oo(nO,nO), cF_ov(nO,nV), cF_vv(nV,nV))
|
allocate(cF_oo(cc_nOab,cc_nOab), cF_ov(cc_nOab,cc_nVab), cF_vv(cc_nVab,cc_nVab))
|
||||||
allocate(cW_oooo(nO,nO,nO,nO), cW_ovvo(nO,nV,nV,nO))!, cW_vvvv(nV,nV,nV,nV))
|
allocate(cW_oooo(cc_nOab,cc_nOab,cc_nOab,cc_nOab), cW_ovvo(cc_nOab,cc_nVab,cc_nVab,cc_nOab))!, cW_vvvv(cc_nVab,cc_nVab,cc_nVab,cc_nVab))
|
||||||
allocate(v_oooo(nO,nO,nO,nO))
|
allocate(v_oooo(cc_nOab,cc_nOab,cc_nOab,cc_nOab))
|
||||||
!allocate(v_vooo(nV,nO,nO,nO))
|
!allocate(v_vooo(cc_nVab,cc_nOab,cc_nOab,cc_nOab))
|
||||||
allocate(v_ovoo(nO,nV,nO,nO))
|
allocate(v_ovoo(cc_nOab,cc_nVab,cc_nOab,cc_nOab))
|
||||||
allocate(v_oovo(nO,nO,nV,nO))
|
allocate(v_oovo(cc_nOab,cc_nOab,cc_nVab,cc_nOab))
|
||||||
allocate(v_ooov(nO,nO,nO,nV))
|
allocate(v_ooov(cc_nOab,cc_nOab,cc_nOab,cc_nVab))
|
||||||
allocate(v_vvoo(nV,nV,nO,nO))
|
allocate(v_vvoo(cc_nVab,cc_nVab,cc_nOab,cc_nOab))
|
||||||
!allocate(v_vovo(nV,nO,nV,nO))
|
!allocate(v_vovo(cc_nVab,cc_nOab,cc_nVab,cc_nOab))
|
||||||
!allocate(v_voov(nV,nO,nO,nV))
|
!allocate(v_voov(cc_nVab,cc_nOab,cc_nOab,cc_nVab))
|
||||||
allocate(v_ovvo(nO,nV,nV,nO))
|
allocate(v_ovvo(cc_nOab,cc_nVab,cc_nVab,cc_nOab))
|
||||||
allocate(v_ovov(nO,nV,nO,nV))
|
allocate(v_ovov(cc_nOab,cc_nVab,cc_nOab,cc_nVab))
|
||||||
allocate(v_oovv(nO,nO,nV,nV))
|
allocate(v_oovv(cc_nOab,cc_nOab,cc_nVab,cc_nVab))
|
||||||
!allocate(v_vvvo(nV,nV,nV,nO))
|
!allocate(v_vvvo(cc_nVab,cc_nVab,cc_nVab,cc_nOab))
|
||||||
!allocate(v_vvov(nV,nV,nO,nV))
|
!allocate(v_vvov(cc_nVab,cc_nVab,cc_nOab,cc_nVab))
|
||||||
!allocate(v_vovv(nV,nO,nV,nV))
|
!allocate(v_vovv(cc_nVab,cc_nOab,cc_nVab,cc_nVab))
|
||||||
!allocate(v_ovvv(nO,nV,nV,nV))
|
!allocate(v_ovvv(cc_nOab,cc_nVab,cc_nVab,cc_nVab))
|
||||||
!allocate(v_vvvv(nV,nV,nV,nV))
|
!allocate(v_vvvv(cc_nVab,cc_nVab,cc_nVab,cc_nVab))
|
||||||
allocate(f_o(nO), f_v(nV))
|
allocate(f_o(cc_nOab), f_v(cc_nVab))
|
||||||
allocate(f_oo(nO, nO))
|
|
||||||
allocate(f_ov(nO, nV))
|
|
||||||
allocate(f_vv(nV, nV))
|
|
||||||
|
|
||||||
! Allocation for the diis
|
! Allocation for the diis
|
||||||
if (cc_update_method == 'diis') then
|
if (cc_update_method == 'diis') then
|
||||||
allocate(all_err(nO*nV+nO*nO*nV*nV,cc_diis_depth), all_t(nO*nV+nO*nO*nV*nV,cc_diis_depth))
|
allocate(all_err(cc_nOab*cc_nVab+cc_nOab*cc_nOab*cc_nVab*cc_nVab,cc_diis_depth), all_t(cc_nOab*cc_nVab+cc_nOab*cc_nOab*cc_nVab*cc_nVab,cc_diis_depth))
|
||||||
all_err = 0d0
|
all_err = 0d0
|
||||||
all_t = 0d0
|
all_t = 0d0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! Fock elements
|
|
||||||
call gen_f_spin(det, nO_m,nO_m, nO_S,nO_S, list_occ,list_occ, nO,nO, f_oo)
|
|
||||||
call gen_f_spin(det, nO_m,nV_m, nO_S,nV_S, list_occ,list_vir, nO,nV, f_ov)
|
|
||||||
call gen_f_spin(det, nV_m,nV_m, nV_S,nV_S, list_vir,list_vir, nV,nV, f_vv)
|
|
||||||
|
|
||||||
! Diag elements
|
! Diag elements
|
||||||
do i = 1, nO
|
do i = 1, cc_nOab
|
||||||
f_o(i) = f_oo(i,i)
|
f_o(i) = cc_spin_f_oo(i,i)
|
||||||
enddo
|
enddo
|
||||||
do i = 1, nV
|
do i = 1, cc_nVab
|
||||||
f_v(i) = f_vv(i,i)
|
f_v(i) = cc_spin_f_vv(i,i)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
! Bi electronic integrals from list
|
! Bi electronic integrals from list
|
||||||
call wall_time(ti)
|
call wall_time(ti)
|
||||||
! OOOO
|
! OOOO
|
||||||
call gen_v_spin(nO_m,nO_m,nO_m,nO_m, nO_S,nO_S,nO_S,nO_S, list_occ,list_occ,list_occ,list_occ, nO,nO,nO,nO, v_oooo)
|
call gen_v_spin(nO_m,nO_m,nO_m,nO_m, nO_S,nO_S,nO_S,nO_S, cc_list_occ_spin,cc_list_occ_spin,cc_list_occ_spin,cc_list_occ_spin, cc_nOab,cc_nOab,cc_nOab,cc_nOab, v_oooo)
|
||||||
|
|
||||||
! OOO V
|
! OOO V
|
||||||
!call gen_v_spin(nV_m,nO_m,nO_m,nO_m, nV_S,nO_S,nO_S,nO_S, list_vir,list_occ,list_occ,list_occ, nV,nO,nO,nO, v_vooo)
|
!call gen_v_spin(nV_m,nO_m,nO_m,nO_m, nV_S,nO_S,nO_S,nO_S, cc_list_vir_spin,cc_list_occ_spin,cc_list_occ_spin,cc_list_occ_spin, cc_nVab,cc_nOab,cc_nOab,cc_nOab, v_vooo)
|
||||||
call gen_v_spin(nO_m,nV_m,nO_m,nO_m, nO_S,nV_S,nO_S,nO_S, list_occ,list_vir,list_occ,list_occ, nO,nV,nO,nO, v_ovoo)
|
call gen_v_spin(nO_m,nV_m,nO_m,nO_m, nO_S,nV_S,nO_S,nO_S, cc_list_occ_spin,cc_list_vir_spin,cc_list_occ_spin,cc_list_occ_spin, cc_nOab,cc_nVab,cc_nOab,cc_nOab, v_ovoo)
|
||||||
call gen_v_spin(nO_m,nO_m,nV_m,nO_m, nO_S,nO_S,nV_S,nO_S, list_occ,list_occ,list_vir,list_occ, nO,nO,nV,nO, v_oovo)
|
call gen_v_spin(nO_m,nO_m,nV_m,nO_m, nO_S,nO_S,nV_S,nO_S, cc_list_occ_spin,cc_list_occ_spin,cc_list_vir_spin,cc_list_occ_spin, cc_nOab,cc_nOab,cc_nVab,cc_nOab, v_oovo)
|
||||||
call gen_v_spin(nO_m,nO_m,nO_m,nV_m, nO_S,nO_S,nO_S,nV_S, list_occ,list_occ,list_occ,list_vir, nO,nO,nO,nV, v_ooov)
|
call gen_v_spin(nO_m,nO_m,nO_m,nV_m, nO_S,nO_S,nO_S,nV_S, cc_list_occ_spin,cc_list_occ_spin,cc_list_occ_spin,cc_list_vir_spin, cc_nOab,cc_nOab,cc_nOab,cc_nVab, v_ooov)
|
||||||
|
|
||||||
! OO VV
|
! OO VV
|
||||||
call gen_v_spin(nV_m,nV_m,nO_m,nO_m, nV_S,nV_S,nO_S,nO_S, list_vir,list_vir,list_occ,list_occ, nV,nV,nO,nO, v_vvoo)
|
call gen_v_spin(nV_m,nV_m,nO_m,nO_m, nV_S,nV_S,nO_S,nO_S, cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin,cc_list_occ_spin, cc_nVab,cc_nVab,cc_nOab,cc_nOab, v_vvoo)
|
||||||
!call gen_v_spin(nV_m,nO_m,nV_m,nO_m, nV_S,nO_S,nV_S,nO_S, list_vir,list_occ,list_vir,list_occ, nV,nO,nV,nO, v_vovo)
|
!call gen_v_spin(nV_m,nO_m,nV_m,nO_m, nV_S,nO_S,nV_S,nO_S, cc_list_vir_spin,cc_list_occ_spin,cc_list_vir_spin,cc_list_occ_spin, cc_nVab,cc_nOab,cc_nVab,cc_nOab, v_vovo)
|
||||||
!call gen_v_spin(nV_m,nO_m,nO_m,nV_m, nV_S,nO_S,nO_S,nV_S, list_vir,list_occ,list_occ,list_vir, nV,nO,nO,nV, v_voov)
|
!call gen_v_spin(nV_m,nO_m,nO_m,nV_m, nV_S,nO_S,nO_S,nV_S, cc_list_vir_spin,cc_list_occ_spin,cc_list_occ_spin,cc_list_vir_spin, cc_nVab,cc_nOab,cc_nOab,cc_nVab, v_voov)
|
||||||
call gen_v_spin(nO_m,nV_m,nV_m,nO_m, nO_S,nV_S,nV_S,nO_S, list_occ,list_vir,list_vir,list_occ, nO,nV,nV,nO, v_ovvo)
|
call gen_v_spin(nO_m,nV_m,nV_m,nO_m, nO_S,nV_S,nV_S,nO_S, cc_list_occ_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin, cc_nOab,cc_nVab,cc_nVab,cc_nOab, v_ovvo)
|
||||||
call gen_v_spin(nO_m,nV_m,nO_m,nV_m, nO_S,nV_S,nO_S,nV_S, list_occ,list_vir,list_occ,list_vir, nO,nV,nO,nV, v_ovov)
|
call gen_v_spin(nO_m,nV_m,nO_m,nV_m, nO_S,nV_S,nO_S,nV_S, cc_list_occ_spin,cc_list_vir_spin,cc_list_occ_spin,cc_list_vir_spin, cc_nOab,cc_nVab,cc_nOab,cc_nVab, v_ovov)
|
||||||
call gen_v_spin(nO_m,nO_m,nV_m,nV_m, nO_S,nO_S,nV_S,nV_S, list_occ,list_occ,list_vir,list_vir, nO,nO,nV,nV, v_oovv)
|
call gen_v_spin(nO_m,nO_m,nV_m,nV_m, nO_S,nO_S,nV_S,nV_S, cc_list_occ_spin,cc_list_occ_spin,cc_list_vir_spin,cc_list_vir_spin, cc_nOab,cc_nOab,cc_nVab,cc_nVab, v_oovv)
|
||||||
|
|
||||||
! O VVV
|
! O VVV
|
||||||
!call gen_v_spin(nV_m,nV_m,nV_m,nO_m, nV_S,nV_S,nV_S,nO_S, list_vir,list_vir,list_vir,list_occ, nV,nV,nV,nO, v_vvvo)
|
!call gen_v_spin(nV_m,nV_m,nV_m,nO_m, nV_S,nV_S,nV_S,nO_S, cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin, cc_nVab,cc_nVab,cc_nVab,cc_nOab, v_vvvo)
|
||||||
!call gen_v_spin(nV_m,nV_m,nO_m,nV_m, nV_S,nV_S,nO_S,nV_S, list_vir,list_vir,list_occ,list_vir, nV,nV,nO,nV, v_vvov)
|
!call gen_v_spin(nV_m,nV_m,nO_m,nV_m, nV_S,nV_S,nO_S,nV_S, cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin,cc_list_vir_spin, cc_nVab,cc_nVab,cc_nOab,cc_nVab, v_vvov)
|
||||||
!call gen_v_spin(nV_m,nO_m,nV_m,nV_m, nV_S,nO_S,nV_S,nV_S, list_vir,list_occ,list_vir,list_vir, nV,nO,nV,nV, v_vovv)
|
!call gen_v_spin(nV_m,nO_m,nV_m,nV_m, nV_S,nO_S,nV_S,nV_S, cc_list_vir_spin,cc_list_occ_spin,cc_list_vir_spin,cc_list_vir_spin, cc_nVab,cc_nOab,cc_nVab,cc_nVab, v_vovv)
|
||||||
!call gen_v_spin(nO_m,nV_m,nV_m,nV_m, nO_S,nV_S,nV_S,nV_S, list_occ,list_vir,list_vir,list_vir, nO,nV,nV,nV, v_ovvv)
|
!call gen_v_spin(nO_m,nV_m,nV_m,nV_m, nO_S,nV_S,nV_S,nV_S, cc_list_occ_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin, cc_nOab,cc_nVab,cc_nVab,cc_nVab, v_ovvv)
|
||||||
|
|
||||||
! VVVV
|
! VVVV
|
||||||
!call gen_v_spin(nV_m,nV_m,nV_m,nV_m, nV_S,nV_S,nV_S,nV_S, list_vir,list_vir,list_vir,list_vir, nV,nV,nV,nV, v_vvvv)
|
!call gen_v_spin(nV_m,nV_m,nV_m,nV_m, nV_S,nV_S,nV_S,nV_S, cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin, cc_nVab,cc_nVab,cc_nVab,cc_nVab, v_vvvv)
|
||||||
call wall_time(tf)
|
call wall_time(tf)
|
||||||
if (cc_dev) then
|
if (cc_dev) then
|
||||||
print*,'Load bi elec int:',tf-ti,'s'
|
print*,'Load bi elec int:',tf-ti,'s'
|
||||||
@ -149,10 +124,10 @@ subroutine run_ccsd_spin_orb
|
|||||||
|
|
||||||
! Init of T
|
! Init of T
|
||||||
t1 = 0d0
|
t1 = 0d0
|
||||||
call guess_t1(nO,nV,f_o,f_v,f_ov,t1)
|
call guess_t1(cc_nOab,cc_nVab,f_o,f_v,cc_spin_f_ov,t1)
|
||||||
call guess_t2(nO,nV,f_o,f_v,v_oovv,t2)
|
call guess_t2(cc_nOab,cc_nVab,f_o,f_v,v_oovv,t2)
|
||||||
call compute_tau_spin(nO,nV,t1,t2,tau)
|
call compute_tau_spin(cc_nOab,cc_nVab,t1,t2,tau)
|
||||||
call compute_tau_t_spin(nO,nV,t1,t2,tau_t)
|
call compute_tau_t_spin(cc_nOab,cc_nVab,t1,t2,tau_t)
|
||||||
|
|
||||||
! Loop init
|
! Loop init
|
||||||
nb_iter = 0
|
nb_iter = 0
|
||||||
@ -164,7 +139,7 @@ subroutine run_ccsd_spin_orb
|
|||||||
|
|
||||||
call det_energy(det,uncorr_energy)
|
call det_energy(det,uncorr_energy)
|
||||||
print*,'Det energy', uncorr_energy
|
print*,'Det energy', uncorr_energy
|
||||||
call ccsd_energy_spin(nO,nV,t1,t2,F_ov,v_oovv,energy)
|
call ccsd_energy_spin(cc_nOab,cc_nVab,t1,t2,cc_spin_F_ov,v_oovv,energy)
|
||||||
print*,'guess energy', uncorr_energy+energy, energy
|
print*,'guess energy', uncorr_energy+energy, energy
|
||||||
|
|
||||||
write(*,'(A77)') ' -----------------------------------------------------------------------------'
|
write(*,'(A77)') ' -----------------------------------------------------------------------------'
|
||||||
@ -179,18 +154,18 @@ subroutine run_ccsd_spin_orb
|
|||||||
! Intermediates
|
! Intermediates
|
||||||
call wall_time(tbi)
|
call wall_time(tbi)
|
||||||
call wall_time(ti)
|
call wall_time(ti)
|
||||||
call compute_cF_oo(nO,nV,t1,tau_t,F_oo,F_ov,v_ooov,v_oovv,cF_oo)
|
call compute_cF_oo(cc_nOab,cc_nVab,t1,tau_t,cc_spin_F_oo,cc_spin_F_ov,v_ooov,v_oovv,cF_oo)
|
||||||
call compute_cF_ov(nO,nV,t1,F_ov,v_oovv,cF_ov)
|
call compute_cF_ov(cc_nOab,cc_nVab,t1,cc_spin_F_ov,v_oovv,cF_ov)
|
||||||
call compute_cF_vv(nO,nV,t1,tau_t,F_ov,F_vv,v_oovv,cF_vv)
|
call compute_cF_vv(cc_nOab,cc_nVab,t1,tau_t,cc_spin_F_ov,cc_spin_F_vv,v_oovv,cF_vv)
|
||||||
call wall_time(tf)
|
call wall_time(tf)
|
||||||
if (cc_dev) then
|
if (cc_dev) then
|
||||||
print*,'Compute cFs:',tf-ti,'s'
|
print*,'Compute cFs:',tf-ti,'s'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call wall_time(ti)
|
call wall_time(ti)
|
||||||
call compute_cW_oooo(nO,nV,t1,t2,tau,v_oooo,v_ooov,v_oovv,cW_oooo)
|
call compute_cW_oooo(cc_nOab,cc_nVab,t1,t2,tau,v_oooo,v_ooov,v_oovv,cW_oooo)
|
||||||
call compute_cW_ovvo(nO,nV,t1,t2,tau,v_ovvo,v_oovo,v_oovv,cW_ovvo)
|
call compute_cW_ovvo(cc_nOab,cc_nVab,t1,t2,tau,v_ovvo,v_oovo,v_oovv,cW_ovvo)
|
||||||
!call compute_cW_vvvv(nO,nV,t1,t2,tau,v_vvvv,v_vovv,v_oovv,cW_vvvv)
|
!call compute_cW_vvvv(cc_nOab,cc_nVab,t1,t2,tau,v_vvvv,v_vovv,v_oovv,cW_vvvv)
|
||||||
call wall_time(tf)
|
call wall_time(tf)
|
||||||
if (cc_dev) then
|
if (cc_dev) then
|
||||||
print*,'Compute cFs:',tf-ti,'s'
|
print*,'Compute cFs:',tf-ti,'s'
|
||||||
@ -198,13 +173,13 @@ subroutine run_ccsd_spin_orb
|
|||||||
|
|
||||||
! Residuals
|
! Residuals
|
||||||
call wall_time(ti)
|
call wall_time(ti)
|
||||||
call compute_r1_spin(nO,nV,t1,t2,f_o,f_v,F_ov,cF_oo,cF_ov,cF_vv,v_oovo,v_ovov,r1)
|
call compute_r1_spin(cc_nOab,cc_nVab,t1,t2,f_o,f_v,cc_spin_F_ov,cF_oo,cF_ov,cF_vv,v_oovo,v_ovov,r1)
|
||||||
call wall_time(tf)
|
call wall_time(tf)
|
||||||
if (cc_dev) then
|
if (cc_dev) then
|
||||||
print*,'Compute r1:',tf-ti,'s'
|
print*,'Compute r1:',tf-ti,'s'
|
||||||
endif
|
endif
|
||||||
call wall_time(ti)
|
call wall_time(ti)
|
||||||
call compute_r2_spin(nO,nV,t1,t2,tau,f_o,f_v,cF_oo,cF_ov,cF_vv,cW_oooo,cW_ovvo,v_ovoo,v_oovv,v_ovvo,r2)
|
call compute_r2_spin(cc_nOab,cc_nVab,t1,t2,tau,f_o,f_v,cF_oo,cF_ov,cF_vv,cW_oooo,cW_ovvo,v_ovoo,v_oovv,v_ovvo,r2)
|
||||||
call wall_time(tf)
|
call wall_time(tf)
|
||||||
if (cc_dev) then
|
if (cc_dev) then
|
||||||
print*,'Compute r2:',tf-ti,'s'
|
print*,'Compute r2:',tf-ti,'s'
|
||||||
@ -218,27 +193,27 @@ subroutine run_ccsd_spin_orb
|
|||||||
call wall_time(ti)
|
call wall_time(ti)
|
||||||
! Update
|
! Update
|
||||||
if (cc_update_method == 'diis') then
|
if (cc_update_method == 'diis') then
|
||||||
!call update_t_ccsd(nO,nV,nb_iter,f_o,f_v,r1,r2,t1,t2,all_err1,all_err2,all_t1,all_t2)
|
!call update_t_ccsd(cc_nOab,cc_nVab,nb_iter,f_o,f_v,r1,r2,t1,t2,all_err1,all_err2,all_t1,all_t2)
|
||||||
!call update_t_ccsd_diis(nO,nV,nb_iter,f_o,f_v,r1,r2,t1,t2,all_err1,all_err2,all_t1,all_t2)
|
!call update_t_ccsd_diis(cc_nOab,cc_nVab,nb_iter,f_o,f_v,r1,r2,t1,t2,all_err1,all_err2,all_t1,all_t2)
|
||||||
call update_t_ccsd_diis_v3(nO,nV,nb_iter,f_o,f_v,r1,r2,t1,t2,all_err,all_t)
|
call update_t_ccsd_diis_v3(cc_nOab,cc_nVab,nb_iter,f_o,f_v,r1,r2,t1,t2,all_err,all_t)
|
||||||
|
|
||||||
! Standard update as T = T - Delta
|
! Standard update as T = T - Delta
|
||||||
elseif (cc_update_method == 'none') then
|
elseif (cc_update_method == 'none') then
|
||||||
call update_t1(nO,nV,f_o,f_v,r1,t1)
|
call update_t1(cc_nOab,cc_nVab,f_o,f_v,r1,t1)
|
||||||
call update_t2(nO,nV,f_o,f_v,r2,t2)
|
call update_t2(cc_nOab,cc_nVab,f_o,f_v,r2,t2)
|
||||||
else
|
else
|
||||||
print*,'Unkonw cc_method_method: '//cc_update_method
|
print*,'Unkonw cc_method_method: '//cc_update_method
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call compute_tau_spin(nO,nV,t1,t2,tau)
|
call compute_tau_spin(cc_nOab,cc_nVab,t1,t2,tau)
|
||||||
call compute_tau_t_spin(nO,nV,t1,t2,tau_t)
|
call compute_tau_t_spin(cc_nOab,cc_nVab,t1,t2,tau_t)
|
||||||
call wall_time(tf)
|
call wall_time(tf)
|
||||||
if (cc_dev) then
|
if (cc_dev) then
|
||||||
print*,'Update:',tf-ti,'s'
|
print*,'Update:',tf-ti,'s'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! Print
|
! Print
|
||||||
call ccsd_energy_spin(nO,nV,t1,t2,F_ov,v_oovv,energy)
|
call ccsd_energy_spin(cc_nOab,cc_nVab,t1,t2,cc_spin_F_ov,v_oovv,energy)
|
||||||
call wall_time(tfi)
|
call wall_time(tfi)
|
||||||
|
|
||||||
write(*,'(A3,I6,A3,F18.12,A3,F16.12,A3,ES10.2,A3,ES10.2,A2)') ' | ',nb_iter,' | ', &
|
write(*,'(A3,I6,A3,F18.12,A3,F16.12,A3,ES10.2,A3,ES10.2,A2)') ' | ',nb_iter,' | ', &
|
||||||
@ -270,8 +245,8 @@ subroutine run_ccsd_spin_orb
|
|||||||
print*,''
|
print*,''
|
||||||
|
|
||||||
if (write_amplitudes) then
|
if (write_amplitudes) then
|
||||||
call write_t1(nO,nV,t1)
|
call write_t1(cc_nOab,cc_nVab,t1)
|
||||||
call write_t2(nO,nV,t2)
|
call write_t2(cc_nOab,cc_nVab,t2)
|
||||||
call ezfio_set_utils_cc_io_amplitudes('Read')
|
call ezfio_set_utils_cc_io_amplitudes('Read')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -292,14 +267,14 @@ subroutine run_ccsd_spin_orb
|
|||||||
if (cc_par_t .and. elec_alpha_num +elec_beta_num > 2) then
|
if (cc_par_t .and. elec_alpha_num +elec_beta_num > 2) then
|
||||||
print*,'CCSD(T) calculation...'
|
print*,'CCSD(T) calculation...'
|
||||||
call wall_time(ta)
|
call wall_time(ta)
|
||||||
!allocate(v_vvvo(nV,nV,nV,nO))
|
!allocate(v_vvvo(cc_nVab,cc_nVab,cc_nVab,cc_nOab))
|
||||||
!call gen_v_spin(cc_nV_m,cc_nV_m,cc_nV_m,cc_nO_m, &
|
!call gen_v_spin(cc_nV_m,cc_nV_m,cc_nV_m,cc_nO_m, &
|
||||||
! cc_nV_S,cc_nV_S,cc_nV_S,cc_nO_S, &
|
! cc_nV_S,cc_nV_S,cc_nV_S,cc_nO_S, &
|
||||||
! cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin, &
|
! cc_list_vir_spin,cc_list_vir_spin,cc_list_vir_spin,cc_list_occ_spin, &
|
||||||
! nV,nV,nV,nO, v_vvvo)
|
! cc_nVab,cc_nVab,cc_nVab,cc_nOab, v_vvvo)
|
||||||
|
|
||||||
!call ccsd_par_t_spin(nO,nV,t1,t2,f_o,f_v,f_ov,v_ooov,v_vvoo,v_vvvo,t_corr)
|
!call ccsd_par_t_spin(cc_nOab,cc_nVab,t1,t2,f_o,f_v,cc_spin_f_ov,v_ooov,v_vvoo,v_vvvo,t_corr)
|
||||||
call ccsd_par_t_spin_v2(nO,nV,t1,t2,f_o,f_v,f_ov,v_ooov,v_vvoo,t_corr)
|
call ccsd_par_t_spin_v2(cc_nOab,cc_nVab,t1,t2,f_o,f_v,cc_spin_f_ov,v_ooov,v_vvoo,t_corr)
|
||||||
!print*,'Working on it...'
|
!print*,'Working on it...'
|
||||||
!call abort
|
!call abort
|
||||||
call wall_time(tb)
|
call wall_time(tb)
|
||||||
@ -314,7 +289,7 @@ subroutine run_ccsd_spin_orb
|
|||||||
|
|
||||||
call save_energy(uncorr_energy + energy, t_corr)
|
call save_energy(uncorr_energy + energy, t_corr)
|
||||||
|
|
||||||
deallocate(f_oo,f_ov,f_vv,f_o,f_v)
|
deallocate(f_o,f_v)
|
||||||
deallocate(v_ooov,v_vvoo,t1,t2)
|
deallocate(v_ooov,v_vvoo,t1,t2)
|
||||||
!deallocate(v_ovvv,v_vvvo,v_vovv)
|
!deallocate(v_ovvv,v_vvvo,v_vovv)
|
||||||
!deallocate(v_vvvv)
|
!deallocate(v_vvvv)
|
||||||
@ -908,6 +883,7 @@ subroutine compute_r2_spin(nO,nV,t1,t2,tau,f_o,f_v,cF_oo,cF_ov,cF_vv,cW_oooo,cW_
|
|||||||
! 0.5d0, tau , size(tau,1) * size(tau,2), &
|
! 0.5d0, tau , size(tau,1) * size(tau,2), &
|
||||||
! cW_vvvv, size(cW_vvvv,1) * size(cW_vvvv,2), &
|
! cW_vvvv, size(cW_vvvv,1) * size(cW_vvvv,2), &
|
||||||
! 1d0 , r2 , size(r2,1) * size(r2,2))
|
! 1d0 , r2 , size(r2,1) * size(r2,2))
|
||||||
|
|
||||||
double precision :: ti,tf
|
double precision :: ti,tf
|
||||||
call wall_time(ti)
|
call wall_time(ti)
|
||||||
call use_cW_vvvf(nO,nV,t1,t2,tau,v_oovv,r2)
|
call use_cW_vvvf(nO,nV,t1,t2,tau,v_oovv,r2)
|
||||||
|
@ -1006,6 +1006,22 @@ BEGIN_PROVIDER [double precision, cc_space_f_v, (cc_nVa)]
|
|||||||
|
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, cc_spin_f_oo, (cc_nOab, cc_nOab)]
|
||||||
|
implicit none
|
||||||
|
call gen_f_spin(psi_det(1,1,cc_ref), cc_nO_m, cc_nO_m, cc_nO_S, cc_nO_S, cc_list_occ_spin, cc_list_occ_spin, cc_nOab, cc_nOab, cc_spin_f_oo)
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, cc_spin_f_ov, (cc_nOab, cc_nVab)]
|
||||||
|
implicit none
|
||||||
|
call gen_f_spin(psi_det(1,1,cc_ref), cc_nO_m, cc_nV_m, cc_nO_S, cc_nV_S, cc_list_occ_spin, cc_list_vir_spin, cc_nOab, cc_nVab, cc_spin_f_ov)
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ double precision, cc_spin_f_vv, (cc_nVab, cc_nVab)]
|
||||||
|
implicit none
|
||||||
|
call gen_f_spin(psi_det(1,1,cc_ref), cc_nV_m, cc_nV_m, cc_nV_S, cc_nV_S, cc_list_vir_spin, cc_list_vir_spin, cc_nVab, cc_nVab, cc_spin_f_vv)
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
! Shift
|
! Shift
|
||||||
|
|
||||||
subroutine shift_idx_spin(s,n_S,shift)
|
subroutine shift_idx_spin(s,n_S,shift)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user