33 1 ISENDTO,IRCVFROM,NEWFRONT,XSLV_L,XMSR_L,
34 2 VSLV_L ,VMSR_L ,INTLIST ,NINTC ,TZINF ,
35 3 SIZE_T ,IPARI ,DELTA_PMAX_GAP, MAXDGAP)
39 USE spmd_comm_world_mod,
ONLY
40#include "implicit_f.inc"
53 COMMON /ring/irecvf,isendt,iring
54 INTEGER IRECVF,ISENDT,IRING
62 INTEGER ISENDTO(NINTER+1,*) ,IRCVFROM(NINTER+1,*),
63 . NEWFRONT(*), NINTC, INTLIST(*), IPARI(NPARI,*)
65 . xslv_l(18,*), xmsr_l(12,*), vslv_l(6,*),
66 . vmsr_l(6,*), tzinf(*), size_t(*),delta_pmax_gap(*),maxdgap(ninter)
71 INTEGER MSGOFF,MSGTYP,P,SIZ,NIN,I,J,L,LOC_PROC,
72 . IERROR,I_LEN,NBIRECV,KK,
73 . IADS,INDEXI,MSGTYP2,
74 . irindexi(nspmd),iadr(nspmd),req_r(nspmd),
75 . status(mpi_status_size)
78 . sbuf(nspmd*nintc*i_len)
91 IF(loc_proc/=iring)
THEN
93 IF(ircvfrom(ninter+1,loc_proc)>0.OR.
94 + isendto(ninter+1,loc_proc)>0)
THEN
98 IF(ircvfrom(nin,loc_proc)/=0.OR.
99 + isendto(nin,loc_proc)/=0)
THEN
102 sbuf(l+j) = xslv_l(j,nin)
107 sbuf(l+j) = xmsr_l(j,nin)
112 sbuf(l+j) = vslv_l(j,nin)
117 sbuf(l+j) = vmsr_l(j,nin)
120 IF(ipari(7,nin)/=17)
THEN
122 sbuf(l+1) = newfront(nin)
125 sbuf(l+1) = size_t(nin)
129 sbuf(l+1) = tzinf(kk)
132 sbuf(l+1) = delta_pmax_gap(nin)
135 sbuf(l+1) = maxdgap(nin)
141 s sbuf,l,real,it_spmd(iring),msgtyp,
142 g spmd_comm_world,ierror)
146 s sbuf,l,real,it_spmd(iring),msgtyp,
147 g spmd_comm_world,status,ierror)
151 IF(ircvfrom(nin,loc_proc)/=0.OR.
152 + isendto(nin,loc_proc)/=0)
THEN
154 xslv_l(j,nin) = sbuf(l+j)
158 xmsr_l(j,nin) = sbuf(l+j)
162 vslv_l(j,nin) = sbuf(l+j)
166 vmsr_l(j,nin) = sbuf(l+j)
169 IF(ipari(7,nin)/=17)
THEN
170 newfront(nin) = sbuf(l+1)
172 size_t(nin) = sbuf(l+1)
175 tzinf(kk) = sbuf(l+1)
178 delta_pmax_gap(nin) = sbuf(l+1)
181 maxdgap(nin) = sbuf(l+1)
192 IF(ircvfrom(ninter+1,p)>0.OR.
193 + isendto(ninter+1,p)>0)
THEN
194 nbirecv = nbirecv + 1
200 s sbuf(l),siz,real,it_spmd(p),msgtyp,
201 g spmd_comm_world,req_r(nbirecv),ierror)
210 CALL mpi_waitany(nbirecv,req_r,indexi,status,ierror)
215 IF(ircvfrom(nin,p)/=0.OR.
216 + isendto(nin,p)/=0)
THEN
218 xslv_l( 1,nin) =
max(xslv_l( 1,nin),sbuf(l))
219 xslv_l( 2,nin) =
max(xslv_l( 2,nin),sbuf(l+1))
220 xslv_l( 3,nin) =
max(xslv_l( 3,nin),sbuf(l+2))
221 xslv_l( 4,nin) =
min(xslv_l( 4,nin),sbuf(l+3))
222 xslv_l( 5,nin) =
min(xslv_l( 5,nin),sbuf(l+4))
223 xslv_l( 6,nin) =
min(xslv_l( 6,nin),sbuf(l+5))
224 xslv_l( 7,nin) =
max(xslv_l( 7,nin),sbuf(l+6))
225 xslv_l( 8,nin) =
max(xslv_l( 8,nin),sbuf(l+7))
226 xslv_l( 9,nin) =
max(xslv_l( 9,nin),sbuf(l+8))
227 xslv_l(10,nin) =
min(xslv_l(10,nin),sbuf(l+9))
228 xslv_l(11,nin) =
min(xslv_l(11,nin),sbuf(l+10))
229 xslv_l(12,nin) =
min(xslv_l(12,nin),sbuf(l+11))
230 xslv_l(13,nin) =
max(xslv_l(13,nin),sbuf(l+12))
231 xslv_l(14,nin) =
max(xslv_l(14,nin),sbuf(l+13))
232 xslv_l(15,nin) =
max(xslv_l(15,nin),sbuf(l+14))
233 xslv_l(16,nin) =
min(xslv_l(16,nin),sbuf(l+15))
234 xslv_l(17,nin) =
min(xslv_l(17,nin),sbuf(l+16))
235 xslv_l(18,nin) =
min(xslv_l(18,nin),sbuf(l+17))
238 xmsr_l(1,nin) =
max(xmsr_l(1,nin),sbuf(l))
239 xmsr_l(2,nin) =
max(xmsr_l(2,nin),sbuf(l+1))
240 xmsr_l(3,nin) =
max(xmsr_l(3,nin),sbuf(l+2))
241 xmsr_l(4,nin) =
min(xmsr_l(4,nin),sbuf(l+3))
242 xmsr_l(5,nin) =
min(xmsr_l(5,nin),sbuf(l+4))
243 xmsr_l(6,nin) =
min(xmsr_l(6,nin),sbuf(l+5))
244 xmsr_l(7,nin) =
max(xmsr_l(7,nin),sbuf(l+6))
245 xmsr_l(8,nin) =
max(xmsr_l(8,nin),sbuf(l+7))
246 xmsr_l(9,nin) =
max(xmsr_l(9,nin),sbuf(l+8))
247 xmsr_l(10,nin) =
min(xmsr_l(10,nin),sbuf(l+9))
248 xmsr_l(11,nin) =
min(xmsr_l(11,nin),sbuf(l+10))
249 xmsr_l(12,nin) =
min(xmsr_l(12,nin),sbuf(l+11))
252 vslv_l(1,nin) =
max(vslv_l(1,nin),sbuf(l))
253 vslv_l(2,nin) =
max(vslv_l(2,nin),sbuf(l+1))
254 vslv_l(3,nin) =
max(vslv_l(3,nin),sbuf(l+2))
255 vslv_l(4,nin) =
min(vslv_l(4,nin),sbuf(l+3))
256 vslv_l(5,nin) =
min(vslv_l(5,nin),sbuf(l+4))
257 vslv_l(6,nin) =
min(vslv_l(6,nin),sbuf(l+5))
260 vmsr_l(1,nin) =
max(vmsr_l(1,nin),sbuf(l))
261 vmsr_l(2,nin) =
max(vmsr_l(2,nin),sbuf(l+1))
262 vmsr_l(3,nin) =
max(vmsr_l(3,nin),sbuf(l+2))
263 vmsr_l(4,nin) =
min(vmsr_l(4,nin),sbuf(l+3))
264 vmsr_l(5,nin) =
min(vmsr_l(5,nin),sbuf(l+4))
265 vmsr_l(6,nin) =
min(vmsr_l(6,nin),sbuf(l+5))
267 IF(ipari(7,nin)/=17)
THEN
269 newfront(nin) = newfront(nin)+nint(sbuf(l))
272 size_t(nin) = size_t(nin)+sbuf(l)
276 tzinf(kk) =
min(tzinf(kk),sbuf(l))
279 delta_pmax_gap(nin)=
max(delta_pmax_gap(nin),sbuf(l) )
282 maxdgap(nin)=
max(maxdgap(nin),sbuf(l) )
295 IF(ircvfrom(nin,p)/=0.OR.
296 + isendto(nin,p)/=0)
THEN
298 sbuf(l+j) = xslv_l(j,nin)
302 sbuf(l+j) = xmsr_l(j,nin)
306 sbuf(l+j) = vslv_l(j,nin)
310 sbuf(l+j) = vmsr_l(j,nin)
313 IF(ipari(7,nin)/=17)
THEN
314 sbuf(l+1) = newfront(nin)
316 sbuf(l+1) = size_t(nin)
319 sbuf(l+1) = tzinf(kk)
321 sbuf(l+1) = delta_pmax_gap(nin)
324 sbuf(l+1) = maxdgap(nin)
331 s sbuf(iadr(p)),l-iadr(p)+1,real,it_spmd(p),msgtyp,
332 g spmd_comm_world,req_r(i),ierror)
336 CALL mpi_waitany(nbirecv,req_r,indexi,status,ierror)