From d1c1ae8cb43f1e25e322c983ef71f39499dc00dc Mon Sep 17 00:00:00 2001 From: Yann Garniron Date: Fri, 23 Oct 2015 15:58:43 +0200 Subject: [PATCH] connected_to_ref --- .travis.yml | 2 +- config/gfortran.cfg | 2 +- plugins/CAS_SD/README.rst | 56 +++++++++++--- plugins/Full_CI/README.rst | 112 ++++++++++++++++++++++------ plugins/MRCC_Utils/README.rst | 26 ++++++- plugins/MRCC_Utils/mrcc_dress.irp.f | 49 +++++++++++- src/Determinants/H_apply.template.f | 18 ++--- src/Determinants/README.rst | 20 +++-- src/Determinants/davidson.irp.f | 18 +++++ src/Determinants/slater_rules.irp.f | 3 +- src/Ezfio_files/README.rst | 50 ++++++++----- 11 files changed, 279 insertions(+), 77 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0e78a8c6..56c55504 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,7 +27,7 @@ python: script: - ./configure --production ./config/gfortran.cfg - source ./quantum_package.rc - - qp_install_module.py install Full_CI Hartree_Fock + - qp_install_module.py install Full_CI Hartree_Fock CAS_SD MRCC_CASSD - ninja - cd ocaml ; make ; cd - - cd testing_no_regression ; ./unit_test.py diff --git a/config/gfortran.cfg b/config/gfortran.cfg index c1032aa1..192e6d49 100644 --- a/config/gfortran.cfg +++ b/config/gfortran.cfg @@ -10,7 +10,7 @@ # # [COMMON] -FC : gfortran -g -ffree-line-length-none -I . +FC : gfortran -g -ffree-line-length-none -mavx -I . LAPACK_LIB : -llapack -lblas IRPF90 : irpf90 IRPF90_FLAGS : --ninja --align=32 diff --git a/plugins/CAS_SD/README.rst b/plugins/CAS_SD/README.rst index 258410a1..c6707c3e 100644 --- a/plugins/CAS_SD/README.rst +++ b/plugins/CAS_SD/README.rst @@ -118,69 +118,101 @@ Documentation Undocumented -`h_apply_cas_sd `_ +`h_apply_cas_sd `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cas_sd_diexc `_ +`h_apply_cas_sd_diexc `_ + Undocumented + + +`h_apply_cas_sd_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_monoexc `_ +`h_apply_cas_sd_diexcp `_ + Undocumented + + +`h_apply_cas_sd_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_pt2 `_ +`h_apply_cas_sd_pt2 `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cas_sd_pt2_diexc `_ +`h_apply_cas_sd_pt2_diexc `_ + Undocumented + + +`h_apply_cas_sd_pt2_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_pt2_monoexc `_ +`h_apply_cas_sd_pt2_diexcp `_ + Undocumented + + +`h_apply_cas_sd_pt2_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_selected `_ +`h_apply_cas_sd_selected `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cas_sd_selected_diexc `_ +`h_apply_cas_sd_selected_diexc `_ + Undocumented + + +`h_apply_cas_sd_selected_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_selected_monoexc `_ +`h_apply_cas_sd_selected_diexcp `_ + Undocumented + + +`h_apply_cas_sd_selected_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_selected_no_skip `_ +`h_apply_cas_sd_selected_no_skip `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_cas_sd_selected_no_skip_diexc `_ +`h_apply_cas_sd_selected_no_skip_diexc `_ + Undocumented + + +`h_apply_cas_sd_selected_no_skip_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_cas_sd_selected_no_skip_monoexc `_ +`h_apply_cas_sd_selected_no_skip_diexcp `_ + Undocumented + + +`h_apply_cas_sd_selected_no_skip_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. diff --git a/plugins/Full_CI/README.rst b/plugins/Full_CI/README.rst index bc2307cd..949f97c5 100644 --- a/plugins/Full_CI/README.rst +++ b/plugins/Full_CI/README.rst @@ -27,137 +27,201 @@ Documentation Undocumented -`h_apply_fci `_ +`h_apply_fci `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_fci_diexc `_ +`h_apply_fci_diexc `_ + Undocumented + + +`h_apply_fci_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_fci_mono `_ +`h_apply_fci_diexcp `_ + Undocumented + + +`h_apply_fci_mono `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_fci_mono_diexc `_ +`h_apply_fci_mono_diexc `_ + Undocumented + + +`h_apply_fci_mono_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_fci_mono_monoexc `_ +`h_apply_fci_mono_diexcp `_ + Undocumented + + +`h_apply_fci_mono_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_fci_monoexc `_ +`h_apply_fci_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_fci_no_skip `_ +`h_apply_fci_no_skip `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_fci_no_skip_diexc `_ +`h_apply_fci_no_skip_diexc `_ + Undocumented + + +`h_apply_fci_no_skip_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_fci_no_skip_monoexc `_ +`h_apply_fci_no_skip_diexcp `_ + Undocumented + + +`h_apply_fci_no_skip_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_fci_pt2 `_ +`h_apply_fci_pt2 `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_fci_pt2_diexc `_ +`h_apply_fci_pt2_diexc `_ + Undocumented + + +`h_apply_fci_pt2_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_fci_pt2_monoexc `_ +`h_apply_fci_pt2_diexcp `_ + Undocumented + + +`h_apply_fci_pt2_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_pt2_mono_delta_rho `_ +`h_apply_pt2_mono_delta_rho `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_pt2_mono_delta_rho_diexc `_ +`h_apply_pt2_mono_delta_rho_diexc `_ + Undocumented + + +`h_apply_pt2_mono_delta_rho_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_pt2_mono_delta_rho_monoexc `_ +`h_apply_pt2_mono_delta_rho_diexcp `_ + Undocumented + + +`h_apply_pt2_mono_delta_rho_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_pt2_mono_di_delta_rho `_ +`h_apply_pt2_mono_di_delta_rho `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_pt2_mono_di_delta_rho_diexc `_ +`h_apply_pt2_mono_di_delta_rho_diexc `_ + Undocumented + + +`h_apply_pt2_mono_di_delta_rho_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_pt2_mono_di_delta_rho_monoexc `_ +`h_apply_pt2_mono_di_delta_rho_diexcp `_ + Undocumented + + +`h_apply_pt2_mono_di_delta_rho_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_select_mono_delta_rho `_ +`h_apply_select_mono_delta_rho `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_select_mono_delta_rho_diexc `_ +`h_apply_select_mono_delta_rho_diexc `_ + Undocumented + + +`h_apply_select_mono_delta_rho_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_select_mono_delta_rho_monoexc `_ +`h_apply_select_mono_delta_rho_diexcp `_ + Undocumented + + +`h_apply_select_mono_delta_rho_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_select_mono_di_delta_rho `_ +`h_apply_select_mono_di_delta_rho `_ Calls H_apply on the HF determinant and selects all connected single and double excitations (of the same symmetry). Auto-generated by the ``generate_h_apply`` script. -`h_apply_select_mono_di_delta_rho_diexc `_ +`h_apply_select_mono_di_delta_rho_diexc `_ + Undocumented + + +`h_apply_select_mono_di_delta_rho_diexcorg `_ Generate all double excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. -`h_apply_select_mono_di_delta_rho_monoexc `_ +`h_apply_select_mono_di_delta_rho_diexcp `_ + Undocumented + + +`h_apply_select_mono_di_delta_rho_monoexc `_ Generate all single excitations of key_in using the bit masks of holes and particles. Assume N_int is already provided. diff --git a/plugins/MRCC_Utils/README.rst b/plugins/MRCC_Utils/README.rst index 56b519f2..815f0c30 100644 --- a/plugins/MRCC_Utils/README.rst +++ b/plugins/MRCC_Utils/README.rst @@ -374,7 +374,7 @@ Documentation Find A.C = B -`find_triples_and_quadruples `_ +`find_triples_and_quadruples `_ Undocumented @@ -400,6 +400,30 @@ Documentation Undocumented +`generator_idx_a `_ + Undocumented + + +`generator_idx_b `_ + Undocumented + + +`generator_shortcut_a `_ + Undocumented + + +`generator_shortcut_b `_ + Undocumented + + +`generator_sorted_a `_ + Undocumented + + +`generator_sorted_b `_ + Undocumented + + `get_pseudo_inverse `_ Find C = A^-1 diff --git a/plugins/MRCC_Utils/mrcc_dress.irp.f b/plugins/MRCC_Utils/mrcc_dress.irp.f index f427c81f..ac959c38 100644 --- a/plugins/MRCC_Utils/mrcc_dress.irp.f +++ b/plugins/MRCC_Utils/mrcc_dress.irp.f @@ -268,6 +268,21 @@ subroutine mrcc_dress_simple(delta_ij_non_ref_,Ndet_non_ref,i_generator,n_select end + BEGIN_PROVIDER [ integer(bit_kind), gen_det_sorted, (N_int,2,N_det_generators,2) ] +&BEGIN_PROVIDER [ integer, gen_det_shortcut, (0:N_det_generators,2) ] +&BEGIN_PROVIDER [ integer, gen_det_idx, (N_det_generators,2) ] + + !integer(bit_kind) :: aa(N_int,2,N_det_generators), bb(N_int,2,N_det_generators) + + gen_det_sorted(:,:,:,1) = psi_det_generators(:,:,:N_det_generators) + gen_det_sorted(:,:,:,2) = psi_det_generators(:,:,:N_det_generators) + call sort_dets_ab(gen_det_sorted(:,:,:,1), gen_det_idx(0:,1), gen_det_shortcut(:,1), N_det_generators, Nint) + call sort_dets_ba(gen_det_sorted(:,:,:,2), gen_det_idx(0:,2), gen_det_shortcut(:,2), N_det_generators, Nint) + + +END_PROVIDER + + subroutine find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq,N_tq) use bitmasks implicit none @@ -286,9 +301,41 @@ subroutine find_triples_and_quadruples(i_generator,n_selected,det_buffer,Nint,tq integer :: c_ref integer :: connected_to_ref - + + integer :: na, nt, mex, lex, sh,ni,i,j + + !provide generator_sorted_a, generator_sorted_b, generator_shortcut_a, generator_shortcut_b + N_tq = 0 do i=1,N_selected + na = popcnt(iand(det_buffer(1,1,i), not(ishft(1,elec_alpha_num)-1))) + nb = popcnt(iand(det_buffer(1,1,i), not(ishft(1,elec_beta_num)-1))) + if(na > nb) then ! alpha + exite + mex = 1 + lex = 2 + else + mex = 2 + lex = 1 + end if + + do sh = 1,gen_det_shortcut(0,mex) + na = 0 + do i=1,ni + na += popcnt(xor(det_buffer(ni,mex,i), gen_det_sorted(gen_det_shortcut(sh, mex)))) + end do + if(na > 4) then + cycle + end if + do j=get_det_shortcut(sh, mex), gen_det_shortcut(sh+1,mex)-1 + if(gen_get_idx(j,mex + nt = na + do i=1,ni + nt += popcnt(xor(det_buffer(ni,mex,i), gen_det_sorted(gen_det_shortcut(sh, mex)))) + end do + if(na < + end do + end do + c_ref = connected_to_ref(det_buffer(1,1,i),psi_det_generators,Nint, & i_generator,N_det_generators) diff --git a/src/Determinants/H_apply.template.f b/src/Determinants/H_apply.template.f index fe360a96..f90eb0c8 100644 --- a/src/Determinants/H_apply.template.f +++ b/src/Determinants/H_apply.template.f @@ -31,30 +31,30 @@ subroutine $subroutine_diexc(key_in, key_prev, hole_1,particl_1, hole_2, particl end do end do -! GEL D'ELECTRONS -! nt = 0 +! ! GEL D'ELECTRONS +! ! nt = 0 ! do i=1,i_generator-1 ! if(key_in(1,1) == key_prev(1,1,i)) then ! tmp = xor(key_in(1,2), key_prev(1,2,i)) ! if(popcnt(tmp) == 2) then ! ns = 1+trailz(iand(tmp, key_in(1,2))) -! if(status(ns, 2) /= 0) then -! nt += 1 -! end if +! ! if(status(ns, 2) /= 0) then +! ! nt += 1 +! ! end if ! status(ns, 2) = 0 ! end if ! else if(key_in(1,2) == key_prev(1,2,i)) then ! tmp = xor(key_in(1,1), key_prev(1,1,i)) ! if(popcnt(tmp) == 2) then ! ns = 1+trailz(iand(tmp, key_in(1,1))) -! if(status(ns, 1) /= 0) then -! nt += 1 -! end if +! ! if(status(ns, 1) /= 0) then +! ! nt += 1 +! ! end if ! status(ns, 1) = 0 ! end if ! end if ! end do -! print *, "nt", nt, i_generator +! ! print *, "nt", nt, i_generator do sp=1,2 diff --git a/src/Determinants/README.rst b/src/Determinants/README.rst index d12d8426..0f7b1237 100644 --- a/src/Determinants/README.rst +++ b/src/Determinants/README.rst @@ -157,11 +157,11 @@ Documentation of alpha and beta determinants -`davidson_converged `_ +`davidson_converged `_ True if the Davidson algorithm is converged -`davidson_criterion `_ +`davidson_criterion `_ Can be : [ energy | residual | both | wall_time | cpu_time | iterations ] @@ -184,7 +184,7 @@ Documentation Initial guess vectors are not necessarily orthonormal -`davidson_diag_hjj `_ +`davidson_diag_hjj `_ Davidson diagonalization with specific diagonal elements of the H matrix .br H_jj : specific diagonal H matrix elements to diagonalize de Davidson @@ -213,7 +213,7 @@ Documentation Max number of Davidson sizes -`davidson_threshold `_ +`davidson_threshold `_ Can be : [ energy | residual | both | wall_time | cpu_time | iterations ] @@ -229,7 +229,7 @@ Documentation det_coef -`det_connections `_ +`det_connections `_ Build connection proxy between determinants @@ -457,7 +457,7 @@ Documentation H_jj : array of -`h_u_0_org `_ +`h_u_0_org `_ Computes v_0 = H|u_0> .br n : number of determinants @@ -556,7 +556,7 @@ Documentation Energy of the reference bitmask used in Slater rules -`n_con_int `_ +`n_con_int `_ Number of integers to represent the connections between determinants @@ -921,7 +921,11 @@ Documentation for a given couple of hole/particle excitations i. -`sort_dets_ab `_ +`sort_dets_ab `_ + Undocumented + + +`sort_dets_ba `_ Undocumented diff --git a/src/Determinants/davidson.irp.f b/src/Determinants/davidson.irp.f index 626ecec3..c2fce1cf 100644 --- a/src/Determinants/davidson.irp.f +++ b/src/Determinants/davidson.irp.f @@ -120,6 +120,24 @@ subroutine tamiser(key, idx, no, n, Nint, N_key) end do end subroutine +subroutine sort_dets_ba(key, idx, shortcut, N_key, Nint) + use bitmasks + implicit none + integer(bit_kind),intent(inout) :: key(Nint,2,N_key) + integer,intent(out) :: idx(N_key) + integer,intent(out) :: shortcut(0:N_key+1) + integer, intent(in) :: Nint, N_key + integer(bit_kind) :: tmp(Nint, 2,N_key) + + tmp(:,1,:N_key) = key(:,2,:N_key) + tmp(:,2,:N_key) = key(:,1,:N_key) + + call sort_dets_ab(tmp, idx, shortcut, N_key, Nint) + + key(:,1,:N_key) = tmp(:,2,:N_key) + key(:,2,:N_key) = tmp(:,1,:N_key) +end subroutine + subroutine sort_dets_ab(key, idx, shortcut, N_key, Nint) use bitmasks diff --git a/src/Determinants/slater_rules.irp.f b/src/Determinants/slater_rules.irp.f index 72615089..06dcb9b7 100644 --- a/src/Determinants/slater_rules.irp.f +++ b/src/Determinants/slater_rules.irp.f @@ -1251,9 +1251,10 @@ subroutine H_u_0(v_0,u_0,H_jj,n,keys_tmp,shortcut,sort_idx,Nint) allocate(idx(0:n), vt(n)) Vt = 0.d0 v_0 = 0.d0 + !$OMP DO SCHEDULE(dynamic) - + do sh=1,shortcut(0) warp(1,0) = 0 do ii=1,sh!shortcut(0) diff --git a/src/Ezfio_files/README.rst b/src/Ezfio_files/README.rst index 986d7216..a612dcc7 100644 --- a/src/Ezfio_files/README.rst +++ b/src/Ezfio_files/README.rst @@ -203,83 +203,95 @@ Documentation Output file for Bitmask +`output_cas_sd `_ + Output file for CAS_SD + + `output_cpu_time_0 `_ Initial CPU and wall times when printing in the output files -`output_determinants `_ +`output_determinants `_ Output file for Determinants -`output_electrons `_ +`output_electrons `_ Output file for Electrons -`output_ezfio_files `_ +`output_ezfio_files `_ Output file for Ezfio_files -`output_generators_full `_ +`output_full_ci `_ + Output file for Full_CI + + +`output_generators_cas `_ + Output file for Generators_CAS + + +`output_generators_full `_ Output file for Generators_full -`output_hartree_fock `_ +`output_hartree_fock `_ Output file for Hartree_Fock -`output_integrals_bielec `_ +`output_integrals_bielec `_ Output file for Integrals_Bielec -`output_integrals_monoelec `_ +`output_integrals_monoelec `_ Output file for Integrals_Monoelec -`output_mo_basis `_ +`output_mo_basis `_ Output file for MO_Basis -`output_moguess `_ +`output_moguess `_ Output file for MOGuess -`output_mrcc_cassd `_ +`output_mrcc_cassd `_ Output file for MRCC_CASSD -`output_mrcc_utils `_ +`output_mrcc_utils `_ Output file for MRCC_Utils -`output_nuclei `_ +`output_nuclei `_ Output file for Nuclei -`output_perturbation `_ +`output_perturbation `_ Output file for Perturbation -`output_properties `_ +`output_properties `_ Output file for Properties -`output_pseudo `_ +`output_pseudo `_ Output file for Pseudo -`output_psiref_cas `_ +`output_psiref_cas `_ Output file for Psiref_CAS -`output_psiref_utils `_ +`output_psiref_utils `_ Output file for Psiref_Utils -`output_selectors_full `_ +`output_selectors_full `_ Output file for Selectors_full -`output_utils `_ +`output_utils `_ Output file for Utils