42 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
43#include "implicit_f.inc"
58 INTEGER KXSP(NISP,*), ISORTSP, IPARTSP(*)
60 . spbuf(nspbuf,*), v(3,*), ms(*)
65 INTEGER P, I, NN, N, IDEB, MSGTYP, LOC_PROC,
67 . REQ_SD(NSPMD), REQ_SD2(NSPMD),
68 . STATUS(MPI_STATUS_SIZE),MSGOFF,MSGOFF2
69 my_real,
DIMENSION(:,:),
ALLOCATABLE :: bufs, bufr
71 INTEGER,
DIMENSION(NSPMD) :: DISPLS_ISPHR,DISPLS_ISPHS
72 INTEGER,
DIMENSION(NSPMD) :: ,RCV_SIZE_ISPHS
73 INTEGER :: TOTAL_SEND_SIZE_ISPHR,TOTAL_RCV_SIZE_ISPHS
74 INTEGER :: REQUEST_ISPHR
76 INTEGER,
DIMENSION(NSPMD) :: DISPLS_BUFS,DISPLS_BUFR
77 INTEGER,
DIMENSION(NSPMD) :: SEND_SIZE_BUFS,
78 INTEGER :: TOTAL_SEND_SIZE_BUFS,TOTAL_RCV_SIZE_BUFR
79 INTEGER :: REQUEST_BUFS
92 displs_isphr(1:nspmd) = 0
93 displs_isphs(1:nspmd) = 0
94 send_size_isphr(1:nspmd) = 0
95 rcv_size_isphs(1:nspmd) = 0
96 total_send_size_isphr = 0
97 total_rcv_size_isphs = 0
103 send_size_isphr(p) =
psphr(p)
104 rcv_size_isphs(p) =
psphs(p)
105 total_send_size_isphr = total_send_size_isphr + send_size_isphr(p)
106 total_rcv_size_isphs = total_rcv_size_isphs + rcv_size_isphs(p)
109 displs_isphr(p) = displs_isphr(p-1) + send_size_isphr(p-1)
110 displs_isphs(p) = displs_isphs(p-1) + rcv_size_isphs(p-1)
118 . send_size_isphr,total_send_size_isphr,displs_isphr,
119 . total_rcv_size_isphs,rcv_size_isphs,displs_isphs,
120 . request_isphr,spmd_comm_world,nspmd)
129 displs_bufs(1:nspmd) = 0
130 displs_bufr(1:nspmd) = 0
131 send_size_bufs(1:nspmd) = 0
132 rcv_size_bufr(1:nspmd) = 0
133 total_send_size_bufs = 0
134 total_rcv_size_bufr = 0
141 send_size_bufs(p) =
psphs(p)
142 rcv_size_bufr(p) =
psphr(p)
143 total_send_size_bufs = total_send_size_bufs + send_size_bufs(p)
144 total_rcv_size_bufr = total_rcv_size_bufr + rcv_size_bufr(p)
148 displs_bufs(p) = displs_bufs(p-1) + 7*send_size_bufs(p-1)
149 displs_bufr(p) = displs_bufr(p-1) + 7*rcv_size_bufr(p-1)
152 ALLOCATE( bufs(7,total_send_size_bufs) )
153 ALLOCATE( bufr(7,total_rcv_size_bufr) )
155 total_send_size_bufs = 7*total_send_size_bufs
156 total_rcv_size_bufr = 7*total_rcv_size_bufr
157 send_size_bufs(1:nspmd) = 7*send_size_bufs(1:nspmd)
158 rcv_size_bufr(1:nspmd) = 7*rcv_size_bufr(1:nspmd)
168 CALL mpi_wait(request_isphr,status,ierror)
183 icell =
lsphs(ideb+n)
185 bufs(1,ideb+nn) = spbuf(2,icell)
186 bufs(2,ideb+nn) = spbuf(12,icell)
187 bufs(3,ideb+nn) = v(1,inod)
188 bufs(4,ideb+nn) = v(2,inod)
189 bufs(5,ideb+nn) = v(3,inod)
190 bufs(6,ideb+nn) = kxsp(2,icell)
191 bufs(7,ideb+nn) = ipartsp(icell)
192 ELSEIF(
isphs(ideb+n)==1)
THEN
194 icell =
lsphs(ideb+n)
196 bufs(1,ideb+nn) = spbuf(2,icell)
197 bufs(2,ideb+nn) = spbuf(12,icell)
199 bufs(4,ideb+nn) = v(2,inod)
200 bufs(5,ideb+nn) = v(3,inod)
201 bufs(6,ideb+nn) = kxsp(2,icell)
202 bufs(7,ideb+nn) = ipartsp(icell)
205 ideb = ideb +
psphs(p)
215 . send_size_bufs,total_send_size_bufs,displs_bufs,
216 . total_rcv_size_bufr,rcv_size_bufr,displs_bufr,
217 . request_bufs,spmd_comm_world,nspmd)
229 CALL mpi_wait(request_bufs,status,ierror)
243 xsphr(7,ideb+n) = bufr(1,ideb+nn)
244 xsphr(8,ideb+n) = bufr(2,ideb+nn)
245 xsphr(9,ideb+n) = bufr(3,ideb+nn)
246 xsphr(10,ideb+n)= bufr(4,ideb+nn)
247 xsphr(11,ideb+n)= bufr(5,ideb+nn)
248 xsphr(13,ideb+n)= bufr(6,ideb+nn)
249 xsphr(14,ideb+n)= bufr(7,ideb+nn)
250 ELSEIF(
isphr(ideb+n)==1)
THEN
252 xsphr(7,ideb+n) = bufr(1,ideb+nn)
253 xsphr(8,ideb+n) = bufr(2,ideb+nn)
254 xsphr(9,ideb+n) = bufr(3,ideb+nn)
255 xsphr(10,ideb+n)= bufr(4,ideb+nn)
256 xsphr(11,ideb+n)= bufr(5,ideb+nn)
257 xsphr(13,ideb+n)= bufr(6,ideb+nn)
258 xsphr(14,ideb+n)= bufr(7,ideb+nn)
261 ideb = ideb +
psphr(p)