10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-07-22 18:57:31 +02:00

Refinement of psi_generators

This commit is contained in:
Anthony Scemama 2018-09-17 14:43:39 +02:00
parent 0e0e8fb7b6
commit fa7144ece6
4 changed files with 28 additions and 19 deletions

View File

@ -308,7 +308,7 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
call bitstring_to_list_ab(hole , hole_list , N_holes , N_int) call bitstring_to_list_ab(hole , hole_list , N_holes , N_int)
call bitstring_to_list_ab(particle, particle_list, N_particles, N_int) call bitstring_to_list_ab(particle, particle_list, N_particles, N_int)
integer :: l_a, nmax integer :: l_a, nmax, idx
integer, allocatable :: indices(:), exc_degree(:), iorder(:) integer, allocatable :: indices(:), exc_degree(:), iorder(:)
allocate (indices(N_det), & allocate (indices(N_det), &
exc_degree(max(N_det_alpha_unique,N_det_beta_unique))) exc_degree(max(N_det_alpha_unique,N_det_beta_unique)))
@ -331,7 +331,9 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
do l_a=psi_bilinear_matrix_columns_loc(j), psi_bilinear_matrix_columns_loc(j+1)-1 do l_a=psi_bilinear_matrix_columns_loc(j), psi_bilinear_matrix_columns_loc(j+1)-1
i = psi_bilinear_matrix_rows(l_a) i = psi_bilinear_matrix_rows(l_a)
if (nt + exc_degree(i) <= 4) then if (nt + exc_degree(i) <= 4) then
indices(k) = psi_det_sorted_order(psi_bilinear_matrix_order(l_a)) idx = psi_det_sorted_order(psi_bilinear_matrix_order(l_a))
if (psi_average_norm_contrib_sorted(idx) < 1.d-12) cycle
indices(k) = idx
k=k+1 k=k+1
endif endif
enddo enddo
@ -350,9 +352,11 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
i = psi_bilinear_matrix_transp_columns(l_a) i = psi_bilinear_matrix_transp_columns(l_a)
if (exc_degree(i) < 3) cycle if (exc_degree(i) < 3) cycle
if (nt + exc_degree(i) <= 4) then if (nt + exc_degree(i) <= 4) then
indices(k) = psi_det_sorted_order( & idx = psi_det_sorted_order( &
psi_bilinear_matrix_order( & psi_bilinear_matrix_order( &
psi_bilinear_matrix_transp_order(l_a))) psi_bilinear_matrix_transp_order(l_a)))
if (psi_average_norm_contrib_sorted(idx) < 1.d-12) cycle
indices(k) = idx
k=k+1 k=k+1
endif endif
enddo enddo

View File

@ -9,11 +9,12 @@ BEGIN_PROVIDER [ integer, N_det_generators ]
integer :: i integer :: i
double precision :: norm double precision :: norm
call write_time(6) call write_time(6)
norm = 0.d0 norm = 1.d0
N_det_generators = N_det N_det_generators = N_det
do i=1,N_det do i=1,N_det
norm = norm + psi_average_norm_contrib_sorted(i) norm = norm - psi_average_norm_contrib_sorted(i)
if (norm > threshold_generators+1d-10) then if (psi_average_norm_contrib_sorted(i) == 0.d0) exit
if (norm < 1.d0 - threshold_generators) then
N_det_generators = i N_det_generators = i
exit exit
endif endif

View File

@ -10,17 +10,16 @@ BEGIN_PROVIDER [ integer, N_det_selectors]
double precision :: norm, norm_max double precision :: norm, norm_max
call write_time(6) call write_time(6)
N_det_selectors = N_det N_det_selectors = N_det
if (threshold_generators < 1.d0) then norm = 1.d0
norm = 0.d0 do i=1,N_det
do i=1,N_det norm = norm - psi_average_norm_contrib_sorted(i)
norm = norm + psi_average_norm_contrib_sorted(i) if (psi_average_norm_contrib_sorted(i) == 0.d0) exit
if (norm > threshold_selectors) then if (norm < 1.d0 - threshold_selectors) then
N_det_selectors = i N_det_selectors = i
exit exit
endif endif
enddo enddo
N_det_selectors = max(N_det_selectors,N_det_generators) N_det_selectors = max(N_det_selectors,N_det_generators)
endif
call write_int(6,N_det_selectors,'Number of selectors') call write_int(6,N_det_selectors,'Number of selectors')
END_PROVIDER END_PROVIDER

View File

@ -2,7 +2,12 @@ program print_energy
implicit none implicit none
read_wf = .true. read_wf = .true.
touch read_wf touch read_wf
provide mo_bielec_integrals_in_map
double precision :: time1, time0
call wall_time(time0)
call routine call routine
call wall_time(time1)
print *, 'Wall time :' , time1 - time0
end end
subroutine routine subroutine routine