diff --git a/PW/setup.f90 b/PW/setup.f90 index f66811941..6ba2ab3f5 100644 --- a/PW/setup.f90 +++ b/PW/setup.f90 @@ -971,7 +971,8 @@ SUBROUTINE check_para_diag_efficiency() IMPLICIT NONE ! INTEGER :: dim, dim_pool, i, j, m, m_min - REAL(DP) :: time_para, time_serial + REAL(DP) :: time_para, time_serial, delta_t, delta_t_old + LOGICAL :: lfirst REAL(DP), ALLOCATABLE :: ar(:,:), vr(:,:) COMPLEX(DP), ALLOCATABLE :: ac(:,:), vc(:,:) REAL(DP), ALLOCATABLE :: e(:) @@ -998,6 +999,8 @@ SUBROUTINE check_para_diag_efficiency() ! END IF ! + lfirst = .TRUE. + ! DO dim = m_min, nbndx, m ! dim_pool = dim / nproc_pool @@ -1092,6 +1095,8 @@ SUBROUTINE check_para_diag_efficiency() CALL mp_bcast( time_para, ionode_id ) CALL mp_bcast( time_serial, ionode_id ) ! + delta_t = time_para - time_serial + ! IF ( time_para < time_serial ) THEN ! use_para_diago = .TRUE. @@ -1099,8 +1104,18 @@ SUBROUTINE check_para_diag_efficiency() ! EXIT ! + ELSE IF ( .NOT. lfirst .AND. delta_t > delta_t_old ) THEN + ! + ! ... the parallel diagonalizer is getting slower and slower + ! + EXIT + ! END IF ! + lfirst = .FALSE. + ! + delta_t_old = delta_t + ! END DO ! IF ( ionode ) THEN