34 * NOD_PXFEM, X, ZI_PLY,EMPSIZPL )
43#include "implicit_f.inc"
57 INTEGER NODGLOB(*),NOD_PXFEM(*),EMPSIZPL
60 . x(3,*),zi_ply(nplyxfe,*)
65 INTEGER MSGOFF,MSGOFF2,STAT(MPI_STATUS_SIZE,NSPMD-1), IERR
70 INTEGER I,N,II,ND,EMPL,P,ITAG
75 REAL ,
DIMENSION(:,:),
ALLOCATABLE :: WRTBUF
77 * ,
DIMENSION(:,:),
ALLOCATABLE :: fsendbuf,frecbuf
78 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISENDBUF,IRECBUF
85 plysiz =
plynod(iply)%PLYNUMNODS
86 ALLOCATE(wrtbuf(3,
plysizg(iply)))
92 norm = sqrt(vn_nod(1,n)**2+vn_nod(2,n)**2+vn_nod(3,n)**2)
94 empl =
plynod(iply)%PLYNODID(nd)-empsizpl
97 val = x(1,i)+zi_ply(n,iply)*vn +
ply(iply)%U(1,n)
100 vn = vn_nod(2,n)*
norm
101 val = x(2,i)+zi_ply(n,iply)*vn +
ply(iply)%U(2,n)
104 vn = vn_nod(3,n)*
norm
105 val = x(3,i)+zi_ply(n,iply)*vn +
ply(iply)%U(3,n)
115 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
118 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
120 empl = irecbuf(i)-empsizpl
121 wrtbuf(1,empl)=frecbuf(1,i)
122 wrtbuf(2,empl)=frecbuf(2,i)
123 wrtbuf(3,empl)=frecbuf(3,i)
125 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)
140 norm = sqrt(vn_nod(1,n)**2+vn_nod(2,n)**2+vn_nod(3,n)**2)
142 vn = vn_nod(1,n)*
norm
143 fsendbuf(1,nd) = x(1,i)+zi_ply(n,iply)*vn +
ply(iply)%U(1,n)
144 vn = vn_nod(2,n)*
norm
145 fsendbuf(2,nd) = x(2,i)+zi_ply(n,iply)*vn +
ply(iply)%U(2,n)
146 vn = vn_nod(3,n)*
norm
147 fsendbuf(3,nd) = x(3,i)+zi_ply(n,iply)*vn +
ply(iply)%U(3,n)
148 isendbuf(nd) =
plynod(iply)%PLYNODID(nd)
151 CALL mpi_send(isendbuf,plysiz,mpi_integer,it_spmd(1),
152 . itag,spmd_comm_world,ierr)
155 CALL mpi_send(fsendbuf,plysiz*3,real,it_spmd(1),
156 . itag,spmd_comm_world,ierr)
158 DEALLOCATE(isendbuf,fsendbuf)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)