39 1 IRECTM ,NRTM ,X ,V ,BMINMAL ,
40 2 STIFE ,NIN ,ISENDTO,IRCVFROM,IAD_ELEM ,
41 3 FR_ELEM ,NSHELR ,ITAB ,ITASK )
51 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
52#include "implicit_f.inc"
64#include "timeri_c.inc"
70 . ISENDTO(NINTER+1,*), IRCVFROM(NINTER+1,*),
71 . iad_elem(2,*), fr_elem(*), itab(*) , itask
74 . x(3,*), v(3,*), bminmal(6),
80 INTEGER MSGTYP, I, LOC_PROC, P, IDEB,
81 . MSGOFF, MSGOFF2, MSGOFF3, MSGOFF4,
82 . J, L, LEN, NB_, IERROR1, IAD,
83 . status(mpi_status_size),ierror,req_sb(nspmd),
84 . req_rb(nspmd),kk,nbirecv,irindexi(nspmd),
85 . req_rd(nspmd),req_sd(nspmd),req_sd2(nspmd),
86 . req_rc(nspmd),req_sc(nspmd),
87 . indexi,isindexi(nspmd),index(nrtm),nbox(nspmd),
88 . nbx,nby,nbz,ix,iy,iz,
89 . ix1,iy1,iz1,ix2,iy2,iz2
92 . xmaxb,ymaxb,zmaxb,xminb,yminb,zminb
93 TYPE(r8_pointer),
DIMENSION(NSPMD) :: BUF
117 IF(ircvfrom(nin,loc_proc)==0.AND.
118 . isendto(nin,loc_proc)==0)
RETURN
119 bminma(1,loc_proc) = bminmal(1)
120 bminma(2,loc_proc) = bminmal(2)
121 bminma(3,loc_proc) = bminmal(3)
122 bminma(4,loc_proc) = bminmal(4)
123 bminma(5,loc_proc) = bminmal(5)
124 bminma(6,loc_proc) = bminmal(6)
129 IF(ircvfrom(nin,loc_proc)/=0)
THEN
131 IF(isendto(nin,p)/=0)
THEN
138 . it_spmd(p),msgtyp,spmd_comm_world,req_sc(p),ierror)
141 . bminma(1,loc_proc),6 ,real ,it_spmd(p),msgtyp,
142 . spmd_comm_world ,req_sb(p),ierror)
151 IF(isendto(nin,loc_proc)/=0)
THEN
154 IF(ircvfrom(nin,p)/=0)
THEN
158 msgtyp = msgoff + nspmd*ispmd + p +nin
163 . it_spmd(p),msgtyp,spmd_comm_world,req_rc(nbirecv),ierror)
166 . bminma(1,p) ,6 ,real ,it_spmd(p),msgtyp,
167 . spmd_comm_world,req_rb(nbirecv),ierror)
177 IF(isendto(nin,loc_proc)/=0)
THEN
179 CALL mpi_waitany(nbirecv,req_rb,indexi,status,ierror)
181 CALL mpi_wait(req_rc(indexi),status,ierror)
199 IF(stife(i)==zero) cycle
200 ix1=int(nbx*(xmine(i)-xminb)/dx)
201 ix2=int(nbx*(xmaxe(i)-xminb)/dx)
204 IF(ix2 < 0.OR.ix1 > nbx) cycle
205 iy1=int(nby*(ymine(i)-yminb)/dy)
206 iy2=int(nby*(ymaxe(i)-yminb)/dy)
209 IF(iy2 < 0.OR.iy1 > nby) cycle
210 iz1=int(nbz*(zmine(i)-zminb)/dz)
211 iz2=int(nbz*(zmaxe(i)-zminb)/dz)
214 IF(iz2 < 0.OR.iz1 > nbz) cycle
218 test = btest(
crvoxel(iy,iz,p),ix)
235 CALL mpi_isend(nbox(p),1,mpi_integer,it_spmd(p),msgtyp,
236 . spmd_comm_world,req_sd(p),ierror)
241 ALLOCATE(buf(p)%P(
siz_xrem*nb_),stat=ierror)
243 CALL ancmsg(msgid=20,anmode=aninfo)
252 buf(p)%p(l+1:l+4) = itab(irectm(1:4,i))
253 buf(p)%p(l+5:l+8) = x(1,irectm(1:4,i))
254 buf(p)%p(l+9:l+12) = x(2,irectm(1:4,i))
255 buf(p)%p(l+13:l+16)= x(3,irectm(1:4,i))
256 buf(p)%p(l+17:l+19)= (/xmine(i),ymine(i),zmine(i)/)
257 buf(p)%p(l+20:l+22)= (/xmaxe(i),ymaxe(i),zmaxe(i)/)
258 buf(p)%p(l+23) = stife(i)
259 buf(p)%p(l+24) = sum(v(1,irectm(1:4,i)))/four
260 buf(p)%p(l+25) = sum(v(2,irectm(1:4,i)))/four
261 buf(p)%p(l+26) = sum(v(3,irectm(1:4,i)))/four
266 1 buf(p)%P(1),l,mpi_double_precision,it_spmd(p),msgtyp,
267 2 spmd_comm_world,req_sd2(p),ierror)
274 IF(ircvfrom(nin,loc_proc)/=0)
THEN
279 IF(isendto(nin,p)/=0)
THEN
283 . msgtyp,spmd_comm_world,status,ierror)
284 IF(
nsnfi(nin)%P(p)>0)
THEN
287 nshelr = nshelr +
nsnfi(nin)%P(p)
298 ALLOCATE(xrem(
siz_xrem,nshelr),stat=ierror)
300 ALLOCATE(xrem(
siz_xrem,2*nshelr),stat=ierror)
301 ALLOCATE(
irem(2,nshelr),stat=ierror1)
302 ierror=ierror+ierror1
305 CALL ancmsg(msgid=20,anmode=aninfo)
315 IF(ir4r8 == 1) iad = 2*ideb-1
317 1 xrem(1,iad),len,mpi_double_precision,it_spmd(p),
318 2 msgtyp,spmd_comm_world,req_rd(l),ierror)
319 ideb = ideb +
nsnfi(nin)%P(p)
322 CALL mpi_waitany(nbirecv,req_rd,indexi,status,ierror)
330 IF(ircvfrom(nin,loc_proc)/=0)
THEN
332 IF(isendto(nin,p)/=0)
THEN
334 CALL mpi_wait(req_sc(p),status,ierror)
335 CALL mpi_wait(req_sb(p),status,ierror)
341 IF(isendto(nin,loc_proc)/=0)
THEN
343 IF(ircvfrom(nin,p)/=0)
THEN
345 CALL mpi_wait(req_sd(p),status,ierror)
347 CALL mpi_wait(req_sd2(p),status,ierror)
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)