41 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
42#include "implicit_f.inc"
57 INTEGER IPLY,IDPLY,EMPSIZPL
65 INTEGER ,MSGOFF2,STAT(MPI_STATUS_SIZE,NSPMD-1), IERR
66 INTEGER I,N,ND,EMPL,P,ITAG,INORM(3),K,IXNN
72 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: WRTBUF
73 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: FSENDBUF,FRECBUF
74 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISENDBUF,IRECBUF
84 plysiz =
plynod(iply)%PLYNUMNODS
85 ALLOCATE(wrtbuf(3,
plysizg(iply)))
90 empl =
plynod(iply)%PLYNODID(nd)-empsizpl
92 s = sqrt(xnorm(1,i)**2 + xnorm(2,i)**2 + xnorm(3,i)**2)
95 inorm(1) = xnorm(1,i) * s
96 inorm(2) = xnorm(2,i) * s
97 inorm(3) = xnorm(3,i) * s
104 wrtbuf(1,empl)= inorm(1)
105 wrtbuf(2,empl)= inorm(2)
106 wrtbuf(3,empl)= inorm(3)
116 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
120 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
123 empl = irecbuf(i)-empsizpl
124 wrtbuf(1,empl)=frecbuf(1,i)
125 wrtbuf(2,empl)=frecbuf(2,i)
126 wrtbuf(3,empl)=frecbuf(3,i)
128 DEALLOCATE(irecbuf,frecbuf)
133 empsizpl=empsizpl+
plysizg(iply)
136 plysiz =
plynod(iply)%PLYNUMNODS
137 ALLOCATE (fsendbuf(3,plysiz))
138 ALLOCATE (isendbuf(plysiz))
141 i =
plynod(iply)%NODES(nd)
143 s = sqrt(xnorm(1,i)**2 + xnorm(2,i)**2 + xnorm(3,i)**2)
146 inorm(1) = xnorm(1,i) * s
147 inorm(2) = xnorm(2,i) * s
148 inorm(3) = xnorm(3,i) * s
155 fsendbuf(1,nd) = inorm(1)
156 fsendbuf(2,nd) = inorm(2)
157 fsendbuf(3,nd) = inorm(3)
159 isendbuf(nd) =
plynod(iply)%PLYNODID(nd)
163 CALL mpi_send(isendbuf,plysiz,mpi_integer,it_spmd(1),
164 . itag,spmd_comm_world,ierr)
167 CALL mpi_send(fsendbuf,plysiz*3,mpi_integer,it_spmd(1),
168 . itag,spmd_comm_world,ierr)
170 DEALLOCATE(isendbuf,fsendbuf)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)