mirror of
https://github.com/LCPQ/quantum_package
synced 2024-11-04 05:03:54 +01:00
Removed do_pt2_end for do_pt2
This commit is contained in:
parent
17dd70e86d
commit
45cafb9000
@ -4,24 +4,13 @@ from generate_h_apply import *
|
|||||||
|
|
||||||
s = H_apply("FCI")
|
s = H_apply("FCI")
|
||||||
s.set_selection_pt2("epstein_nesbet_2x2")
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
#s.unset_openmp()
|
s.unset_skip()
|
||||||
print s
|
print s
|
||||||
|
|
||||||
s = H_apply("FCI_PT2")
|
s = H_apply("FCI_PT2")
|
||||||
s.set_perturbation("epstein_nesbet_2x2")
|
s.set_perturbation("epstein_nesbet_2x2")
|
||||||
s.unset_openmp()
|
|
||||||
print s
|
|
||||||
|
|
||||||
s = H_apply("FCI_PT2_new")
|
|
||||||
s.set_perturbation("decontracted")
|
|
||||||
s.unset_openmp()
|
|
||||||
print s
|
|
||||||
|
|
||||||
|
|
||||||
s = H_apply("FCI_no_skip")
|
|
||||||
s.set_selection_pt2("epstein_nesbet_2x2")
|
|
||||||
s.unset_skip()
|
s.unset_skip()
|
||||||
#s.unset_openmp()
|
s.unset_openmp()
|
||||||
print s
|
print s
|
||||||
|
|
||||||
s = H_apply("FCI_no_selection")
|
s = H_apply("FCI_no_selection")
|
||||||
@ -31,6 +20,7 @@ print s
|
|||||||
|
|
||||||
s = H_apply("FCI_mono")
|
s = H_apply("FCI_mono")
|
||||||
s.set_selection_pt2("epstein_nesbet_2x2")
|
s.set_selection_pt2("epstein_nesbet_2x2")
|
||||||
|
s.unset_skip()
|
||||||
s.unset_double_excitations()
|
s.unset_double_excitations()
|
||||||
s.unset_openmp()
|
s.unset_openmp()
|
||||||
print s
|
print s
|
||||||
|
@ -95,7 +95,7 @@ program full_ci
|
|||||||
N_det = min(N_det_max,N_det)
|
N_det = min(N_det_max,N_det)
|
||||||
touch N_det psi_det psi_coef
|
touch N_det psi_det psi_coef
|
||||||
call diagonalize_CI
|
call diagonalize_CI
|
||||||
if(do_pt2_end)then
|
if(do_pt2)then
|
||||||
print*,'Last iteration only to compute the PT2'
|
print*,'Last iteration only to compute the PT2'
|
||||||
threshold_generators = threshold_generators_pt2
|
threshold_generators = threshold_generators_pt2
|
||||||
threshold_selectors = threshold_selectors_pt2
|
threshold_selectors = threshold_selectors_pt2
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
program full_ci
|
|
||||||
implicit none
|
|
||||||
integer :: i,k
|
|
||||||
|
|
||||||
|
|
||||||
double precision, allocatable :: pt2(:), norm_pert(:), H_pert_diag(:)
|
|
||||||
integer :: N_st, degree
|
|
||||||
N_st = N_states
|
|
||||||
allocate (pt2(N_st), norm_pert(N_st),H_pert_diag(N_st))
|
|
||||||
character*(64) :: perturbation
|
|
||||||
|
|
||||||
pt2 = 1.d0
|
|
||||||
diag_algorithm = "Lapack"
|
|
||||||
if (N_det > N_det_max) then
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
psi_det = psi_det_sorted
|
|
||||||
psi_coef = psi_coef_sorted
|
|
||||||
N_det = N_det_max
|
|
||||||
soft_touch N_det psi_det psi_coef
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
print *, 'PT2 = ', pt2
|
|
||||||
print *, 'E = ', CI_energy
|
|
||||||
print *, 'E+PT2 = ', CI_energy+pt2
|
|
||||||
print *, '-----'
|
|
||||||
endif
|
|
||||||
double precision :: i_H_psi_array(N_states),diag_H_mat_elem,h,i_O1_psi_array(N_states)
|
|
||||||
double precision :: E_CI_before(N_states)
|
|
||||||
if(read_wf)then
|
|
||||||
call i_H_psi(psi_det(1,1,N_det),psi_det,psi_coef,N_int,N_det,psi_det_size,N_states,i_H_psi_array)
|
|
||||||
h = diag_H_mat_elem(psi_det(1,1,N_det),N_int)
|
|
||||||
selection_criterion = dabs(psi_coef(N_det,1) * (i_H_psi_array(1) - h * psi_coef(N_det,1))) * 0.1d0
|
|
||||||
soft_touch selection_criterion
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
integer :: n_det_before
|
|
||||||
print*,'Beginning the selection ...'
|
|
||||||
E_CI_before = CI_energy
|
|
||||||
do while (N_det < N_det_max.and.maxval(abs(pt2(1:N_st))) > pt2_max)
|
|
||||||
n_det_before = N_det
|
|
||||||
call H_apply_FCI_no_skip(pt2, norm_pert, H_pert_diag, N_st)
|
|
||||||
|
|
||||||
PROVIDE psi_coef
|
|
||||||
PROVIDE psi_det
|
|
||||||
PROVIDE psi_det_sorted
|
|
||||||
|
|
||||||
if (N_det > N_det_max) then
|
|
||||||
psi_det = psi_det_sorted
|
|
||||||
psi_coef = psi_coef_sorted
|
|
||||||
N_det = N_det_max
|
|
||||||
soft_touch N_det psi_det psi_coef
|
|
||||||
endif
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
if(n_det_before == N_det)then
|
|
||||||
selection_criterion = selection_criterion * 0.5d0
|
|
||||||
endif
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
print *, 'PT2 = ', pt2
|
|
||||||
print *, 'E = ', CI_energy
|
|
||||||
print *, 'E+PT2 = ', E_CI_before+pt2
|
|
||||||
print *, '-----'
|
|
||||||
E_CI_before = CI_energy
|
|
||||||
call ezfio_set_full_ci_energy(CI_energy)
|
|
||||||
enddo
|
|
||||||
N_det = min(N_det_max,N_det)
|
|
||||||
touch N_det psi_det psi_coef
|
|
||||||
call diagonalize_CI
|
|
||||||
if(do_pt2_end)then
|
|
||||||
print*,'Last iteration only to compute the PT2'
|
|
||||||
threshold_generators = threshold_generators_pt2
|
|
||||||
threshold_selectors = threshold_selectors_pt2
|
|
||||||
SOFT_TOUCH threshold_generators threshold_selectors
|
|
||||||
|
|
||||||
! print*,'The thres'
|
|
||||||
call H_apply_FCI_PT2(pt2, norm_pert, H_pert_diag, N_st)
|
|
||||||
|
|
||||||
print *, 'Final step'
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
print *, 'PT2 = ', pt2
|
|
||||||
print *, 'E = ', CI_energy
|
|
||||||
print *, 'E+PT2 = ', CI_energy+pt2
|
|
||||||
print *, '-----'
|
|
||||||
call ezfio_set_full_ci_energy_pt2(CI_energy+pt2)
|
|
||||||
endif
|
|
||||||
call save_wavefunction
|
|
||||||
deallocate(pt2,norm_pert)
|
|
||||||
end
|
|
@ -10,6 +10,9 @@ program fci_zmq
|
|||||||
|
|
||||||
double precision :: hf_energy_ref
|
double precision :: hf_energy_ref
|
||||||
logical :: has
|
logical :: has
|
||||||
|
double precision :: relative_error
|
||||||
|
relative_error=1.d-3
|
||||||
|
|
||||||
pt2 = -huge(1.d0)
|
pt2 = -huge(1.d0)
|
||||||
threshold_davidson_in = threshold_davidson
|
threshold_davidson_in = threshold_davidson
|
||||||
threshold_davidson = threshold_davidson_in * 100.d0
|
threshold_davidson = threshold_davidson_in * 100.d0
|
||||||
@ -42,16 +45,17 @@ program fci_zmq
|
|||||||
print *, '-----'
|
print *, '-----'
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
double precision :: E_CI_before(N_states)
|
|
||||||
|
|
||||||
|
|
||||||
print*,'Beginning the selection ...'
|
print*,'Beginning the selection ...'
|
||||||
if (.True.) then ! Avoid pre-calculation of CI_energy
|
|
||||||
E_CI_before(1:N_states) = CI_energy(1:N_states)
|
|
||||||
endif
|
|
||||||
n_det_before = 0
|
n_det_before = 0
|
||||||
|
|
||||||
|
character*(8) :: pt2_string
|
||||||
double precision :: correlation_energy_ratio
|
double precision :: correlation_energy_ratio
|
||||||
|
double precision :: threshold_selectors_save, threshold_generators_save
|
||||||
|
threshold_selectors_save = threshold_selectors
|
||||||
|
threshold_generators_save = threshold_generators
|
||||||
|
|
||||||
correlation_energy_ratio = 0.d0
|
correlation_energy_ratio = 0.d0
|
||||||
|
|
||||||
if (.True.) then ! Avoid pre-calculation of CI_energy
|
if (.True.) then ! Avoid pre-calculation of CI_energy
|
||||||
@ -61,8 +65,31 @@ program fci_zmq
|
|||||||
(correlation_energy_ratio <= correlation_energy_ratio_max) &
|
(correlation_energy_ratio <= correlation_energy_ratio_max) &
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if (do_pt2) then
|
||||||
|
pt2_string = ' '
|
||||||
|
pt2 = 0.d0
|
||||||
|
if (N_states == 1) then
|
||||||
|
threshold_selectors = 1.d0
|
||||||
|
threshold_generators = 1d0
|
||||||
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
|
call ZMQ_pt2(CI_energy, pt2,relative_error) ! Stochastic PT2
|
||||||
|
threshold_selectors = threshold_selectors_save
|
||||||
|
threshold_generators = threshold_generators_save
|
||||||
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
|
else
|
||||||
|
threshold_selectors = max(threshold_selectors,threshold_selectors_pt2)
|
||||||
|
threshold_generators = max(threshold_generators,threshold_generators_pt2)
|
||||||
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
|
call ZMQ_selection(0, pt2) ! Deterministic PT2
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
pt2_string = '(approx)'
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
correlation_energy_ratio = (CI_energy(1) - hf_energy_ref) / &
|
correlation_energy_ratio = (CI_energy(1) - hf_energy_ref) / &
|
||||||
(E_CI_before(1) + pt2(1) - hf_energy_ref)
|
(CI_energy(1) + pt2(1) - hf_energy_ref)
|
||||||
correlation_energy_ratio = min(1.d0,correlation_energy_ratio)
|
correlation_energy_ratio = min(1.d0,correlation_energy_ratio)
|
||||||
|
|
||||||
|
|
||||||
@ -74,7 +101,7 @@ program fci_zmq
|
|||||||
print*,'State ',k
|
print*,'State ',k
|
||||||
print *, 'PT2 = ', pt2(k)
|
print *, 'PT2 = ', pt2(k)
|
||||||
print *, 'E = ', CI_energy(k)
|
print *, 'E = ', CI_energy(k)
|
||||||
print *, 'E(before)+PT2 = ', E_CI_before(k)+pt2(k)
|
print *, 'E+PT2'//pt2_string//' = ', CI_energy(k)+pt2(k)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
print *, '-----'
|
print *, '-----'
|
||||||
@ -87,10 +114,9 @@ program fci_zmq
|
|||||||
if(N_states.gt.1)then
|
if(N_states.gt.1)then
|
||||||
print*,'Variational + perturbative Energy difference'
|
print*,'Variational + perturbative Energy difference'
|
||||||
do i = 2, N_states
|
do i = 2, N_states
|
||||||
print*,'Delta E = ',E_CI_before(i)+ pt2(i) - (E_CI_before(1) + pt2(1))
|
print*,'Delta E = ',CI_energy(i)+ pt2(i) - (CI_energy(1) + pt2(1))
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
E_CI_before(1:N_states) = CI_energy(1:N_states)
|
|
||||||
|
|
||||||
n_det_before = N_det
|
n_det_before = N_det
|
||||||
to_select = N_det
|
to_select = N_det
|
||||||
@ -108,47 +134,37 @@ program fci_zmq
|
|||||||
call diagonalize_CI
|
call diagonalize_CI
|
||||||
call save_wavefunction
|
call save_wavefunction
|
||||||
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
||||||
|
call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1))
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if (do_pt2) then
|
||||||
|
pt2 = 0.d0
|
||||||
|
if (N_states == 1) then
|
||||||
|
threshold_selectors = 1.d0
|
||||||
|
threshold_generators = 1d0
|
||||||
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
|
call ZMQ_pt2(CI_energy, pt2,relative_error) ! Stochastic PT2
|
||||||
|
threshold_selectors = threshold_selectors_save
|
||||||
|
threshold_generators = threshold_generators_save
|
||||||
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
|
else
|
||||||
|
threshold_selectors = max(threshold_selectors,threshold_selectors_pt2)
|
||||||
|
threshold_generators = max(threshold_generators,threshold_generators_pt2)
|
||||||
|
SOFT_TOUCH threshold_selectors threshold_generators
|
||||||
|
call ZMQ_selection(0, pt2) ! Deterministic PT2
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
if (N_det < N_det_max) then
|
if (N_det < N_det_max) then
|
||||||
threshold_davidson = threshold_davidson_in
|
threshold_davidson = threshold_davidson_in
|
||||||
call diagonalize_CI
|
call diagonalize_CI
|
||||||
call save_wavefunction
|
call save_wavefunction
|
||||||
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
||||||
|
call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1))
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if(do_pt2_end)then
|
|
||||||
print*,'Last iteration only to compute the PT2'
|
|
||||||
E_CI_before(1:N_states) = CI_energy(1:N_states)
|
|
||||||
double precision :: relative_error
|
|
||||||
relative_error=1.d-3
|
|
||||||
pt2 = 0.d0
|
|
||||||
if (N_states == 1) then
|
|
||||||
threshold_selectors = 1.d0
|
|
||||||
threshold_generators = 1d0
|
|
||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
|
||||||
print *, 'Stochastic PT2'
|
|
||||||
call ZMQ_pt2(E_CI_before(1), pt2,relative_error) ! Stochastic PT2
|
|
||||||
else
|
|
||||||
threshold_selectors = max(threshold_selectors,threshold_selectors_pt2)
|
|
||||||
threshold_generators = max(threshold_generators,threshold_generators_pt2)
|
|
||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
|
||||||
print *, 'Deterministic PT2'
|
|
||||||
call ZMQ_selection(0, pt2) ! Deterministic PT2
|
|
||||||
endif
|
|
||||||
print *, 'Final step'
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
do k=1,N_states
|
|
||||||
print *, 'State', k
|
|
||||||
print *, 'PT2 = ', pt2(k)
|
|
||||||
print *, 'E = ', E_CI_before(k)
|
|
||||||
print *, 'E+PT2 = ', E_CI_before(k)+pt2(k)
|
|
||||||
print *, '-----'
|
|
||||||
enddo
|
|
||||||
call ezfio_set_full_ci_zmq_energy(E_CI_before(1))
|
|
||||||
call ezfio_set_full_ci_zmq_energy_pt2(E_CI_before(1)+pt2(1))
|
|
||||||
endif
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -1,146 +0,0 @@
|
|||||||
program fci_zmq
|
|
||||||
implicit none
|
|
||||||
integer :: i,j,k
|
|
||||||
double precision, allocatable :: pt2(:)
|
|
||||||
integer :: degree
|
|
||||||
integer :: n_det_before, to_select
|
|
||||||
double precision :: threshold_davidson_in
|
|
||||||
|
|
||||||
allocate (pt2(N_states))
|
|
||||||
|
|
||||||
double precision :: hf_energy_ref
|
|
||||||
logical :: has
|
|
||||||
double precision :: relative_error
|
|
||||||
relative_error=1.d-3
|
|
||||||
|
|
||||||
pt2 = -huge(1.d0)
|
|
||||||
threshold_davidson_in = threshold_davidson
|
|
||||||
threshold_davidson = threshold_davidson_in * 100.d0
|
|
||||||
SOFT_TOUCH threshold_davidson
|
|
||||||
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
|
|
||||||
call ezfio_has_hartree_fock_energy(has)
|
|
||||||
if (has) then
|
|
||||||
call ezfio_get_hartree_fock_energy(hf_energy_ref)
|
|
||||||
else
|
|
||||||
hf_energy_ref = ref_bitmask_energy
|
|
||||||
endif
|
|
||||||
|
|
||||||
if (N_det > N_det_max) then
|
|
||||||
psi_det = psi_det_sorted
|
|
||||||
psi_coef = psi_coef_sorted
|
|
||||||
N_det = N_det_max
|
|
||||||
soft_touch N_det psi_det psi_coef
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
do k=1,N_states
|
|
||||||
print*,'State ',k
|
|
||||||
print *, 'PT2 = ', pt2(k)
|
|
||||||
print *, 'E = ', CI_energy(k)
|
|
||||||
print *, 'E+PT2 = ', CI_energy(k) + pt2(k)
|
|
||||||
print *, '-----'
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
print*,'Beginning the selection ...'
|
|
||||||
n_det_before = 0
|
|
||||||
|
|
||||||
double precision :: correlation_energy_ratio
|
|
||||||
double precision :: threshold_selectors_save, threshold_generators_save
|
|
||||||
threshold_selectors_save = threshold_selectors
|
|
||||||
threshold_generators_save = threshold_generators
|
|
||||||
|
|
||||||
correlation_energy_ratio = 0.d0
|
|
||||||
|
|
||||||
if (.True.) then ! Avoid pre-calculation of CI_energy
|
|
||||||
do while ( &
|
|
||||||
(N_det < N_det_max) .and. &
|
|
||||||
(maxval(abs(pt2(1:N_states))) > pt2_max) .and. &
|
|
||||||
(correlation_energy_ratio <= correlation_energy_ratio_max) &
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
pt2 = 0.d0
|
|
||||||
if (N_states == 1) then
|
|
||||||
threshold_selectors = 1.d0
|
|
||||||
threshold_generators = 1d0
|
|
||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
|
||||||
call ZMQ_pt2(CI_energy, pt2,relative_error) ! Stochastic PT2
|
|
||||||
threshold_selectors = threshold_selectors_save
|
|
||||||
threshold_generators = threshold_generators_save
|
|
||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
|
||||||
else
|
|
||||||
threshold_selectors = max(threshold_selectors,threshold_selectors_pt2)
|
|
||||||
threshold_generators = max(threshold_generators,threshold_generators_pt2)
|
|
||||||
SOFT_TOUCH threshold_selectors threshold_generators
|
|
||||||
call ZMQ_selection(0, pt2) ! Deterministic PT2
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
correlation_energy_ratio = (CI_energy(1) - hf_energy_ref) / &
|
|
||||||
(CI_energy(1) + pt2(1) - hf_energy_ref)
|
|
||||||
correlation_energy_ratio = min(1.d0,correlation_energy_ratio)
|
|
||||||
|
|
||||||
|
|
||||||
print *, 'N_det = ', N_det
|
|
||||||
print *, 'N_states = ', N_states
|
|
||||||
print*, 'correlation_ratio = ', correlation_energy_ratio
|
|
||||||
|
|
||||||
do k=1, N_states
|
|
||||||
print*,'State ',k
|
|
||||||
print *, 'PT2 = ', pt2(k)
|
|
||||||
print *, 'E = ', CI_energy(k)
|
|
||||||
print *, 'E+PT2 = ', CI_energy(k)+pt2(k)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
print *, '-----'
|
|
||||||
if(N_states.gt.1)then
|
|
||||||
print*,'Variational Energy difference'
|
|
||||||
do i = 2, N_states
|
|
||||||
print*,'Delta E = ',CI_energy(i) - CI_energy(1)
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
if(N_states.gt.1)then
|
|
||||||
print*,'Variational + perturbative Energy difference'
|
|
||||||
do i = 2, N_states
|
|
||||||
print*,'Delta E = ',CI_energy(i)+ pt2(i) - (CI_energy(1) + pt2(1))
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
n_det_before = N_det
|
|
||||||
to_select = N_det
|
|
||||||
to_select = max(N_det, to_select)
|
|
||||||
to_select = min(to_select, N_det_max-n_det_before)
|
|
||||||
call ZMQ_selection(to_select, pt2)
|
|
||||||
|
|
||||||
PROVIDE psi_coef
|
|
||||||
PROVIDE psi_det
|
|
||||||
PROVIDE psi_det_sorted
|
|
||||||
|
|
||||||
if (N_det >= N_det_max) then
|
|
||||||
threshold_davidson = threshold_davidson_in
|
|
||||||
end if
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
|
||||||
call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1))
|
|
||||||
|
|
||||||
enddo
|
|
||||||
endif
|
|
||||||
|
|
||||||
if (N_det < N_det_max) then
|
|
||||||
threshold_davidson = threshold_davidson_in
|
|
||||||
call diagonalize_CI
|
|
||||||
call save_wavefunction
|
|
||||||
call ezfio_set_full_ci_zmq_energy(CI_energy(1))
|
|
||||||
call ezfio_set_full_ci_zmq_energy_pt2(CI_energy(1)+pt2(1))
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
@ -27,6 +27,11 @@ subroutine ZMQ_pt2(E, pt2,relative_error)
|
|||||||
double precision, external :: omp_get_wtime
|
double precision, external :: omp_get_wtime
|
||||||
double precision :: time
|
double precision :: time
|
||||||
|
|
||||||
|
if (N_det < 10) then
|
||||||
|
call ZMQ_selection(0, pt2)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
|
||||||
allocate(pt2_detail(N_states, N_det_generators+1), comb(N_det_generators), computed(N_det_generators), tbc(0:size_tbc))
|
allocate(pt2_detail(N_states, N_det_generators+1), comb(N_det_generators), computed(N_det_generators), tbc(0:size_tbc))
|
||||||
sumabove = 0d0
|
sumabove = 0d0
|
||||||
sum2above = 0d0
|
sum2above = 0d0
|
||||||
@ -99,6 +104,7 @@ subroutine ZMQ_pt2(E, pt2,relative_error)
|
|||||||
print *, '========== ================= ================= ================='
|
print *, '========== ================= ================= ================='
|
||||||
|
|
||||||
deallocate(pt2_detail, comb, computed, tbc)
|
deallocate(pt2_detail, comb, computed, tbc)
|
||||||
|
endif
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
@ -279,7 +285,6 @@ subroutine pt2_collector(E, b, tbc, comb, Ncomb, computed, pt2_detail, sumabove,
|
|||||||
prop = prop * pt2_weight_inv(first_det_of_teeth(tooth))
|
prop = prop * pt2_weight_inv(first_det_of_teeth(tooth))
|
||||||
E0 += pt2_detail(1,first_det_of_teeth(tooth)) * prop
|
E0 += pt2_detail(1,first_det_of_teeth(tooth)) * prop
|
||||||
pt2(1) = E0 + (sumabove(tooth) / Nabove(tooth))
|
pt2(1) = E0 + (sumabove(tooth) / Nabove(tooth))
|
||||||
eqt = sqrt(1d0 / (Nabove(tooth)-1) * abs(sum2above(tooth) / Nabove(tooth) - (sumabove(tooth)/Nabove(tooth))**2))
|
|
||||||
|
|
||||||
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
call end_zmq_to_qp_run_socket(zmq_to_qp_run_socket)
|
||||||
call end_zmq_pull_socket(zmq_socket_pull)
|
call end_zmq_pull_socket(zmq_socket_pull)
|
||||||
@ -471,7 +476,7 @@ end subroutine
|
|||||||
end if
|
end if
|
||||||
norm_left -= pt2_weight(i)
|
norm_left -= pt2_weight(i)
|
||||||
end do
|
end do
|
||||||
first_det_of_comb = max(1,first_det_of_comb)
|
first_det_of_comb = max(2,first_det_of_comb)
|
||||||
call write_int(6, first_det_of_comb-1, 'Size of deterministic set')
|
call write_int(6, first_det_of_comb-1, 'Size of deterministic set')
|
||||||
|
|
||||||
comb_step = (1d0 - pt2_cweight(first_det_of_comb-1)) * comb_step
|
comb_step = (1d0 - pt2_cweight(first_det_of_comb-1)) * comb_step
|
||||||
|
@ -19,7 +19,7 @@ program mrsc2sub
|
|||||||
SOFT_TOUCH psi_coef
|
SOFT_TOUCH psi_coef
|
||||||
endif
|
endif
|
||||||
call run(N_states,energy)
|
call run(N_states,energy)
|
||||||
if(do_pt2_end)then
|
if(do_pt2)then
|
||||||
call run_pt2(N_states,energy)
|
call run_pt2(N_states,energy)
|
||||||
endif
|
endif
|
||||||
deallocate(energy)
|
deallocate(energy)
|
||||||
|
@ -21,7 +21,7 @@ program mrcepa0
|
|||||||
call print_cas_coefs
|
call print_cas_coefs
|
||||||
|
|
||||||
call run(N_states,energy)
|
call run(N_states,energy)
|
||||||
if(do_pt2_end)then
|
if(do_pt2)then
|
||||||
call run_pt2(N_states,energy)
|
call run_pt2(N_states,energy)
|
||||||
endif
|
endif
|
||||||
deallocate(energy)
|
deallocate(energy)
|
||||||
|
@ -18,7 +18,7 @@ program mrsc2
|
|||||||
TOUCH psi_coef
|
TOUCH psi_coef
|
||||||
endif
|
endif
|
||||||
call run(N_states,energy)
|
call run(N_states,energy)
|
||||||
if(do_pt2_end)then
|
if(do_pt2)then
|
||||||
call run_pt2(N_states,energy)
|
call run_pt2(N_states,energy)
|
||||||
endif
|
endif
|
||||||
deallocate(energy)
|
deallocate(energy)
|
||||||
|
Loading…
Reference in New Issue
Block a user