35 1 BUFS ,LBUFS,IXS ,IXC ,IXTG ,
36 2 IXQ ,IPARG ,ITAGL ,NODES,
37 3 IRSIZE,IRECV ,CNEL ,ADDCNEL,OFC ,
38 4 OFT ,OFTG ,OFUR ,OFR ,OFP ,
39 5 LINDEX,IXP ,IXR ,IXT ,GEO ,
42 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
43 use element_mod ,
only : nixs,nixq,nixc,nixt,nixp,nixr,nixtg
47#include "implicit_f.inc"
62 TYPE(nodal_arrays_),
INTENT(INOUT) :: NODES
63 INTEGER IXS(NIXS,*), IXQ(NIXQ,*), IXC(NIXC,*), IXP(NIXP,*),
64 . IXR(NIXR,*), IXT(NIXT,*), TAGEL(*),
65 . IXTG(NIXTG,*), IPARG(NPARG,*),
66 . BUFS(*),ITAGL(*), IRECV(*), CNEL(0:*), ADDCNEL(0:*),
67 . IRSIZE, LBUFS, OFC, OFT, OFTG, OFUR, OFR, OFP, LINDEX
68 INTEGER,
DIMENSION(2,NSPMD+1),
INTENT(in) :: IAD_ELEM
77 INTEGER MSGOFF2 ,MSGOFF3, MSGTYP, LOC_PROC,
78 . IERROR,I, IDEB, 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
89 ALLOCATE(BUFR(IRSIZE))
95 req_r1(1:nspmd) = mpi_request_null
100 . bufr(ideb),irecv(i),mpi_integer,it_spmd(i),msgtyp,
101 . spmd_comm_world,req_r1(i),ierror)
109 siz = (iad_elem(1,i+1)-iad_elem(1,i))
110 IF(i.NE.loc_proc.AND.lbufs.GT.0.AND.siz>0)
THEN
113 c bufs,lbufs,mpi_integer,it_spmd(i),msgtyp,
114 g spmd_comm_world,req_s2(i),ierror)
124 CALL mpi_wait(req_r1(i),status,ierror)
133 nbel = bufr(ideb+2)+bufr(ideb+3)
136 IF(((ityp==7.OR.ityp==10.OR.ityp==3.OR.ityp==5.OR.
137 + ityp==20.OR.ityp==22.OR.ityp==23.OR.ityp==24.OR.
138 + ityp==25.OR.ityp==2 ).AND.idel==2) )
THEN
140 n1 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+1))
143 n2 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+2))
145 n3 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+3))
147 n4 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+4))
149 DO j=addcnel(n1),addcnel(n1+1)-1
161 ELSEIF(ii>ofc.AND.ii<=oft)
THEN
167 ELSEIF(ii>oftg.AND.ii<=ofur)
THEN
174 IF(itagl(n1)+itagl(n2)+itagl(n3)+itagl(n4)==4)
THEN
187 ELSEIF(((ityp==7.OR.ityp==10.OR.ityp==3.OR.ityp==5
188 + .OR.ityp==20.OR.ityp==22.OR.ityp==23.OR.ityp==24
189 + .OR.ityp==25.OR.ityp==2) .AND. idel == 1))
THEN
191 n1 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+1))
194 n2 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+2))
196 n3 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+3))
198 n4 = get_local_node_id(nodes, bufr(ideb-1+4*(nn-1)+4))
200 DO j=addcnel(n1),addcnel(n1+1)-1
212 ELSEIF(ii>ofc.AND.ii<=oft)
THEN
218 ELSEIF(ii>oftg.AND.ii<=ofur)
THEN
225 IF(itagl(n1)+itagl(n2)+itagl(n3)+itagl(n4)==4)
THEN
238 ELSEIF((ityp==11.OR.ityp==-20).AND.idel==2)
THEN
240 n1 = get_local_node_id(nodes, bufr(ideb-1+2*(nn-1)+1))
243 n2 = get_local_node_id(nodes, bufr(ideb-1+2*(nn-1)+2))
245 DO j=addcnel(n1),addcnel(n1+1)-1
255 ELSEIF(ii>ofc.AND.ii<=oft)
THEN
261 ELSEIF(ii>oftg.AND.ii<=ofur)
THEN
267 ELSEIF(ii>oft.AND.ii<=ofp)
THEN
273 ELSEIF(ii>ofp.AND.ii<=ofr)
THEN
279 ELSEIF(ii>ofr.AND.ii<=oftg)
THEN
285 IF(nint(geo(12,ixr(1,ii)))==12)
THEN
290 IF(itagl(n1)+itagl(n2)==2)
THEN
302 ELSEIF((ityp==11.OR.ityp==-20).AND.idel==1)
THEN
304 n1 = get_local_node_id(nodes, bufr(ideb-1+2*(nn-1)+1))
307 n2 = get_local_node_id(nodes, bufr(ideb-1+2*(nn-1)+2))
309 DO j=addcnel(n1),addcnel(n1+1)-1
319 ELSEIF(ii>ofc.AND.ii<=oft)
THEN
325 ELSEIF(ii>oftg.AND.ii<=ofur)
THEN
331 ELSEIF(ii>oft.AND.ii<=ofp)
THEN
337 ELSEIF(ii>ofp.AND.ii<=ofr)
THEN
343 ELSEIF(ii>ofr.AND.ii<=oftg)
THEN
349 IF(nint(geo(12,ixr(1,ii)))==12)
THEN
354 IF(itagl(n1)+itagl(n2)==2)
THEN
369 irecv(i)=irecv(i)+nbel
382 c bufr(ideb),len,mpi_integer,it_spmd(i),msgtyp,
383 g spmd_comm_world,req_s3(i),ierror)
391 siz = (iad_elem(1,i+1)-iad_elem(1,i))
392 IF(i.NE.loc_proc.AND.lbufs.GT.0.AND.siz>0)
THEN
393 CALL mpi_wait(req_s2(i),status,ierror)
399 ALLOCATE(bufs2(lindex))
405 siz = (iad_elem(1,i+1)-iad_elem(1,i))
406 IF(i.NE.loc_proc.AND.lindex.GT.0.AND.siz>0)
THEN
409 . bufs2,lindex,mpi_integer,it_spmd(i),msgtyp,
410 . spmd_comm_world,status,ierror)
412 bufs(j) =
max(bufs(j),bufs2(j))
424 CALL mpi_wait(req_s3(i),status,ierror)