36 1 BUFS ,LBUFS ,IXS ,IXC ,IXTG ,
37 2 IXQ ,IPARG ,ITAGL ,NODES,TAGEL ,
38 3 IRSIZE,IRECV ,CNEL ,ADDCNEL,OFC ,
39 4 OFT ,OFTG ,OFUR ,OFR ,OFP ,
40 5 OFQ ,LINDEX,IXP ,IXR ,IXT ,
43 use element_mod ,
only : nixs,nixq,nixc,nixp,nixr,nixt,nixtg
47 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
48#include "implicit_f.inc"
63 TYPE(nodal_arrays_),
INTENT(IN) :: NODES
64 INTEGER IXS(NIXS,*), IXQ(NIXQ,*), IXC(NIXC,*), IXP(NIXP,*),
65 . IXR(NIXR,*), IXT(NIXT,*), TAGEL(*),
66 . IXTG(NIXTG,*), IPARG(NPARG,*),
67 . BUFS(*),ITAGL(*), IRECV(*), CNEL(0:*), ADDCNEL(0:*),
68 . IRSIZE, LBUFS, OFC, OFT, OFTG, OFUR, OFR, OFP, LINDEX,
70 INTEGER,
DIMENSION(2,NSPMD+1),
INTENT(in) :: IAD_ELEM
77 INTEGER ,MSGOFF3, MSGTYP, LOC_PROC,
78 . IERROR,I, , LEN, N1, N2, N3, N4,
79 . K, IX, II, NN, J, IOFF,
82 . REQ_S2(NSPMD),REQ_S3(NSPMD),STATUS(MPI_STATUS_SIZE),
84 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFR, BUFS2
90 ALLOCATE(bufr(irsize))
96 req_r1(1:nspmd) = mpi_request_null
98 siz = (iad_elem(1,i+1)-iad_elem(1,i))
99 IF(i/=loc_proc.AND.irecv(i)>0.AND.siz>0)
THEN
102 . bufr(ideb),irecv(i),mpi_integer,it_spmd(i),msgtyp,
103 . spmd_comm_world,req_r1(i),ierror)
112 siz = (iad_elem(1,i+1)-iad_elem(1,i))
113 IF(i/=loc_proc.AND.lbufs>0.AND.siz>0)
THEN
116 c bufs,lbufs,mpi_integer,it_spmd(i),msgtyp,
117 g spmd_comm_world,req_s2(i),ierror)
127 siz = (iad_elem(1,i+1)-iad_elem(1,i))
128 IF(i/=loc_proc.AND.irecv(i)>0.AND.siz>0)
THEN
130 CALL mpi_wait(req_r1(i),status,ierror)
136 n1 = get_local_node_id(nodes, bufr(ideb+4*(nn-1)+1))
140 n2 = get_local_node_id(nodes, bufr(ideb+4*(nn-1)+2))
143 n3 = get_local_node_id(nodes, bufr(ideb+4*(nn-1)+3))
146 n4 = get_local_node_id(nodes, bufr(ideb+4*(nn-1)+4))
149 DO j=addcnel(n1),addcnel(n1+1)-1
161 ELSEIF(ii>ofq.AND.ii<=ofc)
THEN
167 ELSEIF(ii>ofc.AND.ii<=oft)
THEN
173 ELSEIF(ii>oftg.AND.ii<=ofur)
THEN
181 IF(itagl(n1)+itagl(n2)+itagl(n3)+itagl(n4)==4)
THEN
199 irecv(i)=irecv(i)+nbel
208 siz = (iad_elem(1,i+1)-iad_elem(1,i))
209 IF(i/=loc_proc.AND.irecv(i)>0.AND.siz>0)
THEN
213 c bufr(ideb),len,mpi_integer,it_spmd(i),msgtyp,
214 g spmd_comm_world,req_s3(i),ierror)
222 siz = (iad_elem(1,i+1)-iad_elem(1,i))
223 IF(i/=loc_proc.AND.lbufs>0.AND.siz>0)
THEN
224 CALL mpi_wait(req_s2(i),status,ierror)
230 ALLOCATE(bufs2(lindex))
236 siz = (iad_elem(1,i+1)-iad_elem(1,i))
237 IF(i/=loc_proc.AND.lindex>0.AND.siz>0)
THEN
240 . bufs2,lindex,mpi_integer,it_spmd(i),msgtyp,
241 . spmd_comm_world,status,ierror)
243 bufs(j) =
max(bufs(j),bufs2(j))
254 siz = (iad_elem(1,i+1)-iad_elem(1,i))
255 IF(i/=loc_proc.AND.siz>0.AND.irecv(i)>0)
THEN
256 CALL mpi_wait(req_s3(i),status,ierror)
subroutine spmd_exchseg_idel(bufs, lbufs, ixs, ixc, ixtg, ixq, iparg, itagl, nodes, tagel, irsize, irecv, cnel, addcnel, ofc, oft, oftg, ofur, ofr, ofp, ofq, lindex, ixp, ixr, ixt, geo, iad_elem)