9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-11-07 14:03:37 +01:00

get_ints_kpts

This commit is contained in:
Kevin Gasperich 2020-04-10 14:16:57 -05:00
parent 0d50e067bd
commit a00266d1b9

View File

@ -217,6 +217,56 @@ subroutine get_mo_two_e_integrals_complex(j,k,l,sze,out_val,map,map2)
enddo
end
subroutine get_mo_two_e_integrals_kpts(j,ij,kj,k,ik,kk,l,il,kl,sze,out_val,map,map2)
use map_module
implicit none
BEGIN_DOC
! Returns multiple integrals <ij|kl> in the MO basis, all
! i for j,k,l fixed.
END_DOC
integer, intent(in) :: j,k,l, ij,ik,il, kj,kk,kl, sze
complex*16, intent(out) :: out_val(sze)
type(map_type), intent(inout) :: map,map2
integer :: i
complex*16, external :: get_two_e_integral_complex_simple
complex*16, external :: mo_two_e_integral_kpts
integer :: ki,imin0
integer :: ii, ii0
integer*8 :: ii_8, ii0_8
complex(integral_kind) :: tmp
integer(key_kind) :: i1, idx
integer(key_kind) :: p,q,r,s,i2
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache_complex
!DEBUG
! do i=1,sze
! out_val(i) = get_two_e_integral_complex(i,j,k,l,map,map2)
! enddo
! return
!DEBUG
ki = kconserv(kk,kl,kj)
imin0 = (ki-1)*mo_num_per_kpt
ii0 = l-mo_integrals_cache_min
ii0 = ior(ii0, k-mo_integrals_cache_min)
ii0 = ior(ii0, j-mo_integrals_cache_min)
ii0_8 = int(l,8)-mo_integrals_cache_min_8
ii0_8 = ior( shiftl(ii0_8,7), int(k,8)-mo_integrals_cache_min_8)
ii0_8 = ior( shiftl(ii0_8,7), int(j,8)-mo_integrals_cache_min_8)
do i=1,sze
ii = ior(ii0, i+imin0-mo_integrals_cache_min)
if (iand(ii, -128) == 0) then
ii_8 = ior( shiftl(ii0_8,7), int(i+imin0,8)-mo_integrals_cache_min_8)
out_val(i) = mo_integrals_cache_complex(ii_8)
else
out_val(i) = get_two_e_integral_complex_simple(i+imin0,j,k,l,map,map2)
endif
enddo
end
!subroutine get_mo_two_e_integrals_ij_complex(k,l,sze,out_array,map)
! use map_module
! implicit none