32
33
34
35#include "implicit_f.inc"
36
37
38
39#include "spmd.inc"
40
41
42
43#include "com04_c.inc"
44#include "param_c.inc"
45#include "task_c.inc"
46
47
48
49 INTEGER ISENDTO(NINTER+1,*) ,IRCVFROM(NINTER+1,*),
50 . NEWFRONT(*), NINTC, INTLIST(*), IPARI(NPARI,*)
52 . xslv_l(18,*), xmsr_l(12,*), vslv_l(6,*),
53 . vmsr_l(6,*), tzinf(*), size_t(*),delta_pmax_gap(*),
54 . maxdgap(ninter)
55
56
57
58#ifdef MPI
59 INTEGER LOC_PROC,IERROR,I_LEN,myop,
60 . KK, L, J, NIN, REQ,
61 . STATUS(MPI_STATUS_SIZE),type_reduc
62 parameter(i_len = 46)
64 . sbuf(nintc*i_len), rbuf(nintc*i_len)
65 INTEGER REDUCE_MMX
67
68
69
70
71 loc_proc = ispmd+1
72 IF(ircvfrom(ninter+1,loc_proc)>0.OR.
73 + isendto(ninter+1,loc_proc)>0) THEN
74
75
76
78
80
82
83
84 l = 0
85 DO kk=1,nintc
86 nin = intlist(kk)
87
88 DO j=1,18
89 sbuf(l+j) = xslv_l(j,nin)
90 END DO
91 l = l + 18
92
93 DO j=1,12
94 sbuf(l+j) = xmsr_l(j,nin)
95 END DO
96 l = l + 12
97
98 DO j=1,6
99 sbuf(l+j) = vslv_l(j,nin)
100 END DO
101 l = l + 6
102
103 DO j=1,6
104 sbuf(l+j) = vmsr_l(j,nin)
105 END DO
106 l = l + 6
107 IF(ipari(7,nin)/=17)THEN
108
109 sbuf(l+1) = newfront(nin)
110 ELSE
111
112 sbuf(l+1) = size_t(nin)
113 END IF
114 l = l + 1
115
116 sbuf(l+1) = tzinf(kk)
117 l = l + 1
118
119 sbuf(l+1) = delta_pmax_gap(nin)
120 l = l + 1
121
122 sbuf(l+1) = maxdgap(nin)
123 l = l + 1
124 END DO
125
126
127
128
129! & comm_cont, ierror)
130
131
132
134 & comm_cont, ierror)
135
136
137
138
139
140
141
142 l = 0
143 DO kk=1,nintc
144 nin = intlist(kk)
145 IF(ircvfrom(nin,loc_proc)/=0.OR.
146 + isendto(nin,loc_proc)/=0)THEN
147 DO j=1,18
148 xslv_l(j,nin) = rbuf(l+j)
149 END DO
150 l = l + 18
151 DO j=1,12
152 xmsr_l(j,nin) = rbuf(l+j)
153 END DO
154 l = l + 12
155 DO j=1,6
156 vslv_l(j,nin) = rbuf(l+j)
157 END DO
158 l = l + 6
159 DO j=1,6
160 vmsr_l(j,nin) = rbuf(l+j)
161 END DO
162 l = l + 6
163 IF(ipari(7,nin)/=17)THEN
164 newfront(nin) = nint(rbuf(l+1))
165 ELSE
166 size_t(nin) = rbuf(l+1)
167 END IF
168 l = l + 1
169 tzinf(kk) = rbuf(l+1)
170 l = l + 1
171 delta_pmax_gap(nin) = rbuf(l+1)
172 l = l + 1
173
174 maxdgap(nin) = rbuf(l+1)
175 l = l + 1
176 ELSE
177 l = l + 46
178 END IF
179 END DO
180
181
184 END IF
185
186
187#endif
188 RETURN
subroutine mpi_type_free(newtyp, ierr_mpi)
subroutine mpi_type_contiguous(length, datatype, newtype, ierr_mpi)
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
subroutine mpi_type_commit(newtyp, ierr_mpi)
subroutine mpi_op_create(func, commute, op, ierr)
subroutine mpi_op_free(op, ierr)
subroutine reduce_mmx(rin, rinout, len, type)