34
35
36
37 USE spmd_comm_world_mod, ONLY : spmd_comm_world
38#include "implicit_f.inc"
39
40
41
42#include "spmd.inc"
43
44
45
46#include "com01_c.inc"
47#include "intstamp_c.inc"
48#include "task_c.inc"
49
50
51
53 . gapinf(*),vx(*),vy(*),vz(*),dist(*)
54
55
56
57#ifdef MPI
58 INTEGER I, , MSGTYP, IERROR, LOC_PROC,
59 . SIZE
61 . rbuf(5,nintstamp,nspmd),rrbuf(5,nintstamp)
62
63
64
65
66 loc_proc=ispmd+1
67 SIZE = 5*nintstamp
68
69 DO n=1,nintstamp
70 rrbuf(1,n) = gapinf(n)
71 rrbuf(2,n) = vx(n)
72 rrbuf(3,n) = vy(n)
73 rrbuf(4,n) = vz(n)
74 rrbuf(5,n) = dist(n)
75 END DO
76
78 s rrbuf ,SIZE ,real,
79 r rbuf ,SIZE ,real,it_spmd(1),
80 g spmd_comm_world,ierror)
81 IF(ispmd==0) THEN
82 DO n=1,nintstamp
83 DO i = 2, nspmd
84 IF(rbuf(1,n,i)<rbuf(1,n,1))THEN
85 rbuf(1,n,1) = rbuf(1,n,i)
86 END IF
87 IF(rbuf(2,n,i)>rbuf(2,n,1))THEN
88 rbuf(2,n,1) = rbuf(2,n,i)
89 END IF
90 IF(rbuf(3,n,i)>rbuf(3,n,1))THEN
91 rbuf(3,n,1) = rbuf(3,n,i)
92 END IF
93 IF(rbuf(4,n,i)>rbuf(4,n,1))THEN
94 rbuf(4,n,1) = rbuf(4,n,i)
95 END IF
96 IF(rbuf(5,n,i)<rbuf(5,n,1))THEN
97 rbuf(5,n,1) = rbuf(5,n,i)
98 END IF
99 END DO
100 END DO
101 END IF
103
104 DO n=1,nintstamp
105 gapinf(n)=rbuf(1,n,1)
106 vx(n) =rbuf(2,n,1)
107 vy(n) =rbuf(3,n,1)
108 vz(n) =rbuf(4,n,1)
109 dist(n) =rbuf(5,n,1)
110 END DO
111
112#endif
113 RETURN
subroutine mpi_gather(sendbuf, cnt, datatype, recvbuf, reccnt, rectype, root, comm, ierr)
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)