mirror of
https://github.com/LCPQ/quantum_package
synced 2024-11-03 20:54:00 +01:00
Even better selection
This commit is contained in:
parent
a451a89e5a
commit
dc3d433d30
@ -159,7 +159,7 @@ class H_apply(object):
|
|||||||
double precision, intent(inout):: norm_pert(N_st)
|
double precision, intent(inout):: norm_pert(N_st)
|
||||||
double precision, intent(inout):: H_pert_diag(N_st)
|
double precision, intent(inout):: H_pert_diag(N_st)
|
||||||
double precision :: delta_pt2(N_st), norm_psi(N_st), pt2_old(N_st)
|
double precision :: delta_pt2(N_st), norm_psi(N_st), pt2_old(N_st)
|
||||||
PROVIDE CI_electronic_energy N_det_generators key_pattern_not_in_ref
|
PROVIDE CI_electronic_energy N_det_generators
|
||||||
do k=1,N_st
|
do k=1,N_st
|
||||||
pt2(k) = 0.d0
|
pt2(k) = 0.d0
|
||||||
norm_pert(k) = 0.d0
|
norm_pert(k) = 0.d0
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
AOs BiInts Bitmask Dets Electrons Ezfio_files Hartree_Fock MonoInts MOs Nuclei Output SingleRefMethod Utils
|
AOs BiInts Bitmask Dets Electrons Ezfio_files Hartree_Fock MonoInts MOs Nuclei Output SingleRefMethod Utils Selectors_full
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ Needed Modules
|
|||||||
* `Output <http://github.com/LCPQ/quantum_package/tree/master/src/Output>`_
|
* `Output <http://github.com/LCPQ/quantum_package/tree/master/src/Output>`_
|
||||||
* `SingleRefMethod <http://github.com/LCPQ/quantum_package/tree/master/src/SingleRefMethod>`_
|
* `SingleRefMethod <http://github.com/LCPQ/quantum_package/tree/master/src/SingleRefMethod>`_
|
||||||
* `Utils <http://github.com/LCPQ/quantum_package/tree/master/src/Utils>`_
|
* `Utils <http://github.com/LCPQ/quantum_package/tree/master/src/Utils>`_
|
||||||
|
* `Selectors_full <http://github.com/LCPQ/quantum_package/tree/master/src/Selectors_full>`_
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
=============
|
=============
|
||||||
|
@ -26,7 +26,6 @@ Needed Modules
|
|||||||
* `BiInts <http://github.com/LCPQ/quantum_package/tree/master/src/BiInts>`_
|
* `BiInts <http://github.com/LCPQ/quantum_package/tree/master/src/BiInts>`_
|
||||||
* `Bitmask <http://github.com/LCPQ/quantum_package/tree/master/src/Bitmask>`_
|
* `Bitmask <http://github.com/LCPQ/quantum_package/tree/master/src/Bitmask>`_
|
||||||
* `CISD <http://github.com/LCPQ/quantum_package/tree/master/src/CISD>`_
|
* `CISD <http://github.com/LCPQ/quantum_package/tree/master/src/CISD>`_
|
||||||
* `CISD_SC2 <http://github.com/LCPQ/quantum_package/tree/master/src/CISD_SC2>`_
|
|
||||||
* `Dets <http://github.com/LCPQ/quantum_package/tree/master/src/Dets>`_
|
* `Dets <http://github.com/LCPQ/quantum_package/tree/master/src/Dets>`_
|
||||||
* `Electrons <http://github.com/LCPQ/quantum_package/tree/master/src/Electrons>`_
|
* `Electrons <http://github.com/LCPQ/quantum_package/tree/master/src/Electrons>`_
|
||||||
* `Ezfio_files <http://github.com/LCPQ/quantum_package/tree/master/src/Ezfio_files>`_
|
* `Ezfio_files <http://github.com/LCPQ/quantum_package/tree/master/src/Ezfio_files>`_
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
logical function is_in_wavefunction(key,keys,Nint,N_past_in,Ndet)
|
logical function is_in_wavefunction(key,Nint,Ndet)
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
integer, intent(in) :: Nint, N_past_in, Ndet
|
integer, intent(in) :: Nint, Ndet
|
||||||
integer(bit_kind), intent(in) :: keys(Nint,2,Ndet)
|
|
||||||
integer(bit_kind), intent(in) :: key(Nint,2)
|
integer(bit_kind), intent(in) :: key(Nint,2)
|
||||||
|
|
||||||
integer :: i, ibegin, iend, istep, l
|
integer :: i, ibegin, iend, istep, l
|
||||||
@ -11,18 +10,17 @@ logical function is_in_wavefunction(key,keys,Nint,N_past_in,Ndet)
|
|||||||
|
|
||||||
is_in_wavefunction = .False.
|
is_in_wavefunction = .False.
|
||||||
ibegin = 1
|
ibegin = 1
|
||||||
iend = N_det
|
iend = N_det+1
|
||||||
ASSERT (N_past > 0)
|
ASSERT (N_past > 0)
|
||||||
ASSERT (N_det >= N_past)
|
ASSERT (N_det >= N_past)
|
||||||
|
|
||||||
det_ref = det_search_key(key,Nint)
|
det_ref = det_search_key(key,Nint)
|
||||||
|
det_search = det_search_key(psi_det_sorted_bit(1,1,1),Nint)
|
||||||
|
|
||||||
istep = ishft(iend-ibegin+1,-1)
|
istep = ishft(iend-ibegin,-1)
|
||||||
i=ibegin+istep
|
i=ibegin+istep
|
||||||
do while (istep > 1)
|
do while (istep > 0)
|
||||||
i = ibegin + istep
|
|
||||||
det_search = det_search_key(psi_det_sorted_bit(1,1,i),Nint)
|
det_search = det_search_key(psi_det_sorted_bit(1,1,i),Nint)
|
||||||
! print *, istep, det_ref, det_search
|
|
||||||
if ( det_search > det_ref ) then
|
if ( det_search > det_ref ) then
|
||||||
iend = i
|
iend = i
|
||||||
else if ( det_search == det_ref ) then
|
else if ( det_search == det_ref ) then
|
||||||
@ -30,10 +28,13 @@ logical function is_in_wavefunction(key,keys,Nint,N_past_in,Ndet)
|
|||||||
else
|
else
|
||||||
ibegin = i
|
ibegin = i
|
||||||
endif
|
endif
|
||||||
istep = ishft(iend-ibegin+1,-1)
|
istep = ishft(iend-ibegin,-1)
|
||||||
i = ibegin + istep
|
i = ibegin + istep
|
||||||
end do
|
end do
|
||||||
! pause
|
|
||||||
|
! if (det_search /= det_ref) then
|
||||||
|
! return
|
||||||
|
! endif
|
||||||
|
|
||||||
do while (det_search_key(psi_det_sorted_bit(1,1,i),Nint) == det_ref)
|
do while (det_search_key(psi_det_sorted_bit(1,1,i),Nint) == det_ref)
|
||||||
i = i-1
|
i = i-1
|
||||||
@ -61,6 +62,9 @@ logical function is_in_wavefunction(key,keys,Nint,N_past_in,Ndet)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
i += 1
|
i += 1
|
||||||
|
if (i > N_det) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
@ -105,27 +109,8 @@ integer function connected_to_ref(key,keys,Nint,N_past_in,Ndet)
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!DIR$ FORCEINLINE
|
|
||||||
t = det_is_not_or_may_be_in_ref(key,Nint)
|
|
||||||
if ( t ) then
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
logical, external :: is_in_wavefunction
|
|
||||||
if (is_in_wavefunction(key,keys,Nint,N_past_in,Ndet)) then
|
|
||||||
connected_to_ref = -1
|
|
||||||
endif
|
|
||||||
return
|
return
|
||||||
|
|
||||||
! do i=N_past,Ndet
|
|
||||||
! if ( (key(1,1) /= keys(1,1,i)).or. &
|
|
||||||
! (key(1,2) /= keys(1,2,i)) ) then
|
|
||||||
! cycle
|
|
||||||
! endif
|
|
||||||
! connected_to_ref = -i
|
|
||||||
! return
|
|
||||||
! enddo
|
|
||||||
! return
|
|
||||||
|
|
||||||
else if (Nint==2) then
|
else if (Nint==2) then
|
||||||
|
|
||||||
@ -146,23 +131,6 @@ integer function connected_to_ref(key,keys,Nint,N_past_in,Ndet)
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!DIR$ FORCEINLINE
|
|
||||||
t = det_is_not_or_may_be_in_ref(key,Nint)
|
|
||||||
if ( t ) then
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
!DIR$ LOOP COUNT (1000)
|
|
||||||
do i=N_past,Ndet
|
|
||||||
if ( (key(1,1) /= keys(1,1,i)).or. &
|
|
||||||
(key(1,2) /= keys(1,2,i)).or. &
|
|
||||||
(key(2,1) /= keys(2,1,i)).or. &
|
|
||||||
(key(2,2) /= keys(2,2,i)) ) then
|
|
||||||
cycle
|
|
||||||
endif
|
|
||||||
connected_to_ref = -i
|
|
||||||
return
|
|
||||||
enddo
|
|
||||||
return
|
return
|
||||||
|
|
||||||
else if (Nint==3) then
|
else if (Nint==3) then
|
||||||
@ -186,24 +154,6 @@ integer function connected_to_ref(key,keys,Nint,N_past_in,Ndet)
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!DIR$ FORCEINLINE
|
|
||||||
t = det_is_not_or_may_be_in_ref(key,Nint)
|
|
||||||
if ( t ) then
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
do i=N_past,Ndet
|
|
||||||
if ( (key(1,1) /= keys(1,1,i)).or. &
|
|
||||||
(key(1,2) /= keys(1,2,i)).or. &
|
|
||||||
(key(2,1) /= keys(2,1,i)).or. &
|
|
||||||
(key(2,2) /= keys(2,2,i)).or. &
|
|
||||||
(key(3,1) /= keys(3,1,i)).or. &
|
|
||||||
(key(3,2) /= keys(3,2,i)) ) then
|
|
||||||
cycle
|
|
||||||
endif
|
|
||||||
connected_to_ref = -i
|
|
||||||
return
|
|
||||||
enddo
|
|
||||||
return
|
return
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -228,32 +178,6 @@ integer function connected_to_ref(key,keys,Nint,N_past_in,Ndet)
|
|||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
!DIR$ FORCEINLINE
|
|
||||||
t = det_is_not_or_may_be_in_ref(key,Nint)
|
|
||||||
if ( t ) then
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
do i=N_past,Ndet
|
|
||||||
if ( (key(1,1) /= keys(1,1,i)).or. &
|
|
||||||
(key(1,2) /= keys(1,2,i)) ) then
|
|
||||||
cycle
|
|
||||||
else
|
|
||||||
connected_to_ref = -1
|
|
||||||
!DEC$ LOOP COUNT MIN(3)
|
|
||||||
do l=2,Nint
|
|
||||||
if ( (key(l,1) /= keys(l,1,i)).or. &
|
|
||||||
(key(l,2) /= keys(l,2,i)) ) then
|
|
||||||
connected_to_ref = 0
|
|
||||||
exit
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
if (connected_to_ref /= 0) then
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -16,6 +16,7 @@ subroutine perturb_buffer_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,c
|
|||||||
double precision :: c_pert(N_st), e_2_pert(N_st), H_pert_diag(N_st)
|
double precision :: c_pert(N_st), e_2_pert(N_st), H_pert_diag(N_st)
|
||||||
integer :: i,k, c_ref
|
integer :: i,k, c_ref
|
||||||
integer, external :: connected_to_ref
|
integer, external :: connected_to_ref
|
||||||
|
logical, external :: is_in_wavefunction
|
||||||
|
|
||||||
ASSERT (Nint > 0)
|
ASSERT (Nint > 0)
|
||||||
ASSERT (Nint == N_int)
|
ASSERT (Nint == N_int)
|
||||||
@ -24,6 +25,9 @@ subroutine perturb_buffer_$PERT(i_generator,buffer,buffer_size,e_2_pert_buffer,c
|
|||||||
ASSERT (N_st > 0)
|
ASSERT (N_st > 0)
|
||||||
do i = 1,buffer_size
|
do i = 1,buffer_size
|
||||||
|
|
||||||
|
if (is_in_wavefunction(buffer(1,1,i),Nint,N_det)) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
c_ref = connected_to_ref(buffer(1,1,i),psi_generators,Nint,i_generator,N_det)
|
c_ref = connected_to_ref(buffer(1,1,i),psi_generators,Nint,i_generator,N_det)
|
||||||
|
|
||||||
if (c_ref /= 0) then
|
if (c_ref /= 0) then
|
||||||
|
Loading…
Reference in New Issue
Block a user