mirror of
https://github.com/LCPQ/quantum_package
synced 2024-11-04 05:03:54 +01:00
Started to introduce coarray Fortran in integrals
This commit is contained in:
parent
762fbd41cc
commit
7fed44c5ad
@ -253,6 +253,11 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
|
|||||||
|
|
||||||
!$OMP DO SCHEDULE(dynamic)
|
!$OMP DO SCHEDULE(dynamic)
|
||||||
do kk=1,lmax
|
do kk=1,lmax
|
||||||
|
IRP_IF COARRAY
|
||||||
|
if (mod(kk-this_image(),num_images()) /= 0) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
IRP_ENDIF
|
||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
@ -316,6 +321,10 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
|
|||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
stop 'Aborting in AO integrals calculation'
|
stop 'Aborting in AO integrals calculation'
|
||||||
endif
|
endif
|
||||||
|
IRP_IF COARRAY
|
||||||
|
write(output_BiInts,*) 'Communicating the map'
|
||||||
|
call communicate_ao_integrals()
|
||||||
|
IRP_ENDIF COARRAY
|
||||||
write(output_BiInts,*) 'Sorting the map'
|
write(output_BiInts,*) 'Sorting the map'
|
||||||
call map_sort(ao_integrals_map)
|
call map_sort(ao_integrals_map)
|
||||||
call cpu_time(cpu_2)
|
call cpu_time(cpu_2)
|
||||||
|
@ -321,6 +321,63 @@ subroutine dump_$ao_integrals(filename)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
IRP_IF COARRAY
|
||||||
|
subroutine communicate_$ao_integrals()
|
||||||
|
use map_module
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Communicate the $ao integrals with co-array
|
||||||
|
END_DOC
|
||||||
|
integer(cache_key_kind), pointer :: key(:)
|
||||||
|
real(integral_kind), pointer :: val(:)
|
||||||
|
integer*8 :: i,j, k, nmax
|
||||||
|
integer*8, save :: n[*]
|
||||||
|
integer :: copy_n
|
||||||
|
|
||||||
|
real(integral_kind), allocatable :: buffer_val(:)[:]
|
||||||
|
integer(cache_key_kind), allocatable :: buffer_key(:)[:]
|
||||||
|
real(integral_kind), allocatable :: copy_val(:)
|
||||||
|
integer*8, allocatable :: copy_key(:)
|
||||||
|
|
||||||
|
n = 0_8
|
||||||
|
do i=0_8,$ao_integrals_map%map_size
|
||||||
|
n = max(n,$ao_integrals_map%map(i)%n_elements)
|
||||||
|
enddo
|
||||||
|
sync all
|
||||||
|
nmax = 0_8
|
||||||
|
do j=1,num_images()
|
||||||
|
nmax = max(nmax,n[j])
|
||||||
|
enddo
|
||||||
|
allocate( buffer_key(nmax)[*], buffer_val(nmax)[*])
|
||||||
|
allocate( copy_key(nmax), copy_val(nmax))
|
||||||
|
do i=0_8,$ao_integrals_map%map_size
|
||||||
|
key => $ao_integrals_map%map(i)%key
|
||||||
|
val => $ao_integrals_map%map(i)%value
|
||||||
|
n = $ao_integrals_map%map(i)%n_elements
|
||||||
|
do j=1,n
|
||||||
|
buffer_key(j) = key(j)
|
||||||
|
buffer_val(j) = val(j)
|
||||||
|
enddo
|
||||||
|
sync all
|
||||||
|
do j=1,num_images()
|
||||||
|
if (j /= this_image()) then
|
||||||
|
copy_n = n[j]
|
||||||
|
do k=1,copy_n
|
||||||
|
copy_val(k) = buffer_val(k)[j]
|
||||||
|
copy_key(k) = buffer_key(k)[j]
|
||||||
|
copy_key(k) = copy_key(k)+ishft(i,-map_shift)
|
||||||
|
enddo
|
||||||
|
! call map_update($ao_integrals_map, copy_key, copy_val, copy_n, 0.d0)
|
||||||
|
call map_append($ao_integrals_map, copy_key, copy_val, copy_n )
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
|
sync all
|
||||||
|
enddo
|
||||||
|
deallocate( buffer_key, buffer_val, copy_val, copy_key)
|
||||||
|
|
||||||
|
end
|
||||||
|
IRP_ENDIF
|
||||||
|
|
||||||
|
|
||||||
integer function load_$ao_integrals(filename)
|
integer function load_$ao_integrals(filename)
|
||||||
implicit none
|
implicit none
|
||||||
|
@ -111,6 +111,11 @@ subroutine add_integrals_to_map(mask_ijkl)
|
|||||||
!$ thread_num = omp_get_thread_num()
|
!$ thread_num = omp_get_thread_num()
|
||||||
!$OMP DO SCHEDULE(guided)
|
!$OMP DO SCHEDULE(guided)
|
||||||
do l1 = 1,ao_num
|
do l1 = 1,ao_num
|
||||||
|
IRP_IF COARRAY
|
||||||
|
if (mod(l1-this_image(),num_images()) /= 0 ) then
|
||||||
|
cycle
|
||||||
|
endif
|
||||||
|
IRP_ENDIF
|
||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
@ -275,6 +280,10 @@ subroutine add_integrals_to_map(mask_ijkl)
|
|||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
stop 'Aborting in MO integrals calculation'
|
stop 'Aborting in MO integrals calculation'
|
||||||
endif
|
endif
|
||||||
|
IRP_IF COARRAY
|
||||||
|
write(output_BiInts,*) 'Communicating the map'
|
||||||
|
call communicate_mo_integrals()
|
||||||
|
IRP_ENDIF
|
||||||
call map_unique(mo_integrals_map)
|
call map_unique(mo_integrals_map)
|
||||||
|
|
||||||
call wall_time(wall_2)
|
call wall_time(wall_2)
|
||||||
|
@ -22,7 +22,15 @@ BEGIN_SHELL [ /bin/bash ]
|
|||||||
PROVIDE output_wall_time_0 output_cpu_time_0
|
PROVIDE output_wall_time_0 output_cpu_time_0
|
||||||
integer :: getUnitAndOpen
|
integer :: getUnitAndOpen
|
||||||
call ezfio_set_output_empty(.False.)
|
call ezfio_set_output_empty(.False.)
|
||||||
|
IRP_IF COARRAY
|
||||||
|
if (this_image() == 1) then
|
||||||
output_$NAME = getUnitAndOpen(trim(ezfio_filename)//'/output/'//'$NAME.rst','a')
|
output_$NAME = getUnitAndOpen(trim(ezfio_filename)//'/output/'//'$NAME.rst','a')
|
||||||
|
else
|
||||||
|
output_$NAME = getUnitAndOpen('/dev/null','w')
|
||||||
|
endif
|
||||||
|
IRP_ELSE
|
||||||
|
output_$NAME = getUnitAndOpen(trim(ezfio_filename)//'/output/'//'$NAME.rst','a')
|
||||||
|
IRP_ENDIF
|
||||||
write(output_$NAME,'(A)') &
|
write(output_$NAME,'(A)') &
|
||||||
'--------------------------------------------------------------------------------'
|
'--------------------------------------------------------------------------------'
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
@ -48,3 +48,14 @@ BEGIN_PROVIDER [ double precision, select_max, (1) ]
|
|||||||
END_DOC
|
END_DOC
|
||||||
select_max(1) = huge(1.d0)
|
select_max(1) = huge(1.d0)
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ integer, size_select_max ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Size of select_max
|
||||||
|
END_DOC
|
||||||
|
size_select_max = 1
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user