From ed34a4c72476f6cdb0d2702526dcf4c3ae31cce4 Mon Sep 17 00:00:00 2001 From: dalcorso Date: Sat, 17 Oct 2009 07:22:42 +0000 Subject: [PATCH] Bug fix: d3.x was not working anymore with pools. A possible solution. git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@6034 c92efa57-630b-4861-b058-cf58834340f0 --- D3/d3_exc.f90 | 4 ++-- D3/davcio_drho2.f90 | 9 +++++---- D3/read_ef.f90 | 5 ++++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/D3/d3_exc.f90 b/D3/d3_exc.f90 index 84f4be1b8..e0f415a4a 100644 --- a/D3/d3_exc.f90 +++ b/D3/d3_exc.f90 @@ -40,7 +40,7 @@ SUBROUTINE d3_exc ALLOCATE (work3 ( nrxx)) ALLOCATE (d3dyn1( 3*nat, 3*nat, 3*nat)) - IF ( my_pool_id == 0 ) THEN +! IF ( my_pool_id == 0 ) THEN ! ! Calculates third derivative of Exc ! @@ -78,7 +78,7 @@ SUBROUTINE d3_exc ENDDO ! - END IF +! END IF ! IF ( npool /= 1 ) CALL mp_bcast( d3dyn1, ionode_id, inter_pool_comm ) ! diff --git a/D3/davcio_drho2.f90 b/D3/davcio_drho2.f90 index 00dad4948..083d00d7b 100644 --- a/D3/davcio_drho2.f90 +++ b/D3/davcio_drho2.f90 @@ -18,8 +18,8 @@ SUBROUTINE davcio_drho2 (drho, lrec, iunit, nrec, isw) USE pwcom USE kinds, ONLY : DP USE phcom - USE io_global, ONLY : ionode_id - USE mp_global, ONLY : intra_pool_comm, me_pool, root_pool + USE io_global, ONLY : ionode_id, ionode + USE mp_global, ONLY : intra_pool_comm, inter_pool_comm, me_pool, root_pool USE mp, ONLY : mp_bcast, mp_barrier USE fft_base, ONLY : dfftp, cgather_sym ! @@ -43,13 +43,14 @@ SUBROUTINE davcio_drho2 (drho, lrec, iunit, nrec, isw) CALL cgather_sym (drho, ddrho) root = 0 CALL mp_barrier() - IF ( me_pool == root_pool ) CALL davcio (ddrho, lrec, iunit, nrec, + 1) + IF ( ionode ) CALL davcio (ddrho, lrec, iunit, nrec, + 1) ELSEIF (isw < 0) THEN ! ! First task of the pool reads ddrho, and broadcasts to all the ! processors of the pool ! - IF ( me_pool == root_pool ) CALL davcio (ddrho, lrec, iunit, nrec, - 1) + IF ( ionode ) CALL davcio (ddrho, lrec, iunit, nrec, - 1) + CALL mp_bcast( ddrho, ionode_id, inter_pool_comm ) CALL mp_bcast( ddrho, root_pool, intra_pool_comm ) ! ! Distributes ddrho between between the tasks of the pool diff --git a/D3/read_ef.f90 b/D3/read_ef.f90 index 781912b4d..5acaa466b 100644 --- a/D3/read_ef.f90 +++ b/D3/read_ef.f90 @@ -28,10 +28,13 @@ SUBROUTINE read_ef() REWIND (unit = iuef) READ (iuef, err = 100, iostat = ios) ef_sh ! -100 CALL errore ('d3_valence', 'reading iuef', ABS (ios) ) ! END IF +100 CALL mp_bcast(ios, ionode_id) + + CALL errore ('d3_valence', 'reading iuef', ABS (ios) ) + CALL mp_bcast( ef_sh, ionode_id ) RETURN