46 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
47#include "implicit_f.inc"
65 INTEGER MSGTYP,INFO,LOC_PROC,
66 . BUFSIZ,MSGOFF,SIZ,I,P,LEN,N,II,
67 . IOS,STATUS(MPI_STATUS_SIZE),IERROR,IBLANC,LNEW
68 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IWA
71 INTEGER :: NINDX_PROC,SIZE_MESSAGE
72 INTEGER,
DIMENSION(NSPMD) :: IWIOUT_SPMD
73 INTEGER,
DIMENSION(NSPMD) :: PROC_RCV,DISPLACEMENT
75 INTEGER,
DIMENSION(NSPMD) :: REQ_R
78 CHARACTER(LEN=NCHAROUT) :: LINE
84 iwiout_spmd(1:nspmd) = 0
86 . iwiout_spmd,1,mpi_integer,
87 . 0,spmd_comm_world,ierror)
92 IF(ispmd/=0)
ALLOCATE(iwa(iwiout+1))
99 displacement(1:nspmd) = 0
101 IF(iwiout_spmd(p)/=0)
THEN
102 nindx_proc = nindx_proc + 1
103 proc_rcv(nindx_proc) = p
104 displacement(nindx_proc) = size_message
105 size_message = size_message + iwiout_spmd(p) + 1
108 ALLOCATE(iwa(size_message))
113 CALL mpi_irecv(iwa(1+displacement(i)),iwiout_spmd(p)+1,mpi_integer,it_spmd(p),
114 . msgtyp,spmd_comm_world,req_r(i),ierror)
120 CALL mpi_waitany(nindx_proc,req_r,indx,status,ierror)
127 DO WHILE (iwa(displacement(indx)+n+i)==iblanc.AND.i>1)
133 line(i:i) = char(iwa(displacement(indx)+n+i))
135 WRITE(iout,fmt=
'(A)')line(1:lnew)
148 READ(unit=iout,iostat=ios,fmt=
'(A)') line
151 iwa(siz+i) = ichar(line(i:i))
159 WRITE(unit=iout,iostat=ios,fmt=
'(A)')
161 CALL mpi_isend(iwa ,siz ,mpi_integer,it_spmd(1),
162 . msgtyp,spmd_comm_world,req_s,ierror )
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_gather(sendbuf, cnt, datatype, recvbuf, reccnt, rectype, root, comm, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)