15 & COMM_LOAD, ASS_IRECV,
16 & MSGSOU, MSGTAG, MSGLEN,
17 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
18 & IWPOS, IWPOSCB, IPTRLU,
19 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
21 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
22 & IFLAG, IERROR, COMM,
23 & PERM, IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
25 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
26 & FILS, DAD, PTRARW, PTRAIW,
27 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
28 & LPTRAR, NELT, FRTPTR, FRTELT,
30 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
36 include
'mumps_headers.h'
37 TYPE (zmumps_root_struc) :: root
38 INTEGER msgsou, msgtag, msglen
41 INTEGER keep(500), icntl( 60 )
43 DOUBLE PRECISION dkeep(230)
44 INTEGER(8) :: posfac, iptrlu, lrlu, lrlus, la
45 INTEGER iwpos, iwposcb
48 INTEGER,
intent(in) :: lrgroups(n)
49 COMPLEX(kind=8) a( la )
50 INTEGER(8) :: ptrfac(keep(28))
51 INTEGER(8) :: ptrast(keep(28))
52 INTEGER(8) :: pamaster(keep(28))
53 INTEGER ptrist(keep(28)), ptlust(keep(28))
54 INTEGER step(n), pimaster(keep(28))
56 INTEGER nstk_s(keep(28)), procnode_steps( keep(28) )
58 INTEGER iflag, ierror, comm
60 INTEGER ipool( lpool )
61 INTEGER comm_load, ass_irecv
62 INTEGER myid, slavef, nbfin
63 DOUBLE PRECISION , opeliw
65 INTEGER frtptr( n+1), frtelt( nelt )
66 INTEGER itloc( +keep(253) ), fils( n ), dad(keep(28))
67 COMPLEX(kind=8) :: rhs_mumps(keep(255))
68 INTEGER(8),
INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
69 INTEGER nd( keep(28) ), frere( keep(28) )
70 INTEGER istep_to_iniv2(keep(71)),
71 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
72 INTEGER intarr( keep8(27) )
73 COMPLEX(kind=8) dblarr( keep8(26) )
74 INTEGER iniv2, ishift, ibeg
81 INTEGER nbrecu, position, inode, ison, iroot
82 INTEGER nslaves_pere, nfront_pere, nass_pere,
84 & hdmaplig,nfs4father,
85 & tot_root_size, tot_cont_to_recv
86 DOUBLE PRECISION flop1
87 CHARACTER(LEN=35) :: subname
88 include
'mumps_tags.h'
91 INTEGER :: status(mpi_status_size)
96 IF ( msgtag .EQ. racine )
THEN
98 CALL mpi_unpack( bufr, lbufr_bytes, position, nbrecu,
99 & 1, mpi_integer, comm, ierr)
101 nbfin = nbfin - nbrecu
102 ELSEIF ( msgtag .EQ. noeud )
THEN
104 & bufr, lbufr, lbufr_bytes,
105 & iwpos, iwposcb, iptrlu,
106 & lrlu, lrlus, n, iw, liw, a, la, slavef, procnode_steps, dad,
108 & step, pimaster, pamaster,
109 & nstk_s,
comp, fpere, flag, iflag, ierror, comm,
112.LT.
IF ( IFLAG 0 ) GO TO 500
114 CALL ZMUMPS_INSERT_POOL_N(N, IPOOL, LPOOL,
115 & PROCNODE_STEPS, SLAVEF, KEEP(199), KEEP(28), KEEP(76),
116 & KEEP(80), KEEP(47), STEP, FPERE )
117.GE.
IF (KEEP(47) 3) THEN
118 CALL ZMUMPS_LOAD_POOL_UPD_NEW_POOL(
120 & PROCNODE_STEPS, KEEP,KEEP8, SLAVEF, COMM_LOAD,
121 & MYID, STEP, N, ND, FILS )
123 CALL MUMPS_ESTIM_FLOPS( FPERE, N,
124 & PROCNODE_STEPS,KEEP(199),
125 & ND, FILS, FRERE, STEP, PIMASTER,
126 & KEEP(28), KEEP(50), KEEP(253), FLOP1,
127 & IW, LIW, KEEP(IXSZ) )
128.NE.
IF (FPEREKEEP(20))
129 & CALL ZMUMPS_LOAD_UPDATE(1,.FALSE.,FLOP1,KEEP,KEEP8)
131.EQ.
ELSEIF ( MSGTAG END_NIV2_LDLT ) THEN
133 CALL ZMUMPS_INSERT_POOL_N(N, IPOOL, LPOOL,
134 & PROCNODE_STEPS, SLAVEF, KEEP(199),
135 & KEEP(28), KEEP(76), KEEP(80), KEEP(47),
137.GE.
IF (KEEP(47) 3) THEN
138 CALL ZMUMPS_LOAD_POOL_UPD_NEW_POOL(
140 & PROCNODE_STEPS, KEEP,KEEP8, SLAVEF, COMM_LOAD,
141 & MYID, STEP, N, ND, FILS )
143.EQ.
ELSEIF ( MSGTAG TERREUR ) THEN
147.EQ.
ELSEIF ( MSGTAG MAITRE_DESC_BANDE ) THEN
148 CALL ZMUMPS_PROCESS_DESC_BANDE( MYID,BUFR, LBUFR,
149 & LBUFR_BYTES, IWPOS,
151 & IPTRLU, LRLU, LRLUS,
152 & N, IW, LIW, A, LA, SLAVEF, PROCNODE_STEPS, DAD,
153 & PTRIST, PTRAST, STEP, PIMASTER, PAMASTER, COMP,
154 & KEEP, KEEP8, DKEEP, ITLOC, RHS_MUMPS, ISTEP_TO_INIV2,
155#if ! defined (NO_FDM_DESCBAND)
160.LT.
IF ( IFLAG 0 ) GO to 500
161.EQ.
ELSEIF ( MSGTAG MAITRE2 ) THEN
162 CALL ZMUMPS_PROCESS_MASTER2(MYID,BUFR, LBUFR, LBUFR_BYTES,
163 & PROCNODE_STEPS, SLAVEF, IWPOS, IWPOSCB,
164 & IPTRLU, LRLU, LRLUS, N, IW, LIW, A, LA,
165 & PTRIST, PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
166 & IFLAG, IERROR, COMM, COMM_LOAD,
167 & IPOOL, LPOOL, LEAF,
168 & KEEP, KEEP8, DKEEP, ND, FILS, DAD, FRERE, ITLOC, RHS_MUMPS,
169 & ISTEP_TO_INIV2, TAB_POS_IN_PERE )
171.LT.
IF ( IFLAG 0 ) GO to 500
172.EQ..OR.
ELSEIF ( MSGTAG BLOC_FACTO
173.EQ.
& MSGTAG BLOC_FACTO_RELAY ) THEN
174 CALL ZMUMPS_PROCESS_BLOCFACTO( COMM_LOAD, ASS_IRECV,
175 & BUFR, LBUFR, LBUFR_BYTES,
176 & PROCNODE_STEPS, MSGSOU,
177 & SLAVEF, IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, N, IW, LIW,
178 & A, LA, PTRIST, PTRAST, NSTK_S, PERM,
179 & COMP, STEP, PIMASTER, PAMASTER, POSFAC,
180 & MYID, COMM , IFLAG, IERROR, NBFIN,
182 & PTLUST, PTRFAC, root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
183 & FILS, DAD, PTRARW, PTRAIW, INTARR, DBLARR,
184 & ICNTL, KEEP,KEEP8,DKEEP, IPOOL, LPOOL, LEAF, ND, FRERE,
185 & LPTRAR, NELT, FRTPTR, FRTELT,
186 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
189.EQ.
ELSEIF ( MSGTAG BLOC_FACTO_SYM_SLAVE ) THEN
190 CALL ZMUMPS_PROCESS_BLFAC_SLAVE( COMM_LOAD, ASS_IRECV,
192 & LBUFR_BYTES, PROCNODE_STEPS, MSGSOU,
193 & SLAVEF, IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, N, IW, LIW,
194 & A, LA, PTRIST, PTRAST, NSTK_S, PERM,
195 & COMP, STEP, PIMASTER, PAMASTER, POSFAC,
196 & MYID, COMM, IFLAG, IERROR, NBFIN,
198 & PTLUST, PTRFAC, root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
199 & FILS, DAD, PTRARW, PTRAIW, INTARR, DBLARR,
200 & ICNTL, KEEP,KEEP8,DKEEP, IPOOL, LPOOL, LEAF, ND, FRERE,
201 & LPTRAR, NELT, FRTPTR, FRTELT,
202 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
205.EQ.
ELSEIF ( MSGTAG BLOC_FACTO_SYM ) THEN
206 CALL ZMUMPS_PROCESS_SYM_BLOCFACTO( COMM_LOAD, ASS_IRECV,
208 & LBUFR_BYTES, PROCNODE_STEPS, MSGSOU,
209 & SLAVEF, IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, N, IW, LIW,
210 & A, LA, PTRIST, PTRAST, NSTK_S, PERM,
211 & COMP, STEP, PIMASTER, PAMASTER, POSFAC,
212 & MYID, COMM, IFLAG, IERROR, NBFIN,
214 & PTLUST, PTRFAC, root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
215 & FILS, DAD, PTRARW, PTRAIW, INTARR, DBLARR,
216 & ICNTL,KEEP,KEEP8,DKEEP,IPOOL, LPOOL, LEAF, ND, FRERE,
217 & LPTRAR, NELT, FRTPTR, FRTELT,
218 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
221.EQ.
ELSEIF ( MSGTAG CONTRIB_TYPE2 ) THEN
222 CALL ZMUMPS_PROCESS_CONTRIB_TYPE2( COMM_LOAD, ASS_IRECV,
223 & MSGLEN, BUFR, LBUFR,
224 & LBUFR_BYTES, PROCNODE_STEPS,
225 & SLAVEF, IWPOS, IWPOSCB, IPTRLU, LRLU, LRLUS, POSFAC,
226 & N, IW, LIW, A, LA, PTRIST,
227 & PTLUST, PTRFAC, PTRAST,
228 & STEP, PIMASTER, PAMASTER, PERM, COMP, root,
229 & OPASSW, OPELIW, ITLOC, RHS_MUMPS, NSTK_S, FILS, DAD,
230 & PTRARW, PTRAIW, INTARR, DBLARR, NBFIN, MYID, COMM,
231 & ICNTL,KEEP,KEEP8,DKEEP,IFLAG, IERROR, IPOOL, LPOOL, LEAF,
232 & ND, FRERE, LPTRAR, NELT, FRTPTR, FRTELT,
233 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
236.LT.
IF ( IFLAG 0 ) GO TO 100
237.EQ.
ELSEIF ( MSGTAG MAPLIG ) THEN
241 NSLAVES_PERE = BUFR( 3 )
242 NFRONT_PERE = BUFR( 4 )
243 NASS_PERE = BUFR( 5 )
245 NFS4FATHER = BUFR( 7 )
246.NE.
IF ( NSLAVES_PERE0 ) THEN
247 INIV2 = ISTEP_TO_INIV2 ( STEP(INODE) )
248 ISHIFT = NSLAVES_PERE+1
249 TAB_POS_IN_PERE(1:NSLAVES_PERE+1, INIV2) =
250 & BUFR(HDMAPLIG+1:HDMAPLIG+1+NSLAVES_PERE)
251 TAB_POS_IN_PERE(SLAVEF+2, INIV2) = NSLAVES_PERE
255 IBEG = HDMAPLIG+1+ISHIFT
256 CALL ZMUMPS_MAPLIG( COMM_LOAD, ASS_IRECV,
257 & BUFR, LBUFR, LBUFR_BYTES,
258 & INODE, ISON, NSLAVES_PERE,
260 & NFRONT_PERE, NASS_PERE, NFS4FATHER,LMAP,
261 & BUFR(IBEG+NSLAVES_PERE),
262 & PROCNODE_STEPS, SLAVEF, POSFAC, IWPOS, IWPOSCB,
263 & IPTRLU, LRLU, LRLUS, N, IW, LIW, A, LA,
264 & PTRIST, PTLUST, PTRFAC, PTRAST, STEP, PIMASTER, PAMASTER,
266 & IFLAG, IERROR, MYID, COMM, PERM,
267 & IPOOL, LPOOL, LEAF, NBFIN, ICNTL, KEEP,KEEP8,DKEEP, root,
269 & ITLOC, RHS_MUMPS, FILS, DAD, PTRARW, PTRAIW, INTARR, DBLARR,
270 & ND, FRERE, LPTRAR, NELT, FRTPTR, FRTELT,
272 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
275.LT.
IF ( IFLAG 0 ) GO TO 100
276.EQ.
ELSE IF ( MSGTAG ROOT_CONT_STATIC ) THEN
277 CALL ZMUMPS_PROCESS_CONTRIB_TYPE3(
278 & BUFR, LBUFR, LBUFR_BYTES,
279 & root, N, IW, LIW, A, LA,
280 & LRLU, IPTRLU, IWPOS, IWPOSCB,
281 & PTRIST, PTLUST, PTRFAC, PTRAST,
282 & STEP, PIMASTER, PAMASTER,
283 & COMP, LRLUS, IPOOL, LPOOL, LEAF,
285 & LPTRAR, NELT, FRTPTR, FRTELT,
286 & PTRAIW, PTRARW, INTARR, DBLARR,
287 & KEEP, KEEP8, DKEEP, IFLAG, IERROR, COMM, COMM_LOAD,
289 & ND, PROCNODE_STEPS, SLAVEF, OPASSW)
291.LT.
IF ( IFLAG 0 ) GO TO 500
292.EQ.
ELSE IF ( MSGTAG ROOT_NON_ELIM_CB ) THEN
294 MSGSOU = MUMPS_PROCNODE( PROCNODE_STEPS(STEP(IROOT)),
296.EQ.
IF ( PTLUST( STEP(IROOT)) 0 ) THEN
297 KEEP(266)=KEEP(266)-1
298 CALL MPI_RECV( TMP, 2 * KEEP(34), MPI_PACKED,
299 & MSGSOU, ROOT_2SLAVE,
300 & COMM, STATUS, IERR )
301 CALL ZMUMPS_PROCESS_ROOT2SLAVE( TMP( 1 ), TMP( 2 ),
303 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
304 & IWPOS, IWPOSCB, IPTRLU,
305 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
307 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
308 & IFLAG, IERROR, COMM, COMM_LOAD,
309 & IPOOL, LPOOL, LEAF,
310 & NBFIN, MYID, SLAVEF,
312 & OPASSW, OPELIW, ITLOC, RHS_MUMPS, FILS, DAD,
313 & LPTRAR, NELT, FRTPTR, FRTELT,
315 & INTARR, DBLARR, ICNTL, KEEP,KEEP8, DKEEP,ND )
317.LT.
IF ( IFLAG 0 ) GOTO 500
319 CALL ZMUMPS_PROCESS_CONTRIB_TYPE3(
320 & BUFR, LBUFR, LBUFR_BYTES,
321 & root, N, IW, LIW, A, LA,
322 & LRLU, IPTRLU, IWPOS, IWPOSCB,
323 & PTRIST, PTLUST, PTRFAC, PTRAST, STEP, PIMASTER, PAMASTER,
324 & COMP, LRLUS, IPOOL, LPOOL, LEAF,
326 & LPTRAR, NELT, FRTPTR, FRTELT,
327 & PTRAIW, PTRARW, INTARR, DBLARR,
328 & KEEP, KEEP8, DKEEP, IFLAG, IERROR, COMM, COMM_LOAD,
330 & ND, PROCNODE_STEPS, SLAVEF, OPASSW )
332 IF ( iflag .LT. 0 )
GO TO 500
333 ELSE IF ( msgtag .EQ. root_2son )
THEN
338 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
339 & iwpos, iwposcb, iptrlu,
340 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
342 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
343 & iflag, ierror, comm,
344 & perm, ipool, lpool, leaf, nbfin,
myid, slavef,
346 & opassw, opeliw, itloc, rhs_mumps,
347 & fils, dad, ptrarw, ptraiw,
348 & intarr,dblarr,icntl,keep,keep8,dkeep,nd, frere,
349 & lptrar, nelt, frtptr, frtelt,
350 & istep_to_iniv2, tab_pos_in_pere
353 IF ( iflag .LT. 0 )
GO TO 100
356 IF (keep(50).EQ.0)
THEN
361 IF (iw(ptrist(step(ison))+ishift_hdr+keep(ixsz)).EQ.
362 & s_rec_contstatic)
THEN
363 iw(ptrist(step(ison))+ishift_hdr+keep(ixsz)) =
367 & iw, liw, a, la, lrlu, lrlus, iwposcb,
368 & iptrlu, step,
myid, keep, keep8,
373 ELSE IF ( msgtag .EQ. root_2slave )
THEN
374 tot_root_size = bufr( 1 )
375 tot_cont_to_recv = bufr( 2 )
377 & tot_cont_to_recv, root,
378 & bufr, lbufr, lbufr_bytes, procnode_steps, posfac,
379 & iwpos, iwposcb, iptrlu,
380 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
382 & ptrast, step, pimaster, pamaster, nstk_s,
comp,
383 & iflag, ierror, comm, comm_load,
384 & ipool, lpool, leaf,
385 & nbfin,
myid, slavef,
387 & opassw, opeliw, itloc, rhs_mumps, fils, dad,
388 & lptrar, nelt, frtptr, frtelt,
390 & intarr, dblarr, icntl, keep,keep8, dkeep, nd )
391 IF ( iflag .LT. 0 )
GO TO 100
392 ELSE IF ( msgtag .EQ. root_nelim_indices )
THEN
395 nslaves_pere = bufr( 3 )
397 & ison, nelim, nslaves_pere, bufr(4), bufr(4+bufr(2)),
401 & iwpos, iwposcb, iptrlu,
402 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
404 & ptrast, step, pimaster, pamaster, nstk_s,
405 & itloc, rhs_mumps,
comp,
407 & ipool, lpool, leaf,
myid, slavef,
408 & keep, keep8, dkeep,
409 & comm, comm_load, fils, dad, nd)
410 subname=
"ZMUMPS_PROCESS_RTNELIND"
411 IF ( iflag .LT. 0 )
GO TO 500
412 ELSE IF ( msgtag .EQ. update_load )
THEN
413 WRITE(*,*)
"Internal error 3 in ZMUMPS_TRAITER_MESSAGE"
415 ELSE IF ( msgtag .EQ. tag_dummy )
THEN
419 &
': Internal error, routine ZMUMPS_TRAITER_MESSAGE.',msgtag
427 IF ( icntl(1) .GT. 0 .AND. icntl(4).GE.1 )
THEN
429 IF (iflag.EQ.-9)
THEN
430 WRITE(lp,*)
'FAILURE, WORKSPACE TOO SMALL DURING ',subname
432 IF (iflag.EQ.-8)
THEN
433 WRITE(lp,*)
'FAILURE IN INTEGER ALLOCATION DURING ',subname
435 IF (iflag.EQ.-13)
THEN
436 WRITE(lp,*)
'FAILURE IN DYNAMIC ALLOCATION DURING ',subname
443 & COMM_LOAD, ASS_IRECV,
445 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
446 & IWPOS, IWPOSCB, IPTRLU,
447 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
449 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
450 & IFLAG, IERROR, COMM,
451 & PERM, IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
453 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
454 & FILS, DAD, PTRARW, PTRAIW,
455 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
456 & LPTRAR, NELT, FRTPTR, FRTELT ,
458 & ISTEP_TO_INIV2, TAB_POS_IN_PERE
464 include
'mumps_tags.h'
465 TYPE (zmumps_root_struc) :: root
466 INTEGER :: status(mpi_status_size)
467 INTEGER keep(500), icntl(60)
468 INTEGER(8) keep8(150)
469 DOUBLE PRECISION dkeep(230)
470 INTEGER comm_load, ass_irecv
471 INTEGER lbufr, lbufr_bytes
472 INTEGER bufr( lbufr )
473 INTEGER(8) :: posfac, la, iptrlu, lrlu, lrlus
474 INTEGER iwpos, iwposcb
478 INTEGER,
intent(in) :: lrgroups(n)
479 INTEGER(8) :: ptrfac(keep(28))
480 INTEGER(8) :: ptrast(keep(28))
481 INTEGER(8) :: pamaster(keep(28))
482 INTEGER ptrist( keep(28) ),
484 INTEGER step(n), pimaster(keep(28))
486 INTEGER nstk_s(keep(28)), procnode_steps( keep(28) )
488 INTEGER iflag, ierror, comm
490 INTEGER ipool( lpool )
491 INTEGER myid, slavef, nbfin
492 DOUBLE PRECISION opassw, opeliw
494 INTEGER frtptr( +1 ), frtelt( nelt )
495 INTEGER itloc( n+keep(253) ), fils( n ), dad( keep(
496COMPLEX(kind=8) :: rhs_mumps(keep(255))
497 INTEGER(8),
INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
498 INTEGER nd( keep(28) ), frere( keep(28) )
499 INTEGER istep_to_iniv2(keep(71)),
500 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
501 INTEGER intarr( keep8(27) )
502 COMPLEX(kind=8) dblarr( keep8(26) )
503 INTEGER msgsou, msgtag, msglen, ierr
504 msgsou = status( mpi_source )
505 msgtag = status( mpi_tag )
507 IF ( msglen .GT. lbufr_bytes )
THEN
510 WRITE(*,*)
' RECEPTION BUF TOO SMALL, Msgtag/len=',
515 keep(266)=keep(266)-1
516 CALL mpi_recv( bufr, lbufr_bytes, mpi_packed, msgsou,
518 & comm, status, ierr )
520 & comm_load, ass_irecv,
521 & msgsou, msgtag, msglen, bufr, lbufr,
523 & procnode_steps, posfac,
524 & iwpos, iwposcb, iptrlu,
525 & lrlu, lrlus, n, iw, liw, a, la, ptrist,
527 & ptrast, step, pimaster, pamaster, nstk_s,
comp, iflag,
529 & perm, ipool, lpool, leaf, nbfin, myid, slavef,
531 & root, opassw, opeliw, itloc, rhs_mumps,
532 & fils, dad, ptrarw, ptraiw,
533 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
534 & lptrar, nelt, frtptr, frtelt,
536 & istep_to_iniv2, tab_pos_in_pere
542 & COMM_LOAD, ASS_IRECV, BLOCKING, SET_IRECV,
543 & MESSAGE_RECEIVED, MSGSOU, MSGTAG,
545 & BUFR, LBUFR, LBUFR_BYTES, PROCNODE_STEPS, POSFAC,
546 & IWPOS, IWPOSCB, IPTRLU,
547 & LRLU, LRLUS, N, IW, LIW, A, LA, PTRIST,
549 & PTRAST, STEP, PIMASTER, PAMASTER, NSTK_S, COMP,
550 & IFLAG, IERROR, COMM, PERM,
551 & IPOOL, LPOOL, LEAF, NBFIN, MYID, SLAVEF,
553 & root, OPASSW, OPELIW, ITLOC, RHS_MUMPS,
554 & FILS, DAD, PTRARW, PTRAIW,
555 & INTARR, DBLARR, ICNTL, KEEP,KEEP8,DKEEP, ND, FRERE,
556 & LPTRAR, NELT, FRTPTR, FRTELT,
558 & ISTEP_TO_INIV2, TAB_POS_IN_PERE,
559 & STACK_RIGHT_AUTHORIZED, LRGROUPS )
564 include
'mumps_tags.h'
565 TYPE (zmumps_root_struc) :: root
566 INTEGER :: status(mpi_status_size)
567 LOGICAL,
INTENT (IN) :: blocking
568 LOGICAL,
INTENT (IN) :: set_irecv
569 LOGICAL,
INTENT (INOUT) :: message_received
570 INTEGER,
INTENT (IN) :: msgsou, msgtag
571 INTEGER keep(500), icntl(60)
572 INTEGER(8) keep8(150)
573 DOUBLE PRECISION dkeep(230)
574 INTEGER lbufr, lbufr_bytes
575 INTEGER comm_load, ass_irecv
576 INTEGER bufr( lbufr )
577 INTEGER(8) :: la, posfac, iptrlu, lrlu, lrlus
578 INTEGER iwpos, iwposcb
581 COMPLEX(kind=8) a( la )
582 INTEGER,
intent(in) :: lrgroups(n)
583 INTEGER(8) :: ptrast(keep(28))
584 INTEGER(8) :: ptrfac(keep(28))
585 INTEGER(8) :: pamaster(keep(28))
586 INTEGER ptrist( keep(28) ),
591 INTEGER nstk_s(keep(28)), procnode_steps( keep(28) )
593 INTEGER iflag, ierror, comm
595 INTEGER ipool( lpool )
596 INTEGER myid, slavef, nbfin
597 DOUBLE PRECISION opassw, opeliw
599 INTEGER frtptr( n+1 ), frtelt( nelt )
600 INTEGER itloc( n + keep(253) ), fils( n ), dad( keep(28) )
601 COMPLEX(kind=8) :: rhs_mumps(keep(255))
602 INTEGER(8),
INTENT(IN) :: ptrarw( lptrar ), ptraiw( lptrar )
603 INTEGER nd( keep(28) ), frere( (28) )
604 INTEGER istep_to_iniv2(keep(71)),
605 & tab_pos_in_pere(slavef+2,
max(1,keep(56)))
606 INTEGER intarr( keep8(27) )
607 COMPLEX(kind=8) dblarr( keep8(26) )
608 LOGICAL,
intent(in) :: stack_right_authorized
609 LOGICAL flag, right_mess, flagbis
610 INTEGER lp, msgsou_loc, msgtag_loc, msglen_loc
612 INTEGER :: status_bis(mpi_status_size)
613 INTEGER,
SAVE :: recurs = 0
615 IF ( .NOT. stack_right_authorized )
THEN
620 IF (icntl(4).LT.1) lp=-1
621 IF ( message_received )
THEN
622 msgsou_loc = mpi_any_source
623 msgtag_loc = mpi_any_tag
626 IF ( ass_irecv .NE. mpi_request_null)
THEN
627 IF (keep(117).NE.0)
THEN
628 WRITE(*,*)
"Problem of active IRECV with KEEP(117)=",keep(117)
636 IF ( ( (msgsou.NE.mpi_any_source) .OR.
637 & (msgtag.NE.mpi_any_tag) ) )
THEN
638 IF ( msgsou.NE.mpi_any_source)
THEN
639 right_mess = msgsou.EQ.status(mpi_source)
641 IF ( msgtag.NE.mpi_any_tag)
THEN
643 & ( (msgtag.EQ.status(mpi_tag)).AND.right_mess )
645 IF (.NOT.right_mess)
THEN
647 & comm, status_bis, ierr)
652 & flag, status, ierr)
657 &
write(lp,*)
' Error return from MPI_TEST ',
658 & iflag,
' in ZMUMPS_TRY_RECVTREAT'
663 keep(266)=keep(266)-1
664 message_received = .true.
665 msgsou_loc = status( mpi_source )
666 msgtag_loc = status( mpi_tag )
668 IF (.NOT.right_mess) recurs = recurs + 10
670 & msgsou_loc, msgtag_loc, msglen_loc, bufr, lbufr,
672 & procnode_steps, posfac,
673 & iwpos, iwposcb, iptrlu,
674 & lrlu, lrlus, n, iw, liw, a, la,
675 & ptrist, ptlust, ptrfac,
676 & ptrast, step, pimaster, pamaster, nstk_s,
comp, iflag,
678 & perm, ipool, lpool, leaf, nbfin,
myid, slavef,
680 & root, opassw, opeliw, itloc, rhs_mumps, fils, dad,
682 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
683 & lptrar, nelt, frtptr, frtelt,
684 & istep_to_iniv2, tab_pos_in_pere
687 IF (.NOT.right_mess) recurs = recurs - 10
688 IF ( iflag .LT. 0 )
RETURN
689 IF (.NOT.right_mess)
THEN
690 IF (ass_irecv .NE. mpi_request_null)
THEN
694 & comm, flagbis, status, ierr)
696 msgsou_loc = status( mpi_source )
697 msgtag_loc = status( mpi_tag )
699 & status, bufr, lbufr,
701 & procnode_steps, posfac,
702 & iwpos, iwposcb, iptrlu,
703 & lrlu, lrlus, n, iw, liw, a, la,
704 & ptrist, ptlust, ptrfac,
705 & ptrast, step, pimaster, pamaster,
706 & nstk_s,
comp, iflag,
708 & perm, ipool, lpool,leaf,nbfin,
myid,slavef,
710 & root, opassw, opeliw, itloc, rhs_mumps,
711 & fils, dad, ptrarw, ptraiw,
712 & intarr, dblarr, icntl,
713 & keep,keep8, dkeep,nd, frere,
714 & lptrar, nelt, frtptr, frtelt,
715 & istep_to_iniv2, tab_pos_in_pere
718 IF ( iflag .LT. 0 )
RETURN
725 & comm, status, ierr)
729 & comm, flag, status, ierr)
732 msgsou_loc = status( mpi_source )
733 msgtag_loc = status( mpi_tag )
734 message_received = .true.
736 & status, bufr, lbufr,
738 & procnode_steps, posfac,
739 & iwpos, iwposcb, iptrlu,
740 & lrlu, lrlus, n, iw, liw, a, la,
741 & ptrist, ptlust, ptrfac,
742 & ptrast, step, pimaster, pamaster, nstk_s,
comp, iflag,
744 & perm, ipool, lpool, leaf, nbfin,
myid, slavef,
746 & root, opassw, opeliw, itloc, rhs_mumps,
747 & fils, dad, ptrarw, ptraiw,
748 & intarr, dblarr, icntl, keep,keep8,dkeep, nd, frere,
749 & lptrar, nelt, frtptr, frtelt,
750 & istep_to_iniv2, tab_pos_in_pere
753 IF ( iflag .LT. 0 )
RETURN
758 IF ( nbfin .EQ. 0 )
RETURN
759 IF ( recurs .GT. 3 )
RETURN
760 IF ( keep(36).EQ.1 .AND. set_irecv .AND.
761 & (ass_irecv.EQ.mpi_request_null) .AND.
762 & message_received )
THEN
764 & lbufr_bytes, mpi_packed, mpi_any_source,
772 & BUFR, LBUFR, LBUFR_BYTES,
778 include
'mumps_tags.h'
779 INTEGER LBUFR, LBUFR_BYTES
781 INTEGER BUFR( LBUFR )
783 INTEGER MYID, SLAVEF, INFO1, DEST
784 INTEGER,
INTENT(INOUT) :: KEEP(500)
785 INTEGER :: STATUS(MPI_STATUS_SIZE)
786 LOGICAL NO_ACTIVE_IRECV
789 IF (slavef .EQ. 1)
RETURN
790 IF (ass_irecv.EQ.mpi_request_null)
THEN
791 no_active_irecv=.true.
793 CALL mpi_test(ass_irecv, no_active_irecv,
795 IF (no_active_irecv)
THEN
796 keep(266) = keep(266) - 1
801 dest = mod(myid+1, slavef)
803 & (dummy, dest, tag_dummy, comm, keep, ierr)
804 IF (no_active_irecv)
THEN
806 & mpi_integer, mpi_any_source,
807 & tag_dummy, comm, status, ierr )
812 keep(266)=keep(266)-1
816 & INFO1, KEEP, BUFR, LBUFR, LBUFR_BYTES,
817 & COMM_NODES, COMM_LOAD, SLAVEF,
818 & CLEAN_COMM_NODES, CLEAN_COMM_LOAD )
821 INTEGER,
INTENT(IN) :: LBUFR, LBUFR_BYTES
822 INTEGER,
INTENT(OUT) :: BUFR( LBUFR )
823 INTEGER,
INTENT(IN) :: COMM_NODES, COMM_LOAD, SLAVEF, INFO1
824 INTEGER,
INTENT(INOUT) :: KEEP(500)
825 LOGICAL,
INTENT(IN) :: CLEAN_COMM_LOAD, CLEAN_COMM_NODES
827 INCLUDE
'mumps_tags.h'
828 INTEGER :: STATUS(MPI_STATUS_SIZE)
829 LOGICAL :: FLAG, BUFFERS_EMPTY, BUFFERS_EMPTY_ON_ALL_PROCS
830 INTEGER :: MSGSOU_LOC, MSGTAG_LOC, MSGLEN_LOC
833 INTEGER :: IBUF_EMPTY, IBUF_EMPTY_ON_ALL_PROCS
834 INTEGER :: TOTAL_SEND_MINUS_RECV266
835 INTEGER :: TOTAL_SEND_MINUS_RECV267
836 IF (slavef.EQ.1)
RETURN
837 IF (.NOT. clean_comm_nodes .AND. .NOT. clean_comm_load)
THEN
844 IF (clean_comm_nodes)
THEN
845 IF ( .NOT. flag )
THEN
846 comm_eff = comm_nodes
848 & comm_nodes, flag, status, ierr)
851 IF (clean_comm_load)
THEN
852 IF ( .NOT. flag )
THEN
855 & comm_load, flag, status, ierr)
859 msgsou_loc = status( mpi_source )
860 msgtag_loc = status( mpi_tag )
861 IF (comm_eff .EQ. comm_nodes)
THEN
862 keep(266) = keep(266) - 1
864 keep(267) = keep(267) - 1
867 IF (msglen_loc .LE. lbufr_bytes)
THEN
869 & mpi_packed, msgsou_loc,
870 & msgtag_loc, comm_eff, status, ierr )
877 IF ( buffers_empty )
THEN
882 IF (clean_comm_nodes)
THEN
883 comm_eff = comm_nodes
888 & ibuf_empty_on_all_procs,
889 & 1, mpi_integer, mpi_max,
891 IF ( ibuf_empty_on_all_procs == 0)
THEN
892 buffers_empty_on_all_procs = .true.
894 buffers_empty_on_all_procs = .false.
896 IF (buffers_empty_on_all_procs)
THEN
897 IF (clean_comm_nodes)
THEN
899 & total_send_minus_recv266,
900 & 1, mpi_integer, mpi_sum,
903 total_send_minus_recv266 = 0
905 IF (clean_comm_load)
THEN
907 & total_send_minus_recv267,
908 & 1, mpi_integer, mpi_sum,
911 total_send_minus_recv267 = 0
913 IF (total_send_minus_recv266 .EQ. 0 .AND.
914 & total_send_minus_recv267 .EQ. 0)
THEN
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_test(ireq, flag, status, ierr)
subroutine mpi_iprobe(source, tag, comm, flag, status, ierr)
subroutine mpi_wait(ireq, status, ierr)
subroutine mpi_get_count(status, datatype, cnt, ierr)
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)
subroutine mpi_probe(source, tag, comm, status, ierr)
subroutine mpi_barrier(comm, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
subroutine mpi_unpack(inbuf, insize, position, outbuf, outcnt, datatype, comm, ierr)
subroutine, public zmumps_buf_all_empty(check_comm_nodes, check_comm_load, flag)
subroutine, public zmumps_buf_send_1int(i, dest, tag, comm, keep, ierr)
integer, save, private myid
recursive subroutine, public zmumps_load_recv_msgs(comm)
subroutine zmumps_bdc_error(myid, slavef, comm, keep)
subroutine zmumps_process_desc_bande(myid, bufr, lbufr, lbufr_bytes, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, comp, keep, keep8, dkeep, itloc, rhs_mumps, istep_to_iniv2, iwhandler_in, iflag, ierror)
subroutine zmumps_process_node(myid, keep, keep8, dkeep, bufr, lbufr, lbufr_bytes, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, slavef, procnode_steps, dad, ptrist, ptrast, step, pimaster, pamaster, nstk_s, comp, fpere, flag, iflag, ierror, comm, itloc, rhs_mumps)
subroutine zmumps_process_contrib_type3(bufr, lbufr, lbufr_bytes, root, n, iw, liw, a, la, lrlu, iptrlu, iwpos, iwposcb, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, comp, lrlus, ipool, lpool, leaf, fils, dad, myid, lptrar, nelt, frtptr, frtelt, ptraiw, ptrarw, intarr, dblarr, keep, keep8, dkeep, iflag, ierror, comm, comm_load, itloc, rhs_mumps, nd, procnode_steps, slavef, opassw)
subroutine zmumps_process_master2(myid, bufr, lbufr, lbufr_bytes, procnode_steps, slavef, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, comm_load, ipool, lpool, leaf, keep, keep8, dkeep, nd, fils, dad, frere, itloc, rhs_mumps, istep_to_iniv2, tab_pos_in_pere)
recursive subroutine zmumps_traiter_message(comm_load, ass_irecv, msgsou, msgtag, msglen, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt istep_to_iniv2, tab_pos_in_pere, lrgroups)
subroutine zmumps_clean_pending(info1, keep, bufr, lbufr, lbufr_bytes, comm_nodes, comm_load, slavef, clean_comm_nodes, clean_comm_load)
subroutine zmumps_cancel_irecv(info1, keep, ass_irecv, bufr, lbufr, lbufr_bytes, comm, myid, slavef)
recursive subroutine zmumps_recv_and_treat(comm_load, ass_irecv, status, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt istep_to_iniv2, tab_pos_in_pere, lrgroups)
recursive subroutine zmumps_try_recvtreat(comm_load, ass_irecv, blocking, set_irecv, message_received, msgsou, msgtag, status, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef root, opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt istep_to_iniv2, tab_pos_in_pere, stack_right_authorized, lrgroups)
subroutine zmumps_process_root2slave(tot_root_size, tot_cont_to_recv, root, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, comm_load, ipool, lpool, leaf, nbfin, myid, slavef opassw, opeliw, itloc, rhs_mumps, fils, dad, lptrar, nelt, frtptr, frtelt, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd)
recursive subroutine zmumps_process_root2son(comm_load, ass_irecv, inode, nelim_root, root, bufr, lbufr, lbufr_bytes, procnode_steps, posfac, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, comp, iflag, ierror, comm, perm, ipool, lpool, leaf, nbfin, myid, slavef opassw, opeliw, itloc, rhs_mumps, fils, dad, ptrarw, ptraiw, intarr, dblarr, icntl, keep, keep8, dkeep, nd, frere, lptrar, nelt, frtptr, frtelt, istep_to_iniv2, tab_pos_in_pere, lrgroups)
subroutine zmumps_process_rtnelind(root, inode, nelim, nslaves, row_list, col_list, slave_list, procnode_steps, iwpos, iwposcb, iptrlu, lrlu, lrlus, n, iw, liw, a, la, ptrist, ptlust_s, ptrfac, ptrast, step, pimaster, pamaster, nstk_s, itloc, rhs_mumps, comp, iflag, ierror, ipool, lpool, leaf, myid, slavef, keep, keep8, dkeep, comm, comm_load, fils, dad, nd)