10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-07-03 18:05:59 +02:00

psi_det_sorted_gen

This commit is contained in:
Yann Garniron 2018-05-25 17:40:27 +02:00
parent 3044e7e72a
commit d903d43443
7 changed files with 67 additions and 29 deletions

View File

@ -22,6 +22,9 @@ END_PROVIDER
BEGIN_PROVIDER [ integer(bit_kind), psi_det_generators, (N_int,2,psi_det_size) ]
&BEGIN_PROVIDER [ double precision, psi_coef_generators, (psi_det_size,N_states) ]
&BEGIN_PROVIDER [ integer(bit_kind), psi_det_sorted_gen, (N_int,2,psi_det_size) ]
&BEGIN_PROVIDER [ double precision, psi_coef_sorted_gen, (psi_det_size,N_states) ]
&BEGIN_PROVIDER [ integer, psi_det_sorted_gen_order, (psi_det_size) ]
implicit none
BEGIN_DOC
! For Single reference wave functions, the generator is the
@ -30,19 +33,36 @@ END_PROVIDER
integer :: i, k, l, m
logical :: good
integer, external :: number_of_holes,number_of_particles
integer, allocatable :: nongen(:)
integer :: inongen
inongen = 0
allocate(nongen(N_det))
m=0
do i=1,N_det
good = ( number_of_holes(psi_det_sorted(1,1,i)) ==0).and.(number_of_particles(psi_det_sorted(1,1,i))==0 )
if (good) then
m = m+1
psi_det_sorted_gen_order(i) = m
do k=1,N_int
psi_det_generators(k,1,m) = psi_det_sorted(k,1,i)
psi_det_generators(k,2,m) = psi_det_sorted(k,2,i)
enddo
psi_coef_generators(m,:) = psi_coef_sorted(m,:)
psi_coef_generators(m,:) = psi_coef_sorted(i,:)
else
inongen += 1
nongen(inongen) = i
endif
enddo
psi_det_sorted_gen(:,:,:N_det_generators) = psi_det_generators(:,:,:N_det_generators)
psi_coef_sorted_gen(:N_det_generators, :) = psi_coef_generators(:N_det_generators, :)
do i=1,inongen
psi_det_sorted_gen_order(nongen(i)) = N_det_generators+i
psi_det_sorted_gen(:,:,:N_det_generators+i) = psi_det_sorted(:,:,nongen(i))
psi_coef_sorted_gen(N_det_generators+i, :) = psi_det_sorted(nongen(i),:)
end do
END_PROVIDER
BEGIN_PROVIDER [ integer, size_select_max]

View File

@ -35,6 +35,24 @@ END_PROVIDER
END_PROVIDER
BEGIN_PROVIDER [ integer(bit_kind), psi_det_sorted_gen, (N_int,2,psi_det_size) ]
&BEGIN_PROVIDER [ double precision, psi_coef_sorted_gen, (psi_det_size,N_states) ]
&BEGIN_PROVIDER [ integer, psi_det_sorted_gen_order, (psi_det_size) ]
implicit none
BEGIN_DOC
! For Single reference wave functions, the generator is the
! Hartree-Fock determinant
END_DOC
integer :: i, k
psi_det_sorted_gen = psi_det_sorted
psi_coef_sorted_gen = psi_coef_sorted
!do i=1,N_det_generators
psi_det_sorted_gen_order = psi_det_sorted_order
!end do
END_PROVIDER
BEGIN_PROVIDER [integer, degree_max_generators]
implicit none
BEGIN_DOC

View File

@ -20,15 +20,15 @@ subroutine alpha_callback(delta_ij_loc, i_generator, subset,iproc)
end subroutine
BEGIN_PROVIDER [ integer, psi_from_sorted, (N_det) ]
BEGIN_PROVIDER [ integer, psi_from_sorted_gen, (N_det) ]
implicit none
integer :: i,inpsisor
psi_from_sorted = 0
psi_from_sorted_gen = 0
do i=1,N_det
psi_from_sorted(psi_det_sorted_order(i)) = i
inpsisor = psi_det_sorted_order(i)
psi_from_sorted_gen(psi_det_sorted_gen_order(i)) = i
inpsisor = psi_det_sorted_gen_order(i)
if(inpsisor <= 0) stop "idx_non_ref_from_sorted"
end do
END_PROVIDER
@ -100,7 +100,7 @@ subroutine generate_singles_and_doubles(delta_ij_loc, i_generator, bitmask_index
exc_degree(max(N_det_alpha_unique,N_det_beta_unique)))
!PROVIDE psi_bilinear_matrix_columns_loc psi_det_alpha_unique psi_det_beta_unique
!PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order
!PROVIDE psi_bilinear_matrix_rows psi_det_sorted_gen_order psi_bilinear_matrix_order
!PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
!PROVIDE psi_bilinear_matrix_transp_order
@ -117,7 +117,7 @@ subroutine generate_singles_and_doubles(delta_ij_loc, i_generator, bitmask_index
do l_a=psi_bilinear_matrix_columns_loc(j), psi_bilinear_matrix_columns_loc(j+1)-1
i = psi_bilinear_matrix_rows(l_a)
if (nt + exc_degree(i) <= 4) then
indices(k) = psi_det_sorted_order(psi_bilinear_matrix_order(l_a))
indices(k) = psi_det_sorted_gen_order(psi_bilinear_matrix_order(l_a))
k=k+1
endif
enddo
@ -136,7 +136,7 @@ subroutine generate_singles_and_doubles(delta_ij_loc, i_generator, bitmask_index
i = psi_bilinear_matrix_transp_columns(l_a)
if (exc_degree(i) < 3) cycle
if (nt + exc_degree(i) <= 4) then
indices(k) = psi_det_sorted_order( &
indices(k) = psi_det_sorted_gen_order( &
psi_bilinear_matrix_order( &
psi_bilinear_matrix_transp_order(l_a)))
k=k+1
@ -160,15 +160,15 @@ subroutine generate_singles_and_doubles(delta_ij_loc, i_generator, bitmask_index
negMask(i,1) = not(psi_det_generators(i,1,i_generator))
negMask(i,2) = not(psi_det_generators(i,2,i_generator))
end do
if(psi_det_generators(1,1,i_generator) /= psi_det_sorted(1,1,i_generator)) stop "gen <> sorted"
if(psi_det_generators(1,1,i_generator) /= psi_det_sorted_gen(1,1,i_generator)) stop "gen <> sorted"
do k=1,nmax
i = indices(k)
mobMask(1,1) = iand(negMask(1,1), psi_det_sorted(1,1,i))
mobMask(1,2) = iand(negMask(1,2), psi_det_sorted(1,2,i))
mobMask(1,1) = iand(negMask(1,1), psi_det_sorted_gen(1,1,i))
mobMask(1,2) = iand(negMask(1,2), psi_det_sorted_gen(1,2,i))
nt = popcnt(mobMask(1, 1)) + popcnt(mobMask(1, 2))
do j=2,N_int
mobMask(j,1) = iand(negMask(j,1), psi_det_sorted(j,1,i))
mobMask(j,2) = iand(negMask(j,2), psi_det_sorted(j,2,i))
mobMask(j,1) = iand(negMask(j,1), psi_det_sorted_gen(j,1,i))
mobMask(j,2) = iand(negMask(j,2), psi_det_sorted_gen(j,2,i))
nt = nt + popcnt(mobMask(j, 1)) + popcnt(mobMask(j, 2))
end do
@ -177,8 +177,8 @@ subroutine generate_singles_and_doubles(delta_ij_loc, i_generator, bitmask_index
preinteresting(0) += 1
preinteresting(preinteresting(0)) = i
do j=1,N_int
preinteresting_det(j,1,preinteresting(0)) = psi_det_sorted(j,1,i)
preinteresting_det(j,2,preinteresting(0)) = psi_det_sorted(j,2,i)
preinteresting_det(j,1,preinteresting(0)) = psi_det_sorted_gen(j,1,i)
preinteresting_det(j,2,preinteresting(0)) = psi_det_sorted_gen(j,2,i)
enddo
else if(nt <= 2) then
prefullinteresting(0) += 1
@ -287,13 +287,13 @@ subroutine generate_singles_and_doubles(delta_ij_loc, i_generator, bitmask_index
do ii=1,prefullinteresting(0)
i = prefullinteresting(ii)
nt = 0
mobMask(1,1) = iand(negMask(1,1), psi_det_sorted(1,1,i))
mobMask(1,2) = iand(negMask(1,2), psi_det_sorted(1,2,i))
mobMask(1,1) = iand(negMask(1,1), psi_det_sorted_gen(1,1,i))
mobMask(1,2) = iand(negMask(1,2), psi_det_sorted_gen(1,2,i))
nt = popcnt(mobMask(1, 1)) + popcnt(mobMask(1, 2))
if (nt > 2) cycle
do j=N_int,2,-1
mobMask(j,1) = iand(negMask(j,1), psi_det_sorted(j,1,i))
mobMask(j,2) = iand(negMask(j,2), psi_det_sorted(j,2,i))
mobMask(j,1) = iand(negMask(j,1), psi_det_sorted_gen(j,1,i))
mobMask(j,2) = iand(negMask(j,2), psi_det_sorted_gen(j,2,i))
nt = nt+ popcnt(mobMask(j, 1)) + popcnt(mobMask(j, 2))
if (nt > 2) exit
end do
@ -301,11 +301,11 @@ subroutine generate_singles_and_doubles(delta_ij_loc, i_generator, bitmask_index
if(nt <= 2) then
fullinteresting(0) += 1
fullinteresting(fullinteresting(0)) = i
fullminilist(1,1,fullinteresting(0)) = psi_det_sorted(1,1,i)
fullminilist(1,2,fullinteresting(0)) = psi_det_sorted(1,2,i)
fullminilist(1,1,fullinteresting(0)) = psi_det_sorted_gen(1,1,i)
fullminilist(1,2,fullinteresting(0)) = psi_det_sorted_gen(1,2,i)
do j=2,N_int
fullminilist(j,1,fullinteresting(0)) = psi_det_sorted(j,1,i)
fullminilist(j,2,fullinteresting(0)) = psi_det_sorted(j,2,i)
fullminilist(j,1,fullinteresting(0)) = psi_det_sorted_gen(j,1,i)
fullminilist(j,2,fullinteresting(0)) = psi_det_sorted_gen(j,2,i)
enddo
end if
end do
@ -390,7 +390,7 @@ subroutine alpha_callback_mask(delta_ij_loc, i_gen, sp, mask, bannedOrb, banned,
allocate(abuf(siz), labuf(N_det), putten(N_det), det_minilist(N_int, 2, N_det))
do i=1,siz
abuf(i) = psi_from_sorted(rabuf(i))
abuf(i) = psi_from_sorted_gen(rabuf(i))
end do
putten = .false.

View File

@ -65,7 +65,7 @@ integer, external :: zmq_get_dvector, zmq_get_N_det_generators
TOUCH state_average_weight
PROVIDE psi_bilinear_matrix_columns_loc psi_det_alpha_unique psi_det_beta_unique
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_gen_order psi_bilinear_matrix_order
PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
PROVIDE psi_bilinear_matrix_transp_order
!!$OMP PARALLEL PRIVATE(i)

View File

@ -5,7 +5,7 @@ program shifted_bk
END_DOC
PROVIDE psi_bilinear_matrix_columns_loc psi_det_alpha_unique psi_det_beta_unique
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_gen_order psi_bilinear_matrix_order
PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
PROVIDE psi_bilinear_matrix_transp_order

View File

@ -221,7 +221,7 @@ subroutine dress_with_alpha_(Nstates,Ndet,Nint,delta_ij_loc,minilist, det_minili
BEGIN_DOC
!delta_ij_loc(:,:,1) : dressing column for H
!delta_ij_loc(:,:,2) : dressing column for S2
!minilist : indices of determinants connected to alpha ( in psi_det_sorted )
!minilist : indices of determinants connected to alpha ( in psi_det )
!n_minilist : size of minilist
!alpha : alpha determinant
END_DOC
@ -280,7 +280,7 @@ subroutine dress_with_alpha_buffer(Nstates,Ndet,Nint,delta_ij_loc, i_gen, minili
!delta_ij_loc(:,:,1) : dressing column for H
!delta_ij_loc(:,:,2) : dressing column for S2
!i_gen : generator index in psi_det_generators
!minilist : indices of determinants connected to alpha ( in psi_det_sorted )
!minilist : indices of determinants connected to alpha ( in psi_det )
!n_minilist : size of minilist
!alpha : alpha determinant
END_DOC

View File

@ -5,7 +5,7 @@ program shifted_bk
END_DOC
PROVIDE psi_bilinear_matrix_columns_loc psi_det_alpha_unique psi_det_beta_unique
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_order psi_bilinear_matrix_order
PROVIDE psi_bilinear_matrix_rows psi_det_sorted_gen_order psi_bilinear_matrix_order
PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
PROVIDE psi_bilinear_matrix_transp_order