mirror of https://gitlab.com/QEF/q-e.git
- better definition of northo/ndiag
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@6696 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
parent
5bbe4b1939
commit
a4cb3967e5
|
@ -139,7 +139,7 @@ END SUBROUTINE diagonalize_parallel
|
|||
SUBROUTINE mesure_diag_perf( n )
|
||||
!
|
||||
USE mp_global, ONLY: nproc_image, me_image, intra_image_comm, root_image
|
||||
USE mp_global, ONLY: np_ortho2, np_ortho, me_ortho, ortho_comm, ortho_comm_id
|
||||
USE mp_global, ONLY: nproc_ortho, np_ortho, me_ortho, ortho_comm, ortho_comm_id
|
||||
USE io_global, ONLY: ionode, stdout
|
||||
USE mp, ONLY: mp_sum, mp_bcast, mp_barrier
|
||||
USE mp, ONLY: mp_max
|
||||
|
@ -159,7 +159,7 @@ END SUBROUTINE diagonalize_parallel
|
|||
!
|
||||
! Check if number of PEs for orthogonalization/diagonalization is given from the input
|
||||
!
|
||||
IF( np_ortho2 > 0 ) THEN
|
||||
IF( nproc_ortho > 0 ) THEN
|
||||
use_parallel_diag = .TRUE.
|
||||
RETURN
|
||||
END IF
|
||||
|
@ -284,7 +284,7 @@ END SUBROUTINE diagonalize_parallel
|
|||
SUBROUTINE mesure_mmul_perf( n )
|
||||
!
|
||||
USE mp_global, ONLY: nproc_image, me_image, intra_image_comm, &
|
||||
root_image, ortho_comm, np_ortho2, np_ortho, &
|
||||
root_image, ortho_comm, nproc_ortho, np_ortho, &
|
||||
me_ortho, init_ortho_group, ortho_comm_id
|
||||
USE io_global, ONLY: ionode, stdout
|
||||
USE mp, ONLY: mp_sum, mp_bcast, mp_barrier
|
||||
|
@ -303,27 +303,14 @@ END SUBROUTINE diagonalize_parallel
|
|||
REAL(DP) :: cclock
|
||||
EXTERNAL :: cclock
|
||||
!
|
||||
IF( np_ortho2 > 0 ) THEN
|
||||
!
|
||||
! Here the number of processors is suggested on input
|
||||
!
|
||||
np = np_ortho2
|
||||
if( np > MIN( n, nproc_image ) ) np = MIN( n, nproc_image )
|
||||
np = MAX( INT( SQRT( DBLE( np ) + 0.1d0 ) ), 1 )
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
! Take the maximum number of processors
|
||||
!
|
||||
np = MIN( n, nproc_image )
|
||||
np = MAX( INT( SQRT( DBLE( np ) + 0.1d0 ) ), 1 )
|
||||
!
|
||||
END IF
|
||||
|
||||
!
|
||||
! Now test the allowed processors mesh sizes
|
||||
np = MAX( INT( SQRT( DBLE( nproc_ortho ) + 0.1d0 ) ), 1 )
|
||||
!
|
||||
! Make ortho group compatible with the number of electronic states
|
||||
!
|
||||
np = MIN( np, n )
|
||||
!
|
||||
! Now re-define the ortho group and test the performance
|
||||
!
|
||||
|
||||
CALL init_ortho_group( np * np, intra_image_comm )
|
||||
|
||||
CALL descla_init( desc, n, n, np_ortho, me_ortho, ortho_comm, ortho_comm_id )
|
||||
|
@ -368,8 +355,6 @@ END SUBROUTINE diagonalize_parallel
|
|||
|
||||
#endif
|
||||
|
||||
CALL init_ortho_group( np*np, intra_image_comm )
|
||||
|
||||
#if defined __PARA
|
||||
IF( ionode ) THEN
|
||||
WRITE( stdout, '(/,3X,"Constraints matrixes will be distributed block like on")' )
|
||||
|
|
|
@ -109,7 +109,7 @@ PROGRAM projwfc
|
|||
USE io_files, ONLY : nd_nmbr, prefix, tmp_dir, trimcheck
|
||||
USE noncollin_module, ONLY : noncolin
|
||||
USE mp, ONLY : mp_bcast
|
||||
USE mp_global, ONLY : mp_startup, np_ortho2
|
||||
USE mp_global, ONLY : mp_startup, nproc_ortho
|
||||
USE environment, ONLY : environment_start
|
||||
!
|
||||
! for GWW
|
||||
|
@ -216,7 +216,7 @@ PROGRAM projwfc
|
|||
IF (noncolin) THEN
|
||||
CALL projwave_nc(filproj, lsym )
|
||||
ELSE
|
||||
IF( np_ortho2 > 1 ) THEN
|
||||
IF( nproc_ortho > 1 ) THEN
|
||||
CALL pprojwave (filproj, lsym)
|
||||
ELSE
|
||||
CALL projwave (filproj, lsym, lgww)
|
||||
|
|
27
PW/setup.f90
27
PW/setup.f90
|
@ -752,13 +752,14 @@ SUBROUTINE check_para_diag( nelec )
|
|||
USE kinds, ONLY : DP
|
||||
USE control_flags, ONLY : use_para_diag, gamma_only
|
||||
USE io_global, ONLY : stdout, ionode, ionode_id
|
||||
USE mp_global, ONLY : nproc_pool, init_ortho_group, np_ortho2, &
|
||||
USE mp_global, ONLY : nproc_pool, init_ortho_group, nproc_ortho, &
|
||||
np_ortho, intra_pool_comm
|
||||
|
||||
IMPLICIT NONE
|
||||
|
||||
REAL(DP), INTENT(IN) :: nelec
|
||||
LOGICAL, SAVE :: first = .TRUE.
|
||||
INTEGER :: np
|
||||
|
||||
! avoid synchronization problems when more images are active
|
||||
|
||||
|
@ -768,28 +769,18 @@ SUBROUTINE check_para_diag( nelec )
|
|||
|
||||
use_para_diag = .TRUE.
|
||||
!
|
||||
! here we initialize the sub group of processors that will take part
|
||||
! here we re-initialize the sub group of processors that will take part
|
||||
! in the matrix diagonalization.
|
||||
! NOTE that the maximum number of processors may not be the optimal one,
|
||||
! and -ndiag N argument can be used to force a given number N of processors
|
||||
!
|
||||
IF( np_ortho2 < 1 ) THEN
|
||||
!
|
||||
! use all the available processors
|
||||
!
|
||||
np_ortho2 = MIN( INT( nelec )/2, nproc_pool )
|
||||
!
|
||||
! avoid problems with systems with a single electron
|
||||
!
|
||||
IF ( np_ortho2 < 1) np_ortho2 = 1
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
np_ortho2 = MIN( INT( nelec )/2, np_ortho2 )
|
||||
!
|
||||
END IF
|
||||
np = MAX( INT( SQRT( DBLE( nproc_ortho ) + 0.1d0 ) ), 1 )
|
||||
!
|
||||
! Make ortho group compatible with the number of electronic states
|
||||
!
|
||||
np = MIN( INT( nelec )/2, np )
|
||||
|
||||
CALL init_ortho_group( np_ortho2, intra_pool_comm )
|
||||
CALL init_ortho_group( np * np, intra_pool_comm )
|
||||
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
|
|
Loading…
Reference in New Issue