34 * NOD_PXFEM, X, ZI_PLY,EMPSIZPL )
43#include "implicit_f.inc"
57 INTEGER NODGLOB(*),NOD_PXFEM(*),EMPSIZPL
60 . x(3,*),zi_ply(nplyxfe,*)
66 INTEGER MSGOFF,MSGOFF2,STAT(MPI_STATUS_SIZE,NSPMD-1), IERR
76 REAL ,
DIMENSION(:,:),
ALLOCATABLE :: WRTBUF
78 * ,
DIMENSION(:,:),
ALLOCATABLE :: fsendbuf,frecbuf
79 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ISENDBUF,IRECBUF
86 plysiz =
plynod(iply)%PLYNUMNODS
87 ALLOCATE(wrtbuf(3,
plysizg(iply)))
93 norm = sqrt(vn_nod(1,n)**2+vn_nod(2,n)**2+vn_nod(3,n)**2)
95 empl =
plynod(iply)%PLYNODID(nd)-empsizpl
98 val = x(1,i)+zi_ply(n,iply)*vn +
ply(iply)%U(1,n)
101 vn = vn_nod(2,n)*
norm
102 val = x(2,i)+zi_ply(n,iply)*vn +
ply(iply)%U(2,n)
105 vn = vn_nod(3,n)*
norm
106 val = x(3,i)+zi_ply(n,iply)*vn +
ply(iply)%U(3,n)
116 . it_spmd(p),itag, spmd_comm_world, stat, ierr)
119 . 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)
132 empsizpl=empsizpl+
plysizg(iply)
134 plysiz =
plynod(iply)%PLYNUMNODS
135 ALLOCATE (fsendbuf(3,plysiz))
136 ALLOCATE (isendbuf(plysiz))
139 i =
plynod(iply)%NODES(nd)
141 norm = sqrt(vn_nod(1,n)**2+vn_nod(2,n)**2+vn_nod(3,n)**2)
143 vn = vn_nod(1,n)*
norm
144 fsendbuf(1,nd) = x(1,i)+zi_ply(n,iply)*vn +
ply(iply)%U(1,n)
145 vn = vn_nod(2,n)*
norm
146 fsendbuf(2,nd) = x(2,i)+zi_ply(n,iply)*vn +
ply(iply)%U(2,n)
147 vn = vn_nod(3,n)*
norm
148 fsendbuf(3,nd) = x(3,i)+zi_ply(n,iply)*vn +
ply(iply)%U(3,n)
149 isendbuf(nd) =
plynod(iply)%PLYNODID(nd)
152 CALL mpi_send(isendbuf,plysiz,mpi_integer,it_spmd(1),
153 . itag,spmd_comm_world,ierr)
156 CALL mpi_send(fsendbuf,plysiz*3,real,it_spmd(1),
157 . itag,spmd_comm_world,ierr)
159 DEALLOCATE(isendbuf,fsendbuf)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)