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"
68 INTEGER NIN, INACTI, IGAP, NRTM,
69 . IRECTM(4,NRTM), NSHELR,
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,INFO,I, LOC_PROC,P,IDEB,
81 . MSGOFF, MSGOFF2, MSGOFF3, MSGOFF4,
82 . J, L, LEN, NB_, NRTMR, 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, n1, n2, n3, n4,
89 . ix1,iy1,iz1,ix2,iy2,iz2, nod
92 . xmaxb,ymaxb,zmaxb,xminb,yminb,zminb
93 TYPE(r8_pointer),
DIMENSION(NSPMD) :: BUF
96 . xmin,ymin,zmin,xmax,
ymax,zmax
118 IF(ircvfrom(nin,loc_proc)==0.AND.
119 . isendto(nin,loc_proc)==0)
RETURN
120 bminma(1,loc_proc) = bminmal(1)
121 bminma(2,loc_proc) = bminmal(2)
122 bminma(3,loc_proc) = bminmal(3)
123 bminma(4,loc_proc) = bminmal(4)
124 bminma(5,loc_proc) = bminmal(5)
125 bminma(6,loc_proc) = bminmal(6)
130 IF(ircvfrom(nin,loc_proc)/=0)
THEN
132 IF(isendto(nin,p)/=0)
THEN
139 . it_spmd(p),msgtyp,spmd_comm_world,req_sc(p),ierror)
142 . bminma(1,loc_proc),6 ,real ,it_spmd(p),msgtyp,
143 . spmd_comm_world ,req_sb(p),ierror)
152 IF(isendto(nin,loc_proc)/=0)
THEN
155 IF(ircvfrom(nin,p)/=0)
THEN
159 msgtyp = msgoff + nspmd*ispmd + p +nin
164 . it_spmd(p),msgtyp,spmd_comm_world,req_rc(nbirecv),ierror)
167 . bminma(1,p) ,6 ,real ,it_spmd(p),msgtyp,
168 . spmd_comm_world,req_rb(nbirecv),ierror)
178 IF(isendto(nin,loc_proc)/=0)
THEN
180 CALL mpi_waitany(nbirecv,req_rb,indexi,status,ierror)
182 CALL mpi_wait(req_rc(indexi),status,ierror)
197 ! remote shell list generation
200 IF(stife(i)==zero) cycle
201 ix1=int(nbx*(xmine(i)-xminb)/dx)
202 ix2=int(nbx*(xmaxe(i)-xminb)/dx)
205 IF(ix2 < 0.OR.ix1 > nbx) cycle
206 iy1=int(nby*(ymine(i)-yminb)/dy)
207 iy2=int(nby*(ymaxe(i)-yminb)/dy)
210 IF(iy2 < 0.OR.iy1 > nby) cycle
211 iz1=int(nbz*(zmine(i)-zminb)/dz)
212 iz2=int(nbz*(zmaxe(i)-zminb)/dz)
215 IF(iz2 < 0.OR.iz1 > nbz) cycle
219 test = btest(
crvoxel(iy,iz,p),ix)
236 CALL mpi_isend(nbox(p),1,mpi_integer,it_spmd(p),msgtyp,
237 . spmd_comm_world,req_sd(p),ierror)
242 ALLOCATE(buf(p)%P(
siz_xrem*nb_),stat=ierror)
244 CALL ancmsg(msgid=20,anmode=aninfo)
253 buf(p)%p(l+1:l+4) = itab(irectm(1:4,i))
254 buf(p)%p(l+5:l+8) = x(1,irectm(1:4,i))
255 buf(p)%p(l+9:l+12) = x(2,irectm(1:4,i))
256 buf(p)%p(l+13:l+16)= x(3,irectm(1:4,i))
257 buf(p)%p(l+17:l+19)= (/xmine(i),ymine(i),zmine(i)/)
258 buf(p)%p(l+20:l+22)= (/xmaxe(i),ymaxe(i),zmaxe(i)/)
259 buf(p)%p(l+23) = stife(i)
260 buf(p)%p(l+24) = sum(v(1,irectm(1:4,i)))/four
261 buf(p)%p(l+25) = sum(v(2,irectm(1:4,i)))/four
262 buf(p)%p(l+26) = sum(v(3,irectm(1:4,i)))/four
267 1 buf(p)%P(1),l,mpi_double_precision,it_spmd(p),msgtyp,
268 2 spmd_comm_world,req_sd2(p),ierror)
275 IF(ircvfrom(nin,loc_proc)/=0)
THEN
280 IF(isendto(nin,p)/=0)
THEN
284 . msgtyp,spmd_comm_world,status,ierror)
285 IF(
nsnfi(nin)%P(p)>0)
THEN
288 nshelr = nshelr +
nsnfi(nin)%P(p)
299 ALLOCATE(xrem(
siz_xrem,nshelr),stat=ierror)
301 ALLOCATE(xrem(
siz_xrem,2*nshelr),stat=ierror)
302 ALLOCATE(
irem(2,nshelr),stat=ierror1)
303 ierror=ierror+ierror1
306 CALL ancmsg(msgid=20,anmode=aninfo)
316 IF(ir4r8 == 1) iad = 2*ideb-1
318 1 xrem(1,iad),len,mpi_double_precision,it_spmd(p),
319 2 msgtyp,spmd_comm_world,req_rd(l
320 ideb = ideb +
nsnfi(nin)%P(p)
323 CALL mpi_waitany(nbirecv,req_rd,indexi,status,ierror)
331 IF(ircvfrom(nin,loc_proc)/=0)
THEN
333 IF(isendto(nin,p)/=0)
THEN
335 CALL mpi_wait(req_sc(p),status,ierror)
336 CALL mpi_wait(req_sb(p),status,ierror)
342 IF(isendto(nin,loc_proc)/=0)
THEN
344 IF(ircvfrom(nin,p)/=0)
THEN
346 CALL mpi_wait(req_sd(p),status,ierror)
348 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)