35 * NOD_PXFEM, IFUNC,EMPSIZPL)
43 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
44#include
"implicit_f.inc"
57 INTEGER NODGLOB(*),NOD_PXFEM(*)
58 INTEGER IPLY,IFUNC,EMPSIZPL
64 INTEGER MSGOFF,MSGOFF2,STAT(MPI_STATUS_SIZE,NSPMD-1), IERR
65 INTEGER I, N, ND, EMPL, P, ITAG
68 REAL ,
DIMENSION(:,:),
ALLOCATABLE :: WRTBUF
70 * ,
DIMENSION(:,:),
ALLOCATABLE :: fsendbuf,frecbuf
71 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISENDBUF,IRECBUF
79 plysiz =
plynod(iply)%PLYNUMNODS
80 ALLOCATE(wrtbuf(3,
plysizg(iply)))
86 empl =
plynod(iply)%PLYNODID(nd)-empsizpl
89 wrtbuf(1,empl)=
ply(iply)%V(1,n)
90 wrtbuf(2,empl)=
ply(iply)%V(2,n)
91 wrtbuf(3,empl)=
ply(iply)%V(3,n)
94 wrtbuf(1,empl)=
ply(iply)%U(1,n)
95 wrtbuf(2,empl)=
ply(iply)%U(2,n)
96 wrtbuf(3,empl)=
ply(iply)%U(3,n)
99 wrtbuf(1,empl)=
ply(iply)%A(1,n)
100 wrtbuf(2,empl)=
ply(iply)%A(2,n)
101 wrtbuf(3,empl)=
ply(iply)%A(3,n)
115 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
118 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
121 empl = irecbuf(i)-empsizpl
122 wrtbuf(1,empl)=frecbuf(1,i)
123 wrtbuf(2,empl)=frecbuf(2,i)
124 wrtbuf(3,empl)=frecbuf(3,i)
126 DEALLOCATE(irecbuf,frecbuf)
131 empsizpl = empsizpl +
plysizg(iply)
133 plysiz =
plynod(iply)%PLYNUMNODS
134 ALLOCATE (fsendbuf(3,plysiz))
135 ALLOCATE (isendbuf(plysiz))
138 i =
plynod(iply)%NODES(nd)
142 fsendbuf(1,nd) =
ply(iply)%V(1,n)
143 fsendbuf(2,nd) =
ply(iply)%V(2,n)
144 fsendbuf(3,nd) =
ply(iply)%V(3,n)
146 ELSEIF (ifunc==2)
THEN
147 fsendbuf(1,nd) =
ply(iply)%U(1,n)
148 fsendbuf(2,nd) =
ply(iply)%U(2,n)
149 fsendbuf(3,nd) =
ply(iply)%U(3,n)
151 ELSEIF (ifunc==3)
THEN
152 fsendbuf(1,nd) =
ply(iply)%A(1,n)
153 fsendbuf(2,nd) =
ply(iply)%A(2,n)
154 fsendbuf(3,nd) =
ply(iply)%A(3,n)
156 fsendbuf(1,nd) = zero
157 fsendbuf(2,nd) = zero
158 fsendbuf(3,nd) = zero
161 isendbuf(nd) =
plynod(iply)%PLYNODID(nd)
165 CALL mpi_send(isendbuf,plysiz,mpi_integer,it_spmd(1),
166 . itag,spmd_comm_world,ierr)
169 CALL mpi_send(fsendbuf,plysiz*3,real,it_spmd(1),
170 . itag,spmd_comm_world,ierr)
172 DEALLOCATE(isendbuf,fsendbuf)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)