The TELEMAC-MASCARET system  trunk
p_mpi_alltoallv_charac.F
Go to the documentation of this file.
1 ! *********************************
2  SUBROUTINE p_mpi_alltoallv_charac
3 ! *********************************
4 !
5  &(send_buffer,nsend,send_displ,send_datyp,recv_buffer,nrecv,
6  & recv_displ,recv_datyp,ierr)
7 !
8 !***********************************************************************
9 ! PARALLEL V6P2 21/08/2010
10 !***********************************************************************
11 !
12 !brief CALLS FUNCTION MPI_ALLTOALLV.
13 !
14 !history C. DENIS (SINETICS)
15 !+ 27/10/2009
16 !+ V6P0
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32 !| SEND_BUFFER |-->| SEND BUFFER
33 !| NSEND |-->| SPECIFIES THE NUMBER OF ELEMENTS TO SEND TO EACH
34 !| | | PROCESSOR
35 !| SEND_DISPL |-->| DISPLACEMENT ARRAY FOR THE SEND BUFFER
36 !| SEND_DATYP |-->| DATA TYPE OF SEND BUFFER ELEMENTS
37 !| RECV_BUFFER |<--| RECEIVE BUFFER
38 !| NRECV |-->| SPECIFIES THE MAXIMUM NUMBER OF ELEMENTS THAT
39 !| | | CAN BE RECEIVED FROM EACH PROCESSOR
40 !| RECV_DISPL |-->| DISPLACEMENT ARRAY FOR THE RECEIVE BUFFER
41 !| RECV_DATYP |-->| DATA TYPE OF RECEIVE BUFFER ELEMENTS
42 !| COMM |-->| COMMUNICATOR
43 !| IERR |-->| ERROR VALUE
44 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 !
48  IMPLICIT NONE
49 !
50 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51 !
52  INTEGER, INTENT(IN) :: NSEND(*),SEND_DISPL(*),SEND_DATYP,NRECV(*)
53  INTEGER, INTENT(IN) :: RECV_DISPL(*),RECV_DATYP
54  INTEGER, INTENT(OUT) :: IERR
55  TYPE(charac_type), INTENT(IN) :: SEND_BUFFER(*)
56 ! NO DEFAULT INITIALISATION FOR USER TYPE COMPONENTS ALLOWED
57  TYPE(charac_type), INTENT(INOUT) :: RECV_BUFFER(*)
58 ! TYPE(CHARAC_TYPE), INTENT(OUT) :: RECV_BUFFER(*)
59 !
60 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
61 !
62  ierr = 0
63  recv_buffer(1)%MYPID = 0
64 !
65 #if defined HAVE_MPI
66 ! TERMINATE ON MPI PARTS NOT HANDLED BY COMPAD
67 # if defined COMPAD
68  WRITE(lu,*) 'P_MPI_ALLTOALLV: COMPAD CRITICAL MPI OPERATION'
69  WRITE(lu,*) ' PLEASE CONTACT JR @ ADJOINTWARE'
70  CALL plante(1)
71  stop
72 # endif
73  CALL mpi_alltoallv(send_buffer,nsend,send_displ,send_datyp,
74  & recv_buffer,nrecv,recv_displ,recv_datyp,
75  & comm,ierr)
76 !
77  IF(ierr.NE.0) THEN
78  WRITE(lu,*) 'P_MPI_ALLTOALLV:'
79  WRITE(lu,*) 'MPI ERROR ',ierr
80  CALL plante(1)
81  stop
82  ENDIF
83  RETURN
84 #else
85  recv_buffer(1)%MYPID=0
86  WRITE(lu,*) 'CALL OF P_MPI_ALLTOALLV_CHARAC VOID VERSION'
87 #endif
88 !
89 !-----------------------------------------------------------------------
90 !
91  END
subroutine p_mpi_alltoallv_charac(SEND_BUFFER, NSEND, SEND_DISPL, SEND_DATYP, RECV_BUFFER, NRECV, RECV_DISPL, RECV_DATYP, IERR)