43 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
44#include "implicit_f.inc"
58 INTEGER,
INTENT(IN) :: IAD_ELEM(2,*),FR_ELEM(*)
59 my_real ,
INTENT(INOUT) :: min_array(numnod),max_array(numnod)
64 INTEGER LENCOM,MSGOFF ,MSGTYP
65 my_real,
dimension(:),
ALLOCATABLE :: send_buf,rec_buf
66 INTEGER STATUS(MPI_STATUS_SIZE),REQ_R(NSPMD),REQ_S(NSPMD)
68 INTEGER P,J,NOD,SIZ,L,IAD
73 lencom = ( iad_elem(1,nspmd+1) - iad_elem(1,1) )
76 ALLOCATE(send_buf(2 * lencom),stat=ierror)
78 CALL ancmsg(msgid=20,anmode=aninfo)
82 ALLOCATE(rec_buf(2 * lencom),stat=ierror)
84 CALL ancmsg(msgid=20,anmode=aninfo)
93 siz = iad_elem(1,p+1)-iad_elem(1,p)
96 s rec_buf(l),2*siz,real,it_spmd(p),msgtyp,
97 g spmd_comm_world,req_r(p),ierror)
107 siz = iad_elem(1,p+1)-iad_elem(1,p)
110 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
112 send_buf(l)=min_array(nod)
113 send_buf(l + 1)=max_array(nod)
118 s send_buf(iad),2*siz,real,it_spmd(p),msgtyp,
119 g spmd_comm_world,req_s(p),ierror)
129 siz = iad_elem(1,p+1)-iad_elem(1,p)
131 CALL mpi_wait(req_r(p),status,ierror)
133 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
135 min_array(nod) =
min(min_array(nod), rec_buf(l))
136 max_array(nod) =
max(max_array(nod), rec_buf(l + 1))
146 IF(iad_elem(1,p+1)-iad_elem(1,p)>0)
THEN
147 CALL mpi_wait(req_s(p),status,ierror)
150 IF (
ALLOCATED(send_buf))
DEALLOCATE(send_buf)
151 IF (
ALLOCATED(rec_buf))
DEALLOCATE(rec_buf)
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)