39 1 NSKYI17 ,ISKYI17,FSKYI17,NRSKYI17,IRSKYI17,
40 2 FRSKYI17,NIN ,LSKYI17,NOINT )
49 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
50#include "implicit_f.inc"
63 INTEGER NSKYI17, NRSKYI17, NIN, LSKYI17, NOINT,
64 . ISKYI17(*), IRSKYI17(*)
72 INTEGER P, L, ADD, LL, NB, LEN, SIZ, LOC_PROC,
73 . IDEB, N, MSGTYP, IERROR, IDEBI, NI, NOD,
74 . iallocs, iallocr, ies, i, nn, msgoff, msgoff2,
75 . status(mpi_status_size),
76 . req_si(nspmd),req_s(nspmd),req_r(nspmd),
77 . isizrcv(2,nspmd),isizenv(2,nspmd),
78 . nsnfitot(nspmd),nsnsitot(nspmd)
82 my_real ,
DIMENSION(:),
ALLOCATABLE :: bbufs, bbufr
100 siz =
nsnsi(nin)%P(p)
105 . isizrcv(1,p),2,mpi_integer,it_spmd(p),msgtyp,
106 . spmd_comm_world,req_r(p),ierror )
116 CALL sorti20(nrskyi17,irskyi17,frskyi17,4)
120 + nrskyi17,irskyi17,
nsnfi(nin)%P(1),isizenv,nsnfitot,len)
124 IF(p/=loc_proc.AND.nsnfitot(p)>0)
THEN
127 . isizenv(1,p),2,mpi_integer,it_spmd(p),msgtyp,
128 . spmd_comm_world,req_s(p),ierror )
129 iallocs = iallocs + isizenv(1,p)
134 +
ALLOCATE(bbufs(iallocs+nspmd),stat=ierror)
136 CALL ancmsg(msgid=20,anmode=aninfo)
146 IF(p/=loc_proc.AND.isizenv(1,p)>0)
THEN
153 IF(
nsvfi(nin)%P(ideb+n)<0)
THEN
155 ies = -
nsvfi(nin)%P(ideb+n)
156 IF(idebi<=nrskyi17)
THEN
157 itest = irskyi17(idebi)==ideb+n
163 bbufs(l+2) = frskyi17(1,idebi)
164 bbufs(l+3) = frskyi17(2,idebi)
165 bbufs(l+4) = frskyi17(3,idebi)
166 bbufs(l+5) = frskyi17(4,idebi)
169 IF(idebi<=nrskyi17)
THEN
170 itest = irskyi17(idebi)==ideb+n
177 bbufs(ll) = (l-ll)/len
183 . bbufs(add),siz,real ,it_spmd(p),msgtyp,
184 . spmd_comm_world,req_si(p),ierror )
185 ELSEIF(p/=loc_proc)
THEN
186 ideb = ideb +
nsnfi(nin)%P(p)
194 IF(nsnsitot(p)>0)
THEN
195 CALL mpi_wait(req_r(p),status,ierror)
196 iallocr =
max(iallocr,isizrcv(1,p))
202 .
ALLOCATE(bbufr(iallocr+1),stat=ierror)
204 CALL ancmsg(msgid=20,anmode=aninfo)
211 IF(isizrcv(1,p)>0)
THEN
215 . bbufr(l),isizrcv(1,p)+1,real ,it_spmd(p),msgtyp,
216 . spmd_comm_world ,status,ierror )
218 IF(
nsnsi(nin)%P(p)>0)
THEN
222 IF (nskyi17+nb > lskyi17)
THEN
223 CALL ancmsg(msgid=25,anmode=aninfo_blind,
229 nn = nint(bbufr(5*(i-1)+l))
232 fskyi17(nskyi17,1)=bbufr(5*(i-1)+l+1)
233 fskyi17(nskyi17,2)=bbufr(5*(i-1)+l+2)
234 fskyi17(nskyi17,3)=bbufr(5*(i-1)+l+3)
235 fskyi17(nskyi17,4)=bbufr(5*(i-1)+l+4)
241 IF(iallocr>0)
DEALLOCATE(bbufr)
247 IF(nsnfitot(p)>0)
THEN
248 CALL mpi_wait(req_s(p),status,ierror)
250 IF(isizenv(1,p)>0)
THEN
251 CALL mpi_wait(req_si(p),status,ierror)
255 IF(iallocs>0)
DEALLOCATE(bbufs)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)