39 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
40#include "implicit_f.inc"
56 INTEGER IRBE2(NRBE2L,*),LRBE2(*),NODGLOB(*),WEIGHT(*),
57 * nerbe2y,nerbe2t(nrbe2g)
63 INTEGER SNRBE2,SIZRBE2,SBUFSIZ,PSNRBE2
64 INTEGER NSN,IADG,IAD,SN,MN,NGRBE
66 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SZLOCRBE2,PGLOBRBE2,MAINNODS
67 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SENDBUF,RECBUF,
69 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: P0RECRBE2, IIN
73 INTEGER ,MSGOFF2,MSGTYP,INFO,ATID,ATAG,ALEN
74 INTEGER STATUS(MPI_STATUS_SIZE),IERROR,ISD(NSPMD)
79 ALLOCATE(szlocrbe2(nrbe2g))
80 ALLOCATE(pglobrbe2(nrbe2g))
81 ALLOCATE(mainnods(nrbe2g))
98 IF (weight(lrbe2(irbe2(1,i)+n))==1)
99 . szlocrbe2(ngrbe) = szlocrbe2(ngrbe) + 1
101 sbufsiz = sbufsiz + szlocrbe2(ngrbe)
109 ALLOCATE(p0recrbe2(nrbe2g,nspmd))
111 p0recrbe2(i,1) = szlocrbe2(i)
116 CALL mpi_recv(p0recrbe2(1,p),nrbe2g,mpi_integer,it_spmd(p),
117 * msgtyp,spmd_comm_world,status,ierror
123 CALL mpi_send(szlocrbe2,nrbe2g,mpi_integer,it_spmd(1),
124 . msgtyp,spmd_comm_world,ierror)
135 ALLOCATE(sendbuf(sbufsiz))
142 IF (weight(sn) == 1 )
THEN
144 sendbuf(snrbe2)=nodglob(sn)
150 CALL mpi_send(sendbuf,snrbe2,mpi_integer,it_spmd(1),msgtyp,
151 * spmd_comm_world,ierror)
160 IF (weight(mn)==1)
THEN
162 mainnods(ngrbe)=nodglob(mn)
175 ALLOCATE(iadrbe2(nrbe2g+1))
176 ALLOCATE(p0rbe2buf(nerbe2y))
181 snrbe2 = p0recrbe2(i,1)
183 snrbe2 = snrbe2 + p0recrbe2(i,n)
185 iadrbe2(i+1)=iadrbe2(i)+snrbe2
190 pglobrbe2(i)=iadrbe2(i)
197 iadg = iadrbe2(ngrbe)
201 IF (weight(sn) == 1 )
THEN
203 p0rbe2buf(iadg + snrbe2) = nodglob(sn)
206 pglobrbe2(ngrbe)=pglobrbe2(ngrbe) + snrbe2
214 sizrbe2 = sizrbe2 + p0recrbe2(i,p)
217 IF (sizrbe2 > 0)
THEN
218 ALLOCATE(recbuf(sizrbe2))
220 CALL mpi_recv(recbuf,sizrbe2,mpi_integer,it_spmd(p),msgtyp,
221 * spmd_comm_world,status,ierror)
226 DO n=1,p0recrbe2(i,p)
227 psnrbe2 = psnrbe2 + 1
228 p0rbe2buf(iadg + n) = recbuf(psnrbe2)
230 pglobrbe2(i) = pglobrbe2(i) + p0recrbe2(i,p)
239 IF (weight(mn)==1)
THEN
241 mainnods(ngrbe)=nodglob(mn)
248 nsn = iadrbe2(i+1) - iadrbe2(i)
255 iin(2,n)=p0rbe2buf(iadg + n)-1
261 DEALLOCATE(p0rbe2buf)
262 DEALLOCATE(p0recrbe2)
266 DEALLOCATE(szlocrbe2)
267 DEALLOCATE(pglobrbe2)