9
1
mirror of https://github.com/QuantumPackage/qp2.git synced 2024-12-21 11:03:29 +01:00

Enabled direct integrals in Cholesky

This commit is contained in:
Anthony Scemama 2023-07-06 17:51:59 +02:00
parent a2c4a74d92
commit e35f847341
4 changed files with 38 additions and 19 deletions

View File

@ -43,11 +43,15 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
double precision, external :: get_ao_two_e_integral double precision, external :: get_ao_two_e_integral
logical, external :: ao_two_e_integral_zero logical, external :: ao_two_e_integral_zero
double precision, external :: ao_two_e_integral
integer :: block_size, iblock, ierr integer :: block_size, iblock, ierr
integer(omp_lock_kind), allocatable :: lock(:) integer(omp_lock_kind), allocatable :: lock(:)
PROVIDE nucl_coord
PROVIDE ao_two_e_integrals_in_map if (.not.do_direct_integrals) then
PROVIDE ao_two_e_integrals_in_map
endif
deallocate(cholesky_ao) deallocate(cholesky_ao)
ndim = ao_num*ao_num ndim = ao_num*ao_num
@ -85,13 +89,22 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
enddo enddo
enddo enddo
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(i) if (do_direct_integrals) then
do i=1,ndim !$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(i)
D(i) = get_ao_two_e_integral(addr(1,i), addr(1,i), & do i=1,ndim
addr(2,i), addr(2,i), & D(i) = ao_two_e_integral(addr(1,i), addr(2,i), &
ao_integrals_map) addr(1,i), addr(2,i))
enddo enddo
!$OMP END PARALLEL DO !$OMP END PARALLEL DO
else
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(i)
do i=1,ndim
D(i) = get_ao_two_e_integral(addr(1,i), addr(1,i), &
addr(2,i), addr(2,i), &
ao_integrals_map)
enddo
!$OMP END PARALLEL DO
endif
Dmax = maxval(D) Dmax = maxval(D)
@ -196,8 +209,13 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
if ((0 < q).and.(q < k)) cycle if ((0 < q).and.(q < k)) cycle
if (.not.ao_two_e_integral_zero( addr(1,Lset(k)), addr(1,Dset(m)), & if (.not.ao_two_e_integral_zero( addr(1,Lset(k)), addr(1,Dset(m)), &
addr(2,Lset(k)), addr(2,Dset(m)) ) ) then addr(2,Lset(k)), addr(2,Dset(m)) ) ) then
Delta(k,m) = get_ao_two_e_integral( addr(1,Lset(k)), addr(1,Dset(m)), & if (do_direct_integrals) then
Delta(k,m) = ao_two_e_integral(addr(1,Lset(k)), addr(2,Lset(k)), &
addr(1,Dset(m)), addr(2,Dset(m)))
else
Delta(k,m) = get_ao_two_e_integral( addr(1,Lset(k)), addr(1,Dset(m)), &
addr(2,Lset(k)), addr(2,Dset(m)), ao_integrals_map) addr(2,Lset(k)), addr(2,Dset(m)), ao_integrals_map)
endif
if (q /= 0) Delta(q,m) = Delta(k,m) if (q /= 0) Delta(q,m) = Delta(k,m)
endif endif
enddo enddo
@ -218,8 +236,13 @@ BEGIN_PROVIDER [ integer, cholesky_ao_num ]
if ((0 < q).and.(q < p)) cycle if ((0 < q).and.(q < p)) cycle
if (.not.ao_two_e_integral_zero( addr(1,Dset(k)), addr(1,Dset(m)), & if (.not.ao_two_e_integral_zero( addr(1,Dset(k)), addr(1,Dset(m)), &
addr(2,Dset(k)), addr(2,Dset(m)) ) ) then addr(2,Dset(k)), addr(2,Dset(m)) ) ) then
Delta(p,m) = get_ao_two_e_integral( addr(1,Dset(k)), addr(1,Dset(m)), & if (do_direct_integrals) then
Delta(p,m) = ao_two_e_integral(addr(1,Dset(k)), addr(2,Dset(k)), &
addr(1,Dset(m)), addr(2,Dset(m)))
else
Delta(p,m) = get_ao_two_e_integral( addr(1,Dset(k)), addr(1,Dset(m)), &
addr(2,Dset(k)), addr(2,Dset(m)), ao_integrals_map) addr(2,Dset(k)), addr(2,Dset(m)), ao_integrals_map)
endif
if (q /= 0) Delta(q,m) = Delta(p,m) if (q /= 0) Delta(q,m) = Delta(p,m)
if (j /= 0) Delta(p,j) = Delta(p,m) if (j /= 0) Delta(p,j) = Delta(p,m)
if (q*j /= 0) Delta(q,j) = Delta(p,m) if (q*j /= 0) Delta(q,j) = Delta(p,m)

View File

@ -1232,7 +1232,8 @@ subroutine compute_ao_integrals_jl(j,l,n_integrals,buffer_i,buffer_value)
logical, external :: ao_two_e_integral_zero logical, external :: ao_two_e_integral_zero
integer :: i,k integer :: i,k
double precision :: ao_two_e_integral,cpu_1,cpu_2, wall_1, wall_2 double precision, external :: ao_two_e_integral
double precision :: cpu_1,cpu_2, wall_1, wall_2
double precision :: integral, wall_0 double precision :: integral, wall_0
double precision :: thr double precision :: thr
integer :: kk, m, j1, i1 integer :: kk, m, j1, i1

View File

@ -37,7 +37,9 @@ BEGIN_PROVIDER [ logical, mo_two_e_integrals_in_map ]
call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_map) call map_load_from_disk(trim(ezfio_filename)//'/work/mo_ints',mo_integrals_map)
print*, 'MO integrals provided' print*, 'MO integrals provided'
return return
else endif
if (.not. do_direct_integrals) then
PROVIDE ao_two_e_integrals_in_map PROVIDE ao_two_e_integrals_in_map
endif endif

View File

@ -14,13 +14,6 @@ program four_idx_transform
io_mo_two_e_integrals = 'Write' io_mo_two_e_integrals = 'Write'
SOFT_TOUCH io_mo_two_e_integrals SOFT_TOUCH io_mo_two_e_integrals
if (.true.) then
PROVIDE ao_two_e_integrals_in_map
endif
if (do_ao_cholesky) then
PROVIDE cholesky_mo_transp
FREE cholesky_ao
endif
if (.true.) then if (.true.) then
PROVIDE mo_two_e_integrals_in_map PROVIDE mo_two_e_integrals_in_map
endif endif