44 nsend,node_send,nrecv,node_recv,&
45 nproc,proc_send,proc_recv,id,filempi,mpi_comm)
51 character*70 :: filename, filempi, filename_new
53 integer*4 :: nnode,ncs,nsend,nrecv,nproc,id,mpi_ierr
54 integer*4 :: i,j,k,ie,ip,ic,unitfile,ncs_mpi,nelem_mpi,nelem_loc, mpi_comm
56 integer*4,
dimension(:),
allocatable :: cs_mpi
57 integer*4,
dimension(:),
allocatable :: i4vec
58 integer*4,
dimension(nnode) :: node_proc
59 integer*4,
dimension(0:ncs) :: cs
60 integer*4,
dimension(nsend) :: node_send
61 integer*4,
dimension(nrecv) :: node_recv
62 integer*4,
dimension(nproc) :: proc_send, proc_recv
70 if ((ip -1).eq.id)
then
77 do i = cs(ie -1) +1, cs(ie) -1
78 if (node_proc(cs(i)).eq.(ip -1))
then
88 if (i4vec(j).lt.i4vec(i))
then
99 if (i4vec(i).ne.i4vec(j))
then
112 ic = ic +proc_recv(i)
115 do i = 1, proc_recv(ip)
116 node_recv(ic +i) = i4vec(i)
125 nrecv = nrecv +proc_recv(i)
172 if(id .eq. ip-1) ncs_mpi = ncs;
173 call mpi_bcast(ncs_mpi,1,speed_integer,ip-1,mpi_comm_world,mpi_ierr)
176 allocate(cs_mpi(0:ncs_mpi))
177 if(id .eq. ip-1) cs_mpi = cs;
179 call mpi_bcast(cs_mpi,ncs_mpi+1,speed_integer,ip-1,mpi_comm_world,mpi_ierr)
190 allocate(i4vec(ncs_mpi))
191 nelem_mpi = cs_mpi(0)-1
195 if ((ip -1).eq.id)
then
202 do i = cs_mpi(ie -1) +1, cs_mpi(ie) -1
203 if (node_proc(cs_mpi(i)).eq.id)
then
205 i4vec(ic) = cs_mpi(i)
212 if (i4vec(j).lt.i4vec(i))
then
222 if (i4vec(i).ne.i4vec(j))
then
234 ic = ic +proc_send(i)
237 do i = 1, proc_send(ip)
238 node_send(ic +i) = i4vec(i)
243 deallocate(i4vec, cs_mpi)
249 nsend = nsend +proc_send(i)
subroutine setup_mpi(nnode, node_proc, ncs, cs, nsend, node_send, nrecv, node_recv, nproc, proc_send, proc_recv, id, filempi, mpi_comm)
Routine used to setup the communication buffer structure.