diff --git a/plugins/Generators_CAS/generators.irp.f b/plugins/Generators_CAS/generators.irp.f index 67d3cc31..6f770c2e 100644 --- a/plugins/Generators_CAS/generators.irp.f +++ b/plugins/Generators_CAS/generators.irp.f @@ -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] diff --git a/plugins/Generators_full/generators.irp.f b/plugins/Generators_full/generators.irp.f index 98d49069..16dade7e 100644 --- a/plugins/Generators_full/generators.irp.f +++ b/plugins/Generators_full/generators.irp.f @@ -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 diff --git a/plugins/dress_zmq/alpha_factory.irp.f b/plugins/dress_zmq/alpha_factory.irp.f index 1cb286fc..261966be 100644 --- a/plugins/dress_zmq/alpha_factory.irp.f +++ b/plugins/dress_zmq/alpha_factory.irp.f @@ -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. diff --git a/plugins/dress_zmq/dress_slave.irp.f b/plugins/dress_zmq/dress_slave.irp.f index acae326f..47053c3d 100644 --- a/plugins/dress_zmq/dress_slave.irp.f +++ b/plugins/dress_zmq/dress_slave.irp.f @@ -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) diff --git a/plugins/shiftedbk/shifted_bk.irp.f b/plugins/shiftedbk/shifted_bk.irp.f index 5438ec90..df971b4f 100644 --- a/plugins/shiftedbk/shifted_bk.irp.f +++ b/plugins/shiftedbk/shifted_bk.irp.f @@ -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 diff --git a/plugins/shiftedbk/shifted_bk_routines.irp.f b/plugins/shiftedbk/shifted_bk_routines.irp.f index c2775ab2..6a481389 100644 --- a/plugins/shiftedbk/shifted_bk_routines.irp.f +++ b/plugins/shiftedbk/shifted_bk_routines.irp.f @@ -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 diff --git a/plugins/shiftedbk/shifted_bk_slave.irp.f b/plugins/shiftedbk/shifted_bk_slave.irp.f index d31b55d9..901940ed 100644 --- a/plugins/shiftedbk/shifted_bk_slave.irp.f +++ b/plugins/shiftedbk/shifted_bk_slave.irp.f @@ -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