33
34
35
37 USE spmd_mod
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "spmd.inc"
46
47
48
49#include "task_c.inc"
50#include "com01_c.inc"
51#include "com04_c.inc"
52#include "param_c.inc"
53
54
55
56 INTEGER MONVOL(*)
57#ifdef MPI
58
59
60
61 INTEGER K1, N, ITYP, ID, IFV, LEN
62 INTEGER BUFS(6,NVOLU), BUFR(6,NVOLU)
63 INTEGER IERROR
64
65
66 k1 = 1
67 ifv = 0
68 DO n=1,nvolu
69 ityp=monvol(k1-1+2)
70 IF (ityp==6 .OR. ityp==8) THEN
71 ifv = ifv + 1
73 IF((
fvspmd(ifv)%PMAIN-1 == ispmd) .OR. (nspmd == 1))
THEN
75 bufs(2,ifv)=monvol(k1-1+49)
76 bufs(3,ifv)=monvol(k1-1+70)
77 bufs(4,ifv)=monvol(k1-1+71)
78 bufs(5,ifv)=monvol(k1-1+72)
79 bufs(6,ifv)=monvol(k1-1+73)
80 ELSE
81
82
83 bufs(1,ifv) = 0
84 bufs(2,ifv) = 0
85 bufs(3,ifv) = 0
86 bufs(4,ifv) = 0
87 bufs(5,ifv) = 0
88 bufs(6,ifv) = 0
89 ENDIF
90 ENDIF
91 k1=k1+nimv
92 ENDDO
93
94
95
96
97
98 IF(ifv > 0 ) THEN
99 len = ifv*6
101 . mpi_integer,mpi_sum,
102 . spmd_comm_world,ierror)
103 ENDIF
104
105
106
107
108
109 IF ( ispmd == 0 ) THEN
110 k1 = 1
111 ifv = 0
112 DO n=1,nvolu
113 ityp=monvol(k1-1+2)
114 IF (ityp==6 .OR. ityp==8) THEN
115 ifv = ifv + 1
116 monvol(k1-1+1) = bufr(1,ifv)
117 monvol(k1-1+49) = bufr(2,ifv)
118 monvol(k1-1+70) = bufr(3,ifv)
119 monvol(k1-1+71) = bufr(4,ifv)
120 monvol(k1-1+72) = bufr(5,ifv)
121 monvol(k1-1+73) = bufr(6,ifv)
122 ENDIF
123 k1=k1+nimv
124 ENDDO
125 ENDIF
126
127
128
129#endif
130 RETURN
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
type(fvbag_spmd), dimension(:), allocatable fvspmd