Skip to content
Snippets Groups Projects
Commit bbb91eb4 authored by Juan Escobar's avatar Juan Escobar
Browse files

Juan 03/08/2020:mode_scatter.f90, For reduction of MPI_BUFFER_SIZE , in...

Juan 03/08/2020:mode_scatter.f90, For reduction of MPI_BUFFER_SIZE , in SCATTERXY_X3 replace MPI_BSEND -> MPI_ISEND
parent 70890bd7
No related branches found
No related tags found
No related merge requests found
......@@ -23,7 +23,8 @@ MODULE MODE_SCATTER_ll
!
! J.Escobar 10/02/2012 : Bug , in MPI_RECV replace MPI_STATUSES_IGNORE
! with MPI_STATUS_IGNORE
!
! J.Escobar 21/07/2020 : For reduction of MPI_BUFFER_SIZE , in SCATTERXY_X3 replace MPI_BSEND -> MPI_ISEND
!
USE MODD_MPIF
......@@ -469,6 +470,7 @@ END SUBROUTINE SCATTERXY_X2
SUBROUTINE SCATTERXY_X3(PSEND,PRECV,KROOT,KCOMM)
USE MODD_IO_ll, ONLY : ISP, ISNPROC
USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
REAL,DIMENSION(:,:,:), INTENT(INOUT):: PRECV
......@@ -478,26 +480,46 @@ INTEGER, INTENT(IN) :: KCOMM
!INCLUDE 'mpif.h'
INTEGER :: IERR
INTEGER :: JI
INTEGER :: JI,JKU
INTEGER :: IXO,IXE,IYO,IYE
REAL,DIMENSION(:,:,:), POINTER :: TX3DP
!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB
INTEGER :: NB_REQ
TYPE TX_3DP
REAL,DIMENSION(:,:,:), POINTER :: X
END TYPE TX_3DP
TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP
JKU = SIZE(PSEND,3)
IF (ISP == KROOT) THEN
DO JI = 1,ISNPROC
CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
TX3DP=>PSEND(IXO:IXE,IYO:IYE,:)
IF (ISP /= JI) THEN
CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
& ,IERR)
ELSE
PRECV(:,:,:) = TX3DP(:,:,:)
END IF
END DO
NB_REQ=0
ALLOCATE(REQ_TAB(ISNPROC-1))
ALLOCATE(T_TX3DP(ISNPROC-1))
DO JI = 1,ISNPROC
CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
TX3DP=>PSEND(IXO:IXE,IYO:IYE,:)
IF (ISP /= JI) THEN
NB_REQ = NB_REQ + 1
ALLOCATE(T_TX3DP(NB_REQ)%X(IXO:IXE,IYO:IYE,JKU))
T_TX3DP(NB_REQ)%X=TX3DP
CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
& ,REQ_TAB(NB_REQ),IERR)
!CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
! & ,IERR)
ELSE
PRECV(:,:,:) = TX3DP(:,:,:)
END IF
END DO
IF (NB_REQ .GT.0 ) THEN
CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR)
DO JI=1,NB_REQ ; DEALLOCATE(T_TX3DP(JI)%X) ; ENDDO
END IF
ELSE
CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
& ,MPI_STATUS_IGNORE,IERR)
CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
& ,MPI_STATUS_IGNORE,IERR)
END IF
END SUBROUTINE SCATTERXY_X3
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment