10
0
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-07-16 08:00:37 +02:00

Accelerated cache-map access

This commit is contained in:
Anthony Scemama 2024-06-11 12:12:14 +02:00
parent 47b8070339
commit a4516fb8f9

View File

@ -200,31 +200,31 @@ subroutine get_mo_two_e_integrals(j,k,l,sze,out_val,map)
PROVIDE mo_two_e_integrals_in_map mo_integrals_cache PROVIDE mo_two_e_integrals_in_map mo_integrals_cache
out_val(1:sze) = 0.d0
if (banned_excitation(j,l)) then if (banned_excitation(j,l)) then
out_val(1:sze) = 0.d0
return return
endif endif
ii0 = l-mo_integrals_cache_min if (mo_integrals_cache_min > 1) then
ii0 = ior(ii0, k-mo_integrals_cache_min)
ii0 = ior(ii0, j-mo_integrals_cache_min)
integer :: ii0, ii0_8, ii_8 if (do_mo_cholesky) then
ii0_8 = l-mo_integrals_cache_min
ii0_8 = ior( shiftl(ii0_8,mo_integrals_cache_shift), k-mo_integrals_cache_min) call dgemv('T', cholesky_mo_num, mo_integrals_cache_min-1, 1.d0, &
ii0_8 = ior( shiftl(ii0_8,mo_integrals_cache_shift), j-mo_integrals_cache_min) cholesky_mo_transp(1,1,k), cholesky_mo_num, &
cholesky_mo_transp(1,j,l), 1, 0.d0, &
out_val, 1)
else
q = min(j,l) q = min(j,l)
s = max(j,l) s = max(j,l)
q = q+shiftr(s*s-s,1) q = q+shiftr(s*s-s,1)
do i=1,sze do i=1,mo_integrals_cache_min-1
if (banned_excitation(i,k)) cycle if (banned_excitation(i,k)) then
ii = ior(ii0, i-mo_integrals_cache_min) out_val(i) = 0.d0
if (iand(ii, -mo_integrals_cache_size) == 0) then cycle
ii_8 = ior( shiftl(ii0_8,mo_integrals_cache_shift), i-mo_integrals_cache_min) endif
out_val(i) = mo_integrals_cache(ii_8)
else
p = min(i,k) p = min(i,k)
r = max(i,k) r = max(i,k)
p = p+shiftr(r*r-r,1) p = p+shiftr(r*r-r,1)
@ -234,94 +234,54 @@ subroutine get_mo_two_e_integrals(j,k,l,sze,out_val,map)
!DIR$ FORCEINLINE !DIR$ FORCEINLINE
call map_get(map,idx,tmp) call map_get(map,idx,tmp)
out_val(i) = dble(tmp) out_val(i) = dble(tmp)
endif
enddo enddo
! if (banned_excitation(j,l)) then endif
! out_val(1:sze) = 0.d0
! return endif
! endif
!
! if (mo_integrals_cache_min > 1) then ii = l-mo_integrals_cache_min
! ii = ior( shiftl(ii, mo_integrals_cache_shift), k-mo_integrals_cache_min)
! if (do_mo_cholesky) then ii = ior( shiftl(ii, mo_integrals_cache_shift), j-mo_integrals_cache_min)
! ii = shiftl(ii, mo_integrals_cache_shift)
! call dgemv('T', cholesky_mo_num, mo_integrals_cache_min-1, 1.d0, & out_val(mo_integrals_cache_min:mo_integrals_cache_max) = &
! cholesky_mo_transp(1,1,k), cholesky_mo_num, & mo_integrals_cache(ii:ii+mo_integrals_cache_max-mo_integrals_cache_min)
! cholesky_mo_transp(1,j,l), 1, 0.d0, &
! out_val, 1) if (mo_integrals_cache_max < mo_num) then
!
! else if (do_mo_cholesky) then
!
! q = min(j,l) call dgemv('T', cholesky_mo_num, mo_num-mo_integrals_cache_max, 1.d0, &
! s = max(j,l) cholesky_mo_transp(1,mo_integrals_cache_max+1,k), cholesky_mo_num, &
! q = q+shiftr(s*s-s,1) cholesky_mo_transp(1,j,l), 1, 0.d0, &
! out_val(mo_integrals_cache_max+1), 1)
! do i=1,mo_integrals_cache_min-1
! if (banned_excitation(i,k)) then else
! out_val(i) = 0.d0
! cycle q = min(j,l)
! endif s = max(j,l)
! p = min(i,k) q = q+shiftr(s*s-s,1)
! r = max(i,k)
! p = p+shiftr(r*r-r,1) do i=mo_integrals_cache_max+1,mo_num
! i1 = min(p,q) if (banned_excitation(i,k)) then
! i2 = max(p,q) out_val(i) = 0.d0
! idx = i1+shiftr(i2*i2-i2,1) cycle
! !DIR$ FORCEINLINE endif
! call map_get(map,idx,tmp) p = min(i,k)
! out_val(i) = dble(tmp) r = max(i,k)
! enddo p = p+shiftr(r*r-r,1)
! i1 = min(p,q)
! endif i2 = max(p,q)
! idx = i1+shiftr(i2*i2-i2,1)
! endif !DIR$ FORCEINLINE
! call map_get(map,idx,tmp)
! out_val(i) = dble(tmp)
! ii = l-mo_integrals_cache_min enddo
! ii = ior( shiftl(ii, mo_integrals_cache_shift), k-mo_integrals_cache_min)
! ii = ior( shiftl(ii, mo_integrals_cache_shift), j-mo_integrals_cache_min) endif
! ii = shiftl(ii, mo_integrals_cache_shift)
! do i=mo_integrals_cache_min, mo_integrals_cache_max endif
! ii = ii+1
! out_val(i) = mo_integrals_cache(ii)
! enddo
!
!
! if (mo_integrals_cache_max < mo_num) then
!
! if (do_mo_cholesky) then
!
! call dgemv('T', cholesky_mo_num, mo_num-mo_integrals_cache_max, 1.d0, &
! cholesky_mo_transp(1,mo_integrals_cache_max+1,k), cholesky_mo_num, &
! cholesky_mo_transp(1,j,l), 1, 0.d0, &
! out_val(mo_integrals_cache_max+1), 1)
!
! else
!
! q = min(j,l)
! s = max(j,l)
! q = q+shiftr(s*s-s,1)
!
! do i=mo_integrals_cache_max+1,mo_num
! if (banned_excitation(i,k)) then
! out_val(i) = 0.d0
! cycle
! endif
! p = min(i,k)
! r = max(i,k)
! p = p+shiftr(r*r-r,1)
! i1 = min(p,q)
! i2 = max(p,q)
! idx = i1+shiftr(i2*i2-i2,1)
! !DIR$ FORCEINLINE
! call map_get(map,idx,tmp)
! out_val(i) = dble(tmp)
! enddo
!
! endif
!
! endif
end end