diff --git a/src/LIB/SURCOUCHE/src/mode_gather.f90 b/src/LIB/SURCOUCHE/src/mode_gather.f90 index 1e8526a91a4df521c17ac6dcae1434d2b519242d..7307df850c392062335e018b83390132e1e364a1 100644 --- a/src/LIB/SURCOUCHE/src/mode_gather.f90 +++ b/src/LIB/SURCOUCHE/src/mode_gather.f90 @@ -1163,13 +1163,15 @@ END IF END SUBROUTINE GATHERXY_X6 -SUBROUTINE GATHERXY_N2(KSEND,KRECV,KROOT,KCOMM) +SUBROUTINE GATHERXY_N2(KSEND,KRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) USE MODD_IO, ONLY: ISP, ISNPROC INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND INTEGER,DIMENSION(:,:),TARGET,INTENT(INOUT):: KRECV INTEGER, INTENT(IN) :: KROOT INTEGER, INTENT(IN) :: KCOMM +INTEGER, OPTIONAL, INTENT(IN) :: KXOBOX,KXEBOX,KYOBOX,KYEBOX +CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HINTER INTEGER :: JI INTEGER :: IXO,IXE,IYO,IYE @@ -1180,20 +1182,24 @@ INTEGER :: IERR IF (ISP == KROOT) THEN ! I/O proc case DO JI=1,ISNPROC - CALL GET_DOMWRITE_ll(JI,'global',IXO,IXE,IYO,IYE) - ITP=>KRECV(IXO:IXE,IYO:IYE) - IF (ISP == JI) THEN - CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE) - ITP = KSEND(IXO:IXE,IYO:IYE) - ELSE - CALL MPI_RECV(ITP,SIZE(ITP),MNHINT_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + CALL GET_DOMWRITE_ll(JI,'global',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) + IF (IXO /= 0) THEN ! intersection is not empty + ITP=>KRECV(IXO:IXE,IYO:IYE) + IF (ISP == JI) THEN + CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) + ITP = KSEND(IXO:IXE,IYO:IYE) + ELSE + CALL MPI_RECV(ITP,SIZE(ITP),MNHINT_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR) + END IF END IF END DO -ELSE +ELSE ! Other processes - CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE) - ITP=>KSEND(IXO:IXE,IYO:IYE) - CALL MPI_BSEND(ITP,SIZE(ITP),MNHINT_MPI,KROOT-1,99+KROOT,KCOMM,IERR) + CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER) + IF (IXO /= 0) THEN ! intersection is not empty + ITP=>KSEND(IXO:IXE,IYO:IYE) + CALL MPI_BSEND(ITP,SIZE(ITP),MNHINT_MPI,KROOT-1,99+KROOT,KCOMM,IERR) + END IF END IF END SUBROUTINE GATHERXY_N2