38 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
39#include "implicit_f.inc"
55 INTEGER (NRBE3L,*),LRBE3(*),NODGLOB(*),WEIGHT(*),
56 * nerbe3y,nerbe3t(nrbe3g)
62 INTEGER ,SIZRBE3,SBUFSIZ,PSNRBE3
63 INTEGER NSN,IADG,IAD,SN,MN,NGRBE
65 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SECNDNODS,SZLOCRBE3,PGLOBRBE3
67 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SENDBUF,RECBUF,
69 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: P0RECRBE3, IIN
73 INTEGER MSGOFF,MSGOFF2,MSGTYP,INFO,ATID,ATAG,ALEN
74 INTEGER STATUS(MPI_STATUS_SIZE),IERROR,ISD(NSPMD)
79 ALLOCATE(secndnods(nrbe3g))
80 ALLOCATE(szlocrbe3(nrbe3g))
81 ALLOCATE(pglobrbe3(nrbe3g))
97 IF (weight(lrbe3(irbe3(1,i)+n))==1)
98 . szlocrbe3(ngrbe) = szlocrbe3(ngrbe) + 1
100 sbufsiz = sbufsiz + szlocrbe3(ngrbe)
106 ALLOCATE(p0recrbe3(nrbe3g,nspmd))
108 p0recrbe3(i,1) = szlocrbe3(i)
113 CALL mpi_recv(p0recrbe3(1,p),nrbe3g,mpi_integer,it_spmd(p),
114 * msgtyp,spmd_comm_world,status,ierror)
121 CALL mpi_send(szlocrbe3,nrbe3g,mpi_integer,it_spmd(1),
122 . msgtyp,spmd_comm_world,ierror)
134 ALLOCATE(sendbuf(sbufsiz))
141 IF (weight(sn) == 1 )
THEN
143 sendbuf(snrbe3)=nodglob(sn)
149 CALL mpi_send(sendbuf,snrbe3,mpi_integer,it_spmd(1),msgtyp,
150 * spmd_comm_world,ierror)
159 IF (weight(mn)==1)
THEN
161 secndnods(ngrbe)=nodglob(mn)
173 ALLOCATE(iadrbe3(nrbe3g+1))
174 ALLOCATE(p0rbe3buf(nerbe3y))
179 snrbe3 = p0recrbe3(i,1)
181 snrbe3 = snrbe3 + p0recrbe3(i,n)
183 iadrbe3(i+1)=iadrbe3(i)+snrbe3
189 pglobrbe3(i)=iadrbe3(i)
196 iadg = iadrbe3(ngrbe)
200 IF (weight(sn) == 1 )
THEN
202 p0rbe3buf(iadg + snrbe3) = nodglob(sn)
205 pglobrbe3(ngrbe)= pglobrbe3(ngrbe) + snrbe3
213 sizrbe3 = sizrbe3 + p0recrbe3(i,p)
215 IF (sizrbe3 > 0)
THEN
216 ALLOCATE(recbuf(sizrbe3))
218 CALL mpi_recv(recbuf,sizrbe3,mpi_integer,it_spmd(p),msgtyp,
219 * spmd_comm_world,status,ierror)
224 DO n=1,p0recrbe3(i,p)
225 psnrbe3 = psnrbe3 + 1
226 p0rbe3buf(iadg + n) = recbuf(psnrbe3)
228 pglobrbe3(i) = pglobrbe3(i) + p0recrbe3(i,p)
238 IF (weight(mn)==1)
THEN
240 secndnods(ngrbe)=nodglob(mn)
248 nsn = iadrbe3(i+1) - iadrbe3(i)
255 iin(2,n)=p0rbe3buf(iadg + n)-1
261 DEALLOCATE(p0rbe3buf)
262 DEALLOCATE(p0recrbe3)
266 DEALLOCATE(secndnods)
267 DEALLOCATE(szlocrbe3)
268 DEALLOCATE(pglobrbe3)