mirror of
https://github.com/LCPQ/quantum_package
synced 2024-08-25 05:51:46 +02:00
Added progress bar
This commit is contained in:
parent
444c45a06b
commit
9a439a25ac
@ -197,6 +197,7 @@ class H_apply(object):
|
|||||||
wall_1-wall_0
|
wall_1-wall_0
|
||||||
pt2_old(k) = pt2(k)
|
pt2_old(k) = pt2(k)
|
||||||
enddo
|
enddo
|
||||||
|
progress_value = norm_psi(1)
|
||||||
"""
|
"""
|
||||||
self.data["omp_parallel"] += """&
|
self.data["omp_parallel"] += """&
|
||||||
!$OMP SHARED(N_st) PRIVATE(e_2_pert_buffer,coef_pert_buffer) &
|
!$OMP SHARED(N_st) PRIVATE(e_2_pert_buffer,coef_pert_buffer) &
|
||||||
@ -238,6 +239,7 @@ class H_apply(object):
|
|||||||
norm_psi(k) = norm_psi(k) + psi_coef(i_generator,k)*psi_coef(i_generator,k)
|
norm_psi(k) = norm_psi(k) + psi_coef(i_generator,k)*psi_coef(i_generator,k)
|
||||||
delta_pt2(k) = 0.d0
|
delta_pt2(k) = 0.d0
|
||||||
pt2_old(k) = 0.d0
|
pt2_old(k) = 0.d0
|
||||||
|
pt2(k) = select_max(i_generator)
|
||||||
enddo
|
enddo
|
||||||
!$ call omp_unset_lock(lck)
|
!$ call omp_unset_lock(lck)
|
||||||
cycle
|
cycle
|
||||||
|
@ -379,12 +379,14 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
|
|||||||
enddo
|
enddo
|
||||||
|
|
||||||
PROVIDE ao_nucl
|
PROVIDE ao_nucl
|
||||||
|
PROVIDE progress_bar
|
||||||
call omp_init_lock(lock)
|
call omp_init_lock(lock)
|
||||||
lmax = ao_num*(ao_num+1)/2
|
lmax = ao_num*(ao_num+1)/2
|
||||||
write(output_BiInts,*) 'providing the AO integrals'
|
write(output_BiInts,*) 'providing the AO integrals'
|
||||||
call wall_time(wall_0)
|
call wall_time(wall_0)
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
call cpu_time(cpu_1)
|
call cpu_time(cpu_1)
|
||||||
|
call start_progress(lmax,'AO integrals (MB)',0.d0)
|
||||||
!$OMP PARALLEL PRIVATE(i,j,k,l,kk, &
|
!$OMP PARALLEL PRIVATE(i,j,k,l,kk, &
|
||||||
!$OMP integral,buffer_i,buffer_value,n_integrals, &
|
!$OMP integral,buffer_i,buffer_value,n_integrals, &
|
||||||
!$OMP cpu_2,wall_2,i1,j1,thread_num) &
|
!$OMP cpu_2,wall_2,i1,j1,thread_num) &
|
||||||
@ -392,7 +394,7 @@ BEGIN_PROVIDER [ logical, ao_bielec_integrals_in_map ]
|
|||||||
!$OMP SHARED (ao_num, jl_pairs, ao_integrals_map,thresh, &
|
!$OMP SHARED (ao_num, jl_pairs, ao_integrals_map,thresh, &
|
||||||
!$OMP cpu_1,wall_1,lock, lmax,n_centers,ao_nucl, &
|
!$OMP cpu_1,wall_1,lock, lmax,n_centers,ao_nucl, &
|
||||||
!$OMP ao_overlap_abs,ao_overlap,output_BiInts,abort_here, &
|
!$OMP ao_overlap_abs,ao_overlap,output_BiInts,abort_here, &
|
||||||
!$OMP wall_0)
|
!$OMP wall_0,progress_bar,progress_value)
|
||||||
|
|
||||||
allocate(buffer_i(size_buffer))
|
allocate(buffer_i(size_buffer))
|
||||||
allocate(buffer_value(size_buffer))
|
allocate(buffer_value(size_buffer))
|
||||||
@ -409,6 +411,9 @@ IRP_ENDIF
|
|||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
|
if (thread_num == 0) then
|
||||||
|
progress_bar(1) = kk
|
||||||
|
endif
|
||||||
j = jl_pairs(1,kk)
|
j = jl_pairs(1,kk)
|
||||||
l = jl_pairs(2,kk)
|
l = jl_pairs(2,kk)
|
||||||
j1 = j+ishft(l*l-l,-1)
|
j1 = j+ishft(l*l-l,-1)
|
||||||
@ -457,6 +462,7 @@ IRP_ENDIF
|
|||||||
wall_0 = wall_2
|
wall_0 = wall_2
|
||||||
write(output_BiInts,*) 100.*float(kk)/float(lmax), '% in ', &
|
write(output_BiInts,*) 100.*float(kk)/float(lmax), '% in ', &
|
||||||
wall_2-wall_1, 's', map_mb(ao_integrals_map) ,'MB'
|
wall_2-wall_1, 's', map_mb(ao_integrals_map) ,'MB'
|
||||||
|
progress_value = dble(map_mb(ao_integrals_map))
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
@ -466,6 +472,7 @@ IRP_ENDIF
|
|||||||
deallocate(buffer_value)
|
deallocate(buffer_value)
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
call omp_destroy_lock(lock)
|
call omp_destroy_lock(lock)
|
||||||
|
call stop_progress
|
||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
stop 'Aborting in AO integrals calculation'
|
stop 'Aborting in AO integrals calculation'
|
||||||
endif
|
endif
|
||||||
|
@ -90,6 +90,8 @@ subroutine add_integrals_to_map(mask_ijkl)
|
|||||||
|
|
||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
call cpu_time(cpu_1)
|
call cpu_time(cpu_1)
|
||||||
|
PROVIDE progress_bar
|
||||||
|
call start_progress(ao_num,'MO integrals (MB)',0.d0)
|
||||||
|
|
||||||
!$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, &
|
!$OMP PARALLEL PRIVATE(l1,k1,j1,i1,i2,i3,i4,i,j,k,l,c, ii1,kmax, &
|
||||||
!$OMP bielec_tmp_0_idx, bielec_tmp_0, bielec_tmp_1,bielec_tmp_2,bielec_tmp_3,&
|
!$OMP bielec_tmp_0_idx, bielec_tmp_0, bielec_tmp_1,bielec_tmp_2,bielec_tmp_3,&
|
||||||
@ -100,7 +102,7 @@ subroutine add_integrals_to_map(mask_ijkl)
|
|||||||
!$OMP mo_coef_transp,output_BiInts, &
|
!$OMP mo_coef_transp,output_BiInts, &
|
||||||
!$OMP mo_coef_transp_is_built, list_ijkl, &
|
!$OMP mo_coef_transp_is_built, list_ijkl, &
|
||||||
!$OMP mo_coef_is_built, wall_1, abort_here, &
|
!$OMP mo_coef_is_built, wall_1, abort_here, &
|
||||||
!$OMP mo_coef,mo_integrals_threshold,ao_integrals_map,mo_integrals_map)
|
!$OMP mo_coef,mo_integrals_threshold,ao_integrals_map,mo_integrals_map,progress_bar,progress_value)
|
||||||
n_integrals = 0
|
n_integrals = 0
|
||||||
allocate(bielec_tmp_3(mo_tot_num_align, n_j, n_k), &
|
allocate(bielec_tmp_3(mo_tot_num_align, n_j, n_k), &
|
||||||
bielec_tmp_1(mo_tot_num_align), &
|
bielec_tmp_1(mo_tot_num_align), &
|
||||||
@ -113,6 +115,9 @@ 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
|
||||||
|
if (thread_num == 0) then
|
||||||
|
progress_bar(1) = l1
|
||||||
|
endif
|
||||||
IRP_IF COARRAY
|
IRP_IF COARRAY
|
||||||
if (mod(l1-this_image(),num_images()) /= 0 ) then
|
if (mod(l1-this_image(),num_images()) /= 0 ) then
|
||||||
cycle
|
cycle
|
||||||
@ -268,7 +273,9 @@ IRP_ENDIF
|
|||||||
if (wall_2 - wall_0 > 1.d0) then
|
if (wall_2 - wall_0 > 1.d0) then
|
||||||
wall_0 = wall_2
|
wall_0 = wall_2
|
||||||
write(output_BiInts,*) 100.*float(l1)/float(ao_num), '% in ', &
|
write(output_BiInts,*) 100.*float(l1)/float(ao_num), '% in ', &
|
||||||
wall_2-wall_1, 's', map_mb(ao_integrals_map) ,'MB'
|
wall_2-wall_1, 's', map_mb(mo_integrals_map) ,'MB'
|
||||||
|
progress_value = dble(map_mb(mo_integrals_map))
|
||||||
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
@ -279,6 +286,7 @@ IRP_ENDIF
|
|||||||
real(mo_integrals_threshold,integral_kind))
|
real(mo_integrals_threshold,integral_kind))
|
||||||
deallocate(buffer_i, buffer_value)
|
deallocate(buffer_i, buffer_value)
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
call stop_progress
|
||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
stop 'Aborting in MO integrals calculation'
|
stop 'Aborting in MO integrals calculation'
|
||||||
endif
|
endif
|
||||||
|
@ -387,6 +387,9 @@ subroutine $subroutine($params_main)
|
|||||||
call wall_time(wall_1)
|
call wall_time(wall_1)
|
||||||
|
|
||||||
|
|
||||||
|
PROVIDE progress_bar
|
||||||
|
call start_progress(N_det_generators,'Selection (norm)',0.d0)
|
||||||
|
|
||||||
!$ call omp_init_lock(lck)
|
!$ call omp_init_lock(lck)
|
||||||
!$OMP PARALLEL DEFAULT(SHARED) &
|
!$OMP PARALLEL DEFAULT(SHARED) &
|
||||||
!$OMP PRIVATE(i_generator,wall_2,ispin,k,mask,iproc)
|
!$OMP PRIVATE(i_generator,wall_2,ispin,k,mask,iproc)
|
||||||
@ -395,6 +398,9 @@ subroutine $subroutine($params_main)
|
|||||||
allocate( mask(N_int,2,6) )
|
allocate( mask(N_int,2,6) )
|
||||||
!$OMP DO SCHEDULE(dynamic,4)
|
!$OMP DO SCHEDULE(dynamic,4)
|
||||||
do i_generator=1,nmax
|
do i_generator=1,nmax
|
||||||
|
if (iproc == 0) then
|
||||||
|
progress_bar(1) = i_generator
|
||||||
|
endif
|
||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
cycle
|
cycle
|
||||||
endif
|
endif
|
||||||
@ -449,10 +455,12 @@ subroutine $subroutine($params_main)
|
|||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
!$ call omp_destroy_lock(lck)
|
!$ call omp_destroy_lock(lck)
|
||||||
|
|
||||||
|
|
||||||
allocate( mask(N_int,2,6) )
|
allocate( mask(N_int,2,6) )
|
||||||
! do i_generator=1,N_det_generators
|
! do i_generator=1,N_det_generators
|
||||||
do i_generator=nmax+1,N_det_generators
|
do i_generator=nmax+1,N_det_generators
|
||||||
|
|
||||||
|
progress_bar(1) = i_generator
|
||||||
|
|
||||||
if (abort_here) then
|
if (abort_here) then
|
||||||
exit
|
exit
|
||||||
@ -500,6 +508,7 @@ subroutine $subroutine($params_main)
|
|||||||
$printout_now
|
$printout_now
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
call stop_progress
|
||||||
|
|
||||||
$copy_buffer
|
$copy_buffer
|
||||||
$generate_psi_guess
|
$generate_psi_guess
|
||||||
|
79
src/Utils/progress.irp.f
Normal file
79
src/Utils/progress.irp.f
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
subroutine start_progress(max,title,progress_init)
|
||||||
|
implicit none
|
||||||
|
integer, intent(in) :: max
|
||||||
|
double precision, intent(in) :: progress_init
|
||||||
|
character*(*), intent(in) :: title
|
||||||
|
BEGIN_DOC
|
||||||
|
! Starts the progress bar
|
||||||
|
END_DOC
|
||||||
|
|
||||||
|
progress_bar(1) = 0
|
||||||
|
progress_bar(2) = max
|
||||||
|
progress_title = title
|
||||||
|
progress_active = .True.
|
||||||
|
progress_value = progress_init
|
||||||
|
call run_progress()
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subroutine stop_progress
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Stop the progress bar
|
||||||
|
END_DOC
|
||||||
|
progress_active = .False.
|
||||||
|
end
|
||||||
|
|
||||||
|
BEGIN_PROVIDER [ real, progress_bar, (2) ]
|
||||||
|
&BEGIN_PROVIDER [ integer, progress_timeout ]
|
||||||
|
&BEGIN_PROVIDER [ logical, progress_active ]
|
||||||
|
&BEGIN_PROVIDER [ double precision, progress_value ]
|
||||||
|
&BEGIN_PROVIDER [ character*(20) , progress_title ]
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Current status for displaying progress bars. Global variable.
|
||||||
|
END_DOC
|
||||||
|
progress_bar = 0
|
||||||
|
progress_value = 0.d0
|
||||||
|
progress_title = ''
|
||||||
|
progress_active = .False.
|
||||||
|
progress_timeout = 1
|
||||||
|
open (unit=0, carriagecontrol='fortran')
|
||||||
|
|
||||||
|
END_PROVIDER
|
||||||
|
|
||||||
|
recursive subroutine run_progress
|
||||||
|
use ifport
|
||||||
|
implicit none
|
||||||
|
BEGIN_DOC
|
||||||
|
! Display a progress bar with documentation of what is happening
|
||||||
|
END_DOC
|
||||||
|
character(75), parameter :: bar0= &
|
||||||
|
' --- : --- | | ---%'
|
||||||
|
character(75) :: bar
|
||||||
|
integer :: prog
|
||||||
|
|
||||||
|
|
||||||
|
bar = bar0
|
||||||
|
if (.not.progress_active) then
|
||||||
|
call stop_progress
|
||||||
|
write(unit=0,fmt="(a1,a1,a70)") '+',char(13), bar
|
||||||
|
else
|
||||||
|
prog = int( progress_bar(1)*100./progress_bar(2) )
|
||||||
|
write(bar(1:25),'(A)'),progress_title
|
||||||
|
write(bar(29:47),'(G17.10)'),progress_value
|
||||||
|
write(bar(72:74),'(i3)') prog
|
||||||
|
|
||||||
|
integer :: k,j
|
||||||
|
j = int( progress_bar(1)*20./progress_bar(2) )
|
||||||
|
do k=1, j
|
||||||
|
bar(49+k:49+k)="="
|
||||||
|
enddo
|
||||||
|
write(unit=0,fmt="(a1,a1,a75)") '+',char(13), bar
|
||||||
|
integer :: istat
|
||||||
|
istat = alarm(progress_timeout,run_progress)
|
||||||
|
endif
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user