34
35
36
37 use spmd_comm_world_mod, only: spmd_comm_world
38 implicit none
39
40
41
42
43#include "spmd.inc"
44
45
46
47 INTEGER SIZ,ISPMD,IT_SPMD(*),MSGTAG,INTSIZE
48 INTEGER, INTENT(INOUT) :: A(*)
49
50
51
52#ifdef MPI
53 INTEGER BUFSIZMAX, ADD, LEN, SIZ_I
54 INTEGER STATUS(MPI_STATUS_SIZE),IERROR
55
56 DATA bufsizmax/10000000/
57
58
59
60 add = 1
61 siz_i = siz
62 1 len =
min(siz_i,bufsizmax)
63
64 CALL mpi_recv(a(add),len,mpi_byte,it_spmd(ispmd+1),msgtag,
65 . spmd_comm_world,status,ierror)
66 CALL mpi_send(a,0,mpi_byte,it_spmd(ispmd+1),msgtag,
67 . spmd_comm_world,ierror)
68
69 add = add + len/intsize
70 siz_i = siz_i - len
71 IF (siz_i>0) GO TO 1
72#endif
73 RETURN
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)