mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-09-12 02:38:31 +02:00
ban excitations that don't conserve momentum
This commit is contained in:
parent
a00266d1b9
commit
29752ccb60
@ -269,6 +269,7 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
|||||||
type(selection_buffer), intent(inout) :: buf
|
type(selection_buffer), intent(inout) :: buf
|
||||||
|
|
||||||
integer :: h1,h2,s1,s2,s3,i1,i2,ib,sp,k,i,j,nt,ii,sze
|
integer :: h1,h2,s1,s2,s3,i1,i2,ib,sp,k,i,j,nt,ii,sze
|
||||||
|
integer :: kh1,kh2,kpt12,kk1,kk2,ik01,ik02,ik1,ik2
|
||||||
integer(bit_kind) :: hole(N_int,2), particle(N_int,2), mask(N_int, 2), pmask(N_int, 2)
|
integer(bit_kind) :: hole(N_int,2), particle(N_int,2), mask(N_int, 2), pmask(N_int, 2)
|
||||||
logical :: fullMatch, ok
|
logical :: fullMatch, ok
|
||||||
|
|
||||||
@ -511,12 +512,13 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
|||||||
maskInd = maskInd_save
|
maskInd = maskInd_save
|
||||||
|
|
||||||
h1 = hole_list(i1,s1)
|
h1 = hole_list(i1,s1)
|
||||||
!todo kpt1 = (h1-1)/mo_num_per_kpt + 1
|
!todo: kpts
|
||||||
|
kh1 = (h1-1)/mo_num_per_kpt + 1
|
||||||
! pmask is i_generator det with bit at h1 set to zero
|
! pmask is i_generator det with bit at h1 set to zero
|
||||||
call apply_hole(psi_det_generators(1,1,i_generator), s1,h1, pmask, ok, N_int)
|
call apply_hole(psi_det_generators(1,1,i_generator), s1,h1, pmask, ok, N_int)
|
||||||
|
|
||||||
negMask = not(pmask)
|
negMask = not(pmask)
|
||||||
|
!
|
||||||
! see set definitions above
|
! see set definitions above
|
||||||
interesting(0) = 0
|
interesting(0) = 0
|
||||||
fullinteresting(0) = 0
|
fullinteresting(0) = 0
|
||||||
@ -674,31 +676,31 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
|||||||
if (is_complex) then
|
if (is_complex) then
|
||||||
!=============================================================
|
!=============================================================
|
||||||
!!todo use this once kpts are implemented
|
!!todo use this once kpts are implemented
|
||||||
! kpt2 = (h2-1)/mo_num_per_kpt + 1
|
kh2 = (h2-1)/mo_num_per_kpt + 1
|
||||||
! kpt12 = kconserv(kpt1,kpt2,1)
|
kpt12 = kconserv(kh1,kh2,1)
|
||||||
! ! mask is gen_i with (h1,s1),(h2,s2) removed
|
|
||||||
! call apply_hole(pmask, s2,h2, mask, ok, N_int)
|
|
||||||
! banned = .true.
|
|
||||||
! ! only allow excitations that conserve momentum
|
|
||||||
! do kk1=1,kpt_num
|
|
||||||
! ! equivalent to kk2 = kconserv(kpt1,kpt2,kk1)
|
|
||||||
! kk2 = kconserv(kpt12,1,kk1)
|
|
||||||
! ik01 = (kk1-1) * mo_num_per_kpt + 1 !first mo in kk1
|
|
||||||
! ik02 = (kk2-1) * mo_num_per_kpt + 1 !first mo in kk2
|
|
||||||
! do ik1 = ik01, ik01 + mo_num_per_kpt - 1 !loop over mos in kk1
|
|
||||||
! do ik2 = ik02, ik02 + mo_num_per_kpt - 1 !loop over mos in kk2
|
|
||||||
! ! depending on sp, might not need both of these?
|
|
||||||
! ! sp=1 (a,a) or sp=2 (b,b): only use banned(:,:,1)
|
|
||||||
! ! sp=3 (a,b): banned(alpha,beta,1) is transpose of banned(beta,alpha,2)
|
|
||||||
! banned(ik1,ik2,1) = .false.
|
|
||||||
! banned(ik1,ik2,2) = .false.
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
! enddo
|
|
||||||
!=============================================================
|
|
||||||
! mask is gen_i with (h1,s1),(h2,s2) removed
|
! mask is gen_i with (h1,s1),(h2,s2) removed
|
||||||
call apply_hole(pmask, s2,h2, mask, ok, N_int)
|
call apply_hole(pmask, s2,h2, mask, ok, N_int)
|
||||||
banned = .false.
|
banned = .true.
|
||||||
|
! only allow excitations that conserve momentum
|
||||||
|
do kk1=1,kpt_num
|
||||||
|
! equivalent to kk2 = kconserv(kh1,kh2,kk1)
|
||||||
|
kk2 = kconserv(kpt12,1,kk1)
|
||||||
|
ik01 = (kk1-1) * mo_num_per_kpt + 1 !first mo in kk1
|
||||||
|
ik02 = (kk2-1) * mo_num_per_kpt + 1 !first mo in kk2
|
||||||
|
do ik1 = ik01, ik01 + mo_num_per_kpt - 1 !loop over mos in kk1
|
||||||
|
do ik2 = ik02, ik02 + mo_num_per_kpt - 1 !loop over mos in kk2
|
||||||
|
! depending on sp, might not need both of these?
|
||||||
|
! sp=1 (a,a) or sp=2 (b,b): only use banned(:,:,1)
|
||||||
|
! sp=3 (a,b): banned(alpha,beta,1) is transpose of banned(beta,alpha,2)
|
||||||
|
banned(ik1,ik2,1) = .false.
|
||||||
|
banned(ik1,ik2,2) = .false.
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
!=============================================================
|
||||||
|
! ! mask is gen_i with (h1,s1),(h2,s2) removed
|
||||||
|
! call apply_hole(pmask, s2,h2, mask, ok, N_int)
|
||||||
|
! banned = .false.
|
||||||
!=============================================================
|
!=============================================================
|
||||||
else
|
else
|
||||||
call apply_hole(pmask, s2,h2, mask, ok, N_int)
|
call apply_hole(pmask, s2,h2, mask, ok, N_int)
|
||||||
|
Loading…
Reference in New Issue
Block a user