mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-30 15:15:38 +01:00
Fixed memory in pt2 slaves
This commit is contained in:
parent
263b724e1a
commit
de1ea90b1e
@ -15,7 +15,7 @@ END_PROVIDER
|
|||||||
e = elec_num - n_core_orb * 2
|
e = elec_num - n_core_orb * 2
|
||||||
pt2_n_tasks_max = 1+min((e*(e-1))/2, int(dsqrt(dble(N_det_selectors)))/4)
|
pt2_n_tasks_max = 1+min((e*(e-1))/2, int(dsqrt(dble(N_det_selectors)))/4)
|
||||||
do i=1,N_det_generators
|
do i=1,N_det_generators
|
||||||
pt2_F(i) = 1 + int(dble(pt2_n_tasks_max)*maxval(dsqrt(dabs(psi_coef_sorted_gen(i,1:N_states)))))
|
pt2_F(i) = 1 + int(dble(pt2_n_tasks_max)*dsqrt(dabs(psi_coef_sorted_gen(i,pt2_stoch_istate))))
|
||||||
enddo
|
enddo
|
||||||
END_PROVIDER
|
END_PROVIDER
|
||||||
|
|
||||||
|
@ -161,19 +161,6 @@ subroutine select_singles_and_doubles(i_generator,hole_mask,particle_mask,fock_d
|
|||||||
PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
|
PROVIDE psi_bilinear_matrix_transp_rows_loc psi_bilinear_matrix_transp_columns
|
||||||
PROVIDE psi_bilinear_matrix_transp_order psi_selectors_coef_transp
|
PROVIDE psi_bilinear_matrix_transp_order psi_selectors_coef_transp
|
||||||
|
|
||||||
ii = min(N_det,(elec_alpha_num*(mo_num-elec_alpha_num))**2)
|
|
||||||
rss = memory_of_double( &
|
|
||||||
2*N_int*2*ii & ! minilist, fullminilist
|
|
||||||
+ N_states*mo_num*mo_num & ! mat
|
|
||||||
) + memory_of_int( &
|
|
||||||
+ 2*ii & ! preinteresting, prefullinteresting,
|
|
||||||
+ 2*ii & ! interesting, fullinteresting
|
|
||||||
+ mo_num*mo_num/2 & ! banned
|
|
||||||
+ mo_num/2 & ! bannedOrb
|
|
||||||
)
|
|
||||||
|
|
||||||
call check_mem(rss,irp_here)
|
|
||||||
|
|
||||||
monoAdo = .true.
|
monoAdo = .true.
|
||||||
monoBdo = .true.
|
monoBdo = .true.
|
||||||
|
|
||||||
|
@ -245,6 +245,42 @@ subroutine run_slave_main
|
|||||||
call mpi_print('Entering OpenMP section')
|
call mpi_print('Entering OpenMP section')
|
||||||
IRP_ENDIF
|
IRP_ENDIF
|
||||||
if (.true.) then
|
if (.true.) then
|
||||||
|
integer :: nproc_target, ii
|
||||||
|
double precision :: mem_collector, mem, rss
|
||||||
|
|
||||||
|
call resident_memory(rss)
|
||||||
|
|
||||||
|
nproc_target = nthreads_pt2
|
||||||
|
ii = min(N_det, (elec_alpha_num*(mo_num-elec_alpha_num))**2)
|
||||||
|
|
||||||
|
do
|
||||||
|
mem = rss + & !
|
||||||
|
nproc_target * 8.d0 * & ! bytes
|
||||||
|
( 0.5d0*pt2_n_tasks_max & ! task_id
|
||||||
|
+ 64.d0*pt2_n_tasks_max & ! task
|
||||||
|
+ 3.d0*pt2_n_tasks_max*N_states & ! pt2, variance, norm
|
||||||
|
+ 1.d0*pt2_n_tasks_max & ! i_generator, subset
|
||||||
|
+ 2.d0*(N_int*2.d0*N_det+ N_det) & ! selection buffers
|
||||||
|
+ 1.d0*(N_int*2.d0*N_det+ N_det) & ! sort/merge selection buffers
|
||||||
|
+ 2.0d0*(ii) & ! preinteresting, interesting,
|
||||||
|
! prefullinteresting, fullinteresting
|
||||||
|
+ 2.0d0*(N_int*2*ii) & ! minilist, fullminilist
|
||||||
|
+ 1.0d0*(N_states*mo_num*mo_num) & ! mat
|
||||||
|
) / 1024.d0**3
|
||||||
|
|
||||||
|
if (nproc_target == 0) then
|
||||||
|
call check_mem(mem,irp_here)
|
||||||
|
nproc_target = 1
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (mem+rss < qp_max_mem) then
|
||||||
|
exit
|
||||||
|
endif
|
||||||
|
|
||||||
|
nproc_target = nproc_target - 1
|
||||||
|
|
||||||
|
enddo
|
||||||
!$OMP PARALLEL PRIVATE(i)
|
!$OMP PARALLEL PRIVATE(i)
|
||||||
i = omp_get_thread_num()
|
i = omp_get_thread_num()
|
||||||
call run_pt2_slave(0,i,pt2_e0_denominator)
|
call run_pt2_slave(0,i,pt2_e0_denominator)
|
||||||
|
Loading…
Reference in New Issue
Block a user