From df2295206fa8f921baaa931cf9c0b66ed830d5c3 Mon Sep 17 00:00:00 2001 From: Kevin Gasperich Date: Thu, 6 Feb 2020 13:59:02 -0600 Subject: [PATCH] cleaning up 2e ints; added placeholders for missing periodic functions --- src/ao_two_e_ints/map_integrals_complex.irp.f | 16 +- .../mo_bi_integrals_complex.irp.f | 310 ------------------ src/utils_periodic/qp2-pbc-diff.txt | 34 +- 3 files changed, 36 insertions(+), 324 deletions(-) diff --git a/src/ao_two_e_ints/map_integrals_complex.irp.f b/src/ao_two_e_ints/map_integrals_complex.irp.f index 611bc4cb..3359d535 100644 --- a/src/ao_two_e_ints/map_integrals_complex.irp.f +++ b/src/ao_two_e_ints/map_integrals_complex.irp.f @@ -424,7 +424,9 @@ subroutine get_ao_two_e_integrals_non_zero_periodic(j,k,l,sze,out_val,out_val_in end -!subroutine get_ao_two_e_integrals_non_zero_jl_periodic(j,l,thresh,sze_max,sze,out_val,out_val_index,non_zero_int) +subroutine get_ao_two_e_integrals_non_zero_jl_periodic(j,l,thresh,sze_max,sze,out_val,out_val_index,non_zero_int) + print*,'not implemented for periodic',irp_here + stop -1 ! use map_module ! implicit none ! BEGIN_DOC @@ -469,11 +471,13 @@ end ! out_val(non_zero_int) = tmp ! enddo ! enddo -! -!end + +end -!subroutine get_ao_two_e_integrals_non_zero_jl_from_list_periodic(j,l,thresh,list,n_list,sze_max,out_val,out_val_index,non_zero_int) +subroutine get_ao_two_e_integrals_non_zero_jl_from_list_periodic(j,l,thresh,list,n_list,sze_max,out_val,out_val_index,non_zero_int) + print*,'not implemented for periodic',irp_here + stop -1 ! use map_module ! implicit none ! BEGIN_DOC @@ -520,8 +524,8 @@ end ! out_val_index(2,non_zero_int) = k ! out_val(non_zero_int) = tmp ! enddo -! -!end + +end subroutine insert_into_ao_integrals_map_2(n_integrals,buffer_i, buffer_values) use map_module diff --git a/src/mo_two_e_ints/mo_bi_integrals_complex.irp.f b/src/mo_two_e_ints/mo_bi_integrals_complex.irp.f index 8d1dd9f0..632ff591 100644 --- a/src/mo_two_e_ints/mo_bi_integrals_complex.irp.f +++ b/src/mo_two_e_ints/mo_bi_integrals_complex.irp.f @@ -851,313 +851,3 @@ subroutine add_integrals_to_map_no_exit_34_complex(mask_ijkl) end - - - -! BEGIN_PROVIDER [ double precision, mo_two_e_integral_jj_from_ao, (mo_num,mo_num) ] -!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_exchange_from_ao, (mo_num,mo_num) ] -!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_anti_from_ao, (mo_num,mo_num) ] -! implicit none -! BEGIN_DOC -! ! mo_two_e_integral_jj_from_ao(i,j) = J_ij -! ! mo_two_e_integrals_jj_exchange_from_ao(i,j) = J_ij -! ! mo_two_e_integrals_jj_anti_from_ao(i,j) = J_ij - K_ij -! END_DOC -! -! integer :: i,j,p,q,r,s -! double precision :: c -! real(integral_kind) :: integral -! integer :: n, pp -! real(integral_kind), allocatable :: int_value(:) -! integer, allocatable :: int_idx(:) -! -! double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:) -! -! if (.not.do_direct_integrals) then -! PROVIDE ao_two_e_integrals_in_map mo_coef -! endif -! -! mo_two_e_integral_jj_from_ao = 0.d0 -! mo_two_e_integrals_jj_exchange_from_ao = 0.d0 -! -! !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr -! -! -! !$OMP PARALLEL DEFAULT(NONE) & -! !$OMP PRIVATE (i,j,p,q,r,s,integral,c,n,pp,int_value,int_idx, & -! !$OMP iqrs, iqsr,iqri,iqis) & -! !$OMP SHARED(mo_num,mo_coef_transp,ao_num, & -! !$OMP ao_integrals_threshold,do_direct_integrals) & -! !$OMP REDUCTION(+:mo_two_e_integral_jj_from_ao,mo_two_e_integrals_jj_exchange_from_ao) -! -! allocate( int_value(ao_num), int_idx(ao_num), & -! iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num), & -! iqsr(mo_num,ao_num) ) -! -! !$OMP DO SCHEDULE (guided) -! do s=1,ao_num -! do q=1,ao_num -! -! do j=1,ao_num -! do i=1,mo_num -! iqrs(i,j) = 0.d0 -! iqsr(i,j) = 0.d0 -! enddo -! enddo -! -! if (do_direct_integrals) then -! double precision :: ao_two_e_integral -! do r=1,ao_num -! call compute_ao_two_e_integrals(q,r,s,ao_num,int_value) -! do p=1,ao_num -! integral = int_value(p) -! if (abs(integral) > ao_integrals_threshold) then -! do i=1,mo_num -! iqrs(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! call compute_ao_two_e_integrals(q,s,r,ao_num,int_value) -! do p=1,ao_num -! integral = int_value(p) -! if (abs(integral) > ao_integrals_threshold) then -! do i=1,mo_num -! iqsr(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! enddo -! -! else -! -! do r=1,ao_num -! call get_ao_two_e_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n) -! do pp=1,n -! p = int_idx(pp) -! integral = int_value(pp) -! if (abs(integral) > ao_integrals_threshold) then -! do i=1,mo_num -! iqrs(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! call get_ao_two_e_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n) -! do pp=1,n -! p = int_idx(pp) -! integral = int_value(pp) -! if (abs(integral) > ao_integrals_threshold) then -! do i=1,mo_num -! iqsr(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! enddo -! endif -! iqis = 0.d0 -! iqri = 0.d0 -! do r=1,ao_num -! do i=1,mo_num -! iqis(i) += mo_coef_transp(i,r) * iqrs(i,r) -! iqri(i) += mo_coef_transp(i,r) * iqsr(i,r) -! enddo -! enddo -! do i=1,mo_num -! do j=1,mo_num -! c = mo_coef_transp(j,q)*mo_coef_transp(j,s) -! mo_two_e_integral_jj_from_ao(j,i) += c * iqis(i) -! mo_two_e_integrals_jj_exchange_from_ao(j,i) += c * iqri(i) -! enddo -! enddo -! -! enddo -! enddo -! !$OMP END DO NOWAIT -! deallocate(iqrs,iqsr,int_value,int_idx) -! !$OMP END PARALLEL -! -! mo_two_e_integrals_jj_anti_from_ao = mo_two_e_integral_jj_from_ao - mo_two_e_integrals_jj_exchange_from_ao -! -! -!END_PROVIDER -! -! BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_from_ao, (mo_num,mo_num) ] -!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_exchange_from_ao, (mo_num,mo_num) ] -!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_vv_anti_from_ao, (mo_num,mo_num) ] -! implicit none -! BEGIN_DOC -! ! mo_two_e_integrals_vv_from_ao(i,j) = J_ij -! ! mo_two_e_integrals_vv_exchange_from_ao(i,j) = J_ij -! ! mo_two_e_integrals_vv_anti_from_ao(i,j) = J_ij - K_ij -! ! but only for the virtual orbitals -! END_DOC -! -! integer :: i,j,p,q,r,s -! integer :: i0,j0 -! double precision :: c -! real(integral_kind) :: integral -! integer :: n, pp -! real(integral_kind), allocatable :: int_value(:) -! integer, allocatable :: int_idx(:) -! -! double precision, allocatable :: iqrs(:,:), iqsr(:,:), iqis(:), iqri(:) -! -! if (.not.do_direct_integrals) then -! PROVIDE ao_two_e_integrals_in_map mo_coef -! endif -! -! mo_two_e_integrals_vv_from_ao = 0.d0 -! mo_two_e_integrals_vv_exchange_from_ao = 0.d0 -! -! !DIR$ ATTRIBUTES ALIGN : $IRP_ALIGN :: iqrs, iqsr -! -! -! !$OMP PARALLEL DEFAULT(NONE) & -! !$OMP PRIVATE (i0,j0,i,j,p,q,r,s,integral,c,n,pp,int_value,int_idx, & -! !$OMP iqrs, iqsr,iqri,iqis) & -! !$OMP SHARED(n_virt_orb,mo_num,list_virt,mo_coef_transp,ao_num, & -! !$OMP ao_integrals_threshold,do_direct_integrals) & -! !$OMP REDUCTION(+:mo_two_e_integrals_vv_from_ao,mo_two_e_integrals_vv_exchange_from_ao) -! -! allocate( int_value(ao_num), int_idx(ao_num), & -! iqrs(mo_num,ao_num), iqis(mo_num), iqri(mo_num),& -! iqsr(mo_num,ao_num) ) -! -! !$OMP DO SCHEDULE (guided) -! do s=1,ao_num -! do q=1,ao_num -! -! do j=1,ao_num -! do i0=1,n_virt_orb -! i = list_virt(i0) -! iqrs(i,j) = 0.d0 -! iqsr(i,j) = 0.d0 -! enddo -! enddo -! -! if (do_direct_integrals) then -! double precision :: ao_two_e_integral -! do r=1,ao_num -! call compute_ao_two_e_integrals(q,r,s,ao_num,int_value) -! do p=1,ao_num -! integral = int_value(p) -! if (abs(integral) > ao_integrals_threshold) then -! do i0=1,n_virt_orb -! i = list_virt(i0) -! iqrs(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! call compute_ao_two_e_integrals(q,s,r,ao_num,int_value) -! do p=1,ao_num -! integral = int_value(p) -! if (abs(integral) > ao_integrals_threshold) then -! do i0=1,n_virt_orb -! i =list_virt(i0) -! iqsr(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! enddo -! -! else -! -! do r=1,ao_num -! call get_ao_two_e_integrals_non_zero(q,r,s,ao_num,int_value,int_idx,n) -! do pp=1,n -! p = int_idx(pp) -! integral = int_value(pp) -! if (abs(integral) > ao_integrals_threshold) then -! do i0=1,n_virt_orb -! i =list_virt(i0) -! iqrs(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! call get_ao_two_e_integrals_non_zero(q,s,r,ao_num,int_value,int_idx,n) -! do pp=1,n -! p = int_idx(pp) -! integral = int_value(pp) -! if (abs(integral) > ao_integrals_threshold) then -! do i0=1,n_virt_orb -! i = list_virt(i0) -! iqsr(i,r) += mo_coef_transp(i,p) * integral -! enddo -! endif -! enddo -! enddo -! endif -! iqis = 0.d0 -! iqri = 0.d0 -! do r=1,ao_num -! do i0=1,n_virt_orb -! i = list_virt(i0) -! iqis(i) += mo_coef_transp(i,r) * iqrs(i,r) -! iqri(i) += mo_coef_transp(i,r) * iqsr(i,r) -! enddo -! enddo -! do i0=1,n_virt_orb -! i= list_virt(i0) -! do j0=1,n_virt_orb -! j = list_virt(j0) -! c = mo_coef_transp(j,q)*mo_coef_transp(j,s) -! mo_two_e_integrals_vv_from_ao(j,i) += c * iqis(i) -! mo_two_e_integrals_vv_exchange_from_ao(j,i) += c * iqri(i) -! enddo -! enddo -! -! enddo -! enddo -! !$OMP END DO NOWAIT -! deallocate(iqrs,iqsr,int_value,int_idx) -! !$OMP END PARALLEL -! -! mo_two_e_integrals_vv_anti_from_ao = mo_two_e_integrals_vv_from_ao - mo_two_e_integrals_vv_exchange_from_ao -! ! print*, '**********' -! ! do i0 =1, n_virt_orb -! ! i = list_virt(i0) -! ! print*, mo_two_e_integrals_vv_from_ao(i,i) -! ! enddo -! ! print*, '**********' -! -! -!END_PROVIDER -! -! -! BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj, (mo_num,mo_num) ] -!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_exchange, (mo_num,mo_num) ] -!&BEGIN_PROVIDER [ double precision, mo_two_e_integrals_jj_anti, (mo_num,mo_num) ] -! implicit none -! BEGIN_DOC -! ! mo_two_e_integrals_jj(i,j) = J_ij -! ! mo_two_e_integrals_jj_exchange(i,j) = K_ij -! ! mo_two_e_integrals_jj_anti(i,j) = J_ij - K_ij -! END_DOC -! -! integer :: i,j -! double precision :: get_two_e_integral -! -! PROVIDE mo_two_e_integrals_in_map -! mo_two_e_integrals_jj = 0.d0 -! mo_two_e_integrals_jj_exchange = 0.d0 -! -! do j=1,mo_num -! do i=1,mo_num -! mo_two_e_integrals_jj(i,j) = get_two_e_integral(i,j,i,j,mo_integrals_map) -! mo_two_e_integrals_jj_exchange(i,j) = get_two_e_integral(i,j,j,i,mo_integrals_map) -! mo_two_e_integrals_jj_anti(i,j) = mo_two_e_integrals_jj(i,j) - mo_two_e_integrals_jj_exchange(i,j) -! enddo -! enddo -! -!END_PROVIDER -! -! -!subroutine clear_mo_map -! implicit none -! BEGIN_DOC -! ! Frees the memory of the MO map -! END_DOC -! call map_deinit(mo_integrals_map) -! FREE mo_integrals_map mo_two_e_integrals_jj mo_two_e_integrals_jj_anti -! FREE mo_two_e_integrals_jj_exchange mo_two_e_integrals_in_map -!end -! diff --git a/src/utils_periodic/qp2-pbc-diff.txt b/src/utils_periodic/qp2-pbc-diff.txt index 15bc6cfc..9bde53fc 100644 --- a/src/utils_periodic/qp2-pbc-diff.txt +++ b/src/utils_periodic/qp2-pbc-diff.txt @@ -30,28 +30,46 @@ MO 2e ints: mapping: changed so that all real ints (Jij, Kij, Jii) are in map2 , , + some places in code assume that map1 ints can be real + (can remove once we are sure we like this mapping) +translational symmetry: + kconserv array gives quartets which are symmetry-allowed + k_i + k_j = k_k + k_l + I + J = K + L + kconserv(I,J,K)=L TODO: symmetry - add provider for kconserv restructure arrays? mo coef and mo 1e ints already separate from real part of code (easy to add extra dimension) ao 1e ints could also be handled in same way as mo 1e ints -ao_ints - ao_overlap_abs for complex - ao_integrals_n_e_per_atom_complex? - not implemented for periodic: +ao_one_e_ints + ao_overlap_abs for complex? vs abs() + ao_integrals_n_e_per_atom_complex (should be simple, but currently we only use dummy nuclei) + +ao_two_e_ints (todo) + get_ao_two_e_integrals_non_zero_periodic + get_ao_two_e_integrals_non_zero_jl_periodic + get_ao_two_e_integrals_non_zero_jl_from_list_periodic + +mo_two_e_ints (todo) + get_mo_two_e_integrals_ij_periodic + add_integrals_to_map_complex + add_integrals_to_map_three_indices_complex + add_integrals_to_map_no_exit_34_complex + + +later: + calculation of pbc integrals in QP ao_two_e_integral ao_two_e_integral_schwartz_accel compute_ao_two_e_integrals [ double precision, ao_two_e_integral_schwartz,(ao_num,ao_num) ] compute_ao_integrals_jl + ... - -mo_two_e_ints - incomplete NOTES: