9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2025-04-26 02:04:45 +02:00

Accelerated cholesky integrals in pt2

This commit is contained in:
Anthony Scemama 2025-01-21 17:48:37 +01:00
parent 33ff78d7b3
commit 1a5f0b3e38

View File

@ -143,7 +143,7 @@ double precision function get_two_e_integral(i,j,k,l,map)
END_DOC END_DOC
integer, intent(in) :: i,j,k,l integer, intent(in) :: i,j,k,l
integer(key_kind) :: idx integer(key_kind) :: idx
integer :: ii integer :: ii, kk
type(map_type), intent(inout) :: map type(map_type), intent(inout) :: map
real(integral_kind) :: tmp real(integral_kind) :: tmp
@ -177,10 +177,10 @@ double precision function get_two_e_integral(i,j,k,l,map)
if (do_mo_cholesky) then if (do_mo_cholesky) then
double precision, external :: ddot get_two_e_integral = 0.d0
get_two_e_integral = ddot(cholesky_mo_num, cholesky_mo_transp(1,i,k), 1, cholesky_mo_transp(1,j,l), 1) do kk=1,cholesky_mo_num
! double precision, external :: get_from_mo_cholesky_cache get_two_e_integral = get_two_e_integral + cholesky_mo_transp(kk,i,k)*cholesky_mo_transp(kk,i,l)
! get_two_e_integral = get_from_mo_cholesky_cache(i,j,k,l,.False.) enddo
else else
@ -516,11 +516,39 @@ subroutine get_mo_two_e_integrals_exch_ii(k,l,sze,out_val,map)
if (do_mo_cholesky) then if (do_mo_cholesky) then
double precision, external :: ddot if ( (k>=mo_integrals_cache_min).and.(k<=mo_integrals_cache_max).and. &
do i=1,sze (l>=mo_integrals_cache_min).and.(l<=mo_integrals_cache_max) ) then
out_val(i) = ddot(cholesky_mo_num, cholesky_mo_transp(1,i,k), 1, &
cholesky_mo_transp(1,i,l), 1) integer :: kk
enddo
do i=1,mo_integrals_cache_min-1
out_val(i) = 0.d0
do kk=1,cholesky_mo_num
out_val(i) = out_val(i) + cholesky_mo_transp(kk,i,k)*cholesky_mo_transp(kk,i,l)
enddo
enddo
do i=mo_integrals_cache_min,mo_integrals_cache_max
out_val(i) = get_two_e_integral_cache(i,i,k,l)
enddo
do i=mo_integrals_cache_max, sze
out_val(i) = 0.d0
do kk=1,cholesky_mo_num
out_val(i) = out_val(i) + cholesky_mo_transp(kk,i,k)*cholesky_mo_transp(kk,i,l)
enddo
enddo
else
do i=1,sze
out_val(i) = 0.d0
do kk=1,cholesky_mo_num
out_val(i) = out_val(i) + cholesky_mo_transp(kk,i,k)*cholesky_mo_transp(kk,i,l)
enddo
enddo
endif
else else