31 SUBROUTINE spmd_sd_skw(SKEW,ISKWP_L_SEND,NUMSKW_L_SEND,RECVCOUNT)
35 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
36#include "implicit_f.inc"
51 INTEGER :: NUMSKW_L_SEND
52 INTEGER,
DIMENSION(NUMSKW_L_SEND),
INTENT(IN) :: ISKWP_L_SEND
53 my_real,
DIMENSION(LSKEW,*),
INTENT(INOUT) :: skew
54 INTEGER,
DIMENSION(NSPMD),
INTENT(IN) :: RECVCOUNT
69 INTEGER :: I,K,N,LOC_PROC,NN
71 INTEGER :: SENDCOUNT,TOTAL_RECV
72 INTEGER,
DIMENSION(NSPMD) :: DIPSPL
73 my_real,
DIMENSION(10*NUMSKW) :: sbuf,rbuf
109 DO nn = 1, numskw_l_send
112 sbuf(1+(k-1)*10) = skew(1,n+1)
113 sbuf(2+(k-1)*10) = skew(2,n+1)
114 sbuf(3+(k-1)*10) = skew(3,n+1)
115 sbuf(4+(k-1)*10) = skew(4,n+1)
116 sbuf(5+(k-1)*10) = skew(5,n+1)
117 sbuf(6+(k-1)*10) = skew(6,n+1)
118 sbuf(7+(k-1)*10) = skew(7,n+1)
119 sbuf(8+(k-1)*10) = skew(8,n+1)
120 sbuf(9+(k-1)*10) = skew(9,n+1)
121 sbuf(10+(k-1)*10) = n+1
127 total_recv = recvcount(1)
129 dipspl(i)=recvcount(i-1)+dipspl(i-1)
130 total_recv = total_recv + recvcount(i)
132 total_recv = total_recv / 10
135 CALL mpi_allgatherv(sbuf,sendcount,real,rbuf,recvcount,dipspl,real,spmd_comm_world,ierror)
139 k = nint(rbuf(10+(i-1)*10))
140 skew(1,k) = rbuf(1+(i-1)*10)
141 skew(2,k) = rbuf(2+(i-1)*10)
142 skew(3,k) = rbuf(3+(i-1)*10)
143 skew(4,k) = rbuf(4+(i-1)*10)
144 skew(5,k) = rbuf(5+(i-1)*10)
145 skew(6,k) = rbuf(6+(i-1)*10)
146 skew(7,k) = rbuf(7+(i-1)*10)
147 skew(8,k) = rbuf(8+(i-1)*10)
148 skew(9,k) = rbuf(9+(i-1)*10)
167 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
168#include
"implicit_f.inc"
176#include "com01_c.inc"
177#include "com04_c.inc"
179#include "param_c.inc"
183 INTEGER,
DIMENSION(*),
INTENT(IN) :: ISKWP
184 my_real,
DIMENSION(LSKEW,*),
INTENT(INOUT) :: skew
191! -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*
196 INTEGER :: I,K,N,LOC_PROC
198 INTEGER :: SENDCOUNT,TOTAL_RECV
199 INTEGER,
DIMENSION(NSPMD) :: RECVCOUNT,DIPSPL
200 my_real,
DIMENSION(10*NUMSKW) :: sbuf,rbuf
219! sbuf : 2 | 3 (--> 2 values)
232 recvcount(1:nspmd) = 0
237 IF(abs(iskwp(n+1))==loc_proc)
THEN
239 sbuf(1+(k-1)*10) = skew(1,n+1)
240 sbuf(2+(k-1)*10) = skew(2,n+1)
241 sbuf(3+(k-1)*10) = skew(3,n+1)
242 sbuf(4+(k-1)*10) = skew(4,n+1)
243 sbuf(5+(k-1)*10) = skew(5,n+1)
244 sbuf(6+(k-1)*10) = skew(6,n+1)
245 sbuf(7+(k-1)*10) = skew(7,n+1)
246 sbuf(8+(k-1)*10) = skew(8,n+1)
247 sbuf(9+(k-1)*10) = skew(9,n+1)
248 sbuf(10+(k-1)*10) = n+1
250 IF(iskwp(n+1)/=0) recvcount(abs(iskwp(n+1))) = recvcount(abs(iskwp(n+1))) + 10
256 total_recv = recvcount(1)
258 dipspl(i)=recvcount(i-1)+dipspl(i-1)
259 total_recv = total_recv + recvcount(i)
261 total_recv = total_recv / 10
264 CALL mpi_gatherv(sbuf,sendcount,real,rbuf,recvcount,dipspl,real,0,spmd_comm_world,ierror)
269 k = nint(rbuf(10+(i-1)*10))
270 skew(1,k) = rbuf(1+(i-1)*10)
271 skew(2,k) = rbuf(2+(i-1)*10)
272 skew(3,k) = rbuf(3+(i-1)*10)
273 skew(4,k) = rbuf(4+(i-1)*10)
274 skew(5,k) = rbuf(5+(i-1)*10)
275 skew(6,k) = rbuf(6+(i-1)*10)
276 skew(7,k) = rbuf(7+(i-1)*10)
277 skew(8,k) = rbuf(8+(i-1)*10)
278 skew(9,k) = rbuf(9+(i-1)*10)
subroutine mpi_gatherv(sendbuf, cnt, datatype, recvbuf, reccnt, displs, rectype, root, comm, ierr)